mirror of
				https://github.com/yangjian102621/geekai.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	add drag icon for dragable rows
This commit is contained in:
		@@ -1,5 +1,10 @@
 | 
				
			|||||||
# 更新日志
 | 
					# 更新日志
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## v4.1.3
 | 
				
			||||||
 | 
					* 功能优化:VIP 会员在进行任何操作都不扣减算力,以实现会员周卡月卡功能
 | 
				
			||||||
 | 
					* 功能优化:管理后台给可以拖动排序的组件添加拖动图标
 | 
				
			||||||
 | 
					* 功能新增:支持 Luma 文生视频功能
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v4.1.2
 | 
					## v4.1.2
 | 
				
			||||||
* Bug修复:修复思维导图页面获取模型失败的问题
 | 
					* Bug修复:修复思维导图页面获取模型失败的问题
 | 
				
			||||||
* 功能优化:优化MJ,SD,DALL-E 任务列表页面,显示失败任务的错误信息,删除失败任务可以恢复扣减算力
 | 
					* 功能优化:优化MJ,SD,DALL-E 任务列表页面,显示失败任务的错误信息,删除失败任务可以恢复扣减算力
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,6 @@ VUE_APP_ADMIN_USER=admin
 | 
				
			|||||||
VUE_APP_ADMIN_PASS=admin123
 | 
					VUE_APP_ADMIN_PASS=admin123
 | 
				
			||||||
VUE_APP_KEY_PREFIX=GeekAI_DEV_
 | 
					VUE_APP_KEY_PREFIX=GeekAI_DEV_
 | 
				
			||||||
VUE_APP_TITLE="Geek-AI 创作系统"
 | 
					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_DOCS_URL=https://docs.geekai.me
 | 
				
			||||||
VUE_APP_GIT_URL=https://github.com/yangjian102621/geekai
 | 
					VUE_APP_GIT_URL=https://github.com/yangjian102621/geekai
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
VUE_APP_API_HOST=
 | 
					VUE_APP_API_HOST=
 | 
				
			||||||
VUE_APP_WS_HOST=
 | 
					VUE_APP_WS_HOST=
 | 
				
			||||||
VUE_APP_KEY_PREFIX=GeekAI_
 | 
					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_DOCS_URL=https://docs.geekai.me
 | 
				
			||||||
VUE_APP_GIT_URL=https://github.com/yangjian102621/geekai
 | 
					VUE_APP_GIT_URL=https://github.com/yangjian102621/geekai
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
@font-face {
 | 
					@font-face {
 | 
				
			||||||
  font-family: "iconfont"; /* Project id 4125778 */
 | 
					  font-family: "iconfont"; /* Project id 4125778 */
 | 
				
			||||||
  src: url('iconfont.woff2?t=1721896403264') format('woff2'),
 | 
					  src: url('iconfont.woff2?t=1723434190230') format('woff2'),
 | 
				
			||||||
       url('iconfont.woff?t=1721896403264') format('woff'),
 | 
					       url('iconfont.woff?t=1723434190230') format('woff'),
 | 
				
			||||||
       url('iconfont.ttf?t=1721896403264') format('truetype');
 | 
					       url('iconfont.ttf?t=1723434190230') format('truetype');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.iconfont {
 | 
					.iconfont {
 | 
				
			||||||
@@ -13,6 +13,14 @@
 | 
				
			|||||||
  -moz-osx-font-smoothing: grayscale;
 | 
					  -moz-osx-font-smoothing: grayscale;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.icon-drag:before {
 | 
				
			||||||
 | 
					  content: "\e8ec";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.icon-move:before {
 | 
				
			||||||
 | 
					  content: "\e6fd";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.icon-link:before {
 | 
					.icon-link:before {
 | 
				
			||||||
  content: "\e6b4";
 | 
					  content: "\e6b4";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -5,6 +5,20 @@
 | 
				
			|||||||
  "css_prefix_text": "icon-",
 | 
					  "css_prefix_text": "icon-",
 | 
				
			||||||
  "description": "",
 | 
					  "description": "",
 | 
				
			||||||
  "glyphs": [
 | 
					  "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",
 | 
					      "icon_id": "880330",
 | 
				
			||||||
      "name": "link",
 | 
					      "name": "link",
 | 
				
			||||||
 
 | 
				
			|||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -15,8 +15,8 @@ export function checkSession() {
 | 
				
			|||||||
    return new Promise((resolve, reject) => {
 | 
					    return new Promise((resolve, reject) => {
 | 
				
			||||||
        httpGet('/api/user/session').then(res => {
 | 
					        httpGet('/api/user/session').then(res => {
 | 
				
			||||||
            item.data = res.data
 | 
					            item.data = res.data
 | 
				
			||||||
            // cache expires after 5 minutes
 | 
					            // cache expires after 10 secs
 | 
				
			||||||
            item.expire = Date.now() + 1000 * 60 * 5
 | 
					            item.expire = Date.now() + 1000 * 10
 | 
				
			||||||
            Storage.set(userDataKey, item)
 | 
					            Storage.set(userDataKey, item)
 | 
				
			||||||
            resolve(item.data)
 | 
					            resolve(item.data)
 | 
				
			||||||
        }).catch(err => {
 | 
					        }).catch(err => {
 | 
				
			||||||
@@ -38,8 +38,7 @@ export function checkAdminSession() {
 | 
				
			|||||||
    return new Promise((resolve, reject) => {
 | 
					    return new Promise((resolve, reject) => {
 | 
				
			||||||
        httpGet('/api/admin/session').then(res => {
 | 
					        httpGet('/api/admin/session').then(res => {
 | 
				
			||||||
            item.data = res.data
 | 
					            item.data = res.data
 | 
				
			||||||
            // cache expires after 10 minutes
 | 
					            item.expire = Date.now() + 1000 * 10
 | 
				
			||||||
            item.expire = Date.now() + 1000 * 60 * 10
 | 
					 | 
				
			||||||
            Storage.set(adminDataKey, item)
 | 
					            Storage.set(adminDataKey, item)
 | 
				
			||||||
            resolve(item.data)
 | 
					            resolve(item.data)
 | 
				
			||||||
        }).catch(err => {
 | 
					        }).catch(err => {
 | 
				
			||||||
@@ -60,8 +59,7 @@ export function getSystemInfo() {
 | 
				
			|||||||
    return new Promise((resolve, reject) => {
 | 
					    return new Promise((resolve, reject) => {
 | 
				
			||||||
        httpGet('/api/config/get?key=system').then(res => {
 | 
					        httpGet('/api/config/get?key=system').then(res => {
 | 
				
			||||||
            item.data = res
 | 
					            item.data = res
 | 
				
			||||||
            // cache expires after 10 minutes
 | 
					            item.expire = Date.now() + 1000 * 10
 | 
				
			||||||
            item.expire = Date.now() + 1000 * 60 * 10
 | 
					 | 
				
			||||||
            Storage.set(systemInfoKey, item)
 | 
					            Storage.set(systemInfoKey, item)
 | 
				
			||||||
            resolve(item.data)
 | 
					            resolve(item.data)
 | 
				
			||||||
        }).catch(err => {
 | 
					        }).catch(err => {
 | 
				
			||||||
@@ -79,8 +77,7 @@ export function getLicenseInfo() {
 | 
				
			|||||||
    return new Promise((resolve, reject) => {
 | 
					    return new Promise((resolve, reject) => {
 | 
				
			||||||
        httpGet('/api/config/license').then(res => {
 | 
					        httpGet('/api/config/license').then(res => {
 | 
				
			||||||
            item.data = res
 | 
					            item.data = res
 | 
				
			||||||
            // cache expires after 10 minutes
 | 
					            item.expire = Date.now() + 1000 * 10
 | 
				
			||||||
            item.expire = Date.now() + 1000 * 60 * 10
 | 
					 | 
				
			||||||
            Storage.set(licenseInfoKey, item)
 | 
					            Storage.set(licenseInfoKey, item)
 | 
				
			||||||
            resolve(item.data)
 | 
					            resolve(item.data)
 | 
				
			||||||
        }).catch(err => {
 | 
					        }).catch(err => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,10 @@
 | 
				
			|||||||
        </el-table-column>
 | 
					        </el-table-column>
 | 
				
			||||||
        <el-table-column label="应用名称" prop="name">
 | 
					        <el-table-column label="应用名称" prop="name">
 | 
				
			||||||
          <template #default="scope">
 | 
					          <template #default="scope">
 | 
				
			||||||
            <span class="sort" :data-id="scope.row.id">{{ scope.row.name }}</span>
 | 
					            <span class="sort" :data-id="scope.row.id">
 | 
				
			||||||
 | 
					              <i class="iconfont icon-drag"></i>
 | 
				
			||||||
 | 
					              {{ scope.row.name }}
 | 
				
			||||||
 | 
					            </span>
 | 
				
			||||||
          </template>
 | 
					          </template>
 | 
				
			||||||
        </el-table-column>
 | 
					        </el-table-column>
 | 
				
			||||||
        <el-table-column label="应用标识" prop="key"/>
 | 
					        <el-table-column label="应用标识" prop="key"/>
 | 
				
			||||||
@@ -373,6 +376,14 @@ const uploadImg = (file) => {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .sort {
 | 
				
			||||||
 | 
					    cursor move
 | 
				
			||||||
 | 
					    .iconfont {
 | 
				
			||||||
 | 
					      position relative
 | 
				
			||||||
 | 
					      top 1px
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .pagination {
 | 
					  .pagination {
 | 
				
			||||||
    padding 20px 0
 | 
					    padding 20px 0
 | 
				
			||||||
    display flex
 | 
					    display flex
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,10 @@
 | 
				
			|||||||
        <el-table-column type="selection" width="38"></el-table-column>
 | 
					        <el-table-column type="selection" width="38"></el-table-column>
 | 
				
			||||||
        <el-table-column prop="name" label="模型名称">
 | 
					        <el-table-column prop="name" label="模型名称">
 | 
				
			||||||
          <template #default="scope">
 | 
					          <template #default="scope">
 | 
				
			||||||
            <span class="sort" :data-id="scope.row.id">{{ scope.row.name }}</span>
 | 
					            <span class="sort" :data-id="scope.row.id">
 | 
				
			||||||
 | 
					              <i class="iconfont icon-drag"></i>
 | 
				
			||||||
 | 
					              {{ scope.row.name }}
 | 
				
			||||||
 | 
					            </span>
 | 
				
			||||||
          </template>
 | 
					          </template>
 | 
				
			||||||
        </el-table-column>
 | 
					        </el-table-column>
 | 
				
			||||||
        <el-table-column prop="value" label="模型值">
 | 
					        <el-table-column prop="value" label="模型值">
 | 
				
			||||||
@@ -339,6 +342,14 @@ const remove = function (row) {
 | 
				
			|||||||
    width: 100%
 | 
					    width: 100%
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .sort {
 | 
				
			||||||
 | 
					    cursor move
 | 
				
			||||||
 | 
					    .iconfont {
 | 
				
			||||||
 | 
					      position relative
 | 
				
			||||||
 | 
					      top 1px
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .pagination {
 | 
					  .pagination {
 | 
				
			||||||
    padding 20px 0
 | 
					    padding 20px 0
 | 
				
			||||||
    display flex
 | 
					    display flex
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,10 @@
 | 
				
			|||||||
      <el-table :data="items" :row-key="row => row.id" table-layout="auto">
 | 
					      <el-table :data="items" :row-key="row => row.id" table-layout="auto">
 | 
				
			||||||
        <el-table-column prop="name" label="菜单名称">
 | 
					        <el-table-column prop="name" label="菜单名称">
 | 
				
			||||||
          <template #default="scope">
 | 
					          <template #default="scope">
 | 
				
			||||||
            <span class="sort" :data-id="scope.row.id">{{ scope.row.name }}</span>
 | 
					            <span class="sort" :data-id="scope.row.id">
 | 
				
			||||||
 | 
					              <i class="iconfont icon-drag"></i>
 | 
				
			||||||
 | 
					              {{ scope.row.name }}
 | 
				
			||||||
 | 
					            </span>
 | 
				
			||||||
          </template>
 | 
					          </template>
 | 
				
			||||||
        </el-table-column>
 | 
					        </el-table-column>
 | 
				
			||||||
        <el-table-column prop="icon" label="菜单图标">
 | 
					        <el-table-column prop="icon" label="菜单图标">
 | 
				
			||||||
@@ -240,6 +243,14 @@ const uploadImg = (file) => {
 | 
				
			|||||||
    height 36px
 | 
					    height 36px
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .sort {
 | 
				
			||||||
 | 
					    cursor move
 | 
				
			||||||
 | 
					    .iconfont {
 | 
				
			||||||
 | 
					      position relative
 | 
				
			||||||
 | 
					      top 1px
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .el-select {
 | 
					  .el-select {
 | 
				
			||||||
    width: 100%
 | 
					    width: 100%
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,10 @@
 | 
				
			|||||||
      <el-table :data="items" :row-key="row => row.id" table-layout="auto">
 | 
					      <el-table :data="items" :row-key="row => row.id" table-layout="auto">
 | 
				
			||||||
        <el-table-column prop="name" label="产品名称">
 | 
					        <el-table-column prop="name" label="产品名称">
 | 
				
			||||||
          <template #default="scope">
 | 
					          <template #default="scope">
 | 
				
			||||||
            <span class="sort" :data-id="scope.row.id">{{ scope.row.name }}</span>
 | 
					            <span class="sort" :data-id="scope.row.id">
 | 
				
			||||||
 | 
					              <i class="iconfont icon-drag"></i>
 | 
				
			||||||
 | 
					              {{ scope.row.name }}
 | 
				
			||||||
 | 
					            </span>
 | 
				
			||||||
          </template>
 | 
					          </template>
 | 
				
			||||||
        </el-table-column>
 | 
					        </el-table-column>
 | 
				
			||||||
        <el-table-column prop="price" label="产品价格"/>
 | 
					        <el-table-column prop="price" label="产品价格"/>
 | 
				
			||||||
@@ -227,6 +230,14 @@ const remove = function (row) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .sort {
 | 
				
			||||||
 | 
					    cursor move
 | 
				
			||||||
 | 
					    .iconfont {
 | 
				
			||||||
 | 
					      position relative
 | 
				
			||||||
 | 
					      top 1px
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .el-select {
 | 
					  .el-select {
 | 
				
			||||||
    width: 100%
 | 
					    width: 100%
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user