Compare commits

116 Commits

Author SHA1 Message Date
X1627315083
8c5105052d 设置路由管理员可以访问 2025-12-19 16:50:39 +08:00
X1627315083
0e1e2cec39 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-12-19 16:03:16 +08:00
X1627315083
086668d31b brand运算中按钮异常 2025-12-19 16:03:14 +08:00
d4da1b47ef style: 高级工具样式 2025-12-19 10:37:27 +08:00
1596b46ff1 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-12-19 09:55:51 +08:00
fd0ec4f7ff style: 管理员页面搜索框label宽度 2025-12-19 09:55:45 +08:00
X1627315083
012c4036e0 调整icon位置 2025-12-19 09:51:17 +08:00
688fb3daa0 feat: 不允许修改订阅计划的组织 2025-12-18 17:20:59 +08:00
X1627315083
5e5059ea73 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-12-18 15:36:36 +08:00
X1627315083
386a103df1 fix 2025-12-18 15:36:33 +08:00
aad884d07c Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-12-18 15:17:43 +08:00
f011300bef bugfix: 教育管理员编辑用户之后刷新列表 2025-12-18 15:17:40 +08:00
X1627315083
15f5c6b3a2 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-12-18 13:52:29 +08:00
X1627315083
7fbd721512 home加载设置默认值为true 2025-12-18 13:52:27 +08:00
271b8af4c4 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-12-18 13:29:34 +08:00
81e230b79f feat: 教育管理员订阅计划展示 2025-12-18 13:29:30 +08:00
X1627315083
7da3dcb0d7 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-12-18 11:01:04 +08:00
c6f3a44b81 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-12-18 09:37:04 +08:00
0e16681404 bugfix: i18n重复 2025-12-18 09:37:00 +08:00
X1627315083
b8f53e9f4a fix 2025-12-17 15:34:25 +08:00
X1627315083
697dc36df4 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-12-17 15:33:34 +08:00
X1627315083
5672307e33 修复连续创建项目bug 2025-12-17 15:33:31 +08:00
b160709f16 feat: 编辑时不可修改订阅计划状态&布局修改 2025-12-17 14:02:58 +08:00
5a7e5e92a8 feat: 教育管理员只获取active订阅计划&超级管理员可修改订阅计划状态 2025-12-17 10:55:01 +08:00
61dd9fb1c5 bugfix: 编辑订阅计划 2025-12-17 10:12:10 +08:00
07b2334d61 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-12-16 17:33:33 +08:00
892d96b904 bugfix: 刷新后保持当前页面&左侧导航选中 2025-12-16 17:33:27 +08:00
41a42b1133 feat: 教育管理员操作订阅计划& 刷新页面保持当前页面 2025-12-16 17:32:33 +08:00
X1627315083
467ac9c24f 替换linkedin地址 2025-12-16 15:53:21 +08:00
X1627315083
1d4478e98e fix 2025-12-16 14:43:41 +08:00
X1627315083
e24318e8ee 修改媒体跳转地址和icon 2025-12-16 13:47:37 +08:00
X1627315083
5ad2e40221 fix 2025-12-15 15:40:43 +08:00
X1627315083
c82afcbfd6 修复进入新建项目后当前项目内容会丢失 2025-12-15 15:34:04 +08:00
X1627315083
95d85572f3 fix 2025-12-15 15:06:08 +08:00
X1627315083
727636e0f8 detail修改服装按钮位置调整并且增加引导图 2025-12-15 14:34:38 +08:00
X1627315083
b01a375acc 在指定地址下系统维护期间也可以访问 2025-12-15 13:33:47 +08:00
X1627315083
b3c396ba9c 去掉自己的作品不允许二次创作条件 2025-12-15 13:13:33 +08:00
X1627315083
260db8e896 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-12-15 10:59:27 +08:00
X1627315083
b5f393ceb7 修复切换语言,登录页谷歌登录和微信登录按钮添加语言适配 2025-12-15 10:59:24 +08:00
b1bea281ec feat: 订阅计划页面 2025-12-15 10:39:19 +08:00
c9b65b6090 feat: 超级管理员订阅计划页面 2025-12-12 17:34:11 +08:00
0ac6d6e93f style: placeholder颜色 2025-12-12 10:58:14 +08:00
743b3f0ef6 bugfix: store调用失败 2025-12-12 10:50:37 +08:00
17f0045dbe fix: 数值绑定 2025-12-12 10:38:50 +08:00
b16c5c3263 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-12-12 10:35:54 +08:00
8ed58d37d8 style: 订阅弹窗样式 2025-12-12 10:35:41 +08:00
李志鹏
84175e94d1 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-12-12 10:34:12 +08:00
李志鹏
ed83044f81 页面跳转添加loading,添加全局loading 2025-12-12 10:34:10 +08:00
9cb6be3098 chore: i18n资源 2025-12-12 10:05:00 +08:00
4ab4578081 style: 订阅弹窗样式 2025-12-12 10:04:28 +08:00
李志鹏
652d89d3be fix:转产品提示词 2025-12-10 15:53:40 +08:00
李志鹏
17edeef461 fix 2025-12-10 15:33:05 +08:00
X1627315083
aad6919ec3 转视频页面增加帮助icon,高级工具在任何地方都有弹窗提示词 2025-12-09 11:25:25 +08:00
X1627315083
baf161e695 调整订阅页面部分文案 2025-12-04 09:39:22 +08:00
X1627315083
51751f6b5e Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-12-01 15:29:22 +08:00
X1627315083
c1b051a185 调整情绪版layout出现拉伸的问题 2025-12-01 15:29:20 +08:00
1a5e285f09 删除 .gitea/workflows/prod_build_schedule.yaml 2025-12-01 10:15:55 +08:00
911d1d8477 删除 .gitea/workflows/prod_build_manual.yaml 2025-12-01 10:15:51 +08:00
e0261d4a37 删除 .gitea/workflows/develop_build_manual.yaml 2025-12-01 10:15:48 +08:00
50cb33ac43 删除 .gitea/workflows/develop_build_commit.yaml 2025-12-01 10:15:45 +08:00
261064bd23 更新 .gitea/workflows/develop_build_commit.yaml
All checks were successful
git commit 控制 AiDA WEB-Node.js Develop 分支构建部署123 / build (18.18.0) (push) Has been skipped
2025-11-28 16:07:54 +08:00
a1e8f3295e Merge pull request 'main' (#1) from main into dev_vite
All checks were successful
AiDA WEB-Node.js Develop 分支构建部署123 / build (18.18.0) (push) Has been skipped
Reviewed-on: #1
2025-11-28 14:08:50 +08:00
889982f63e Merge branch 'dev_vite' into main 2025-11-28 14:08:06 +08:00
83e66ebb54 添加 .gitea/workflows/prod_build_schedule.yaml 2025-11-28 14:06:26 +08:00
e5f1199c45 添加 .gitea/workflows/prod_build_manual.yaml 2025-11-28 14:06:06 +08:00
a2b9b8423c 添加 .gitea/workflows/develop_build.yaml 2025-11-28 14:05:43 +08:00
b6311a5f6b 添加 .gitea/workflows/develop_build_manual.yaml 2025-11-28 14:05:14 +08:00
7b322ed2b3 删除 .gitea/workflows/develop_build_manual.yaml 2025-11-28 14:04:32 +08:00
9352dff278 删除 .gitea/workflows/dev_vite_build.yaml 2025-11-28 14:04:28 +08:00
0ab41c4ce5 删除 .gitea/workflows/prod_build_manual.yaml 2025-11-28 14:04:22 +08:00
a75df548be 删除 .gitea/workflows/develop_build_manual.yaml 2025-11-28 14:04:19 +08:00
b72cb2c3a2 更新 .gitea/workflows/develop_build_manual.yaml
All checks were successful
AiDA WEB-Node.js Develop 分支构建部署 / build (18.18.0) (push) Has been skipped
2025-11-28 11:43:20 +08:00
245863ad82 更新 .gitea/workflows/develop_build_manual.yaml 2025-11-28 11:42:33 +08:00
af15cd0325 更新 .gitea/workflows/develop_build_manual.yaml 2025-11-28 11:41:59 +08:00
a2a85f1dd0 更新 .gitea/workflows/develop_build_manual.yaml 2025-11-28 11:30:22 +08:00
5d7a3517ee 更新 .gitea/workflows/develop_build_manual.yaml
All checks were successful
AiDA WEB-Node.js Develop 分支构建部署 / build (18.18.0) (push) Has been skipped
2025-11-28 11:30:11 +08:00
c48eb66113 添加 .gitea/workflows/prod_build_manual.yaml 2025-11-28 11:27:34 +08:00
c34397d567 更新 .gitea/workflows/develop_build_manual.yaml
All checks were successful
AiDA WEB-Node.js Develop 分支构建部署 / build (18.18.0) (push) Has been skipped
2025-11-28 11:12:52 +08:00
be4176e4b5 更新 .gitea/workflows/develop_build_manual.yaml 2025-11-28 11:12:22 +08:00
5711fe934e 添加 .gitea/workflows/develop_build_manual.yaml
All checks were successful
AiDA WEB-Node.js Develop 分支构建部署 / build (18.18.0) (push) Has been skipped
2025-11-28 11:11:18 +08:00
b9663ed382 添加 .gitea/workflows/develop_build_manual.yaml 2025-11-28 11:10:14 +08:00
X1627315083
e2fe4f52a4 fix
All checks were successful
AiDA WEB-Node.js Develop 分支构建部署 / build (18.18.0) (push) Has been skipped
2025-11-28 10:54:07 +08:00
X1627315083
5a647fc92a Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite
All checks were successful
AiDA WEB-Node.js Develop 分支构建部署 / build (18.18.0) (push) Has been skipped
2025-11-28 10:50:41 +08:00
X1627315083
a3bf4edeeb 调整订阅页面手机端样式 2025-11-28 10:50:39 +08:00
32327a9244 [run build]
All checks were successful
AiDA WEB-Node.js Develop 分支构建部署 / build (18.18.0) (push) Successful in 1m48s
2025-11-28 10:48:19 +08:00
d586115580 更新 .gitea/workflows/dev_vite_build.yaml
All checks were successful
AiDA WEB-Node.js Develop 分支构建部署123 / build (18.18.0) (push) Has been skipped
2025-11-28 10:37:15 +08:00
011ae1bf52 添加 .gitea/workflows/dev_vite_build.yaml
All checks were successful
AiDA WEB-Node.js Develop 分支构建部署123 / build (18.18.0) (push) Has been skipped
2025-11-28 10:35:20 +08:00
dfb7156fab style: 移动端样式 2025-11-27 13:38:30 +08:00
038cd24cc2 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-27 11:36:57 +08:00
cc365990e8 style: 文案间距 2025-11-27 11:36:50 +08:00
X1627315083
308bae1d29 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-27 11:23:36 +08:00
X1627315083
985d602680 悬浮头像新增社媒icon,调整弹窗透明度 2025-11-27 11:23:33 +08:00
d431e0585b style: 价格标签间距 2025-11-27 11:20:52 +08:00
d5e0f98a6d bugfix: 年度订阅按钮 2025-11-27 11:18:26 +08:00
8ba5dd4ffc feat: 注册页语言切换 2025-11-27 10:47:28 +08:00
19d89402dd Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-27 10:13:59 +08:00
73967c88ca style: 分辨率适配 2025-11-27 10:13:54 +08:00
X1627315083
9e0d1fdc9c history页面新增修改项目名字 2025-11-27 10:10:28 +08:00
b7360d7e71 style: 移动端注册页面顶部logo 2025-11-26 17:08:53 +08:00
0657037748 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-26 17:00:14 +08:00
f6533e6027 style: 注册页面套餐item样式 2025-11-26 17:00:09 +08:00
X1627315083
7d2463d7c7 修复detail选择颜色bug 2025-11-26 16:59:33 +08:00
X1627315083
41abb2b6ff 调整首页切换语言位置 2025-11-26 16:32:56 +08:00
X1627315083
c71b1cace1 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-26 16:19:02 +08:00
X1627315083
f79e864faf 取消affiliate页面调用获取所有用户接口 2025-11-26 16:18:59 +08:00
5857a1da8d style: 订阅弹窗样式 2025-11-26 15:54:47 +08:00
3157a7efdf style: 注册页面手机端适配 2025-11-26 14:37:53 +08:00
08c200ef83 feat: 统一注册页面"联系我们"样式,并在打开邮箱失败时复制邮件地址 2025-11-26 13:43:37 +08:00
1ac74cb471 style: 高级工具上传图标样式统一 2025-11-26 13:36:43 +08:00
e88e83fed1 bugfix: editdesignType弹窗编辑产品图的prompt assist弹窗 2025-11-25 17:31:16 +08:00
4df9aaece5 bugfix: design弹窗转产品图/编辑产品图的placeholder 2025-11-25 15:07:27 +08:00
zhangyh
1c264cfbd8 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-25 14:40:33 +08:00
zhangyh
a81f65a5a7 feat: 二创防止重复点击 2025-11-25 14:05:46 +08:00
X1627315083
0372c0f69d 删除活动页面前两个内容 2025-11-25 13:27:08 +08:00
zhangyh
0ef8b3060c feat: 进入主页同步登录页语言 2025-11-25 13:26:52 +08:00
zhangyh
f906230d65 feat: i18n 2025-11-25 09:59:20 +08:00
49 changed files with 3822 additions and 2181 deletions

BIN
dist.7z

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

View File

@@ -1,7 +1,16 @@
<template>
<router-view/>
<div class="loading" v-show="loading"><a-spin :delay="0.5" /></div>
</template>
<script setup>
import { computed } from 'vue';
import { useStore } from 'vuex';
const store = useStore();
const loading = computed(() => store.state.loading || store.state.view_loading);
</script>
<style lang="less">
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
@@ -9,7 +18,19 @@
-moz-osx-font-smoothing: grayscale;
height: 100%;
}
.loading{
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.4);
display: flex;
align-items: center;
justify-content: center;
z-index: 999999999999;
color: #fff;
}
.ipad{
*{
-webkit-touch-callout:none;

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2427_2565)">
<path d="M12 0C5.37264 0 0 5.37264 0 12C0 17.6275 3.87456 22.3498 9.10128 23.6467V15.6672H6.62688V12H9.10128V10.4198C9.10128 6.33552 10.9498 4.4424 14.9597 4.4424C15.72 4.4424 17.0318 4.59168 17.5685 4.74048V8.06448C17.2853 8.03472 16.7933 8.01984 16.1822 8.01984C14.2147 8.01984 13.4544 8.76528 13.4544 10.703V12H17.3741L16.7006 15.6672H13.4544V23.9122C19.3963 23.1946 24.0005 18.1354 24.0005 12C24 5.37264 18.6274 0 12 0Z" fill="#2C2C2C"/>
</g>
<defs>
<clipPath id="clip0_2427_2565">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 691 B

View File

@@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2427_2564)">
<path d="M22.2234 0H1.77187C0.792187 0 0 0.773438 0 1.72969V22.2656C0 23.2219 0.792187 24 1.77187 24H22.2234C23.2031 24 24 23.2219 24 22.2703V1.72969C24 0.773438 23.2031 0 22.2234 0ZM7.12031 20.4516H3.55781V8.99531H7.12031V20.4516ZM5.33906 7.43438C4.19531 7.43438 3.27188 6.51094 3.27188 5.37187C3.27188 4.23281 4.19531 3.30937 5.33906 3.30937C6.47813 3.30937 7.40156 4.23281 7.40156 5.37187C7.40156 6.50625 6.47813 7.43438 5.33906 7.43438ZM20.4516 20.4516H16.8937V14.8828C16.8937 13.5563 16.8703 11.8453 15.0422 11.8453C13.1906 11.8453 12.9094 13.2938 12.9094 14.7891V20.4516H9.35625V8.99531H12.7687V10.5609H12.8156C13.2891 9.66094 14.4516 8.70938 16.1813 8.70938C19.7859 8.70938 20.4516 11.0813 20.4516 14.1656V20.4516V20.4516Z" fill="#2C2C2C"/>
</g>
<defs>
<clipPath id="clip0_2427_2564">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 997 B

View File

@@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2426_2350)">
<path d="M23.5233 7.12823C23.5233 7.12823 23.2913 5.49009 22.5766 4.77079C21.6717 3.8241 20.6601 3.81946 20.196 3.76377C16.8733 3.52246 11.8846 3.52246 11.8846 3.52246H11.8754C11.8754 3.52246 6.88669 3.52246 3.564 3.76377C3.09994 3.81946 2.08828 3.8241 1.18336 4.77079C0.468703 5.49009 0.241312 7.12823 0.241312 7.12823C0.241312 7.12823 0 9.05409 0 10.9753V12.7759C0 14.6971 0.236672 16.6229 0.236672 16.6229C0.236672 16.6229 0.468703 18.2611 1.17872 18.9804C2.08364 19.9271 3.27164 19.8946 3.80067 19.9967C5.70333 20.1777 11.88 20.2334 11.88 20.2334C11.88 20.2334 16.8733 20.2241 20.196 19.9874C20.6601 19.9317 21.6717 19.9271 22.5766 18.9804C23.2913 18.2611 23.5233 16.6229 23.5233 16.6229C23.5233 16.6229 23.76 14.7017 23.76 12.7759V10.9753C23.76 9.05409 23.5233 7.12823 23.5233 7.12823ZM9.42511 14.9616V8.28374L15.8431 11.6343L9.42511 14.9616Z" fill="#2C2C2C"/>
</g>
<defs>
<clipPath id="clip0_2426_2350">
<rect width="23.76" height="23.76" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,3 @@
<svg width="21" height="24" viewBox="0 0 21 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.9218 0H10.9175V16.1843C10.9175 18.1127 9.37747 19.6967 7.4609 19.6967C5.54433 19.6967 4.00424 18.1127 4.00424 16.1843C4.00424 14.2905 5.51011 12.7408 7.35825 12.672V8.60871C3.28553 8.67755 0 12.0177 0 16.1843C0 20.3854 3.35398 23.76 7.49514 23.76C11.6362 23.76 14.9902 20.351 14.9902 16.1843V7.88555C16.4961 8.98748 18.3442 9.64174 20.295 9.67619V5.61287C17.2833 5.50957 14.9218 3.03026 14.9218 0Z" fill="#2C2C2C"/>
</svg>

After

Width:  |  Height:  |  Size: 532 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

@@ -168,6 +168,7 @@ li {
}
.ant-modal-mask {
background-color: #666666;
opacity: 0.5;
}
.select_block {
height: 4rem;
@@ -1249,10 +1250,14 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
background: #000 !important;
border-color: #000 !important;
}
.ant-spin .ant-spin-dot {
width: 1.5em;
height: 1.5em;
}
.ant-spin-dot-item {
background-color: #000000 !important;
width: 9px !important;
height: 9px !important;
width: 0.9em !important;
height: 0.9em !important;
}
.ant-spin {
color: #000;
@@ -1357,7 +1362,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
}
.admin_page .admin_state_item > span {
white-space: nowrap;
width: 13rem;
min-width: 13rem;
}
.admin_page .admin_state_item > span > span {
color: red;

View File

@@ -173,6 +173,7 @@ input:focus{
}
.ant-modal-mask{
background-color: #666666;
opacity: .5;
}
.select_block{
height: 4rem;
@@ -1377,10 +1378,14 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
}
}
//loding样式
.ant-spin .ant-spin-dot{
width: 1.5em;
height: 1.5em;
}
.ant-spin-dot-item{
background-color: #000000 !important;
width: 9px !important;
height: 9px !important;
width: .9em !important;
height: .9em !important;
}
.ant-spin{
color: #000;
@@ -1489,7 +1494,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
align-items: center;
>span{
white-space: nowrap;
width: 13rem;
min-width: 13rem;
>span{
color: red;
}

View File

@@ -17,7 +17,8 @@
<div class="generalModel_btn">
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
<svg
width="100%" height="100%"
width="100%"
height="100%"
viewBox="0 0 46 46"
fill="none"
xmlns="http://www.w3.org/2000/svg"
@@ -49,7 +50,10 @@
</div>
<div class="allUserPoeration_center admin_page">
<div class="admin_state_item">
<span>{{ $t('admin.UserName') }}: <span>*</span></span>
<span>
{{ $t('admin.UserName') }}:
<span>*</span>
</span>
<input
v-model="userName"
:placeholder="$t('admin.enterUserName')"
@@ -58,7 +62,10 @@
/>
</div>
<div class="admin_state_item">
<span>{{ $t('admin.UserEmail') }}: <span>*</span></span>
<span>
{{ $t('admin.UserEmail') }}:
<span>*</span>
</span>
<input
v-model="userEmail"
:placeholder="$t('admin.enterEmail')"
@@ -67,7 +74,10 @@
/>
</div>
<div class="admin_state_item">
<span>{{ $t('admin.Password') }}: <span>*</span></span>
<span>
{{ $t('admin.Password') }}:
<span>*</span>
</span>
<input
@focus="focus"
@blur="blur"
@@ -86,6 +96,19 @@
style="width: 250px"
/>
</div>
<div class="admin_state_item" v-if="title?.value == 'Edit'">
<span>
{{ $t('admin.SubscribePlan') }}:
<span>*</span>
</span>
<a-select
v-model:value="subscriptionPlanId"
style="width: 250px"
:options="activePlanOptions"
:field-names="{ label: 'name', value: 'id' }"
:placeholder="$t('admin.SelectPlan')"
></a-select>
</div>
</div>
<div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">{{ $t('admin.Close') }}</div>
@@ -96,7 +119,7 @@
<a-spin size="large" />
</div>
</template>
<script>
<script lang="ts">
import {
defineComponent,
ref,
@@ -105,90 +128,114 @@ import {
onMounted,
nextTick,
toRefs,
} from "vue";
import { Https } from "@/tool/https";
import { Modal, message } from "ant-design-vue";
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
import { formatTime, isEmail } from "@/tool/util";
import md5 from "md5";
computed
} from 'vue'
import { Https } from '@/tool/https'
import { Modal, message } from 'ant-design-vue'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'
import { formatTime, isEmail } from '@/tool/util'
import md5 from 'md5'
import { useI18n } from 'vue-i18n'
export default defineComponent({
components: {},
emits: ["searchHistoryList"],
props: {
planOptions: {
type: Array,
default: () => []
}
},
emits: ['searchHistoryList'],
setup(props, { emit }) {
const {t} = useI18n()
const { t } = useI18n()
const { planOptions } = toRefs(props)
// 筛选出状态为 ACTIVE 的订阅计划
const activePlanOptions = computed(() => {
if (!planOptions.value || !Array.isArray(planOptions.value)) {
return []
}
return planOptions.value.filter((plan: any) => plan.status === 'ACTIVE')
})
let operations = reactive({
operationsModal: false,
operationsEdit: false,
loadingShow: false,
title: null,
});
title: null
})
let operationsData = reactive({
accountId: -1,
userName: "",
userEmail: "",
password: "",
oldPassword: "",
credits: "",
});
userName: '',
userEmail: '',
password: '',
oldPassword: '',
credits: '',
subscriptionPlanId: '',
oldSubscriptionPlanId: ''
})
let state = ref([
{
label: "visitor",
value: "0",
label: 'visitor',
value: '0'
},
{
label: "yearly",
value: "1",
label: 'yearly',
value: '1'
},
{
label: "monthly",
value: "2",
label: 'monthly',
value: '2'
},
{
label: "trial",
value: "3",
},
]);
label: 'trial',
value: '3'
}
])
let init = (funStr, data) => {
operations.operationsModal = true;
operations.operationsEdit = true;
operations.title = funStr;
if (funStr.value == "Add") operations.operationsEdit = false;
if (funStr.value == "Edit") {
operationsData.accountId = data.id;
operationsData.userName = data.userName;
operationsData.userEmail = data.userEmail;
operationsData.password = data.userPassword?data.userPassword:null;
operationsData.oldPassword = data.userPassword;
operations.operationsModal = true
operations.operationsEdit = true
operations.title = funStr
if (funStr.value == 'Add') operations.operationsEdit = false
if (funStr.value == 'Edit') {
operationsData.accountId = data.id
operationsData.userName = data.userName
operationsData.userEmail = data.userEmail
operationsData.password = data.userPassword ? data.userPassword : null
operationsData.oldPassword = data.userPassword
// operationsData.validStartTime='2024-08-05T00:00:06'
// operationsData.validEndTime='2024-08-05T00:00:06'
operationsData.credits = data.creditsUsageLimit;
operationsData.credits = data.creditsUsageLimit
operationsData.subscriptionPlanId = data.subscriptionPlanId || ''
operationsData.oldSubscriptionPlanId = data.subscriptionPlanId || ''
// operationsData.accountId = data.accountId
// operationsData.userName = data.userName
// operationsData.userEmail = data.userEmail
// operationsData.validStartTime = formatTime(data.validStartTime)
// operationsData.validEndTime = formatTime(data.validEndTime)
}
};
let focus = (event) => {
if (funStr.value == 'Add') {
operationsData.subscriptionPlanId = ''
operationsData.oldSubscriptionPlanId = ''
}
}
let focus = event => {
if (operationsData.password == operationsData.oldPassword) {
operationsData.password = "";
operationsData.password = ''
}
};
let blur = (event) => {
console.log(operationsData.password == "" && operationsData.oldPassword);
if (operationsData.password == "" && operationsData.oldPassword) {
operationsData.password = operationsData.oldPassword;
}
let blur = event => {
console.log(operationsData.password == '' && operationsData.oldPassword)
if (operationsData.password == '' && operationsData.oldPassword) {
operationsData.password = operationsData.oldPassword
}
};
}
let setAddData = () => {
return {
creditsUsageLimit: operationsData.credits,
userEmail: operationsData.userEmail,
userPassword: operationsData.password?md5(operationsData.password + "abc"):'',
userPassword: operationsData.password ? md5(operationsData.password + 'abc') : '',
userName: operationsData.userName,
};
};
subscriptionPlanId: operationsData.subscriptionPlanId
}
}
let setEditData = () => {
return {
id: operationsData.accountId,
@@ -198,57 +245,63 @@ export default defineComponent({
userPassword:
operationsData.password == operationsData.oldPassword
? null
: md5(operationsData.password + "abc"),
};
};
let cancelDsign = () => {
operationsData.accountId = -1;
operationsData.userName = "";
operationsData.userEmail = "";
operationsData.password = "";
operationsData.credits = "";
operations.operationsModal = false;
};
let setOk = () => {
let data;
if (operations.title?.value == "Add") {
data = setAddData();
if (!isEmail(data.userEmail)) {
message.info(t('admin.jsContent1'));
return;
}
if (
!data.userName ||
!data.userEmail ||
!data.userPassword
)
return message.warning(t('admin.jsContent2'));
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(
(rv) => {
if (rv) {
cancelDsign();
emit("searchHistoryList");
}
}
);
} else {
data = setEditData();
if (!isEmail(data.userEmail)) {
message.info("The email format is incorrect");
return;
}
if (!data.userName || !data.userEmail)
return message.warning("Please check the input box marked with *");
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(
(rv) => {
if (rv) {
cancelDsign();
emit("searchHistoryList");
}
}
);
: md5(operationsData.password + 'abc'),
subscriptionPlanId: operationsData.subscriptionPlanId
}
};
}
let cancelDsign = () => {
operationsData.accountId = -1
operationsData.userName = ''
operationsData.userEmail = ''
operationsData.password = ''
operationsData.credits = ''
operationsData.subscriptionPlanId = ''
operationsData.oldSubscriptionPlanId = ''
operations.operationsModal = false
}
let setOk = () => {
let data
if (operations.title?.value == 'Add') {
data = setAddData()
if (!isEmail(data.userEmail)) {
message.info(t('admin.jsContent1'))
return
}
if (!data.userName || !data.userEmail || !data.userPassword)
return message.warning(t('admin.jsContent2'))
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(rv => {
if (rv) {
cancelDsign()
emit('searchHistoryList')
}
})
} else {
data = setEditData()
if (!isEmail(data.userEmail)) {
message.info('The email format is incorrect')
return
}
if (!data.userName || !data.userEmail || !data.subscriptionPlanId)
return message.warning('Please check the input box marked with *')
const needSwitchPlan =
operationsData.subscriptionPlanId &&
operationsData.subscriptionPlanId !== operationsData.oldSubscriptionPlanId
Https.axiosPost(Https.httpUrls.addOrUpdateSubAccount, data).then(async rv => {
if (rv) {
if (needSwitchPlan) {
await Https.axiosGet(Https.httpUrls.switchSubAccountSubscribePlan, {
params: {
targetSubscriptionPlanId: operationsData.subscriptionPlanId,
subAccId: operationsData.accountId
}
})
}
cancelDsign()
emit('searchHistoryList')
}
})
}
}
return {
...toRefs(operations),
...toRefs(operationsData),
@@ -258,14 +311,16 @@ export default defineComponent({
focus,
blur,
setOk,
};
planOptions,
activePlanOptions
}
},
data() {
return {};
return {}
},
mounted() {},
methods: {},
});
methods: {}
})
</script>
<style lang="less" scoped>
:deep(.allUserPoeration_modal) {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -61,7 +61,7 @@
<model
ref="model"
:key="positionKey"
@addDetail="addDetail"
@canvasReload="canvasReload"
@detailEdit="detailEdit"
@addSketch="()=>isEditPattern.value = ''"
@@ -78,7 +78,16 @@
<div class="item detailRight" :class="{canvas:isEditPattern.value}">
<div class="submit">
</div>
<div class="contentRight" v-if="currentDetailType && !isEditPattern.value">
<div class="contentRight" v-if="currentDetailType === 'sketch' && !selectDetail?.newDetail?.[currentDetailType] && !selectDetail.sketchString && !isEditPattern.value">
<img
style="width: 100%; height: 100%;object-fit: contain;"
:src="
'/image/toolsGuide/' +
(locale == 'ENGLISH' ? 'detailEN' : 'detailCN') +
'.png'
" alt="">
</div>
<div class="contentRight" v-else-if="currentDetailType && !isEditPattern.value">
<detailRight ref="detailRight"></detailRight>
<div class="btn"
v-show="
@@ -102,7 +111,7 @@
</div> -->
</div>
</div>
<addDetails ref="addDetails" @setSloganData="setSloganData"></addDetails>
</a-modal>
<div class="mark_loading" v-show="loadingShow">
<a-spin size="large" />
@@ -128,17 +137,18 @@ import { useI18n } from 'vue-i18n'
import addDetails from '@/component/Detail/addDetails.vue'
export default defineComponent({
components:{
detailLeft,model,detailRight,canvasBox
detailLeft,model,detailRight,canvasBox,addDetails
},
emits:['destroy'],
setup(props,{emit}) {
const store = useStore();
const {locale} = useI18n()
const detailDom = reactive({
model:null,
canvasBox,
detailRight,
detailLeft:null as any,
addDetails:null as any,
})
const userDetail = computed(()=>{
return store.state.UserHabit.userDetail
@@ -506,6 +516,17 @@ export default defineComponent({
sessionStorage.setItem('revocation', JSON.stringify(revocation));
sessionStorage.setItem('oppositeRevocation',JSON.stringify([]));
}
const addDetail = () =>{
let addDetails:any = detailDom.addDetails
addDetails.init(detailData.selectDetail,'')
}
const setSloganData = (data:any)=>{
detailData.selectDetail.sketchString = data
if(detailData.currentDetailType == 'sketch' && detailData.selectDetail?.newDetail?.sketch){
detailData.selectDetail.newDetail.sketch = null
}
}
onMounted(()=>{
window.addEventListener('resize', handleResize);
})
@@ -518,6 +539,7 @@ export default defineComponent({
})
return{
locale,
...toRefs(detailDom),
...toRefs(detailData),
closeModal,
@@ -531,6 +553,8 @@ export default defineComponent({
canvasReload,
modelOnLoad,
sketchSysToLibrary,
addDetail,
setSloganData,
}
},

View File

@@ -6,7 +6,6 @@
<element v-show="currentDetailType == 'element'"></element>
<accessory v-show="currentDetailType == 'accessory'"></accessory>
<models v-show="currentDetailType == 'models'"></models>
<addDetails ref="addDetails" @setSloganData="setSloganData"></addDetails>
</div>
</template>
<script lang="ts">
@@ -22,12 +21,12 @@ import color from './colorBox/index.vue'
import element from './element.vue'
import accessory from './accessory.vue'
import models from './models.vue'
import addDetails from '@/component/Detail/addDetails.vue'
export default defineComponent({
components:{
sketch,print,color,addDetails,element,models,accessory
sketch,print,color,element,models,accessory
},
emit:['addDetail'],
setup(props,{emit}) {
const store = useStore();
const detailData = reactive({
@@ -45,14 +44,7 @@ export default defineComponent({
sketch:null as any,
})
const addDetail = () =>{
let addDetails:any = getDetailListDom.addDetails
addDetails.init(detailData.selectDetail,'')
}
const setSloganData = (data:any)=>{
detailData.selectDetail.sketchString = data
if(detailData.currentDetailType == 'sketch' && detailData.selectDetail?.newDetail?.sketch){
detailData.selectDetail.newDetail.sketch = null
}
emit('addDetail')
}
const sketchSysToLibrary = ()=>{//系统sketch添加到library更新library
getDetailListDom.sketch.sketchSysToLibrary()
@@ -63,7 +55,6 @@ export default defineComponent({
...toRefs(getDetailListData),
...toRefs(getDetailListDom),
addDetail,
setSloganData,
sketchSysToLibrary,
}
},

View File

@@ -350,6 +350,7 @@ export default defineComponent({
margin-top: 1rem;
justify-content: space-between;
align-content: flex-start;
padding-bottom: 2rem;
// &::-webkit-scrollbar{display: none;}
> .content_img_item{
width: calc((50% - 1rem));
@@ -368,9 +369,12 @@ export default defineComponent({
> .material_content_list_loding{
width: 100%;
aspect-ratio: 1/1;
height: 4rem;
overflow: hidden;
> img{
width: 100%;
height: 100%;
object-fit: contain;
}
}
}

View File

@@ -5,7 +5,7 @@
<!-- <img :src="selectDetail?.sketchString?selectDetail?.sketchString:selectDetail.path" alt=""> -->
<img :src="selectDetail.path" alt="">
<!-- <img :src="selectDetail.sketchString || selectDetail.path" alt=""> -->
<i :title="$t('DesignDetail.editSketchTitle')" class="fi fi-rs-pencil-paintbrush" @click.stop="openAddDetail"></i>
<!-- <i :title="$t('DesignDetail.editSketchTitle')" class="fi fi-rs-pencil-paintbrush" @click.stop="openAddDetail"></i> -->
</div>
<div class="select_sketch" v-else>
<div>

View File

@@ -14,6 +14,7 @@
<i class="icon iconfont icon-chehui" @click="revocation"></i>
<i class="icon iconfont icon-fanchehui" @click="oppositeRevocation"></i>
<!-- 编辑 -->
<i class="fi fi-rs-pencil-paintbrush" :title="$t('DesignDetail.editSketchTitle')" :class="{'pointerEventsNone':!selectDetail?.id}" @click="()=>$emit('addDetail')"></i>
<i class="fi fi-rr-edit" :title="$t('DesignDetail.editTitle')" :class="{active:isEditPattern.value == 'canvasEditor','pointerEventsNone':!selectDetail?.id}" @click="showDesignImgDetail('canvasEditor')"></i>
<i class="icon iconfont icon-clothes" :title="$t('Canvas.editFrontBack')" style="font-size: 3.2rem;" @click="showDesignImgDetail('redGreenExample')" :class="{active:isEditPattern.value == 'redGreenExample','pointerEventsNone':!selectDetail?.id}"></i>
@@ -50,7 +51,7 @@ export default defineComponent({
components:{
position,modelNav
},
emits:['detailEdit','canvasReload','addSketch','revocation','oppositeRevocation','modelOnLoad','sketchSysToLibrary'],
emits:['detailEdit','canvasReload','addSketch','revocation','oppositeRevocation','modelOnLoad','sketchSysToLibrary','addDetail'],
setup(props,{emit}) {
const {t} = useI18n()
const store = useStore();

View File

@@ -1379,6 +1379,7 @@ export default defineComponent({
display: flex;
align-items: center;
justify-content: center;
position: absolute;
}
img {
// width: calc(10rem*1.2);

View File

@@ -34,8 +34,8 @@
</div>
</div>
<div class="layout_centent" :class="{active:flex_direction}" id="layoutCentent">
<div v-for="item,index in layoutList" :key="item" :class="moodbClassName[index]" class="modal_imgItem" v-layout="item" @mousedown="setpitch(item,index)" @touchstart="setpitch(item,index)" ref="content" >
<img crossOrigin="anonymous" :src="item.imgUrl" :style="{'transform':`translate(-50%, -50%) scale(${item.zoom?item.zoom:1}) rotateZ(${item.angle?item.angle:0}deg)`}" draggable="false" :class="moodbClassName[index]" v-modelImg>
<div v-for="item,index in layoutList" :key="item" :class="moodbClassName[index]" class="modal_imgItem" v-layout="item" @mousedown="setpitch(item,index)" @touchstart="setpitch(item,index)" ref="content" :style="{'background-image':`url(${item.imgUrl})`,'transform':`scale(${item.zoom?item.zoom:1}) rotateZ(${item.angle?item.angle:0}deg)`}">
<!-- <img crossOrigin="anonymous" :src="item.imgUrl" :style="{'transform':`translate(-50%, -50%) scale(${item.zoom?item.zoom:1}) rotateZ(${item.angle?item.angle:0}deg)`}" draggable="false" :class="moodbClassName[index]" v-modelImg> -->
<ul v-show="item.setPitch" class="layout_btn" >
<li class="layout_btn_top" v-compile.stop="'top'"></li>
<li class="layout_btn_bottom" v-compile.stop="'bottom'"></li>
@@ -736,6 +736,7 @@ export default defineComponent({
setmoodb(item:any){
this.moodbClassName = item
this.$emit('setmoodbClass',this.moodbClassName)
this.styleObj.class = this.moodbClassName
if(this.content){
for (item of (this.content as any)) {
item.classList.remove('active')
@@ -772,7 +773,7 @@ export default defineComponent({
initDomStyle(){
nextTick(()=>{
this.content.forEach((item:any,index:any) => {
if(this.styleObj.domStyle[index]){
if(this.styleObj.domStyle[index]?.left){
item.classList.add('active')
this.initStyle(item,this.styleObj.domStyle[index])
}
@@ -794,7 +795,7 @@ export default defineComponent({
})
},
initStyle(dom:any,style:any){
if(!style)return
if(!style || !dom)return
for (const [property, value] of Object.entries(style)) {
dom.style.setProperty(property, value);
@@ -806,7 +807,7 @@ export default defineComponent({
this.styleObj.domStyle.push(this.setStyle(item.style))
this.domObj.dom.forEach((domName:any,index:any) => {
let style = this.domObj.domStyle[index]
let dom = item.querySelector(domName)
let dom = item.querySelector(domName) || item
this.styleObj[style].push(this.setStyle(dom.style))
})
});
@@ -840,7 +841,6 @@ export default defineComponent({
let config:any = {headers:{'Content-Type':'multipart/form-data','Accept':'*/*' }}
Https.axiosPost(Https.httpUrls.elementUpload,param,config)
.then((rv: any) => {
// console.log(rv);
rv.imgUrl = rv.url
this.layout = false
this.loadingShow = false
@@ -1062,27 +1062,12 @@ export default defineComponent({
// height: 100%;
// }
overflow: hidden;
background-repeat: no-repeat;
background-position: center;
background-size: cover;
&.active{
position: absolute;
}
img{
// object-fit: cover;
// width: 100%;
// height: 100%;
pointer-events: none;
float: left;
user-select:none;
-webkit-user-drag: none;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%) scale(1);
}
::selection {
// background: rgba(0,0,0,0);
// background: yellow;
}
}
}
.wh1{

File diff suppressed because it is too large Load Diff

View File

@@ -41,7 +41,7 @@
<i v-else class="fi fi-br-check" @click="editChek('brandSlogan')"></i>
</div>
</div>
<div class="compute" style="flex:1;text-align: right;" v-show="fall?.list?.length > 0">
<div class="compute" style="margin-left: auto;text-align: right;" v-show="fall?.list?.length > 0">
<!-- <div @click="setProgress(50)">123123123</div> -->
<div class="gallery_btn" @click="compute" :class="{'loading':!(schedule.num == 1||(schedule.num == 0 && !schedule.state))}">
{{$t('brandDNA.Compute')}}
@@ -546,6 +546,7 @@ export default defineComponent({
}
.gallery_btn{
&.loading{
width: min-content;
pointer-events: none;
color: #5F5F5F;
}

View File

@@ -6,7 +6,7 @@
<!-- <div class="icon" @click="toGmailLogin"> -->
<div class="icon">
<img src="@/assets/images/loginPage/gmailIcon.svg" alt="">
<span>{{ $props.text }}</span>
<span>{{ displayText }}</span>
</div>
</div>
</template>
@@ -21,7 +21,7 @@
props: {
text: {
type: String,
default: 'Sign in with Google'
default: ''
}
},
setup(props, { emit }) {
@@ -108,6 +108,9 @@
const toGmailLogin = ()=>{
message.info(t('account.canNotUtilize'))
}
const displayText = computed(() => {
return props.text || t('Login.LoginWithGoogle')
})
onBeforeUnmount(()=>{
var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`);
if(existingScript){
@@ -120,6 +123,7 @@
})
return {
toGmailLogin,
displayText,
}
},
})

View File

@@ -553,13 +553,14 @@ export default defineComponent({
loginType: "EMAIL",
userId: this.userId,
};
this.$emit('update:isMask',true)
this.store.commit('set_loading', true)
Https.axiosPost(Https.httpUrls.accountLogin, data)
.then((rv: any) => {
this.setSuccessLogin(rv);
this.setSuccessLogin(rv);
this.store.commit('set_loading', false)
})
.catch((res) => {
this.$emit('update:isMask',false)
this.store.commit('set_loading', false)
});
},1000)
},

View File

@@ -2,7 +2,7 @@
<div class="Container">
<div class="icon" @click="openWeiXinModel">
<img src="@/assets/images/loginPage/weiXinIcon.svg" alt="" />
<span>{{ $props.text }}</span>
<span>{{ displayText }}</span>
</div>
<weiXinModel ref="weiXinModel"></weiXinModel>
</div>
@@ -18,6 +18,7 @@ import {
toRefs,
} from "vue";
import weiXinModel from "./weiXinModel.vue";
import { useI18n } from 'vue-i18n'
export default defineComponent({
name: "login",
components: {
@@ -26,20 +27,25 @@ export default defineComponent({
props: {
text: {
type: String,
default: "Sign in with Wechat",
default: ''
},
},
setup() {
setup(props) {
let weiXinDom = reactive({
weiXinModel: null,
});
const { t } = useI18n()
const openWeiXinModel = () => {
weiXinDom.weiXinModel.init();
};
const displayText = computed(() => {
return props.text || t('Login.LoginWithWechat')
})
onMounted(() => {});
return {
...toRefs(weiXinDom),
openWeiXinModel,
displayText,
};
},
});

View File

@@ -113,8 +113,8 @@
<img v-for="item in scaleImageData?.designPythonOutfitList" v-lazy="item.designUrl">
</div>
</div>
<div v-if="userDetail.systemList.indexOf(1) > -1 && scaleImageData.isMine != 1 && scaleImageData.selected != 1 && scaleImageData.openSource != 0" class="started_btn" @click="setChoose" >{{$t('newScaleImage.SecondaryCreation')}}</div>
<!-- <div v-if="systemUser.value == 1 && scaleImageData.isMine != 1 && scaleImageData.selected != 1" class="started_btn" @click="setChoose" :title="systemUser.value != 1?$t('newScaleImage.jsContent1'): scaleImageData.openSource == 0?$t('newScaleImage.jsContent2'):''" :class="{active:systemUser.value != 1?true:scaleImageData.openSource == 0}">{{$t('newScaleImage.SecondaryCreation')}}</div> -->
<!-- <div v-if="userDetail.systemList.indexOf(1) > -1 && scaleImageData.isMine != 1 && scaleImageData.selected != 1 && scaleImageData.openSource != 0" class="started_btn" @click="setChoose" >{{$t('newScaleImage.SecondaryCreation')}}</div> -->
<div v-if="userDetail.systemList.indexOf(1) > -1 && scaleImageData.openSource != 0" class="started_btn" @click="setChoose" >{{$t('newScaleImage.SecondaryCreation')}}</div>
</div>
<div v-else class="newScaleImage_right_content_generate">
<div class="scaleImage_chunk_item content_left_generate_item">
@@ -276,7 +276,6 @@ import { Modal,message } from "ant-design-vue";
import { useI18n } from 'vue-i18n';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import fullScreenImg from '@/component/HomePage/fullScreenImg.vue'
import { debounce } from 'lodash-es'
export default defineComponent({
components:{fullScreenImg},
@@ -438,25 +437,36 @@ export default defineComponent({
})
}
let setChoose = debounce(async()=>{
if(userDetail.value.systemList.indexOf(1) == -1){
return message.info(t('newScaleImage.jsContent1'))
}
let flag = true
let setChoose = async()=>{
if(!flag) return
flag = false
try {
if(userDetail.value.systemList.indexOf(1) == -1){
message.info(t('newScaleImage.jsContent1'))
return
}
const targetDate = new Date('2025-09-01T00:00:00');
// 解析输入日期字符串
const inputDate = new Date(imgData.scaleImageData.createDate);
if(inputDate < targetDate){
return message.info(t('newScaleImage.jsContent2'))
}
if(imgData.scaleImageData.openSource == 0){
return message.info(t('newScaleImage.jsContent2'))
}
let id = await getWorks(imgData.scaleImageData.id)
router.push(`/home/history/${id}`)
// router.push({name:'home',params: {id:imgData.scaleImageData.id,type:'Works'}})
store.commit('setChooseIsDesign',false)
},300)
const targetDate = new Date('2025-09-01T00:00:00');
// 解析输入日期字符串
const inputDate = new Date(imgData.scaleImageData.createDate);
if(inputDate < targetDate){
message.info(t('newScaleImage.jsContent2'))
return
}
if(imgData.scaleImageData.openSource == 0){
message.info(t('newScaleImage.jsContent2'))
return
}
store.state.Workspace.cachedRoutes = [];
let id = await getWorks(imgData.scaleImageData.id)
await router.push(`/home/history/${id}`)
store.commit('setChooseIsDesign',false)
} finally {
// 函数执行完成后恢复为 true确保无论成功还是失败都能再次点击
flag = true
}
}
let setCommentReply = (value:any,str:any)=>{
imgData.commentReply.leve1Id = value.id

View File

@@ -132,8 +132,8 @@
</div>
<div class="modal_img_max">
<div v-if="!modalImg[0]?.id" class="modal_img" id="modal_img" :class="{active:flex_direction}">
<div v-for="item,index in layoutList" :class="[moodb_className[index]]" class="modal_imgItem">
<img :src="item.imgUrl" v-modelImg>
<!-- <div class="modal_img" id="modal_img" :class="{active:flex_direction}"> -->
<div v-for="item,index in layoutList" :class="[moodb_className[index]]" :style="{'background-image':`url(${item.imgUrl})`}" class="modal_imgItem">
</div>
</div>
<div v-else class="modal_img">
@@ -244,30 +244,6 @@ export default defineComponent({
this.token = getCookie("token") || "";
this.uploadUrl = getUploadUrl();
},
directives:{
modelImg:{
mounted(el) {
let parentNode = el.parentNode
if(parentNode.offsetHeight >= parentNode.offsetWidth){
el.style.height = 100+'%'
el.style.width = 'auto'
}else{
el.style.width = 100+'%'
el.style.height = 'auto'
}
},
updated (el) {
let parentNode = el.parentNode
if(parentNode.offsetHeight >= parentNode.offsetWidth){
el.style.height = 100+'%'
el.style.width = 'auto'
}else{
el.style.width = 100+'%'
el.style.height = 'auto'
}
}
}
},
methods: {
open(num: Number) {
this.openClick = num;
@@ -445,7 +421,7 @@ export default defineComponent({
}
}
this.edieShow = true
if(this.moodb_[arr.length-1].length == 2){
if(this.moodb_[arr.length-1].length == 1){
this.moodb_className = this.moodb_[arr.length-1][0]
}else{
this.moodb_className = this.moodb_[arr.length-1][random]
@@ -628,6 +604,7 @@ export default defineComponent({
height: calc(5rem*1.2);
overflow-x: hidden;
display: flex;
&.modal_img::-webkit-scrollbar {
display: none;
}
@@ -706,16 +683,9 @@ export default defineComponent({
position: relative;
overflow: hidden;
text-align: center;
img{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
float: left;
object-fit: contain;
user-select:none;
-webkit-user-drag: none;
}
background-repeat: no-repeat;
background-position: center;
background-size: cover;
}
.wh1{
width: 23%;

View File

@@ -242,7 +242,16 @@
</div>
</div>
<div class="prompt-input-container" v-show="!showMotion">
<div class="title">{{ $t('ProductImg.Prompt') }}</div>
<div class="title">
<span>{{ $t('ProductImg.Prompt') }}</span>
<SvgIcon
class="cursor-icon"
@click="handleNavigateHelp"
name="CHelpFlip"
size="18"
color="#000"
/>
</div>
<promptInput :content="prompt" ref="promptInputRef" />
</div>
<div class="transferPose" v-show="showMotion">
@@ -380,7 +389,7 @@
<a-spin size="large" />
</div>
<template>
<Prompt v-if="scaleImageList[scaleImageIndex]?.resultType === 'ToProductImage'" v-model:showModal="showPromptAssist" isDesignPage />
<Prompt v-if="scaleImageList[scaleImageIndex]?.resultType === 'ToProductImage'" v-model:showModal="showPromptAssist" />
<PromptEditProduct v-if="scaleImageList[scaleImageIndex]?.resultType === 'Relight'" v-model:showModal="showPromptAssist" />
</template>
<Product
@@ -450,7 +459,7 @@ export default defineComponent({
let userDetail: any = computed(() => {
return store.state.UserHabit.userDetail
})
let { t } = useI18n()
let { t, locale } = useI18n()
const textareaRef = useTemplateRef<HTMLTextAreaElement>('textareaRef')
const videoType = ref(2)
const showMotion = computed(() => videoType.value === 1)
@@ -599,13 +608,13 @@ export default defineComponent({
})
const showPromptAssist = ref(false)
const handleClickAssistBtn = () => {
const { httpType } = store.state.Workspace.probjects
const isSingleDesign = httpType === 'SINGLE_DESIGN'
if (!isSingleDesign) {
const promptText = t('ProductImg.Series')
productimg.productimgSearchName = promptText
return
}
// const { httpType } = store.state.Workspace.probjects
// const isSingleDesign = httpType === 'SINGLE_DESIGN'
// if (!isSingleDesign) {
// const promptText = t('ProductImg.Series')
// productimg.productimgSearchName = promptText
// return
// }
showPromptAssist.value = true
}
@@ -1310,7 +1319,13 @@ export default defineComponent({
return videoType.value === 3 ? false : true
}
})
const handleNavigateHelp = () => {
const url =
locale === 'CHINESE_SIMPLIFIED'
? 'https://aida-user-manual-chinese.super.site/2b08f755cedd80a985cffdf2af80c538'
: 'https://aida-user-manual.super.site/advanced-tool/animated-product-image/to-product-video-prompt-assist '
window.open(url,'_blank')
}
onBeforeUnmount(() => {
clearInterval(prductimgTime)
clearInterval(remPrductimgTime)
@@ -1374,7 +1389,8 @@ export default defineComponent({
handlePlayNewVideo,
isNewVideoPlaying,
showDropdown,
inputPlaceholder
inputPlaceholder,
handleNavigateHelp
}
},
data() {
@@ -1786,12 +1802,16 @@ export default defineComponent({
:deep(.promptInput) {
box-sizing: border-box;
}
.title {
font-weight: 500;
color: #000;
font-size: 1.7rem;
margin-bottom: 1.4rem;
}
.title {
display: flex;
align-items: center;
column-gap: 1rem;
.cursor-icon {
display: flex;
width: auto;
cursor: pointer;
}
}
}
.prompt-container {
margin-top: 4rem;

View File

@@ -7,7 +7,7 @@
<!-- <div v-show="openType === 'history'" class="function">
<design :key="componentKey" ref="design"></design>
</div> -->
<router-view v-if="
<router-view v-show="
(openType && openType != 'history' && !routeQuery.id) ||
$route.path != '/home'"
@setTask="setTask"
@@ -23,7 +23,7 @@
<!-- <div v-else-if="routeQuery.id" class="function">
<design :key="componentKey" ref="design"></design>
</div> -->
<div v-else-if="!routeQuery.history" class="function">
<div v-if="!$route.params.id && !routeQuery.id" class="function">
<newPorject ref="newPorject" @newProject=newProject></newPorject>
</div>
<!-- <iframe src="https://kaput-relative-4bb.notion.site/ebd/22a8f755cedd809e98a2c8c6366ee701" width="100%" height="100%" frameborder="0" allowfullscreen /> -->
@@ -55,13 +55,16 @@ export default defineComponent({
const data = reactive({
openType:'',
componentKey:null,
isShowMark:false,
isShowMark:true,
routeQuery:{} as any,
selectObject:computed(()=>store.state.Workspace.probjects) as any,//选择的项目
chatData:null as any,
dataLoad:true as any,
cachedRoutes:computed(()=>store.state.Workspace.cachedRoutes),//
})
onMounted(()=>{
data.isShowMark = false
})
let settingGetHistory:any = inject('settingGetHistory')
const setIsShowMark = (boolean:boolean)=>{
data.isShowMark = boolean

View File

@@ -38,7 +38,7 @@
</div>
<div class="style marginBottom" v-if="show.style">
<div class="text">{{$t('Habit.Style')}}</div>
<div class="center">{{ selectObject?.styleName?selectObject?.styleName:'All' }}</div>
<div class="center">{{ selectObject?.styleName?selectObject?.styleName:$t('Header.All') }}</div>
<div class="gallery_btn" @click="setStyle">{{ $t('Habit.Select') }}</div>
</div>
<div class="style brand marginBottom">

View File

@@ -777,6 +777,7 @@ export default defineComponent({
})
}
const likeSetBtn = (id: any, str: string) => {
console.log(1111)
data.likeList.forEach((item: any, index: any) => {
if (item.id == id && id) {
if (str == 'zoom') {
@@ -814,6 +815,7 @@ export default defineComponent({
let likeFile = (item: any, str: any, index: any) => {
let url
let value = {}
console.log(props.isDesignPage)
if (str == 'like') {
value = {
likeOrDislike: 'like',
@@ -1669,7 +1671,7 @@ export default defineComponent({
.ant-upload-select-picture-card {
width: 100%;
height: 100%;
border: 1px solid #000;
border: 0.1rem solid #000;
background: #fff;
}
}

View File

@@ -65,7 +65,7 @@ defineExpose({
<style lang="less" scoped>
.promptInput {
--promptInputBorderRadius: 10px;
--promptInputBorder: 2px solid #dcdfe6;
--promptInputBorder: 1px solid #000;
--promptInputPadding: 1.5rem;
width: 100%;
@@ -86,7 +86,7 @@ defineExpose({
.sender-container {
position: relative;
border-radius: 10px;
border: 2px solid #dcdfe6;
border: 1px solid #000;
padding: 1.5rem;
font-size: 1.8rem;
.sender-wrapper {
@@ -100,7 +100,7 @@ defineExpose({
.textarea-container {
position: relative;
border-radius: 10px;
border: 2px solid #dcdfe6;
border: 1px solid #000;
padding: 1.5rem;
height: auto;
font-size: 1.8rem;

View File

@@ -121,7 +121,7 @@ const promptList = computed(() => {
return [t('ProductImg.UploadWithoutModel'), t('ProductImg.UploadWithModel')]
} else {
// 如果是从design来的
if (isSingleDesign) {
if (props.isDesignPage) {
// SINGLE_DESIGN: 两个提示词
// 根据年龄和性别选择对应的提示词
let firstPrompt: string // 不带模特的提示词
@@ -255,8 +255,8 @@ const exampleList = computed(() => {
}
} else {
const { ageGroup, httpType, sex } = store.state.Workspace.probjects
const isSingleDesign = httpType === 'SINGLE_DESIGN'
if (!isSingleDesign) return {}
// const isSingleDesign = httpType === 'SINGLE_DESIGN'
// if (!isSingleDesign) return {}
const isAdult = ageGroup === 'Adult'
const isFemale = sex === 'Female'
if (isAdult) {

View File

@@ -1101,13 +1101,13 @@ export default defineComponent({
const showPromptAssist = ref(false)
const handleClickAssistBtn = () => {
const { httpType } = store.state.Workspace.probjects
const isSingleDesign = httpType === 'SINGLE_DESIGN'
if (props.isDesignPage && !isSingleDesign) {
const promptText = t('ProductImg.Series')
productImgData.searchName[props.productimgMenu.value] = promptText
return
}
// const { httpType } = store.state.Workspace.probjects
// const isSingleDesign = httpType === 'SINGLE_DESIGN'
// if (props.isDesignPage && !isSingleDesign) {
// const promptText = t('ProductImg.Series')
// productImgData.searchName[props.productimgMenu.value] = promptText
// return
// }
showPromptAssist.value = true
}
@@ -1250,13 +1250,15 @@ export default defineComponent({
> .item {
margin-right: 1rem;
width: calc(100% / 2 - 0.5rem);
// width: calc(100% / 2 - 0.5rem);
// height: 25rem;
width: 12.7rem;
height: 17.8rem;
cursor: pointer;
overflow: hidden;
display: flex;
justify-content: center;
flex-shrink: 0;
height: 25rem;
position: relative;
// &.active{
// border: 2px solid;
@@ -1532,6 +1534,9 @@ export default defineComponent({
.ant-upload-select-picture-card {
width: 12.7rem;
height: 17.8rem;
border-width: 1px;
background: #fff;
border: 0.1rem solid #000;
}
}
}

View File

@@ -106,12 +106,12 @@ export default defineComponent({
Yearly: '年度',
monthly: [
{
title: '免费版',
title: '试用版',
img: CChargeIcon,
type: 'personal',
info: '您的AI时尚设计助手',
price: 'HK$0',
detail: '5天·50积分',
detail: '自注册之日起 5 天内 · 50 个积分',
highlight: '',
discounts: '9折优惠',
detailList: [
@@ -185,12 +185,12 @@ export default defineComponent({
],
yearl: [
{
title: '免费版',
title: '试用版',
img: CChargeIcon,
type: 'personal',
info: '您的AI时尚设计助手',
price: 'HK$0',
detail: '5天·50积分',
detail: '自注册之日起 5 天内 · 50 个积分',
highlight: '',
discounts: '9折优惠',
detailList: [
@@ -250,12 +250,12 @@ export default defineComponent({
Yearly: 'Yearly',
monthly: [
{
title: 'Free',
title: 'Trial',
img: CChargeIcon,
type: 'personal',
info: 'Your AI Fashion Design Assistant',
price: 'HK$0',
detail: '5 days · 50 credits',
detail: '5 days from sign-up · 50 credits',
highlight: '',
discounts: '10% off',
detailList: [
@@ -329,12 +329,12 @@ export default defineComponent({
],
yearl: [
{
title: 'Free',
title: 'Trial',
img: CChargeIcon,
type: 'free',
type: 'personal',
info: 'Your AI Fashion Design Assistant',
price: 'HK$0',
detail: '5 days · 50 credits',
detail: '5 days from sign-up · 50 credits',
highlight: '',
discounts: '10% off',
detailList: [

View File

@@ -453,7 +453,8 @@ export default {
jsContent4: '图片必须小于5MB',
jsContent5: '图片已经上传是否继续上传',
jsContent6: '输入的内容超过允许输入的最大长度',
jsContent7: '请输入内容~'
jsContent7: '请输入内容~',
jsContent8: '请输入项目名字~'
},
ModelPlacement: {
Registration: '新增模特',
@@ -1529,7 +1530,21 @@ export default {
Relight: '打光',
ChatRobot: '对话生成',
Yes: '是',
No: '否'
No: '否',
SubscribePlan: '订阅计划',
SwitchPlanSuccess: '切换订阅计划成功',
SwitchPlanFailed: '切换订阅计划失败',
NoPlanSelected: '请先选择订阅计划',
PlanNameRequired: '请输入计划名称',
PlanNotFound: '计划不存在',
RenamePlanSuccess: '重命名成功',
RenamePlanFailed: '重命名失败',
RenamePlan: '重命名订阅计划',
PlanName: '计划名称',
InputPlanName: '请输入计划名称',
Cancel: '取消',
SelectPlan: '选择计划',
AllPlan: '全部'
},
Login: {
Login: '登录',
@@ -1542,11 +1557,13 @@ export default {
LoginMethod: '使用以下方式登录:',
Individual: '个人账号',
Academic: '学术账号',
LogoOnToAiDA: '登录到AiDA 3.1',
LogonToAiDA: '登录到AiDA 3.1',
Infomation: '请填写以下信息',
Device: '请使用iPad或电脑登录',
AgreePolicies: '请勾选条款、隐私政策和费用',
PasswordConditions: '您必须满足所有密码条件才能注册'
PasswordConditions: '您必须满足所有密码条件才能注册',
LoginWithGoogle: '使用谷歌账号登录',
LoginWithWechat: '使用微信登录',
},
LoginPersonal: {
Email: '邮箱',

View File

@@ -466,7 +466,8 @@ export default {
jsContent4: 'Image must smaller than 5MB!',
jsContent5: 'This picture has been uploaded whether to continue uploading',
jsContent6: 'The entered content exceeds the maximum length.',
jsContent7: 'Please enter content'
jsContent7: 'Please enter content',
jsContent8: 'Please enter the project name.'
},
ModelPlacement: {
Registration: 'Registration',
@@ -958,7 +959,7 @@ export default {
MOSTPOPULAR: 'MOST POPULAR',
Monthly: 'Monthly',
Yearly: 'Yearly',
promotionCode: 'Coupon',
promotionCode: 'Coupon Code',
use: 'Apply',
PromoCodeError:
'Please check if the promo code is correct or if the date has expired',
@@ -1573,7 +1574,21 @@ export default {
Relight: 'Relight',
ChatRobot: 'ChatRobot',
Yes: 'Yes',
No: 'No'
No: 'No',
SubscribePlan:'Subscribe Plan',
SwitchPlanSuccess: 'Switch subscription plan successfully',
SwitchPlanFailed: 'Failed to switch subscription plan',
NoPlanSelected: 'Please select a subscription plan first',
PlanNameRequired: 'Please enter plan name',
PlanNotFound: 'Plan not found',
RenamePlanSuccess: 'Rename successfully',
RenamePlanFailed: 'Failed to rename',
RenamePlan: 'Rename Subscription Plan',
PlanName: 'Plan Name',
InputPlanName: 'Please enter plan name',
Cancel: 'Cancel',
SelectPlan: 'Select Plan',
AllPlan:'All'
},
Login: {
Login: 'Login',
@@ -1590,7 +1605,9 @@ export default {
Infomation: 'Please fill your information below',
Device: 'If you need to design, please log in using an iPad or computer.',
AgreePolicies: 'Please agree to all terms, privacy policy, and fees.',
PasswordConditions: 'You must satisfy ALL password conditions to register.'
PasswordConditions: 'You must satisfy ALL password conditions to register.',
LoginWithGoogle: 'Sign in with Google',
LoginWithWechat: 'Sign in with Wechat',
},
LoginPersonal: {
Email: 'Email',

View File

@@ -290,6 +290,13 @@ const routes: Array<RouteRecordRaw> = [
component: () =>
import("@/component/Administrator/organization/organization.vue"),
},
{
path: "subscriptionPlan",
name: "subscriptionPlan",
meta: { enter: 3 },
component: () =>
import("@/component/Administrator/subscriptionPlan.vue"),
},
//企业版教育管理员页面
{
path: "allUserSE",
@@ -498,12 +505,17 @@ function isTimeRangePassed(timeRange) {
}
router.beforeEach((to: any, from, next) => {
store.commit("set_view_loading", true);
//系统维护时间
const time = '2025-11-21T23:00:00 - 2025-11-22T00:00:00';
const time = '2025-12-19T21:00:00 - 2025-12-19T22:00:00';
if (isTimeRangePassed(time) == 'in_progress') {
// 系统维护
const toName = to.name === 'upgrade';
if(upgradeList.indexOf(to.path) > -1){
if(to.query.status == 'admin'){
localStorage.setItem('isAdminVisit', 'true')
}
const isAdminVisit = localStorage.getItem('isAdminVisit') == 'true'
if(upgradeList.indexOf(to.path) > -1 || isAdminVisit){
next();
}else{
if (toName) {
@@ -513,6 +525,7 @@ router.beforeEach((to: any, from, next) => {
}
}
} else {
localStorage.setItem('isAdminVisit', 'false')
// 机房用户
let herfData = window.location.search.substring(1);
@@ -540,5 +553,7 @@ router.beforeEach((to: any, from, next) => {
// if(systemUser == 0){//游客用户只能进入这两个页面
});
router.afterEach((to, from) => {
store.commit("set_view_loading", false);
});
export default router;

View File

@@ -13,10 +13,22 @@ export interface RootState{
export default createStore<RootState>({
state: {
loading: false,
dataLoading: true,
view_loading: false,
},
getters: {
},
mutations: {
set_loading(state, v){
state.loading = v;
},
set_view_loading(state, v){
state.view_loading = v;
},
set_dataLoading(state, v){
state.dataLoading = v;
},
},
actions: {
},

View File

@@ -80,12 +80,14 @@ const userHabit : Module<UserHabit,RootState> = {
systemList:[],
expireTime:null,
language:'',
organizationId: null,
timeData:{
isExpiration:false,
text:''
},
subscriptionType:null,
subscriptionId:null,
subscriptionPlanId:null,
usernameModify:0,
occupation:'',//职业
country:'',//国家
@@ -195,12 +197,14 @@ const userHabit : Module<UserHabit,RootState> = {
systemList:[],
expireTime:null,
language:'',
organizationId: null,
timeData:{
isExpiration:false,
text:''
},
subscriptionType:null,
subscriptionId:null,
subscriptionPlanId:null,
//是否是affiliate用户
affiliate:false,
usernameModify:0,
@@ -230,6 +234,7 @@ const userHabit : Module<UserHabit,RootState> = {
state.userDetail.avatar = data.avatar//头像
state.userDetail.country = data.country//头像
state.userDetail.occupation = data.occupation//头像
state.userDetail.organizationId = data.organizationId //所属组织
state.userDetail.usernameModify = data.usernameModify//当月剩余修改次数
state.userDetail.isBeginner = data.isBeginner == 1 ? true : false;//是否完成新手指引
state.userDetail.title = data.title//当月剩余修改次数
@@ -315,6 +320,7 @@ const userHabit : Module<UserHabit,RootState> = {
state.userDetail.status = data.status//当前订阅类型
// state.userDetail.status = data.status || 'active'//当前订阅类型
state.userDetail.subscriptionId = data.subscriptionId//最新订阅id
state.userDetail.subscriptionPlanId = data.subscriptionPlanId//最新订阅计划id
},
setUpgradePlan(state,data){
state.upgradePlan.value = data

View File

@@ -177,6 +177,12 @@ const all = (t)=>{
route:'/administrator/organization',
key:'sub13',
isShow:true,
},{
name:'Subscription Plan',
icon:'usetime',
route:'/administrator/subscriptionPlan',
key:'sub14',
isShow:true,
}]
}
const schoolOrEnterprise = (t) =>{

View File

@@ -130,377 +130,384 @@ axios.interceptors.response.use((res) =>{
return Promise.reject(data_new);
});
export const Https = {
httpUrls: {
interfaceUrl: '',
parseGoogleCredential:'/api/third/party/parseGoogleCredential',//谷歌登录注册
parseWeChatCode:'/api/third/party/parseWeChatCode',//微信登录
accountIsLogin:'/api/account/isLogin', //判断用户是否登录
accountLogin:`/api/account/login`, //账号密码登录接口
organizationNameSearch:`/api/account/organizationNameSearch`, //查询学校或者企业版名字
getUserLanguage:`/api/account/getUserLanguage`, //获取当前用户语言
changeUserLanguage:`/api/account/changeUserLanguage`, //切换用户当前语言
uploadAvatar:`/api/account/uploadAvatar`, //修改头像
editUserName:`/api/account/editUserName`, //修改用户名
updateUserInfo:`/api/account/updateUserInfo`, //修改国家职业
accountDetail:`/api/account/getAccountDetail`, //用户详细信息
httpUrls: {
interfaceUrl: '',
parseGoogleCredential: '/api/third/party/parseGoogleCredential', //谷歌登录注册
parseWeChatCode: '/api/third/party/parseWeChatCode', //微信登录
accountIsLogin: '/api/account/isLogin', //判断用户是否登录
accountLogin: `/api/account/login`, //账号密码登录接口
organizationNameSearch: `/api/account/organizationNameSearch`, //查询学校或者企业版名字
getUserLanguage: `/api/account/getUserLanguage`, //获取当前用户语言
changeUserLanguage: `/api/account/changeUserLanguage`, //切换用户当前语言
uploadAvatar: `/api/account/uploadAvatar`, //修改头像
editUserName: `/api/account/editUserName`, //修改用户名
updateUserInfo: `/api/account/updateUserInfo`, //修改国家职业
accountDetail: `/api/account/getAccountDetail`, //用户详细信息
trialUserLogout:`/api/account/trialUserLogout`, //试用用户退出登录接口
completeGuidancet:`/api/account/completeGuidance`, //用户指引结束
trialUserLogout: `/api/account/trialUserLogout`, //试用用户退出登录接口
completeGuidancet: `/api/account/completeGuidance`, //用户指引结束
getExpiredTime:`/api/account/getExpiredTime`, //获取用户到期时间
getExpiredTime: `/api/account/getExpiredTime`, //获取用户到期时间
addNoLoginRequired:`/api/third/party/addNoLoginRequired`, //机房用户注册
deleteNoLoginRequired:`/api/third/party/deleteNoLoginRequired`, //机房用户注销
noLoginRequired:`api/account/noLoginRequired`, //机房用户登录
existNoLoginRequired:`/api/third/party/existNoLoginRequired`, //获取唯一标识是否存在
addNoLoginRequired: `/api/third/party/addNoLoginRequired`, //机房用户注册
deleteNoLoginRequired: `/api/third/party/deleteNoLoginRequired`, //机房用户注销
noLoginRequired: `api/account/noLoginRequired`, //机房用户登录
existNoLoginRequired: `/api/third/party/existNoLoginRequired`, //获取唯一标识是否存在
deleteNoLoginRequiredNew:`/api/third/party/deleteNoLoginRequiredNew`, //机房用户注销
addNoLoginRequiredNew:`api/third/party/addNoLoginRequiredNew`, //机房用户注册
updateNoLoginRequiredNew:`api/third/party/updateNoLoginRequiredNew`, //机房用户更新
endpoint:`api/third/party/your-secured-endpoint`, //获取唯一标识是否存在
deleteNoLoginRequiredNew: `/api/third/party/deleteNoLoginRequiredNew`, //机房用户注销
addNoLoginRequiredNew: `api/third/party/addNoLoginRequiredNew`, //机房用户注册
updateNoLoginRequiredNew: `api/third/party/updateNoLoginRequiredNew`, //机房用户更新
designWorksRegister:'/api/account/designWorksRegister', //注册
designWorksRegisterCode:'/api/account/designWorksRegisterCode', //注册
endpoint: `api/third/party/your-secured-endpoint`, //获取唯一标识是否存在
preLogin:'/api/account/preLogin',//预先登入
schoolLogin:'/api/account/schoolLogin',//学校管理员登录
enterpriseLogin:'/api/account/enterpriseLogin',//企业管理员登录
accountSendEmail:`/api/account/sendEmail`, //发送邮件
accountResetPwd:'/api/account/resetPwd', //忘记密码修改
accountLogout:'/api/account/logout',//登出
accountBindEmail:'/api/account/bindEmail', //绑定邮箱
bindGoogle:'/api/account/bindGoogle', //绑定谷歌
bindWeChat:'/api/account/bindWeChat', //绑定微信
unbindGoogle:`/api/account/unbindGoogle`, //取消绑定谷歌
unbindWeChat:'/api/account/unbindWeChat', //取消绑定微信
elementGeneratePrint:'/api/element/generatePrint', //生成印花
elementSavePrint:'/api/element/savePrint',//保存印花
getRgbByTcx:'/api/element/getRgbByTcx', // 通过hsv值获取潘通信息
getRgbByHsv:'/api/element/getRgbByHsv', //通过hsv值获取潘通信息
elementDelete:'/api/element/delete', //删除上传的图片
designCollection:`/api/design/designCollection`, //设计 Conllection
reDesignCollection:`/api/design/reDesignCollection`,//重新设计 Conllection
countDesignProcess:'/api/design/countDesignProcess', //统计design进度
getDesignResult:'/api/design/getDesignResult', //查询design结果
designSort:`/api/design/sort`, //design排序
collectionLikeUpdate:`/api/history/collectionLikeUpdate`, //赋值排序
designWorksRegister: '/api/account/designWorksRegister', //注册
designWorksRegisterCode: '/api/account/designWorksRegisterCode', //注册
designProcess:`/api/design/designProcess`, //统计design进度
designGetModel:`/api/design/getModel`, //导出获取模特链接
preLogin: '/api/account/preLogin', //预先登入
schoolLogin: '/api/account/schoolLogin', //学校管理员登录
enterpriseLogin: '/api/account/enterpriseLogin', //企业管理员登录
accountSendEmail: `/api/account/sendEmail`, //发送邮件
accountResetPwd: '/api/account/resetPwd', //忘记密码修改
accountLogout: '/api/account/logout', //登出
accountBindEmail: '/api/account/bindEmail', //绑定邮箱
bindGoogle: '/api/account/bindGoogle', //绑定谷歌
bindWeChat: '/api/account/bindWeChat', //绑定微信
unbindGoogle: `/api/account/unbindGoogle`, //取消绑定谷歌
unbindWeChat: '/api/account/unbindWeChat', //取消绑定微信
elementGeneratePrint: '/api/element/generatePrint', //生成印花
elementSavePrint: '/api/element/savePrint', //保存印花
getRgbByTcx: '/api/element/getRgbByTcx', // 通过hsv值获取潘通信息
getRgbByHsv: '/api/element/getRgbByHsv', //通过hsv值获取潘通信息
elementDelete: '/api/element/delete', //删除上传的图片
designCollection: `/api/design/designCollection`, //设计 Conllection
reDesignCollection: `/api/design/reDesignCollection`, //重新设计 Conllection
countDesignProcess: '/api/design/countDesignProcess', //统计design进度
getDesignResult: '/api/design/getDesignResult', //查询design结果
designSort: `/api/design/sort`, //design排序
collectionLikeUpdate: `/api/history/collectionLikeUpdate`, //赋值排序
//充值相关
productList:`/api/product/list`, //获取商品列表
payAlipay:`/api/ali-pay/trade/page/pay`, //支付宝确认支付
payAlipayHK:`/api/alipay-hk/createOrder`, //香港支付宝确认支付
payStripe:`/api/stripe/createOrder`, //Stripe支付
payPaypal:`/api/paypal/trade`, //paypal确认支付
getCredits:`/api/credits/getCredits`, //查询用户积分
designProcess: `/api/design/designProcess`, //统计design进度
designGetModel: `/api/design/getModel`, //导出获取模特链接
cancelSubscription:`/api/stripe/cancelSubscription`, //取消订阅
orderInfoList:`/api/order-info/list`, //查询订单列表
getCreditsDetail:`/api/credits/getCreditsDetail`, //查询积分列表
tradeRefundAlipay:`/api/ali-pay/trade/refund`, //支付宝退款
tradeRefundPaypal:`/api/paypal/trade/refund`, //paypal退款
//充值相关
productList: `/api/product/list`, //获取商品列表
payAlipay: `/api/ali-pay/trade/page/pay`, //支付宝确认支付
payAlipayHK: `/api/alipay-hk/createOrder`, //香港支付宝确认支付
payStripe: `/api/stripe/createOrder`, //Stripe支付
payPaypal: `/api/paypal/trade`, //paypal确认支付
getCredits: `/api/credits/getCredits`, //查询用户积分
tradeQuery:`/api/ali-pay/trade/query/{orderNo}`, //查询订单状态
getRgbByHsvBatch:`/api/element/getRgbByHsvBatch`, //通过hsv值数组批量获取潘通信息
designLike:`/api/design/like`, //Design Like
designDislike: `/api/design/dislike`, //Design Dislike
queryUserGroup:`/api/history/queryUserGroup`, //History用户分页分组列表
deleteUserGroup:`/api/history/deleteUserGroup`, //History删除用户分组
updateUserGroupName:`/api/history/updateUserGroupName`, //History修改用户分组名
projectSaveOrUpdate:`/api/project/saveOrUpdate`, //History修改用户分组名
historyChoose:`/api/history/choose`, //History choose
getDesignDetail:`/api/design/detail/getDetail`,//查询design详情
addSysSketchToLibrary:`/api/library/addSysSketchToLibrary`,//把系统衣服添加的library
designSingleWithGradient:`/api/design/detail/designSingleWithGradient`,//查询需要更新mask列表
getNextSysElement:'/api/design/detail/getNextSysElement',//切换系统的element
detailPrintDot:'/api/design/detail/printDot',//print打点预览
designSingle:`/api/design/detail/designSingle`,//单个design
queryLibraryPage:`/api/library/queryLibraryPage`,//Library分页列表
libraryUpload:`/api/library/upload`, // Library文件上传
setSketchLibrary:`/api/library/updateLibraryLevel2Type`, // 修改图片类型
updateElementLevel2Type:`/api/element/updateElementLevel2Type`, // 修改拼贴上传的衣服类型
queryClassification:`/api/classification/queryClassification`,//标签类别查询
classificationSaveOrUpdate:`/api/classification/saveOrUpdate`,//标签类别新增修改
classificationDelete:`/api/classification/delete`,//标签类别新增修改
relationLibrary:`/api/classification/relationLibrary`,//标签类别新增修改
getRelClassificationIdList:`/api/classification/getRelClassificationIdList`,//标签类别新增修改
getRelPublicClassificationIdList:`/api/classification/getRelPublicClassificationIdList`,//多选获取公共标签
editRelPublicClassificationIdList:`/api/classification/editRelPublicClassificationIdList`,//多选修改公共标签
//模块化
llmStream:`/api/llm/streamNew`,//聊天
// llmStream:`/api/llm/stream`,//聊天
chatCreateProject:`/api/llm/chatCreateProject`,//聊天创建项目
getChatHistory:`/api/llm/getChatHistory`,//获取聊天历史记录
llmUploadFile:`/api/llm/uploadFile`,//聊天上传文件
saveOrUpdate:`/api/project/saveOrUpdate`,//模块化新增修改
getModuleContent:`/api/project/getModuleContent`,//获取模块内容
saveModuleContent:`/api/project/saveModuleContent`,//储存模块内容
historyProject:`/api/project/page`,//项目记录
projectDetail:`/api/project/delete`,//删除项目
//3d
threeDPage:`/api/project/threeDPage`,
downloadZip:`/api/project/downloadZip`,//下载zip
getThreeDSize:`/api/project/getThreeDSize`,//下载列表
getLayoutDetail:`/api/project/getLayoutDetail`,//获取3d详情
getThreeDGlb:`/api/project/getThreeDGlb`,
selectHistoryProject:`/api/project/choose`,//选择项目
getMannequinDetail:`/api/project/getMannequinDetail`,//模块化查看模特点位
modifyProportion:`/api/generate/modifyProportion`,//模特拉伸
addSysModelToLib:`/api/library/addSysModelToLib`,
poselikeOrDisike:`/api/generate/likeOrDislike`,//postTransform like
getAllPose:`/api/generate/getAllPose`,//获取动作
cancelSubscription: `/api/stripe/cancelSubscription`, //取消订阅
//拼贴
genSketchRecon:`/api/generate/genSketchRecon`,
saveReconCanvas:`/api/generate/saveReconCanvas`,
//动作变换
poseTransform:`/api/generate/poseTransform`,
poseTransformResult:`/api/generate/poseTransformResult`,
batchUpdateLibraryName:'/api/library/batchUpdateLibraryName',//Library修改用户文件名
batchDeleteLibrary:'/api/library/batchDeleteLibrary',//删除library
queryLibraryTopAndBottomPage:'/api/library/queryLibraryTopAndBottomPage',//Library分页列表(查询top和bottom)
saveOrEditTemplatePoint:'/api/library/saveOrEditTemplatePoint',//保存或者编辑template打点
libraryModelsDot:'/api/library/modelsDot',//Models打点预览
chatStreamTest:`/api/python/chatStream`,//机器人助力
pictureLikeOrUnLike:`/api/python/pictureLikeOrUnLike`,//机器人生成图喜欢
getBloodBars:`/api/python/getBloodBars`,//机器人血条
//工作空间
workspaceDetail:`/api/workspace/detail`,//用户习惯详情
workspaceenumValues:`/api/workspace/enumValues`,//getSex
workspaceRemove:`/api/workspace/remove`,//删除用户习惯详情
workspacesaveOrUpdate:`/api/workspace/saveOrUpdate`,//修改用户习惯详情
getMannequins:`/api/workspace/getMannequins`,//模特
getStyleList:`/api/workspace/styleList`,//获取所有风格列表
workspaceList:`/api/workspace/list`,
sketchAndPrintGenerate:'/api/generate/sketchAndPrint',//sketchGenerate生成图片
orderInfoList: `/api/order-info/list`, //查询订单列表
getCreditsDetail: `/api/credits/getCreditsDetail`, //查询积分列表
tradeRefundAlipay: `/api/ali-pay/trade/refund`, //支付宝退款
tradeRefundPaypal: `/api/paypal/trade/refund`, //paypal退款
generatePrepare:'/api/generate/prepare',//开始生成generate图片
generateStopWaiting:'/api/generate/stopWaiting',//取消生成
generateResult:'/api/generate/result',//获取生成结果
generateLike:'/api/generate/like',//喜欢ganerate图片
generateDislike:'/api/generate/dislike',//喜欢ganerate图片
imageToSketch:'/api/generate/imageToSketch',//成品图转为线稿
modifySketch:'/api/generate/modifySketch',//修改画布内容并且储存
tradeQuery: `/api/ali-pay/trade/query/{orderNo}`, //查询订单状态
elementUpload:`/api/element/upload`,//上传图片
imageSegmentation:`/api/element/imageSegmentation`,//分割衣服
convertRelightElement:`/api/history/convertRelightElement`,//toproduct复制到上传图片位置
getRgbByHsvBatch: `/api/element/getRgbByHsvBatch`, //通过hsv值数组批量获取潘通信息
designLike: `/api/design/like`, //Design Like
designDislike: `/api/design/dislike`, //Design Dislike
queryUserGroup: `/api/history/queryUserGroup`, //History用户分页分组列表
deleteUserGroup: `/api/history/deleteUserGroup`, //History删除用户分组
updateUserGroupName: `/api/history/updateUserGroupName`, //History修改用户分组名
projectSaveOrUpdate: `/api/project/saveOrUpdate`, //History修改用户分组名
historyChoose: `/api/history/choose`, //History choose
getDesignDetail: `/api/design/detail/getDetail`, //查询design详情
addSysSketchToLibrary: `/api/library/addSysSketchToLibrary`, //把系统衣服添加的library
designSingleWithGradient: `/api/design/detail/designSingleWithGradient`, //查询需要更新mask列表
getNextSysElement: '/api/design/detail/getNextSysElement', //切换系统的element
detailPrintDot: '/api/design/detail/printDot', //print打点预览
designSingle: `/api/design/detail/designSingle`, //单个design
queryLibraryPage: `/api/library/queryLibraryPage`, //Library分页列表
libraryUpload: `/api/library/upload`, // Library文件上传
setSketchLibrary: `/api/library/updateLibraryLevel2Type`, // 修改图片类型
updateElementLevel2Type: `/api/element/updateElementLevel2Type`, // 修改拼贴上传的衣服类型
// oldHis:`/oldHis/history/queryUserGroup`,//上传图片
sketchBoardsBoundingBox:`/api/design/sketchBoardsBoundingBox`,//裁剪sketch图片
queryClassification: `/api/classification/queryClassification`, //标签类别查询
classificationSaveOrUpdate: `/api/classification/saveOrUpdate`, //标签类别新增修改
classificationDelete: `/api/classification/delete`, //标签类别新增修改
relationLibrary: `/api/classification/relationLibrary`, //标签类别新增修改
getRelClassificationIdList: `/api/classification/getRelClassificationIdList`, //标签类别新增修改
getRelPublicClassificationIdList: `/api/classification/getRelPublicClassificationIdList`, //多选获取公共标签
editRelPublicClassificationIdList: `/api/classification/editRelPublicClassificationIdList`, //多选修改公共标签
trialOrderList:`/api/account/trialOrderList`,//获取审批列表
switchIsAutoApproval:`/api/account/switchIsAutoApproval`,//切换是否自动审批
getIsAutoApproval:`/api/account/getIsAutoApproval`,//获取是否自动审批
trialOrderApproval:`/api/account/trialOrderApproval`,//通过审批
trialOrderRefuse:`/api/account/trialOrderRefuse`,//拒绝审批
//管理员接口
//查询所有试用用户
inquiryGetTrial:`/api/inquiry/getTrial`,//查询所有试用用户
getCities:`/api/inquiry/getCities`,//获取所有付款订单使用的国家
getUserInfo:`/api/inquiry/getUserInfo`,//查询所有用户
queryTransaction:`/api/inquiry/queryTransaction`,//查询交易记录
queryTransactionDownload:`/api/inquiry/queryTransaction/download`,//导出交易记录
createCoupon:`/api/stripe/createCoupon`,//创建优惠码
updatePromCodeInfo:`/api/stripe/updatePromCodeInfo`,//修改优惠码
getAllCoupons:`/api/stripe/getAllCoupons`,//查询优惠码列表
checkCoupon:`/api/stripe/checkCoupon`,//根据优惠码获取结算后的金额
deletePromCode:`/api/stripe/deletePromCode`,//删除优惠券
addOrganization:`/api/inquiry/addOrganization`,//添加企业版或者教育版
queryOrganization:`/api/inquiry/queryOrganization`,//查询企业版或者教育版
//模块化
llmStream: `/api/llm/streamNew`, //聊天
// llmStream:`/api/llm/stream`,//聊天
chatCreateProject: `/api/llm/chatCreateProject`, //聊天创建项目
getChatHistory: `/api/llm/getChatHistory`, //获取聊天历史记录
llmUploadFile: `/api/llm/uploadFile`, //聊天上传文件
//云生成
designCloud:`/api/design/designCloud`,//创建云生成
cloudPage:`/api/design/cloudPage`,//创建云生成
cloudTaskDelete:`/api/design/cloudTaskDelete`,//删除云生成
cloudTaskNameUpdate:`/api/design/cloudTaskNameUpdate`,//修改云生成名字
getDesignCloudResult:`/api/design/getDesignCloudResult`,//查询这条云生成记录的所有内容
saveOrUpdate: `/api/project/saveOrUpdate`, //模块化新增修改
getModuleContent: `/api/project/getModuleContent`, //获取模块内容
saveModuleContent: `/api/project/saveModuleContent`, //储存模块内容
historyProject: `/api/project/page`, //项目记录
projectDetail: `/api/project/delete`, //删除项目
//3d
threeDPage: `/api/project/threeDPage`,
downloadZip: `/api/project/downloadZip`, //下载zip
getThreeDSize: `/api/project/getThreeDSize`, //下载列表
getLayoutDetail: `/api/project/getLayoutDetail`, //获取3d详情
getThreeDGlb: `/api/project/getThreeDGlb`,
selectHistoryProject: `/api/project/choose`, //选择项目
getMannequinDetail: `/api/project/getMannequinDetail`, //模块化查看模特点位
modifyProportion: `/api/generate/modifyProportion`, //模特拉伸
addSysModelToLib: `/api/library/addSysModelToLib`,
poselikeOrDisike: `/api/generate/likeOrDislike`, //postTransform like
getAllPose: `/api/generate/getAllPose`, //获取动作
//企业版教育版管理员页面
subAccountList:`/api/account/subAccountList`,//查询子账号
addOrUpdateSubAccount:`/api/account/addOrUpdateSubAccount`,//添加子账号
deleteSubAccount:`/api/account/deleteSubAccount`,//删除子账号
subAccountImportExcelDownload:`/api/account/subAccountImportExcelDownload`,//批量添加模板下载模板
exportAccountsToExcel:`/api/account/exportAccountsToExcel`,//教育版导出用户数据
getNextSequence:`/api/project/getNextSequence`,//批量添加模板下载模板
subAccountImport:`/api/account/subAccountImport`,//模板导入
getGenerateFrequency:`/api/inquiry/getGenerateFrequency`,//积分使用详情
getAllGenerateFuncName:`/api/inquiry/getAllGenerateFuncName`,//获取所有generate类型
//拼贴
genSketchRecon: `/api/generate/genSketchRecon`,
saveReconCanvas: `/api/generate/saveReconCanvas`,
//查询某个时间内design点击次数
getDesignStatistic:`/api/inquiry/getDesignStatistic`,//拒绝审批
getAllQuestionnaire:`/api/inquiry/getAllQuestionnaire`,//拒绝审批
getActiveUserFunc:`/api/inquiry/getActiveUserFunc`,//获取各模块功能
toProductImageElementDelete:`/api/history/toProductImageElementDelete`,//删除指定模块上传的内容
recentActiveUser:`/api/inquiry/recentActiveUser`,//获取近期活跃用户
recentActiveUserChart:`/api/inquiry/recentActiveUserChart`,//获取近期活跃用户图表数据
recentNewUser:`/api/inquiry/recentNewUser`,//获取近期新增用户
recentNewUserChart:`/api/inquiry/recentNewUserChart`,//获取新增用户图表
trialUserCountry:`/api/inquiry/trialUserCountry`,//试用用户国家-城市分布
conversionRate:`/api/inquiry/conversionRate`,//试用用户国家-城市分布
getAllUserId:`/api/inquiry/getAllUserId`,//获取所有用户id和Name
adminAddUser:`/api/inquiry/addUser`,//添加用户
modifyUser:`/api/inquiry/modifyUser`,//修改用户
publishSysMessage:`/api/message/publishSysMessage`,//发布系统任务
//affiliate接口
viewsIncrease:`/api/affiliate/viewsIncrease`,//增加访问量
affiliateRegistration:`/api/affiliate/registration`,//affiliate注册
personalCenter:`/api/affiliate/personalCenter`,//affiliate个人中心
affiliateList:`/api/affiliate/list`,//affiliate审批列表
updateCommission:`/api/affiliate/updateCommission`,//编辑佣金比例
editAffiliate:`/api/affiliate/editAffiliate`,//编辑affiliate
getEachAffiliateGeneratedRevenue:`/api/affiliate/getEachAffiliateGeneratedRevenue`,//affiliate每个用户根据日期查询收益
affiliateApproval:`/api/affiliate/approval`,//affiliate同意 审批
getPersonalMonthlyIncome:`/api/affiliate/getPersonalMonthlyIncome`,//affiliate图表接口
getReferrals:`/api/affiliate/getReferrals`,//affiliate Referral列表
editReferral:`/api/affiliate/editReferral`,//affiliate编辑referral
batchDeleteReferral:`/api/affiliate/batchDeleteReferral`,//affiliate删除referral
// batchDeleteReferral:`/api/affiliate/batchDeleteReferral`,//affiliate删除referral
getTasksList:`/api/tasks/getList`,//获取w为执行完的所有任务
getTasksHistory:`/api/tasks/getAllTask`,//获取所有任务列表
prepareForSR:`/api/python/prepareForSR`,//超分
//动作变换
poseTransform: `/api/generate/poseTransform`,
poseTransformResult: `/api/generate/poseTransformResult`,
//作品广场
publish:`/api/portfolio/publish`,//发布作品到作品广场
getPorfolio:`/api/portfolio/page`,//查询作品广场
getPorfolioDetail:`/api/portfolio/detail`,//查询作品广场作品详情
setPorfolioChoose:`/api/portfolio/choose`,//二次创作
portfolioLike:`/api/portfolio/like`,//作品广场点赞
portfolioNoLike:`/api/portfolio/unlike`,//作品广场取消点赞
portfolioComment:`/api/portfolio/comment`,//作品广场评论
portfolioCommentPage:`/api/portfolio/commentPage`,//作品广场评论列表
commentDelete:`/api/portfolio/commentDelete`,//删除评论
porfolioDelete:`/api/portfolio/delete`,//删除作品
porfolioFollow:`/api/portfolio/follow`,//删除作品
porfolioFollow:`/api/portfolio/follow`,//关注
porfolioCancelFollow:`/api/portfolio/cancelFollow`,//取消关注
porfolioGetFolloweeList:`/api/portfolio/getFolloweeList`,//获取关注列表
porfolioGetFollowerList:`/api/portfolio/getFollowerList`,//获取粉丝列表
//product生成
toProduct:`/api/history/toProduct`,//开始生成
toProductImageResult:`/api/history/toProductImageResult`,//获取结果
toProductImageElementUpload:`/api/history/toProductImageElementUpload`,//上传
historyDeleteResult:`/api/history/deleteResult`,//relight toproduct删除
generateDeleteResult:`/api/generate/deleteResult`,//pose删除
productImageLike:`/api/history/productImageLike`,//like生成结果
productImageUnLike:`/api/history/productImageUnLike`,//取消like生成结果
productImageLikeList:`/api/history/productImageLikeList`,//like生成结果
//打光
relight:`/api/history/relight`,//开始生成
relightResult:`/api/history/relightResult`,//开始生成
//保存画布
canvasElementUpload:`/api/history/canvasElementUpload`,//画布上传临时图片
exportSave:`/api/history/exportSave`,//保存画布
exportSearch:`/api/history/exportSearch`,//保存画布
batchUpdateLibraryName: '/api/library/batchUpdateLibraryName', //Library修改用户文件名
batchDeleteLibrary: '/api/library/batchDeleteLibrary', //删除library
queryLibraryTopAndBottomPage: '/api/library/queryLibraryTopAndBottomPage', //Library分页列表(查询top和bottom)
saveOrEditTemplatePoint: '/api/library/saveOrEditTemplatePoint', //保存或者编辑template打点
libraryModelsDot: '/api/library/modelsDot', //Models打点预览
chatStreamTest: `/api/python/chatStream`, //机器人助力
pictureLikeOrUnLike: `/api/python/pictureLikeOrUnLike`, //机器人生成图喜欢
getBloodBars: `/api/python/getBloodBars`, //机器人血条
//工作空间
workspaceDetail: `/api/workspace/detail`, //用户习惯详情
workspaceenumValues: `/api/workspace/enumValues`, //getSex
//活动
activity:`/api/account/activity`,
workspaceRemove: `/api/workspace/remove`, //删除用户习惯详情
workspacesaveOrUpdate: `/api/workspace/saveOrUpdate`, //修改用户习惯详情
getMannequins: `/api/workspace/getMannequins`, //模特
getStyleList: `/api/workspace/styleList`, //获取所有风格列表
//bradDNA
brandLogoUpload:`/api/history/brandLogoUpload`,//上传bradDNA
brandDNAGenerate:`/api/history/brandDNAGenerate`,//上传bradDNA
brandDNAUpload:`/api/history/brandDNAUpload`,//上传DNA图片
getInitializeProgress:`/api/history/getInitializeProgress`,//获取brand进度
brandDNADelete:`/api/history/brandDNADelete`,//删除brandDna
brandDNAPage:`/api/history/brandDNAPage`,//brand列表
brandDNASaveOrUpdate:`/api/history/brandDNASaveOrUpdate`,//提交个人信息
productImageInitialize:`/api/history/productImageInitialize`,//产品识别
//调查问卷
questionnaire:`/api/account/questionnaire`,//保存画布
workspaceList: `/api/workspace/list`,
sketchAndPrintGenerate: '/api/generate/sketchAndPrint', //sketchGenerate生成图片
//消息系统
getUnreadCount:`/api/message/getUnreadCount`,//获取未读消息
setReadStatus:`/api/message/setReadStatus`,//设置消息已读
getHistoryNotification:`/api/message/getHistoryNotification`,//获取历史消息
oneClickRead:`/api/message/oneClickRead`,//全部设为已读
personalHomepage:`/api/account/personalHomepage`,//获取个人主页信息
refreshMinioUrl:`/api/third/party/refreshMinioUrl`,//获取可以使用的minio地址
},
generatePrepare: '/api/generate/prepare', //开始生成generate图片
generateStopWaiting: '/api/generate/stopWaiting', //取消生成
generateResult: '/api/generate/result', //获取生成结果
generateLike: '/api/generate/like', //喜欢ganerate图片
generateDislike: '/api/generate/dislike', //喜欢ganerate图片
imageToSketch: '/api/generate/imageToSketch', //成品图转为线稿
modifySketch: '/api/generate/modifySketch', //修改画布内容并且储存
axiosGet(url,config) {
return new Promise((resolve, reject) => {
if(isLoginTime && url != '/api/portfolio/page') {
resolve('')
return
}
axios.get(url,config).then(response => {
resolve(response)
}).catch((error) => {
reject(error)
})
});
},
elementUpload: `/api/element/upload`, //上传图片
imageSegmentation: `/api/element/imageSegmentation`, //分割衣服
convertRelightElement: `/api/history/convertRelightElement`, //toproduct复制到上传图片位置
axiosPut(url, data) {
return new Promise((resolve, reject) => {
if(isLoginTime && url != '/api/portfolio/page') {
resolve('')
return
}
axios.put(url, data).then(response => {
resolve(response)
}).catch((error) => {
reject(error)
})
});
},
// oldHis:`/oldHis/history/queryUserGroup`,//上传图片
sketchBoardsBoundingBox: `/api/design/sketchBoardsBoundingBox`, //裁剪sketch图片
axiosPost(url, data,config) {
return new Promise((resolve, reject) => {
if(isLoginTime && url != '/api/portfolio/page') {
resolve('')
return
}
axios.post(url, data,config).then(response => {
resolve(response)
}).catch((error) => {
reject(error)
})
});
},
trialOrderList: `/api/account/trialOrderList`, //获取审批列表
switchIsAutoApproval: `/api/account/switchIsAutoApproval`, //切换是否自动审批
getIsAutoApproval: `/api/account/getIsAutoApproval`, //获取是否自动审批
trialOrderApproval: `/api/account/trialOrderApproval`, //通过审批
trialOrderRefuse: `/api/account/trialOrderRefuse`, //拒绝审批
axiosDelete(url, newData) {
return new Promise((resolve, reject) => {
if(isLoginTime && url != '/api/portfolio/page') {
resolve('')
return
}
axios.delete(url,{data:newData}).then(response => {
resolve(response)
}).catch((error) => {
reject(error)
})
});
},
//管理员接口
//查询所有试用用户
inquiryGetTrial: `/api/inquiry/getTrial`, //查询所有试用用户
getCities: `/api/inquiry/getCities`, //获取所有付款订单使用的国家
getUserInfo: `/api/inquiry/getUserInfo`, //查询所有用户
queryTransaction: `/api/inquiry/queryTransaction`, //查询交易记录
queryTransactionDownload: `/api/inquiry/queryTransaction/download`, //导出交易记录
createCoupon: `/api/stripe/createCoupon`, //创建优惠码
updatePromCodeInfo: `/api/stripe/updatePromCodeInfo`, //修改优惠码
getAllCoupons: `/api/stripe/getAllCoupons`, //查询优惠码列表
checkCoupon: `/api/stripe/checkCoupon`, //根据优惠码获取结算后的金额
deletePromCode: `/api/stripe/deletePromCode`, //删除优惠券
addOrganization: `/api/inquiry/addOrganization`, //添加企业版或者教育版
queryOrganization: `/api/inquiry/queryOrganization`, //查询企业版或者教育版
createSubscribePlan: '/api/subscription_plan/createPlan', // 创建订阅计划
deleteSubscribePlan: '/api/subscription_plan/deletePlan', // 删除订阅计划
updateSubscribePlan: '/api/subscription_plan/updatePlan', // 修改订阅计划
searchAllSubscribePlan: '/api/subscription_plan/searchByPage', // 分页查询所有订阅计划
searchSubscribeByOrg: '/api/subscription_plan/searchByOrganizationIdAndStatus', // 不分页查询
switchSubscribePlan: '/api/subscription_plan/switchSubscriptionPlan', // 切换管理员订阅计划
switchSubAccountSubscribePlan: '/api/subscription_plan/switchSubAccSubscriptionPlan', // 切换子账号订阅计划
//云生成
designCloud: `/api/design/designCloud`, //创建云生成
cloudPage: `/api/design/cloudPage`, //创建云生成
cloudTaskDelete: `/api/design/cloudTaskDelete`, //删除云生成
cloudTaskNameUpdate: `/api/design/cloudTaskNameUpdate`, //修改云生成名字
getDesignCloudResult: `/api/design/getDesignCloudResult`, //查询这条云生成记录的所有内容
//企业版教育版管理员页面
subAccountList: `/api/account/subAccountList`, //查询子账号
addOrUpdateSubAccount: `/api/account/addOrUpdateSubAccount`, //添加子账号
deleteSubAccount: `/api/account/deleteSubAccount`, //删除子账号
subAccountImportExcelDownload: `/api/account/subAccountImportExcelDownload`, //批量添加模板下载模板
exportAccountsToExcel: `/api/account/exportAccountsToExcel`, //教育版导出用户数据
getNextSequence: `/api/project/getNextSequence`, //批量添加模板下载模板
subAccountImport: `/api/account/subAccountImport`, //模板导入
getGenerateFrequency: `/api/inquiry/getGenerateFrequency`, //积分使用详情
getAllGenerateFuncName: `/api/inquiry/getAllGenerateFuncName`, //获取所有generate类型
//查询某个时间内design点击次数
getDesignStatistic: `/api/inquiry/getDesignStatistic`, //拒绝审批
getAllQuestionnaire: `/api/inquiry/getAllQuestionnaire`, //拒绝审批
getActiveUserFunc: `/api/inquiry/getActiveUserFunc`, //获取各模块功能
toProductImageElementDelete: `/api/history/toProductImageElementDelete`, //删除指定模块上传的内容
recentActiveUser: `/api/inquiry/recentActiveUser`, //获取近期活跃用户
recentActiveUserChart: `/api/inquiry/recentActiveUserChart`, //获取近期活跃用户图表数据
recentNewUser: `/api/inquiry/recentNewUser`, //获取近期新增用户
recentNewUserChart: `/api/inquiry/recentNewUserChart`, //获取新增用户图表
trialUserCountry: `/api/inquiry/trialUserCountry`, //试用用户国家-城市分布
conversionRate: `/api/inquiry/conversionRate`, //试用用户国家-城市分布
getAllUserId: `/api/inquiry/getAllUserId`, //获取所有用户id和Name
adminAddUser: `/api/inquiry/addUser`, //添加用户
modifyUser: `/api/inquiry/modifyUser`, //修改用户
publishSysMessage: `/api/message/publishSysMessage`, //发布系统任务
//affiliate接口
viewsIncrease: `/api/affiliate/viewsIncrease`, //增加访问量
affiliateRegistration: `/api/affiliate/registration`, //affiliate注册
personalCenter: `/api/affiliate/personalCenter`, //affiliate个人中心
affiliateList: `/api/affiliate/list`, //affiliate审批列表
updateCommission: `/api/affiliate/updateCommission`, //编辑佣金比例
editAffiliate: `/api/affiliate/editAffiliate`, //编辑affiliate
getEachAffiliateGeneratedRevenue: `/api/affiliate/getEachAffiliateGeneratedRevenue`, //affiliate每个用户根据日期查询收益
affiliateApproval: `/api/affiliate/approval`, //affiliate同意 审批
getPersonalMonthlyIncome: `/api/affiliate/getPersonalMonthlyIncome`, //affiliate图表接口
getReferrals: `/api/affiliate/getReferrals`, //affiliate Referral列表
editReferral: `/api/affiliate/editReferral`, //affiliate编辑referral
batchDeleteReferral: `/api/affiliate/batchDeleteReferral`, //affiliate删除referral
// batchDeleteReferral:`/api/affiliate/batchDeleteReferral`,//affiliate删除referral
getTasksList: `/api/tasks/getList`, //获取w为执行完的所有任务
getTasksHistory: `/api/tasks/getAllTask`, //获取所有任务列表
prepareForSR: `/api/python/prepareForSR`, //超分
//作品广场
publish: `/api/portfolio/publish`, //发布作品到作品广场
getPorfolio: `/api/portfolio/page`, //查询作品广场
getPorfolioDetail: `/api/portfolio/detail`, //查询作品广场作品详情
setPorfolioChoose: `/api/portfolio/choose`, //二次创作
portfolioLike: `/api/portfolio/like`, //作品广场点赞
portfolioNoLike: `/api/portfolio/unlike`, //作品广场取消点赞
portfolioComment: `/api/portfolio/comment`, //作品广场评论
portfolioCommentPage: `/api/portfolio/commentPage`, //作品广场评论列表
commentDelete: `/api/portfolio/commentDelete`, //删除评论
porfolioDelete: `/api/portfolio/delete`, //删除作品
porfolioFollow: `/api/portfolio/follow`, //删除作品
porfolioFollow: `/api/portfolio/follow`, //关注
porfolioCancelFollow: `/api/portfolio/cancelFollow`, //取消关注
porfolioGetFolloweeList: `/api/portfolio/getFolloweeList`, //获取关注列表
porfolioGetFollowerList: `/api/portfolio/getFollowerList`, //获取粉丝列表
//product生成
toProduct: `/api/history/toProduct`, //开始生成
toProductImageResult: `/api/history/toProductImageResult`, //获取结果
toProductImageElementUpload: `/api/history/toProductImageElementUpload`, //上传
historyDeleteResult: `/api/history/deleteResult`, //relight toproduct删除
generateDeleteResult: `/api/generate/deleteResult`, //pose删除
productImageLike: `/api/history/productImageLike`, //like生成结果
productImageUnLike: `/api/history/productImageUnLike`, //取消like生成结果
productImageLikeList: `/api/history/productImageLikeList`, //like生成结果
//打光
relight: `/api/history/relight`, //开始生成
relightResult: `/api/history/relightResult`, //开始生成
//保存画布
canvasElementUpload: `/api/history/canvasElementUpload`, //画布上传临时图片
exportSave: `/api/history/exportSave`, //保存画布
exportSearch: `/api/history/exportSearch`, //保存画布
//活动
activity: `/api/account/activity`,
//bradDNA
brandLogoUpload: `/api/history/brandLogoUpload`, //上传bradDNA
brandDNAGenerate: `/api/history/brandDNAGenerate`, //上传bradDNA
brandDNAUpload: `/api/history/brandDNAUpload`, //上传DNA图片
getInitializeProgress: `/api/history/getInitializeProgress`, //获取brand进度
brandDNADelete: `/api/history/brandDNADelete`, //删除brandDna
brandDNAPage: `/api/history/brandDNAPage`, //brand列表
brandDNASaveOrUpdate: `/api/history/brandDNASaveOrUpdate`, //提交个人信息
productImageInitialize: `/api/history/productImageInitialize`, //产品识别
//调查问卷
questionnaire: `/api/account/questionnaire`, //保存画布
//消息系统
getUnreadCount: `/api/message/getUnreadCount`, //获取未读消息
setReadStatus: `/api/message/setReadStatus`, //设置消息已读
getHistoryNotification: `/api/message/getHistoryNotification`, //获取历史消息
oneClickRead: `/api/message/oneClickRead`, //全部设为已读
personalHomepage: `/api/account/personalHomepage`, //获取个人主页信息
refreshMinioUrl: `/api/third/party/refreshMinioUrl` //获取可以使用的minio地址
},
axiosGet(url, config) {
return new Promise((resolve, reject) => {
if (isLoginTime && url != '/api/portfolio/page') {
resolve('')
return
}
axios
.get(url, config)
.then(response => {
resolve(response)
})
.catch(error => {
reject(error)
})
})
},
axiosPut(url, data) {
return new Promise((resolve, reject) => {
if (isLoginTime && url != '/api/portfolio/page') {
resolve('')
return
}
axios
.put(url, data)
.then(response => {
resolve(response)
})
.catch(error => {
reject(error)
})
})
},
axiosPost(url, data, config) {
return new Promise((resolve, reject) => {
if (isLoginTime && url != '/api/portfolio/page') {
resolve('')
return
}
axios
.post(url, data, config)
.then(response => {
resolve(response)
})
.catch(error => {
reject(error)
})
})
},
axiosDelete(url, newData) {
return new Promise((resolve, reject) => {
if (isLoginTime && url != '/api/portfolio/page') {
resolve('')
return
}
axios
.delete(url, { data: newData })
.then(response => {
resolve(response)
})
.catch(error => {
reject(error)
})
})
}
}

View File

@@ -17,14 +17,14 @@
mode="inline"
@click="handleClick"
>
<div v-for="(menu) in rootSubmenuKeys" :key="menu.key" >
<a-menu-item :key="menu.key" :name="menu.name" :route="menu.route" v-if="!menu.children">
<div v-for="(menu) in rootSubmenuKeys" :key="`menu-${menu.key}`" >
<a-menu-item :key="`item-${menu.key}`" :name="menu.name" :route="menu.route" v-if="!menu.children">
<template #icon>
<span :class="['icon','iconfont', 'menu_icon', menu.icon]"></span>
</template>
<span class="menu_title" :title="menu.name">{{menu.name}}</span>
</a-menu-item>
<a-sub-menu :key="menu.key" v-else>
<a-sub-menu :key="`sub-${menu.key}`" v-else>
<template #icon>
<span :class="['icon','iconfont', 'menu_icon', menu.icon]"></span>
</template>
@@ -67,7 +67,7 @@
<script lang="ts">
import { LoadingOutlined } from "@ant-design/icons-vue";
import { message, Upload } from "ant-design-vue";
import { defineComponent, onMounted, h, ref, nextTick, computed,reactive, toRefs, onBeforeMount } from "vue";
import { defineComponent, onMounted, h, ref, nextTick, computed,reactive, toRefs, onBeforeMount, watch } from "vue";
import { MailOutlined, AppstoreOutlined, SettingOutlined } from '@ant-design/icons-vue';
import { Https } from "@/tool/https";
import { useStore } from "vuex";
@@ -102,11 +102,38 @@ export default defineComponent({
// 5,7
rootSubmenuKeys: [],
openKeys: [],
selectedKeys: ['sub1'],
selectedKeys: [],
nowPageName:'All User',//当前页面名称
});
let routers:any = ref([])
const syncMenuStatus = (path:string)=>{
if(!state.rootSubmenuKeys.length)return
let matched = false
state.rootSubmenuKeys.some((item:any)=>{
if(item.children){
const target = item.children.find((child:any)=>child.route === path)
if(target){
state.selectedKeys = [target.key]
state.openKeys = [`sub-${item.key}`]
state.nowPageName = target.name
matched = true
return true
}
}else if(item.route === path){
state.selectedKeys = [`item-${item.key}`]
state.openKeys = []
state.nowPageName = item.name
matched = true
return true
}
return false
})
if(!matched){
state.selectedKeys = []
}
}
const onOpenChange = (openKeys: string[]) => {
const latestOpenKey:any = openKeys.find(key => state.openKeys.indexOf(key) === -1);
@@ -150,24 +177,12 @@ export default defineComponent({
state.rootSubmenuKeys = adminRouter.all(t);
}
const route = router.currentRoute.value
if(state.rootSubmenuKeys.some((item:any) => item.route === route.path) || route.path == "/administrator"){
const isMenuRoute = state.rootSubmenuKeys.some((item:any) => item.route === route.path || item.children?.some((child:any)=>child.route === route.path))
// 如果是管理员首页或未匹配菜单,才重定向到首个菜单;否则保持当前路由,避免刷新回到 allUser
if (route.path === "/administrator" || !isMenuRoute) {
router.push(state.rootSubmenuKeys[0].route)
}else{
router.push('/administrator')
}
// state.rootSubmenuKeys.forEach((item:any) => {
// if(item.children){
// item.children.forEach((item:any) => {
// if(item.route == router.currentRoute.value.path){
// state.selectedKeys[0] = item.key
// }
// });
// }else{
// if(item.route == router.currentRoute.value.path){
// state.selectedKeys[0] = item.key
// }
// }
// });
syncMenuStatus(router.currentRoute.value.path)
//储存所有用户id和name
Https.axiosGet(Https.httpUrls.getAllUserId,).then((rv: any) => {
if (rv) {
@@ -192,8 +207,11 @@ export default defineComponent({
// router.push(state.rootSubmenuKeys[0].route)
})
onBeforeMount(()=>{
state.selectedKeys = ['sub1']
watch(()=>router.currentRoute.value.path,(path)=>{
syncMenuStatus(path)
},{immediate:true})
onBeforeMount(()=>{
state.selectedKeys = []
})
return {
...toRefs(state),

View File

@@ -393,6 +393,27 @@
<span class="fi fi-rr-book-user"></span>
<span class="select_item_des">{{ $t('Header.Tutorial') }}</span>
</div>
<div class="select_item logo">
<a href="https://www.tiktok.com/@aida_codecreate" target="_blank" >
<img src="@/assets/images/socialMediaLogo/tikTokIcon.svg" alt="">
</a>
<a href="https://www.facebook.com/CodeCreateAI" target="_blank" >
<img src="@/assets/images/socialMediaLogo/faceBookIcon.svg" alt="">
</a>
<a href="https://www.youtube.com/@AiDA-3.1" target="_blank" >
<img src="@/assets/images/socialMediaLogo/socialIcons.svg" alt="">
</a>
<a href="https://www.linkedin.com/company/code-create-limited" target="_blank" >
<img src="@/assets/images/socialMediaLogo/linkedinIcon.svg" alt="">
</a>
<a href="https://xhslink.com/m/5Ony2FapizV" target="_blank" >
<img src="@/assets/images/socialMediaLogo/xiaoHongShuIcon.svg" alt="">
</a>
<a href="https://space.bilibili.com/3546717609789876?spm_id_from=333.788.upinfo.head.click" target="_blank" >
<img src="@/assets/images/socialMediaLogo/biliBliIcon.svg" alt="">
</a>
</div>
<div class="select_item_long"></div>
<div class="select_item" @click="logout()">
<span class="icon iconfont icon-tuichu"></span>
@@ -406,11 +427,12 @@
<div class="userSystem" v-show="pastDuePage">
{{ $t('Header.pastDue') }}
</div>
<div class="router" v-if="!getLangIsShowMark">
<div class="router" v-if="!dataLoading">
<home
ref="home"
@setNewProject="() => (leftShow = true)"
@setTask="setTask"
:key="userDetail.language"
></home>
</div>
</div>
@@ -421,10 +443,10 @@
<UpgradePlan ref="UpgradePlan"></UpgradePlan>
<TaskPage ref="TaskPage"></TaskPage>
<div class="mark_loading" v-show="getLangIsShowMark">
<div class="mark_loading" v-show="dataLoading">
<a-spin size="large" />
</div>
<!-- <RobotAssist v-if="!getLangIsShowMark"></RobotAssist> -->
<!-- <RobotAssist v-if="!loading"></RobotAssist> -->
<scaleVideo ref="scaleVideo"></scaleVideo>
<!-- 进行续订 -->
<renew ref="renew"></renew>
@@ -639,7 +661,7 @@ export default defineComponent({
})
let activeCredits = ref(false)
let getLangIsShowMark = ref(true)
let dataLoading = computed(() => (store.state.dataLoading))
let messageNum = computed(() => {
return store.state.UserHabit.messageSystem.messageNum
})
@@ -1053,7 +1075,7 @@ export default defineComponent({
isMurmur,
credits,
activeCredits,
getLangIsShowMark,
dataLoading,
messageNum,
messageType,
...toRefs(stateList),
@@ -1111,11 +1133,11 @@ export default defineComponent({
this.store
.dispatch('getLangType')
.then(() => {
this.getLangIsShowMark = false
this.store.commit('set_dataLoading', false)
resolve()
})
.catch(() => {
this.getLangIsShowMark = false
this.store.commit('set_dataLoading', false)
reject()
})
})
@@ -1317,7 +1339,7 @@ export default defineComponent({
})
},
setLang(v) {
this.getLangIsShowMark = true
this.store.commit('set_dataLoading', true)
Https.axiosGet(Https.httpUrls.changeUserLanguage, { params: { language: v } })
.then(rv => {
if (rv) {
@@ -1334,11 +1356,11 @@ export default defineComponent({
window.location.reload()
// window.location.href = '/home';
}
this.getLangIsShowMark = false
this.store.commit('set_dataLoading', false)
}
})
.catch(() => {
this.getLangIsShowMark = false
this.store.commit('set_dataLoading', false)
})
},
@@ -2019,6 +2041,24 @@ export default defineComponent({
font-weight: 500;
}
}
.logo{
padding: 1rem 0.5rem;
gap: 1.8rem;
cursor: auto;
justify-content: center;
> a{
width: auto;
height: 2.4rem;
overflow: hidden;
display: flex;
> img{
height: 100%;
}
}
&:hover {
background: #fff;
}
}
.select_item_long {
border-bottom: 1px solid #eceaea;
margin: 2rem 0;

View File

@@ -9,7 +9,7 @@
:placeholder="t('batchGeneration.Search')"
@search="searchHistoryList"
/>
<div class="history_table_content" ref="historyTable">
<div class="history_table_content" ref="historyTable" @click.stop>
<a-config-provider :locale="tableLocale">
<a-table
row-class-name="history_table_row"
@@ -28,6 +28,14 @@
}"
>
<template #bodyCell="{ column, text, record, index }">
<div class="update_name" v-if="column?.key === 'collectionName'">
<div v-if="updateName.selectIndex === index">
<input type="text" v-model="updateName.currentName">
</div>
<div v-show="updateName.selectIndex !== index">{{ record.name }}</div>
<i @click="setUpdateName(record.name,index)" v-show="updateName.selectIndex !== index" class="fi fi-rr-edit"></i>
<i @click="submitUpdateName" v-show="updateName.selectIndex === index" class="fi fi-sr-check-circle"></i>
</div>
<div class="operate_list" v-if="column?.Operations">
<div
class="operate_item"
@@ -167,7 +175,7 @@ export default defineComponent({
if (record.text == 1) {
str = useI18n().t('newScaleImage.Original')
} else {
str = `@${record.record.userLikeGroupVO.originalAccountName}/${record.record.userLikeGroupVO.originalPortfolioName}`
str = `@${record.record.originalAccountName}/${record.record.originalPortfolioName}`
}
// let time = formatTime(record.text / 1000, 'YYYY-MM-DD hh:mm:ss')
return str
@@ -213,6 +221,39 @@ export default defineComponent({
selectCode: selectCode,
designType: ''
}
const updateName = ref({
currentName:'',
selectIndex:-1,
})
const clearUpdateName = () => {
updateName.value.currentName = ''
updateName.value.selectIndex = -1
document.removeEventListener('click',clearUpdateName)
}
const setUpdateName = (name,index) => {
updateName.value.currentName = name
updateName.value.selectIndex = index
document.addEventListener('click',clearUpdateName)
}
const submitUpdateName = ()=>{
if(updateName.value.currentName === collectionList.value[updateName.value.selectIndex].name){
clearUpdateName()
return
}
if(updateName.value.selectIndex != -1){
if(!updateName.value.currentName)return message.info(t('HistoryPage.jsContent8'))
let data = {
id: collectionList.value[updateName.value.selectIndex].id, //library名字
name: updateName.value.currentName //history id
}
Https.axiosPost(Https.httpUrls.projectSaveOrUpdate, data)
.then(rv => {
collectionList.value[updateName.value.selectIndex].name = updateName.value.currentName
clearUpdateName()
})
.catch(res => {})
}
}
provide('type', type)
return {
store,
@@ -232,7 +273,10 @@ export default defineComponent({
tableLocale,
projectSetting,
tableSearchBar,
currentProjectPath
currentProjectPath,
updateName,
setUpdateName,
submitUpdateName,
}
},
data() {
@@ -608,6 +652,7 @@ export default defineComponent({
customTableRow(record: any) {
return {
onDblclick: () => {
if(this.updateName.selectIndex !== -1)return
this.retrieveHome(record)
}
}
@@ -726,6 +771,11 @@ export default defineComponent({
}
:deep(.ant-table-tbody > tr:hover) {
background: #ededed;
.update_name{
> .fi-rr-edit{
display: flex;
}
}
}
:deep(.ant-table-tbody > tr > td) {
border: none;
@@ -780,7 +830,26 @@ export default defineComponent({
color: #000;
}
}
.update_name{
display: flex;
align-items: center;
> div{
> input{
width: 12rem;
border-radius: .8rem;
padding-left: 1.5rem;
}
}
> i{
margin-left: 1.5rem;
cursor: pointer;
font-size: 2rem;
display: flex;
}
> .fi-rr-edit{
display: none;
}
}
.operate_list {
display: flex;
align-items: center;

View File

@@ -43,15 +43,12 @@
<span>{{ t('Login.LogonToAiDA') }}</span>
</div>
<div class="info" v-show="!loginType">{{ t('Login.Infomation') }}</div>
<personal ref="personal" v-if="loginType == 'personal'" v-model:isMask="isMask"></personal>
<personal ref="personal" v-if="loginType == 'personal'"></personal>
<school ref="school" v-if="loginType == 'school'"></school>
<enterprise ref="enterprise" v-if="loginType == 'enterprise'"></enterprise>
</div>
</div>
<div class="mark_loading" v-show="isMask">
<a-spin size="large" />
</div>
</div>
</div>
</template>
@@ -103,7 +100,6 @@ export default defineComponent({
const loginData = reactive({
loginType: "",
isMask: false,
});
const dataDom = reactive({
personal: null as any,

View File

@@ -147,11 +147,11 @@ export default defineComponent({
}
});
//储存所有用户id和name
Https.axiosGet(Https.httpUrls.getAllUserId,).then((rv: any) => {
if (rv) {
store.commit('setAllUserList',rv);
}
})
// Https.axiosGet(Https.httpUrls.getAllUserId,).then((rv: any) => {
// if (rv) {
// store.commit('setAllUserList',rv);
// }
// })
let allCountry = country
sessionStorage.setItem('allCountry',JSON.stringify(allCountry));
// state.nowPageName = state.rootSubmenuKeys[0].name