diff --git a/api/handler/jimeng_handler.go b/api/handler/jimeng_handler.go index 096e8844..f095d3c9 100644 --- a/api/handler/jimeng_handler.go +++ b/api/handler/jimeng_handler.go @@ -334,6 +334,12 @@ func (h *JimengHandler) Remove(c *gin.Context) { return } + // 正在运行中的任务不能删除 + if job.Status == model.JMTaskStatusGenerating || job.Status == model.JMTaskStatusInQueue { + resp.ERROR(c, "正在运行中的任务不能删除,否则无法退回算力") + return + } + tx := h.DB.Begin() if err := tx.Where("id = ? AND user_id = ?", jobId, user.Id).Delete(&model.JimengJob{}).Error; err != nil { logger.Errorf("delete jimeng job failed: %v", err) diff --git a/web/src/assets/css/font.scss b/web/src/assets/css/font.scss index 8b6cad6c..b032ebcf 100644 --- a/web/src/assets/css/font.scss +++ b/web/src/assets/css/font.scss @@ -1,17 +1,9 @@ -@font-face { - font-family: "OPlusSans3-Regular"; - src: url("../fonts/OPlusSans3-Regular.ttf") format("truetype"); - font-weight: normal; - font-style: normal; -} -@font-face { - font-family: "OPlusSans3-Medium"; - src: url("../fonts/OPlusSans3-Medium.ttf") format("truetype"); - font-weight: normal; - font-style: normal; -} -$font-regular: "OPlusSans3-Regular", "PingFangSC-Regular", "Roboto", "sans-serif"; -$font-medium: "OPlusSans3-Medium", "PingFangSC-Medium", "Roboto", "sans-serif"; +$font-regular: 'PingFangSC-Regular', 'Roboto', 'sans-serif', 'ui-sans-serif', '-apple-system', + 'system-ui', 'Segoe UI', 'Helvetica', 'Apple Color Emoji', 'Arial', 'sans-serif', 'Segoe UI Emoji', + 'Segoe UI Symbol'; +$font-medium: 'PingFangSC-Medium', 'Roboto', 'sans-serif', 'ui-sans-serif', '-apple-system', + 'system-ui', 'Segoe UI', 'Helvetica', 'Apple Color Emoji', 'Arial', 'sans-serif', 'Segoe UI Emoji', + 'Segoe UI Symbol'; .font-regular { font-family: $font-regular; @@ -21,4 +13,4 @@ $font-medium: "OPlusSans3-Medium", "PingFangSC-Medium", "Roboto", "sans-serif"; .font-medium { font-family: $font-medium; font-weight: 500; -} \ No newline at end of file +} diff --git a/web/src/assets/css/mobile/image-mj.scss b/web/src/assets/css/mobile/image-mj.scss index 25055939..243319a7 100644 --- a/web/src/assets/css/mobile/image-mj.scss +++ b/web/src/assets/css/mobile/image-mj.scss @@ -1,6 +1,6 @@ .mobile-mj { .text-line { - padding: 6px; + padding: 6px 0; font-size: 14px; .van-row { @@ -91,7 +91,8 @@ padding: 0; position: relative; - .van-image, .task-in-queue { + .van-image, + .task-in-queue { min-height: 100px; } @@ -213,4 +214,4 @@ } } } -} \ No newline at end of file +} diff --git a/web/src/assets/css/mobile/image-sd.scss b/web/src/assets/css/mobile/image-sd.scss index cc385da3..ce94c502 100644 --- a/web/src/assets/css/mobile/image-sd.scss +++ b/web/src/assets/css/mobile/image-sd.scss @@ -1,6 +1,6 @@ .mobile-sd { .text-line { - padding: 0 6px; + padding: 0; font-size: 14px; .van-row { @@ -98,7 +98,8 @@ padding: 0; position: relative; - .van-image, .task-in-queue { + .van-image, + .task-in-queue { min-height: 100px; } @@ -201,4 +202,4 @@ } } } -} \ No newline at end of file +} diff --git a/web/src/assets/css/suno.scss b/web/src/assets/css/suno.scss index bcbc3788..749c28d6 100644 --- a/web/src/assets/css/suno.scss +++ b/web/src/assets/css/suno.scss @@ -498,40 +498,10 @@ .custom-upload { width: 100%; - :deep(.el-upload-dragger) { + :deep(.el-upload) { width: 100%; height: auto; - border: 2px dashed var(--el-border-color); - border-radius: 12px; - background: var(--el-bg-color); - transition: all 0.3s ease; cursor: pointer; - padding: 0; - overflow: hidden; - - &:hover { - border-color: var(--el-color-primary); - background: var(--el-color-primary-light-9); - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15); - } - - &.is-dragover { - border-color: var(--el-color-primary); - background: var(--el-color-primary-light-9); - transform: scale(1.02); - } - } - - .upload-btn { - background: var(--el-color-primary) !important; - border-color: var(--el-color-primary) !important; - width: 100%; - - &:hover { - background: var(--el-color-primary-dark-2) !important; - border-color: var(--el-color-primary-dark-2) !important; - } } } diff --git a/web/src/assets/css/theme-light.scss b/web/src/assets/css/theme-light.scss index b6fa722f..27afcd22 100644 --- a/web/src/assets/css/theme-light.scss +++ b/web/src/assets/css/theme-light.scss @@ -1,10 +1,17 @@ @use 'font.scss' as *; -:root[data-theme="light"] { +:root[data-theme='light'] { --text-fb: #000; --text-color: #5b62ce; // 主要的文本颜色 --normal-color: rgba(43, 54, 116, 1); // 普通颜色 --theme-textcolor-normal: #5b62ce; - p, h1, h2, h3, h4, h5, h6, article { + p, + h1, + h2, + h3, + h4, + h5, + h6, + article { font-family: $font-regular; } html, @@ -55,4 +62,4 @@ --quote-text-color: #333; // 面板背景 --panel-bg: linear-gradient(135deg, #f5eafe 0%, #e9e6fc 100%); -} \ No newline at end of file +} diff --git a/web/src/assets/iconfont/iconfont.css b/web/src/assets/iconfont/iconfont.css index 73489687..72ee9c84 100644 --- a/web/src/assets/iconfont/iconfont.css +++ b/web/src/assets/iconfont/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 4125778 */ - src: url('iconfont.woff2?t=1752831319382') format('woff2'), - url('iconfont.woff?t=1752831319382') format('woff'), - url('iconfont.ttf?t=1752831319382') format('truetype'); + src: url('iconfont.woff2?t=1754626711656') format('woff2'), + url('iconfont.woff?t=1754626711656') format('woff'), + url('iconfont.ttf?t=1754626711656') format('truetype'); } .iconfont { @@ -13,6 +13,26 @@ -moz-osx-font-smoothing: grayscale; } +.icon-back-bold:before { + content: "\e654"; +} + +.icon-back-circle:before { + content: "\e653"; +} + +.icon-back:before { + content: "\e6c8"; +} + +.icon-openai:before { + content: "\e652"; +} + +.icon-suanli:before { + content: "\e651"; +} + .icon-jimeng2:before { content: "\eabc"; } diff --git a/web/src/assets/iconfont/iconfont.js b/web/src/assets/iconfont/iconfont.js index ffd1ad96..53fdf836 100644 --- a/web/src/assets/iconfont/iconfont.js +++ b/web/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_4125778='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}h=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=a.document,z=!1,v(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,p())})}function p(){z||(z=!0,i())}function v(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(v,50)}p()}})(window); \ No newline at end of file +window._iconfont_svg_string_4125778='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}h=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=a.document,z=!1,v(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,p())})}function p(){z||(z=!0,i())}function v(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(v,50)}p()}})(window); \ No newline at end of file diff --git a/web/src/assets/iconfont/iconfont.json b/web/src/assets/iconfont/iconfont.json index 4085727c..7dce4c65 100644 --- a/web/src/assets/iconfont/iconfont.json +++ b/web/src/assets/iconfont/iconfont.json @@ -5,6 +5,41 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "27025075", + "name": "返回", + "font_class": "back-bold", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "6237605", + "name": "返回", + "font_class": "back-circle", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "18952076", + "name": "返回", + "font_class": "back", + "unicode": "e6c8", + "unicode_decimal": 59080 + }, + { + "icon_id": "33483666", + "name": "openai", + "font_class": "openai", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "25677845", + "name": "算力", + "font_class": "suanli", + "unicode": "e651", + "unicode_decimal": 58961 + }, { "icon_id": "42693930", "name": "即梦AI-02", @@ -434,7 +469,7 @@ }, { "icon_id": "39584617", - "name": "MidJourney-copy", + "name": "MidJourney", "font_class": "MidJourney", "unicode": "e60e", "unicode_decimal": 58894 diff --git a/web/src/assets/iconfont/iconfont.ttf b/web/src/assets/iconfont/iconfont.ttf index e76c0a11..f8155a03 100644 Binary files a/web/src/assets/iconfont/iconfont.ttf and b/web/src/assets/iconfont/iconfont.ttf differ diff --git a/web/src/assets/iconfont/iconfont.woff b/web/src/assets/iconfont/iconfont.woff index 5511edbd..6d1cb8d9 100644 Binary files a/web/src/assets/iconfont/iconfont.woff and b/web/src/assets/iconfont/iconfont.woff differ diff --git a/web/src/assets/iconfont/iconfont.woff2 b/web/src/assets/iconfont/iconfont.woff2 index 9ca0b337..546aad3f 100644 Binary files a/web/src/assets/iconfont/iconfont.woff2 and b/web/src/assets/iconfont/iconfont.woff2 differ diff --git a/web/src/store/mobile/jimeng.js b/web/src/store/mobile/jimeng.js index d7bdcf25..7c2f847f 100644 --- a/web/src/store/mobile/jimeng.js +++ b/web/src/store/mobile/jimeng.js @@ -1,8 +1,8 @@ -import { defineStore } from 'pinia' -import { ref, computed } from 'vue' +import { closeLoading, showLoading, showMessageError, showMessageOK } from '@/utils/dialog' import { httpGet, httpPost } from '@/utils/http' -import { showMessageError, showMessageOK, showLoading, closeLoading } from '@/utils/dialog' +import { defineStore } from 'pinia' import { showConfirmDialog } from 'vant' +import { computed, ref } from 'vue' export const useJimengStore = defineStore('mobile-jimeng', () => { // 响应式数据 @@ -209,7 +209,7 @@ export const useJimengStore = defineStore('mobile-jimeng', () => { } listLoading.value = true - return httpGet('/api/jimeng/list', { page: page.value, page_size: pageSize.value }) + return httpPost('/api/jimeng/jobs', { page: page.value, page_size: pageSize.value }) .then((res) => { total.value = res.data.total let needPull = false diff --git a/web/src/store/video.js b/web/src/store/video.js index 87382323..c90698e9 100644 --- a/web/src/store/video.js +++ b/web/src/store/video.js @@ -441,8 +441,6 @@ export const useVideoStore = defineStore('video', () => { } isGenerating.value = true - showLoading('正在生成视频脚本...') - try { const res = await httpPost('/api/prompt/video', { prompt }) if (activeVideoType.value === 'luma') { @@ -450,10 +448,8 @@ export const useVideoStore = defineStore('video', () => { } else { kelingParams.prompt = res.data } - closeLoading() } catch (error) { showMessageError('生成提示词失败:' + error.message) - closeLoading() } finally { isGenerating.value = false } diff --git a/web/src/views/Jimeng.vue b/web/src/views/Jimeng.vue index f0e1e3fd..f37f3fc9 100644 --- a/web/src/views/Jimeng.vue +++ b/web/src/views/Jimeng.vue @@ -308,15 +308,15 @@
- - 立即生成 ({{ store.currentPowerCost }} ) - + + + 立即生成 ({{ store.currentPowerCost }}算力) +
diff --git a/web/src/views/Suno.vue b/web/src/views/Suno.vue index 30aab8be..66fe315d 100644 --- a/web/src/views/Suno.vue +++ b/web/src/views/Suno.vue @@ -201,13 +201,15 @@
-
@@ -233,7 +235,6 @@ diff --git a/web/src/views/Video.vue b/web/src/views/Video.vue index 44a4745e..4e2a626b 100644 --- a/web/src/views/Video.vue +++ b/web/src/views/Video.vue @@ -22,17 +22,13 @@ -
- - - 生成AI视频提示词 +
+ + + + 生成提示词 + + 生成中...
@@ -126,16 +122,28 @@
- - 当前可用算力:{{ store.availablePower }} +
+ + 当前可用算力: + {{ store.availablePower }} +
+ + + + +
+
@@ -398,17 +406,17 @@ -
+
- - 生成专业视频提示词 + + 生成提示词 + + 生成中...
@@ -429,23 +437,31 @@
- - 当前可用算力:{{ store.availablePower }} - + +
+
+ + 当前可用算力: + {{ store.availablePower }} +
+ + + +
-
- +
@@ -599,12 +615,11 @@ - - + diff --git a/web/src/views/mobile/pages/ImageSd.vue b/web/src/views/mobile/pages/ImageSd.vue index 6c6e565c..5dc5083c 100644 --- a/web/src/views/mobile/pages/ImageSd.vue +++ b/web/src/views/mobile/pages/ImageSd.vue @@ -1,6 +1,6 @@