diff --git a/CHANGELOG.md b/CHANGELOG.md
index ace0acb4..c411fad7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
# 更新日志
+## v4.1.3
+* 功能优化:VIP 会员在进行任何操作都不扣减算力,以实现会员周卡月卡功能
+* 功能优化:管理后台给可以拖动排序的组件添加拖动图标
+* 功能新增:支持 Luma 文生视频功能
+
## v4.1.2
* Bug修复:修复思维导图页面获取模型失败的问题
* 功能优化:优化MJ,SD,DALL-E 任务列表页面,显示失败任务的错误信息,删除失败任务可以恢复扣减算力
diff --git a/web/.env.development b/web/.env.development
index f3eb9e14..90c5c327 100644
--- a/web/.env.development
+++ b/web/.env.development
@@ -6,6 +6,6 @@ VUE_APP_ADMIN_USER=admin
VUE_APP_ADMIN_PASS=admin123
VUE_APP_KEY_PREFIX=GeekAI_DEV_
VUE_APP_TITLE="Geek-AI 创作系统"
-VUE_APP_VERSION=v4.1.2
+VUE_APP_VERSION=v4.1.3
VUE_APP_DOCS_URL=https://docs.geekai.me
VUE_APP_GIT_URL=https://github.com/yangjian102621/geekai
diff --git a/web/.env.production b/web/.env.production
index eb506d0f..056d8338 100644
--- a/web/.env.production
+++ b/web/.env.production
@@ -1,6 +1,6 @@
VUE_APP_API_HOST=
VUE_APP_WS_HOST=
VUE_APP_KEY_PREFIX=GeekAI_
-VUE_APP_VERSION=v4.1.2
+VUE_APP_VERSION=v4.1.3
VUE_APP_DOCS_URL=https://docs.geekai.me
VUE_APP_GIT_URL=https://github.com/yangjian102621/geekai
diff --git a/web/src/assets/iconfont/iconfont.css b/web/src/assets/iconfont/iconfont.css
index 842956a9..2c72d0fd 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=1721896403264') format('woff2'),
- url('iconfont.woff?t=1721896403264') format('woff'),
- url('iconfont.ttf?t=1721896403264') format('truetype');
+ src: url('iconfont.woff2?t=1723434190230') format('woff2'),
+ url('iconfont.woff?t=1723434190230') format('woff'),
+ url('iconfont.ttf?t=1723434190230') format('truetype');
}
.iconfont {
@@ -13,6 +13,14 @@
-moz-osx-font-smoothing: grayscale;
}
+.icon-drag:before {
+ content: "\e8ec";
+}
+
+.icon-move:before {
+ content: "\e6fd";
+}
+
.icon-link:before {
content: "\e6b4";
}
diff --git a/web/src/assets/iconfont/iconfont.js b/web/src/assets/iconfont/iconfont.js
index 7048f335..8d38c060 100644
--- a/web/src/assets/iconfont/iconfont.js
+++ b/web/src/assets/iconfont/iconfont.js
@@ -1 +1 @@
-window._iconfont_svg_string_4125778='',function(a){var l=(l=document.getElementsByTagName("script"))[l.length-1],c=l.getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var t,h,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(c&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}t=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(t,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),t()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(i=t,o=a.document,z=!1,p(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,s())})}function s(){z||(z=!0,i())}function p(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(p,50)}s()}}(window);
\ No newline at end of file
+window._iconfont_svg_string_4125778='',function(a){var l=(l=document.getElementsByTagName("script"))[l.length-1],c=l.getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var t,h,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(c&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}t=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(t,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),t()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(i=t,o=a.document,z=!1,p(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,s())})}function s(){z||(z=!0,i())}function p(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(p,50)}s()}}(window);
\ No newline at end of file
diff --git a/web/src/assets/iconfont/iconfont.json b/web/src/assets/iconfont/iconfont.json
index ffc0d972..5fbfb566 100644
--- a/web/src/assets/iconfont/iconfont.json
+++ b/web/src/assets/iconfont/iconfont.json
@@ -5,6 +5,20 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
+ {
+ "icon_id": "15617554",
+ "name": "drag",
+ "font_class": "drag",
+ "unicode": "e8ec",
+ "unicode_decimal": 59628
+ },
+ {
+ "icon_id": "240317",
+ "name": "move",
+ "font_class": "move",
+ "unicode": "e6fd",
+ "unicode_decimal": 59133
+ },
{
"icon_id": "880330",
"name": "link",
diff --git a/web/src/assets/iconfont/iconfont.ttf b/web/src/assets/iconfont/iconfont.ttf
index 32d02e7b..887cbd6a 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 eb517115..79f8c16d 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 7d4d825e..ab7aa757 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/cache.js b/web/src/store/cache.js
index 327f7be7..04409f60 100644
--- a/web/src/store/cache.js
+++ b/web/src/store/cache.js
@@ -15,8 +15,8 @@ export function checkSession() {
return new Promise((resolve, reject) => {
httpGet('/api/user/session').then(res => {
item.data = res.data
- // cache expires after 5 minutes
- item.expire = Date.now() + 1000 * 60 * 5
+ // cache expires after 10 secs
+ item.expire = Date.now() + 1000 * 10
Storage.set(userDataKey, item)
resolve(item.data)
}).catch(err => {
@@ -38,8 +38,7 @@ export function checkAdminSession() {
return new Promise((resolve, reject) => {
httpGet('/api/admin/session').then(res => {
item.data = res.data
- // cache expires after 10 minutes
- item.expire = Date.now() + 1000 * 60 * 10
+ item.expire = Date.now() + 1000 * 10
Storage.set(adminDataKey, item)
resolve(item.data)
}).catch(err => {
@@ -60,8 +59,7 @@ export function getSystemInfo() {
return new Promise((resolve, reject) => {
httpGet('/api/config/get?key=system').then(res => {
item.data = res
- // cache expires after 10 minutes
- item.expire = Date.now() + 1000 * 60 * 10
+ item.expire = Date.now() + 1000 * 10
Storage.set(systemInfoKey, item)
resolve(item.data)
}).catch(err => {
@@ -79,8 +77,7 @@ export function getLicenseInfo() {
return new Promise((resolve, reject) => {
httpGet('/api/config/license').then(res => {
item.data = res
- // cache expires after 10 minutes
- item.expire = Date.now() + 1000 * 60 * 10
+ item.expire = Date.now() + 1000 * 10
Storage.set(licenseInfoKey, item)
resolve(item.data)
}).catch(err => {
diff --git a/web/src/views/admin/Apps.vue b/web/src/views/admin/Apps.vue
index 11e3e3c8..bffe733c 100644
--- a/web/src/views/admin/Apps.vue
+++ b/web/src/views/admin/Apps.vue
@@ -17,7 +17,10 @@
- {{ scope.row.name }}
+
+
+ {{ scope.row.name }}
+
@@ -373,6 +376,14 @@ const uploadImg = (file) => {
}
}
+ .sort {
+ cursor move
+ .iconfont {
+ position relative
+ top 1px
+ }
+ }
+
.pagination {
padding 20px 0
display flex
diff --git a/web/src/views/admin/ChatModel.vue b/web/src/views/admin/ChatModel.vue
index 3ecb89ed..1d7806a5 100644
--- a/web/src/views/admin/ChatModel.vue
+++ b/web/src/views/admin/ChatModel.vue
@@ -13,7 +13,10 @@
- {{ scope.row.name }}
+
+
+ {{ scope.row.name }}
+
@@ -339,6 +342,14 @@ const remove = function (row) {
width: 100%
}
+ .sort {
+ cursor move
+ .iconfont {
+ position relative
+ top 1px
+ }
+ }
+
.pagination {
padding 20px 0
display flex
diff --git a/web/src/views/admin/Menu.vue b/web/src/views/admin/Menu.vue
index a1878097..28579316 100644
--- a/web/src/views/admin/Menu.vue
+++ b/web/src/views/admin/Menu.vue
@@ -9,7 +9,10 @@
- {{ scope.row.name }}
+
+
+ {{ scope.row.name }}
+
@@ -240,6 +243,14 @@ const uploadImg = (file) => {
height 36px
}
+ .sort {
+ cursor move
+ .iconfont {
+ position relative
+ top 1px
+ }
+ }
+
.el-select {
width: 100%
}
diff --git a/web/src/views/admin/Product.vue b/web/src/views/admin/Product.vue
index 966b6b1c..0666c5b0 100644
--- a/web/src/views/admin/Product.vue
+++ b/web/src/views/admin/Product.vue
@@ -9,7 +9,10 @@
- {{ scope.row.name }}
+
+
+ {{ scope.row.name }}
+
@@ -227,6 +230,14 @@ const remove = function (row) {
}
}
+ .sort {
+ cursor move
+ .iconfont {
+ position relative
+ top 1px
+ }
+ }
+
.el-select {
width: 100%
}