Compare commits

501 Commits

Author SHA1 Message Date
889982f63e Merge branch 'dev_vite' into main 2025-11-28 14:08:06 +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
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
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
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
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
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
X1627315083
4f3d90d904 fix 2025-11-24 17:27:34 +08:00
zhangyh
87e4038b55 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-24 17:09:40 +08:00
zhangyh
08e96cf038 feat: 文案修改 2025-11-24 17:09:37 +08:00
X1627315083
8ef327a867 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-24 16:04:35 +08:00
X1627315083
f86c18cf3a 情绪版布局调整 2025-11-24 16:04:33 +08:00
zhangyh
2021d60c9a bugfix: 二创按钮添加debounce 2025-11-24 15:59:43 +08:00
X1627315083
962b0e3aa5 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-24 15:29:41 +08:00
X1627315083
7523c9a124 fix 2025-11-24 15:29:39 +08:00
zhangyh
d45f3be101 bugfix: 重置下拉菜单状态 2025-11-24 15:27:03 +08:00
zhangyh
71a940e028 bugfix: editdesignType弹窗问题 2025-11-24 15:13:33 +08:00
zhangyh
75855fbf94 bugfix: 成人男装单品prompt assist图片错误 2025-11-24 15:13:26 +08:00
李志鹏
db1eb9c9b3 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-24 13:55:17 +08:00
李志鹏
856cf90c34 fix 2025-11-24 13:55:15 +08:00
X1627315083
e9728317df fix 2025-11-24 13:32:39 +08:00
X1627315083
f4508bf776 修复detail中元素初始化问题 2025-11-24 11:49:05 +08:00
X1627315083
b9bb1fe610 调整语言适配格式,保持英文中文行数一致 2025-11-24 11:03:57 +08:00
X1627315083
152f42fc3e Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-24 10:53:59 +08:00
X1627315083
bc6e9abdac Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-11-24 10:53:55 +08:00
zhangyh
0eea9e79b5 bugfix: 暂时通过增加弹窗高度解决dropdown不可见 2025-11-22 01:19:01 +08:00
zhangyh
7712ce1e21 bugfix: 转视频弹窗模型选择&文案错误 2025-11-22 00:55:09 +08:00
zhangyh
201a6aeb55 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-21 13:25:15 +08:00
zhangyh
54b777f026 style: 转视频首尾帧提示弹窗 2025-11-21 13:25:12 +08:00
X1627315083
daea2ace0e Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-21 13:07:56 +08:00
X1627315083
286585dda2 调整文案 2025-11-21 13:07:45 +08:00
zhangyh
61f1995ed3 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-21 11:37:52 +08:00
zhangyh
53e660ef28 bugfix: 成人女性转产品图提示词弹窗 2025-11-21 11:37:49 +08:00
X1627315083
629f8ae20b 系统消息提示更换字体 2025-11-21 10:35:39 +08:00
X1627315083
83116c5b50 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-21 10:26:19 +08:00
X1627315083
6f752bb808 fix 2025-11-21 10:26:17 +08:00
zhangyh
631da67e81 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-21 10:06:39 +08:00
zhangyh
c6835b22d7 style: promptinput样式修改 2025-11-21 10:06:35 +08:00
zhangyh
7dc272b3e7 style:promptInput字体&转视频问号图标&转产品图弹窗文字居中 2025-11-21 09:58:32 +08:00
X1627315083
b7d87c9355 调整加载icon 2025-11-21 09:46:57 +08:00
zhangyh
155b5b4cd5 bugfix: 更新prompt 2025-11-20 17:32:28 +08:00
zhangyh
85cb0e9792 feat: 更换转视频的带提示输入框 2025-11-20 17:26:05 +08:00
zhangyh
e154fc3de0 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-20 15:02:51 +08:00
zhangyh
9c24f90f4b bugfix: 上传首尾帧图片弹窗列表去除视频AIDA312-68 2025-11-20 15:02:47 +08:00
X1627315083
325da33e4c Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-20 14:00:24 +08:00
X1627315083
bd35b2c028 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-20 14:00:15 +08:00
zhangyh
d07cc507ab feat: 历史列表删除项目时如果是currentProject 一并清除 2025-11-20 14:00:12 +08:00
X1627315083
c078f9dd93 视频页面加入用户指引 detail添加 2025-11-20 13:56:25 +08:00
zhangyh
4b2553fa10 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-20 13:47:53 +08:00
zhangyh
e6d657eaf1 feat: design页面高级工具转产品图的Prompt assist弹窗 2025-11-20 13:47:48 +08:00
zhangyh
f28eaef252 feat: 高级工具转产品图 prompt assist弹窗内容修改 2025-11-20 13:39:23 +08:00
X1627315083
2249bf614f 修复tools里面的路由跳转会出现两个tools页面 2025-11-20 11:12:34 +08:00
X1627315083
2f449c5218 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-20 10:58:19 +08:00
X1627315083
57ff23e477 tools页面加入缓存 2025-11-20 10:58:16 +08:00
李志鹏
523b865f8a Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-20 10:11:55 +08:00
李志鹏
0f5d727134 sketch_bar_chart.html 2025-11-20 10:11:52 +08:00
zhangyh
ae142b8edf feat: 除选择Motion以外默认用basic模型 2025-11-19 17:33:58 +08:00
zhangyh
ed764543d2 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-19 17:19:01 +08:00
zhangyh
843d92b4aa bugfix: promptInput提示词内容不会变化 2025-11-19 17:17:20 +08:00
X1627315083
609921e72d Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-19 17:15:22 +08:00
X1627315083
3b72e61a68 relight提示词相关内容 2025-11-19 17:15:19 +08:00
zhangyh
90d3a95ff4 bugfix: 高级工具先点喜欢再点不喜欢,在design列表消失 2025-11-19 16:08:21 +08:00
zhangyh
0691e96ece Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-19 15:41:44 +08:00
zhangyh
8682fc1eba feat: 重新生成图片 2025-11-19 15:41:41 +08:00
X1627315083
f0702702a5 fix 2025-11-19 11:53:49 +08:00
X1627315083
820cedffa7 fix 2025-11-19 11:53:36 +08:00
zhangyh
72e589b748 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-19 10:31:29 +08:00
zhangyh
1edcef49f8 feat: 弹窗视频生成 2025-11-19 10:31:26 +08:00
X1627315083
4dcf4b1eb2 fix 2025-11-19 10:17:18 +08:00
X1627315083
2c9c73b1d9 调整提示词交互 2025-11-19 09:51:00 +08:00
X1627315083
4e81ddcf65 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-19 09:36:01 +08:00
X1627315083
d19700738e 修复detail删除衣服画布没有更新 2025-11-19 09:35:58 +08:00
zhangyh
f425dcec39 style: 视频播放按钮尺寸 2025-11-18 14:49:45 +08:00
zhangyh
608182936a style: prompt input样式修改 2025-11-18 14:44:38 +08:00
zhangyh
c50a1d33e5 feat: 弹窗转视频动图替换为视频 2025-11-18 13:35:56 +08:00
zhangyh
e1e884c913 feat: design跳转视频生成弹窗 2025-11-18 11:31:03 +08:00
zhangyh
026a39f1a9 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-17 17:21:17 +08:00
zhangyh
0ec37aae53 style: 转产品图弹窗样式 2025-11-17 17:21:13 +08:00
X1627315083
61c49d99cd Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-11-17 17:16:49 +08:00
X1627315083
39152ab910 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-17 16:59:08 +08:00
X1627315083
11de98679d fix 2025-11-17 16:59:05 +08:00
zhangyh
3403c1d53b style: prompt弹窗样式 2025-11-17 16:45:40 +08:00
zhangyh
47817512e1 feat: design跳转视频默认mode为1 2025-11-17 16:19:11 +08:00
X1627315083
bb9ee415e4 Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2025-11-17 15:20:31 +08:00
X1627315083
0bddfe16c9 修复design切换衣服后修改衣服的designType导致再次进行添加衣服会重复添加 2025-11-17 15:20:28 +08:00
zhangyh
07bc16909a chore: 删除remgenerate 2025-11-17 14:17:25 +08:00
李志鹏
712a3b0921 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-17 13:57:34 +08:00
李志鹏
a0230541ce fix 2025-11-17 13:57:31 +08:00
zhangyh
4fca7c831a feat: 生成时提示上传图片 2025-11-17 13:55:44 +08:00
zhangyh
3c1a2a953f bugfix: 高级工具菜单选中状态 2025-11-17 13:42:57 +08:00
zhangyh
f18ba483ce bugfix: like失效 2025-11-17 10:47:32 +08:00
zhangyh
2af1286ebf feat: 首帧和首尾帧列表不共用 2025-11-17 10:26:28 +08:00
X1627315083
5cb7790afd fix 2025-11-14 17:36:36 +08:00
X1627315083
6a894c4f3d Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-14 17:20:22 +08:00
X1627315083
38a7cd9015 修复高级工具存在objectId无法创建项目 2025-11-14 17:20:18 +08:00
zhangyh
2978591aea feat: 通过路径直接打开订阅弹窗 2025-11-14 16:47:17 +08:00
zhangyh
b1cc02b8ee bugfix: 删除已经上传的图片 2025-11-14 16:34:42 +08:00
zhangyh
68ab91780e bugfix: 删除尾帧图片 2025-11-14 16:34:09 +08:00
X1627315083
1b289ae265 affiliate修改佣金比例结构替换编辑接口 2025-11-14 16:01:31 +08:00
zhangyh
1f58fbd286 bugfix: 上传首帧图片不显示 2025-11-14 15:48:50 +08:00
zhangyh
398778a228 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-14 15:32:54 +08:00
李志鹏
9b0e50555b 画笔指示器偶尔丢失 2025-11-14 15:24:54 +08:00
zhangyh
3be5ada52d Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-14 15:20:49 +08:00
zhangyh
4049a0ff8d feat: 首尾帧回显 2025-11-14 15:20:46 +08:00
zhangyh
c32afb99ce feat: 弹窗&prompt i18n 2025-11-14 15:10:32 +08:00
李志鹏
0c68ff10e3 修改密码校验, 重发验证码倒计时 2025-11-14 14:57:16 +08:00
李志鹏
dd02a2000c Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-14 14:44:04 +08:00
李志鹏
5d381326cb 重新发送验证码定时器复位 2025-11-14 14:44:03 +08:00
X1627315083
9e0d3b51fa Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-14 14:30:51 +08:00
X1627315083
7c6f1aea43 修改密码添加密码条件 2025-11-14 14:30:49 +08:00
李志鹏
1d2dcedf9f 更改生成线稿like类别 2025-11-14 14:27:59 +08:00
李志鹏
737c8eadeb 部分页面添加隐藏画布 2025-11-14 11:19:18 +08:00
X1627315083
23c547c4cc Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-14 10:07:25 +08:00
X1627315083
79f0ecb2b4 detail 可以把系统sketch添加到个人libarry 2025-11-14 10:07:21 +08:00
zhangyh
80472a9cec Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-14 10:06:48 +08:00
zhangyh
08ef0b8e96 feat: 产品图转视频 2025-11-14 10:06:44 +08:00
李志鹏
34ee867074 画笔图片加载路径更改 2025-11-13 17:10:05 +08:00
李志鹏
08f4f9bd89 新增画布是否可以修改背景 2025-11-13 16:53:45 +08:00
李志鹏
e806e0da73 红绿图模式禁用一些快捷键功能 2025-11-13 16:32:35 +08:00
李志鹏
917aea07e1 红绿图金禁用粘贴和拖入图片功能 2025-11-13 16:27:14 +08:00
李志鹏
0478e95f4f 画布文字取消编辑关闭文字面板 2025-11-13 16:07:32 +08:00
李志鹏
f6178d8cb2 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-13 14:54:53 +08:00
李志鹏
1c33d42f99 画布组件卸载清理资源 2025-11-13 14:54:50 +08:00
X1627315083
3fab7b04dc Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-13 13:19:05 +08:00
X1627315083
56c7a222cf 取消订阅新加条件 2025-11-13 13:19:03 +08:00
zhangyh
8e17dc9942 style: promptInput样式 2025-11-13 11:38:02 +08:00
X1627315083
c85d69bdf0 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-13 11:21:29 +08:00
X1627315083
d0e2f9e066 Affiliate增加链接访问数量 修复项目设置current project不会更新问题 2025-11-13 11:21:27 +08:00
李志鹏
4c951b3a0a 画布取消选中时关闭面板 2025-11-13 11:18:34 +08:00
李志鹏
af71ed2af4 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-13 11:08:08 +08:00
李志鹏
710dc7d57e 添加画布拖拽上传图片 2025-11-13 11:08:06 +08:00
X1627315083
c0d3baa6ee Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-13 10:56:51 +08:00
X1627315083
c54d9fa2f6 模板组件 2025-11-13 10:56:26 +08:00
zhangyh
068078ea83 feat: 播放按钮 2025-11-12 17:19:21 +08:00
zhangyh
c8e0522f9e Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-12 16:34:15 +08:00
zhangyh
463134612b feat: toProduct未输入提示词时不可生成 2025-11-12 16:33:17 +08:00
李志鹏
54aba49141 裁剪图片语言适配 2025-11-12 16:18:27 +08:00
李志鹏
cc708ad431 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-12 16:13:50 +08:00
李志鹏
b24bcf68f2 添加图层剪切功能 2025-11-12 16:12:02 +08:00
zhangyh
16bea0f261 feat: videoType选择 2025-11-12 15:42:08 +08:00
zhangyh
b3432683a7 style: textarea修改为随高度变化 2025-11-12 14:43:29 +08:00
zhangyh
cca2642bf0 bugfix: 文字错误 2025-11-12 14:26:00 +08:00
zhangyh
23a775bc30 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-12 13:29:26 +08:00
zhangyh
ec61db9029 feat: 修改prompt顺序 2025-11-12 13:24:30 +08:00
李志鹏
2117f9d9d1 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-12 10:26:47 +08:00
李志鹏
e0d1be0cfa 选择模式下删除选中图层自动激活第一个图层 2025-11-12 10:26:43 +08:00
zhangyh
841416f2d0 style: 上传trigger样式 2025-11-12 10:12:43 +08:00
X1627315083
06f36092bd Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-12 10:05:03 +08:00
X1627315083
10844bc820 修复上传图片404问题 2025-11-12 10:05:00 +08:00
李志鹏
29d835aeb3 修复多选删除图层问题 2025-11-12 09:47:01 +08:00
李志鹏
c4fd772409 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-11 17:35:02 +08:00
李志鹏
e5fc07e5e3 添加画布粘贴外部文字和图片 2025-11-11 17:35:00 +08:00
X1627315083
aeefc0c80f 订阅页面交互调整 2025-11-11 16:21:40 +08:00
X1627315083
e8623ee05e Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-11 16:17:34 +08:00
X1627315083
5c3a8975d6 fix 2025-11-11 16:17:32 +08:00
zhangyh
0ae55f53c0 style: 提示词按钮位置 2025-11-11 15:40:29 +08:00
X1627315083
28417b7b55 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-11 14:29:48 +08:00
X1627315083
53fa3a6e30 fix 2025-11-11 14:29:26 +08:00
李志鹏
9c6dd126e0 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-11 14:28:44 +08:00
李志鹏
7bc82af120 fix 2025-11-11 14:28:41 +08:00
zhangyh
751a58ba85 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-11 14:20:07 +08:00
zhangyh
cb5b4f9b65 feat: 提示词助手弹窗 2025-11-11 14:20:04 +08:00
X1627315083
67bd371725 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-11-11 13:44:42 +08:00
X1627315083
0b9de55f34 实现history页面缓存 2025-11-11 13:38:36 +08:00
zhangyh
f67af2c2a8 bugfix: 组件错误引入 2025-11-11 10:38:09 +08:00
zhangyh
5d4a61a07b Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-11 10:35:06 +08:00
zhangyh
6aff732a57 feat: prompt输入部分样式 2025-11-11 10:35:03 +08:00
李志鹏
5f3c4b5ac9 画布双击添加内部图片 2025-11-11 10:13:59 +08:00
李志鹏
4365b810db fix 2025-11-10 17:07:05 +08:00
李志鹏
804040d9fd 修改图层选择激活对象方法 2025-11-10 16:59:28 +08:00
李志鹏
8442412a34 画布选工具操作面板更改 2025-11-10 16:19:05 +08:00
李志鹏
b216852f14 画布增加图层翻转 2025-11-10 14:06:48 +08:00
李志鹏
a10f07a772 画布开发合并:选择状态消失,填充背景实时更新,图层层级关系,新增画布名字递增 2025-11-07 16:52:42 +08:00
李志鹏
4e1ac2985c Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-07 16:25:50 +08:00
李志鹏
7c340e0cb8 选择工具开发一半, 修改新建图层顺序名称 2025-11-07 16:25:41 +08:00
zhangyh
f18add1bfa feat: 根据是否是design/是否单品/是否成年展示不同的提示词 2025-11-07 15:28:38 +08:00
zhangyh
405b711f30 feat: 生成产品图未输入内容时传默认prompt 2025-11-07 14:56:02 +08:00
李志鹏
0e565eb0d5 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-07 09:43:11 +08:00
李志鹏
4c562f93cc 解决图层选中状态消失问题 2025-11-07 09:43:09 +08:00
X1627315083
ef1378a1ad Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-11-06 16:13:51 +08:00
X1627315083
787a9d5f29 修复项目进入library或者任意页面再次回来数据不会丢失 2025-11-06 16:12:22 +08:00
X1627315083
2899f4d6fe 修复液化闪屏问题 2025-11-06 14:44:16 +08:00
X1627315083
7678f4c12d 调整history文案 2025-11-06 13:42:49 +08:00
李志鹏
1688eb49fa Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-06 13:42:36 +08:00
李志鹏
4ab8da591a 填充颜色更改 2025-11-06 13:42:34 +08:00
zhangyh
833356e2a6 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-06 11:40:36 +08:00
zhangyh
c4cb34e530 bugfix: 液化工具闪烁问题 2025-11-06 11:40:33 +08:00
李志鹏
6c542de564 删除log导出 2025-11-06 11:33:02 +08:00
李志鹏
af142567f3 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-06 11:27:15 +08:00
李志鹏
21bfe5ef8f 添加生产导出log, 画布图层工具图层顺序问题 2025-11-06 11:27:12 +08:00
zhangyh
de568f4f85 bugfix: 液化工具闪烁 2025-11-06 11:04:14 +08:00
李志鹏
ccedd00ea7 液化合并图层id丢失问题 2025-11-05 16:37:22 +08:00
李志鹏
8478c57c08 Merge branch 'StableVersion' of http://18.167.251.121:10003/aidlab/aida_front into StableVersion 2025-11-05 16:33:21 +08:00
李志鹏
4030f54334 画布问题id丢失、撤回... 2025-11-05 16:28:37 +08:00
X1627315083
430332481e 修复高级工具中生成报错 2025-11-05 16:25:14 +08:00
李志鹏
0205f7c6cc fix 2025-11-05 15:18:00 +08:00
X1627315083
a0011529e0 印花板块diandian集上传跳到生成修复 2025-11-04 15:14:54 +08:00
李志鹏
fcf45c27c7 z最小查找1个 2025-11-04 13:49:32 +08:00
X1627315083
d7be2eed06 fix 2025-11-04 10:53:30 +08:00
X1627315083
e9461dce56 创建项目的项目设置bug 2025-11-04 10:44:11 +08:00
X1627315083
2f5c6346f0 改变管理员页面正序倒序bug 2025-11-03 17:03:26 +08:00
zhangyh
da4031f3a3 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-03 16:52:47 +08:00
zhangyh
758cbc9d31 style: #f5f5f5统一更换为#f9fafa 2025-11-03 16:52:43 +08:00
zhangyh
57c75cfca2 style: currentProject样式 2025-11-03 16:52:07 +08:00
李志鹏
33a4d9e398 画布隐藏关闭键盘事件 2025-11-03 16:41:54 +08:00
李志鹏
ddb5371133 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-11-03 15:37:20 +08:00
李志鹏
3c26f50c36 生成视频选择图片问题 2025-11-03 15:37:18 +08:00
zhangyh
0881b00596 feat: new project按钮样式 2025-11-03 10:04:49 +08:00
X1627315083
465f9f8004 detail撤回逻辑调整,移动位置也会添加撤回记录中 2025-10-31 15:22:43 +08:00
X1627315083
e8036b2f3c Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-30 14:00:14 +08:00
X1627315083
d1ac0caa81 修复CurrentProject的bug 2025-10-30 14:00:09 +08:00
zhangyh
ec5c10d4a9 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-30 11:49:32 +08:00
zhangyh
922d570386 feat: currentProject功能 2025-10-30 11:49:29 +08:00
X1627315083
44796283dc fix 2025-10-30 11:25:19 +08:00
赛伊德
1b931052fc 画布填充颜色不能更改和撤回问题 2025-10-28 14:06:25 +08:00
赛义德
53b4d79259 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-28 14:02:22 +08:00
赛义德
8ca4c9bad3 画布填充颜色不能更改和撤回问题 2025-10-28 14:02:20 +08:00
zhangyh
60f94f311f Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-27 16:23:01 +08:00
zhangyh
c843628b1d bugfix: 当前项目重新显示时like列表图片重叠 2025-10-27 16:22:55 +08:00
X1627315083
f8ee744a7c Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-27 15:53:02 +08:00
X1627315083
d0e71de00f 更换design没有liike记录的展示效果,生成的generate进行like传入年龄字段 2025-10-27 15:53:00 +08:00
李志鹏
41f9293957 标签选中状态问题 2025-10-27 15:42:04 +08:00
X1627315083
d474af9bf7 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-23 16:41:24 +08:00
X1627315083
d885d1f5bd 调整生成设计没有like的提示词位置 2025-10-23 16:41:22 +08:00
zhangyh
92318fa208 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-23 13:51:33 +08:00
zhangyh
fe20ed1ad3 feat: 导航列表添加返回当前编辑的项目 2025-10-23 13:51:29 +08:00
X1627315083
8ba26667c9 fix 2025-10-23 11:23:57 +08:00
X1627315083
a53ce6d402 调整订阅选择支付方式逻辑 2025-10-23 10:18:15 +08:00
zhangyh
569ffd2bf3 fix: MyEvent事件移除 2025-10-22 16:21:59 +08:00
X1627315083
d467fc92e7 修复detail 更换模特bug 2025-10-22 16:06:04 +08:00
李志鹏
6602945ebd 1212 2025-10-22 15:18:56 +08:00
李志鹏
adcaeccc33 画布组合撤回和重做bug修复 2025-10-22 14:35:34 +08:00
李志鹏
a931168d37 222 2025-10-22 10:36:20 +08:00
李志鹏
760d25e52f 111 2025-10-22 10:17:11 +08:00
李志鹏
cebf274b9e Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-22 10:12:57 +08:00
李志鹏
702cea3202 历史记录改为翻页自适应,取消滑条end 2025-10-22 10:12:55 +08:00
X1627315083
506090b5df Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-21 17:33:25 +08:00
X1627315083
70e11dc772 历史记录编辑项目设置按钮文案 2025-10-21 17:33:21 +08:00
李志鹏
5cebd0aeed Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-21 17:30:58 +08:00
李志鹏
722c6827bd 历史记录改为翻页自适应,取消滑条 2025-10-21 17:30:03 +08:00
X1627315083
e1700cf85a 调整generate-library-upload位置、生成后需要like才能保存的提示、detail的删除逻辑 2025-10-20 15:45:13 +08:00
X1627315083
0c0f4522fc 画布删除撤回、频繁撤回反撤回、图片裁剪id丢失问题修复 2025-10-17 17:39:19 +08:00
李志鹏
550af61181 画布剪切图层问题 2025-10-17 17:27:59 +08:00
李志鹏
90b4de16d8 画布新增图层撤回问题 2025-10-17 15:18:26 +08:00
李志鹏
28ee3f073b 画布删除周撤回问题 2025-10-17 14:16:08 +08:00
X1627315083
a297bb9791 管理员页面修改调用更新列表 2025-10-16 18:18:50 +08:00
X1627315083
57878af36b 修复画布过度动画导致红绿图异常 2025-10-16 16:30:09 +08:00
X1627315083
b1bb96b6fd Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2025-10-16 14:48:31 +08:00
李志鹏
74ef116d79 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-16 13:31:29 +08:00
李志鹏
ef6dd763ce 画布图层面板设置高度 2025-10-16 13:31:24 +08:00
X1627315083
4a4bdcead4 部署生产定时任务 2025-10-15 17:35:36 +08:00
X1627315083
466d60558d Merge branches 'StableVersion' and 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2025-10-15 16:31:22 +08:00
X1627315083
4e53a99c9d affiliate页面新家参数 2025-10-15 16:31:02 +08:00
X1627315083
5fe66e95fd Merge branch 'dev_vite' of https://github.com/1627315083/aida into dev_vite 2025-10-15 15:57:28 +08:00
X1627315083
0afe83954b Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2025-10-15 15:20:15 +08:00
X1627315083
fe94093da1 系统消息布局优化 2025-10-15 15:19:45 +08:00
X1627315083
f4a7d591fd fix 2025-10-15 14:27:14 +08:00
X1627315083
e6ae7cc702 fix 2025-10-15 14:23:10 +08:00
X1627315083
b11047d662 系统消息文案布局 2025-10-15 14:19:54 +08:00
X1627315083
76c37446f2 添加懒加载 2025-10-15 10:38:44 +08:00
X1627315083
fe6c59c9af fix 2025-10-15 10:04:04 +08:00
X1627315083
8b6949cfe0 Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2025-10-14 16:47:08 +08:00
X1627315083
1522415f81 fix 2025-10-14 16:46:49 +08:00
X1627315083
b5656178c3 修复design高级工具批量生成和单个编辑及生成bug 2025-10-14 16:38:29 +08:00
X1627315083
ffde930df2 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-14 15:57:56 +08:00
X1627315083
6c81d90cf7 pose视频生成好后消失,toproduct生成失败使用后端字段,like后design界面有空白 2025-10-14 15:57:53 +08:00
李志鹏
c1aad172fd 111 2025-10-14 14:46:39 +08:00
李志鹏
64d9b0e9c7 1 2025-10-14 14:33:16 +08:00
李志鹏
19d37a5d2b 标签删除问题修复 2025-10-14 14:22:06 +08:00
李志鹏
0240b50a73 brand上传多个文件出现bug 2025-10-14 13:32:07 +08:00
李志鹏
df6add8814 brand修复 2025-10-14 11:42:07 +08:00
X1627315083
cd1ac2b0d4 调整提示文案,brand上传图片不加载问题 2025-10-14 11:20:29 +08:00
李志鹏
19b1d3dd78 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-14 09:54:54 +08:00
李志鹏
25fabaae4f library字体调整 2025-10-14 09:54:52 +08:00
X1627315083
0efb7ec6da fix 2025-10-13 17:32:24 +08:00
X1627315083
022213272d 修复打开高级工具出现重复问题 2025-10-13 17:12:58 +08:00
X1627315083
d1e31c6d38 generate生成失败去掉加载元素 2025-10-13 15:34:26 +08:00
X1627315083
cae6af7a67 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-13 15:20:22 +08:00
X1627315083
8d9923f908 修复detail查看整体图大小对不上 2025-10-13 15:20:19 +08:00
李志鹏
a9283a350a 套索创建消失问题 2025-10-13 15:08:37 +08:00
X1627315083
459845a2dc 调整选择性别的语言适配 2025-10-13 11:41:01 +08:00
X1627315083
bac03bea5d Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-13 11:08:02 +08:00
X1627315083
7ec7ce5840 项目性别对应的模特最多添加4个 2025-10-13 11:08:00 +08:00
李志鹏
c3cd00dc1c 验证码防抖 2025-10-13 10:27:07 +08:00
李志鹏
39839a4d45 conmponents.d.ts添加忽略文件 2025-10-13 09:42:06 +08:00
X1627315083
d6663ed9b5 颜色板块修改颜色时候会自动关闭颜色版 2025-10-10 16:41:55 +08:00
X1627315083
5523097a0c 部分页面优化 2025-10-10 15:49:52 +08:00
李志鹏
91f551b4e5 红绿图放大绘制问题 2025-10-10 15:49:12 +08:00
李志鹏
0c70be4a56 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-10 13:54:08 +08:00
李志鹏
1a17e70e1a 画布部分语言适配 2025-10-10 13:44:44 +08:00
X1627315083
2ae2a0f761 library改为小写 2025-10-10 13:32:34 +08:00
X1627315083
1af6167100 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-10 13:03:23 +08:00
X1627315083
d35f24d817 修复页面刷新sketch会增加和颜色板块关闭后再次打开颜色异常问题 2025-10-10 13:03:21 +08:00
李志鹏
251d1a6951 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-10 11:55:53 +08:00
李志鹏
da563a31ee 修复画布删除最后一个活动图层bug 2025-10-10 11:55:50 +08:00
X1627315083
f8ebfa8809 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-09 10:15:42 +08:00
X1627315083
d6511a5ce3 更换icon 2025-10-09 10:15:40 +08:00
李志鹏
51f8702266 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-09 09:51:27 +08:00
李志鹏
52a2a75752 个人管理员添加新查询参数 2025-10-09 09:51:24 +08:00
X1627315083
1ef86293d7 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-08 13:52:45 +08:00
X1627315083
36a22cbfa8 fix 2025-10-08 13:52:41 +08:00
李志鹏
6619b1485b toproduct生成失败>关闭报错 2025-10-08 11:52:06 +08:00
X1627315083
63704fd18a 修复视频生成出结果但是按钮状态没有更新问题 2025-10-08 11:10:23 +08:00
X1627315083
09230c17c1 fix 2025-10-08 10:50:24 +08:00
zhangyh
1dde732c11 feat: 编辑服装前后片title 2025-10-08 10:47:17 +08:00
X1627315083
edf5d47987 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-08 10:31:04 +08:00
X1627315083
c147f38a8f 调整部分布局文案大小 2025-10-08 10:29:12 +08:00
zhangyh
3eb24011d2 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-08 09:52:02 +08:00
zhangyh
8c0de4ae55 style: 更换“编辑前后片”icon 2025-10-08 09:52:00 +08:00
X1627315083
0fa50cc6ae Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-10-07 11:14:07 +08:00
X1627315083
6a71ec8cee tools间距缩小 2025-10-06 17:16:01 +08:00
X1627315083
40aa1d6d25 修复detail需要直接preview衣服太大问题 2025-10-06 16:42:52 +08:00
X1627315083
cd22a27146 fix 2025-10-06 12:26:40 +08:00
X1627315083
56ab918120 测试打开detail位置信息不对问题 2025-10-06 12:04:30 +08:00
X1627315083
aedb780e45 fix 2025-10-03 17:47:02 +08:00
zhangyh
61fe587731 style: 样式优化 2025-10-03 16:31:42 +08:00
李志鹏
e3daf445cd Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-03 13:46:23 +08:00
李志鹏
35f4bcd7f4 单品编辑删除一个设计稿bug 2025-10-03 13:46:20 +08:00
X1627315083
6a360f49aa Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-10-02 15:38:48 +08:00
X1627315083
dae74c8022 修改提示词 2025-10-02 15:38:46 +08:00
李志鹏
8c6f124a86 选区套索内添加图片自动居中 2025-10-02 15:29:11 +08:00
李志鹏
b3a6ffc667 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-02 13:50:16 +08:00
李志鹏
10fc0dab10 画布选区缩略图更新问题 2025-10-02 13:41:03 +08:00
zhangyh
0170b3dbe4 fix: 合并冲突造成代码覆盖 2025-10-02 12:09:21 +08:00
zhangyh
6e8b149128 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-10-02 12:05:16 +08:00
zhangyh
c4237d99f0 fix: printboard generate菜单name初始化赋值 2025-10-02 11:56:41 +08:00
zhangyh
ee8c0fb355 fix: moodboard generate不显示上传图片 2025-10-02 11:45:00 +08:00
X1627315083
877690e559 fix 2025-10-02 11:36:40 +08:00
X1627315083
e7ca1807f0 修复印花生成文案问题 2025-10-02 11:00:01 +08:00
X1627315083
6a63c4a081 fix 2025-09-30 16:55:24 +08:00
X1627315083
627c535774 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-09-30 16:02:42 +08:00
X1627315083
0b5de6d008 调整生成方式的下拉菜单位置 2025-09-30 14:37:40 +08:00
zhangyh
29fb15bdde Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-30 14:08:11 +08:00
zhangyh
735043ae9d style: printboard-generate上传图标修改 2025-09-30 14:08:06 +08:00
李志鹏
5fd9b6dc73 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-30 13:24:47 +08:00
李志鹏
829d8e7b24 微信谷歌解绑按钮添加提二次提示框 2025-09-30 13:24:44 +08:00
X1627315083
4a6fca0148 fix 2025-09-30 13:13:17 +08:00
X1627315083
2db002d398 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-30 10:49:27 +08:00
X1627315083
3ed2e2bdb3 调整输入验证码交互 2025-09-30 10:49:01 +08:00
X1627315083
eb260566f2 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-09-30 09:33:28 +08:00
X1627315083
e2fa800cbe brand修改后后退再次进来展示的内容不是最新的 2025-09-30 09:33:25 +08:00
X1627315083
a6e01b8f57 fix 2025-09-29 14:13:24 +08:00
zhangyh
bc0702929b Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-29 14:11:18 +08:00
zhangyh
8941547d53 fix: 主页不再请求历史列表 2025-09-29 14:08:08 +08:00
李志鹏
66e3064a3a Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-29 10:46:28 +08:00
李志鹏
42f4ca0048 解决鼠标移出移入画布后笔刷指示器丢失问题 2025-09-29 10:46:27 +08:00
X1627315083
6fcc643255 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-09-29 10:20:53 +08:00
X1627315083
89a9be7de8 调整画布添加图片失败 2025-09-29 10:20:51 +08:00
李志鹏
f177c9cf5a flx 2025-09-29 10:20:31 +08:00
X1627315083
0aac7ca6f9 修复detail修改sketch后红绿图使用的是修改sketch前的图 2025-09-29 10:00:29 +08:00
李志鹏
b5fce6da42 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-29 09:45:08 +08:00
X1627315083
7cc30dfff4 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-29 09:39:33 +08:00
李志鹏
1523038c7d Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-27 13:56:16 +08:00
李志鹏
93c49292b9 fix 2025-09-27 13:56:13 +08:00
X1627315083
63193bc044 detail单件加载问题修复 2025-09-27 08:36:49 +08:00
X1627315083
e8be0c11db Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-26 21:57:29 +08:00
X1627315083
faa30619f6 fix 2025-09-26 21:55:28 +08:00
X1627315083
329660bccc detail缺少字段打开detail后先调用preview 2025-09-26 21:53:52 +08:00
X1627315083
5219e92060 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-26 19:10:52 +08:00
X1627315083
aba2fd0363 detail删除所有衣服preview报错,进行design没有模特进行提示 2025-09-26 17:13:29 +08:00
X1627315083
13bc70c103 fix 2025-09-26 15:34:55 +08:00
X1627315083
d3b49dbaf5 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-26 15:27:10 +08:00
X1627315083
11205df31a Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-09-26 15:18:29 +08:00
X1627315083
3e1054a4c7 调整画布添加图片按钮样式 2025-09-26 15:18:26 +08:00
李志鹏
aa47c91238 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-26 15:13:04 +08:00
李志鹏
844d5c0972 画布液化功能优化(图片清晰度、添加指示器) 2025-09-26 15:12:57 +08:00
zhangyh
2f2e8277d5 fix: 左侧菜单历史界面的高亮 2025-09-26 13:21:51 +08:00
zhangyh
ac6f8ea341 style: 历史页面样式修改 2025-09-26 13:08:18 +08:00
X1627315083
5e51d8132b 单件sketch颜色出问题 2025-09-26 12:32:41 +08:00
zhangyh
6e2da909b0 style: 从图片库/收藏选择图片组件的已选图片图标更换 2025-09-26 11:28:25 +08:00
bighuixiang
ed5b946e8f fix: 优化CanvasEditor组件代码格式,修复部分注释和缩进问题,提升代码可读性。 2025-09-26 01:12:56 +08:00
X1627315083
fcff09caa8 detail颜色问题 2025-09-25 23:41:33 +08:00
zhangyh
c3d7cbcc83 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-25 17:03:56 +08:00
zhangyh
928db59edc style: 历史列表操作菜单排版,颜色版上传/从收藏选择图片排版 2025-09-25 17:03:52 +08:00
X1627315083
80f409a969 pose页面添加积分不足弹窗提示 2025-09-25 16:58:52 +08:00
X1627315083
2d63a48526 解决合并冲突 2025-09-25 15:36:35 +08:00
X1627315083
bc4ba865aa 去掉修改邮箱 2025-09-25 15:30:01 +08:00
X1627315083
0f25730307 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-25 15:14:27 +08:00
X1627315083
31c4b478d6 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-09-25 14:54:14 +08:00
X1627315083
3a8e3683af Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-25 14:54:11 +08:00
X1627315083
ab9f830525 Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2025-09-25 14:29:25 +08:00
X1627315083
d50f494b34 修复detail操作按钮集中左上角 2025-09-25 14:29:23 +08:00
李志鹏
4a0ddcc0af 111 2025-09-25 14:12:02 +08:00
李志鹏
6ba33701a5 解决画布打开图片导出图片分辨率不值一问题 2025-09-25 14:01:49 +08:00
李志鹏
bd1f512e52 Merge branch 'StableVersion' of http://18.167.251.121:10003/aidlab/aida_front into StableVersion 2025-09-25 13:52:20 +08:00
李志鹏
564b75de61 解决画布打开图片导出图片分辨率不一值问题 2025-09-25 13:52:05 +08:00
zhangyh
396f29734c Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-25 13:25:34 +08:00
zhangyh
2d15fbda11 fix: 从设计详情点编辑按钮进入 canvas时的从Library选择图片 2025-09-25 13:25:30 +08:00
李志鹏
7a6ceab25a 解决画布打开图片导出图片分辨率不一值问题 2025-09-25 13:08:40 +08:00
李志鹏
fb95b9f489 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-25 13:07:31 +08:00
李志鹏
b649717e0d 解决画布打开图片导出图片分辨率不值一问题 2025-09-25 13:07:25 +08:00
X1627315083
9ac3152b6c fix 2025-09-24 18:00:26 +08:00
X1627315083
fa4e0b0f1a fix 2025-09-24 17:58:40 +08:00
X1627315083
979abe082e 修复谷歌登录、红绿图丢失、submit后颜色有问题 2025-09-24 17:56:25 +08:00
zhangyh
7b49f61cc8 feat: library-服装-画布添加从library上传 2025-09-24 17:18:32 +08:00
李志鹏
6a1075b5d4 修复画布多语言 2025-09-24 16:27:10 +08:00
李志鹏
a36aa7ad69 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-24 16:26:45 +08:00
李志鹏
016b25fcb9 修复画布多语言 2025-09-24 16:26:40 +08:00
zhangyh
59daabbbf7 style: 调整Color组件布局 2025-09-24 16:00:25 +08:00
zhangyh
35b42d03cc feat: 颜色选择器的clickoutside 2025-09-24 15:45:51 +08:00
zhangyh
45159e635b fix: 左侧历史菜单在跳转到design时需要点击两次的问题 2025-09-24 14:28:24 +08:00
zhangyh
96ae993ab0 feat: 选择Library图片组件如果传入类型,只显示对应类型 2025-09-24 13:42:27 +08:00
李志鹏
bdb3c50650 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-24 13:10:42 +08:00
李志鹏
6ddff8be5b 1 2025-09-24 13:10:39 +08:00
zhangyh
95c7b66607 revert: 创建新项目默认名称由后端传递,取消前端默认名称 2025-09-24 13:09:17 +08:00
李志鹏
6b3a3b080d Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-24 11:53:30 +08:00
李志鹏
0f7e0f2e96 画布工具添加滚动条功能 2025-09-24 11:53:25 +08:00
zhangyh
9a7dac8f86 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-24 11:51:24 +08:00
zhangyh
3e3b8b17fe feat: 颜色上传可以从library选择&历史列表参数修改 2025-09-24 11:51:22 +08:00
X1627315083
699493b724 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-09-24 11:04:41 +08:00
X1627315083
822f230d71 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-24 11:04:38 +08:00
X1627315083
108dda41ea fix 2025-09-23 23:09:13 +08:00
X1627315083
78e73b35c7 fix 2025-09-23 23:00:14 +08:00
X1627315083
1e1f837da5 修改邮箱添加用户id 2025-09-23 22:59:53 +08:00
zhangyh
05e9bada5a Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-23 16:53:57 +08:00
zhangyh
8f3fe77a27 fix: 验证码重复输入/限制输入数字 2025-09-23 16:52:50 +08:00
X1627315083
d61bb741d0 打开谷歌登录 2025-09-23 16:20:21 +08:00
X1627315083
f59e2acdac 修改邮箱添加用户id 2025-09-23 16:03:08 +08:00
X1627315083
b8e406cea4 创建优惠吗添加开始时间 2025-09-23 16:02:24 +08:00
zhangyh
55ca3e5462 feat: 历史记录编辑完成之后跳转design 2025-09-23 15:22:43 +08:00
X1627315083
29a68c2481 moodboard改为删除任意元素就删掉布局的图片 画布新加icon 链接到用户指引 调整detial页面布局 pose上传图片bug 2025-09-23 13:45:11 +08:00
zhangyh
12ca8f0eb0 feat: design界面printboard选择generate时可从Library选择图片 2025-09-23 13:41:07 +08:00
X1627315083
21f569a0ac Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-22 16:52:01 +08:00
X1627315083
d0dedb4302 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-09-22 16:51:35 +08:00
X1627315083
721143c7f9 学校登录可按条件查询,修复brand删除后更新错误 2025-09-22 16:51:31 +08:00
X1627315083
7883f24ca3 修复复制粘贴图片可以次粘贴 2025-09-22 16:50:43 +08:00
X1627315083
824af53d65 调整上班前的作品设置为不允许二创 2025-09-22 16:23:31 +08:00
zhangyh
0cf99f0e11 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-22 15:30:30 +08:00
zhangyh
d314a228ce feat: 从收藏中选择图片组件 2025-09-22 15:30:26 +08:00
zhangyh
9681b4fb8a fix: 创建新设计不填名称时默认用当前时间 2025-09-22 15:30:02 +08:00
X1627315083
f4d91986bb 修改编辑前后片底图改为线稿图 2025-09-22 15:09:26 +08:00
X1627315083
82f6fd11a0 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-22 14:10:47 +08:00
X1627315083
f4854cdb10 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-22 14:10:18 +08:00
X1627315083
042d5db050 fix 2025-09-22 14:09:56 +08:00
X1627315083
da241402f2 修复谷歌登录 2025-09-22 14:09:08 +08:00
X1627315083
4f5a02bcf3 部分页面语言适配 2025-09-22 14:01:44 +08:00
X1627315083
6402ab4b64 去掉修改邮箱icon 2025-09-22 13:37:49 +08:00
X1627315083
cd28861f0c 修改国家和地区名字 2025-09-22 13:36:10 +08:00
X1627315083
80e1d4638f 修改隐私政策地址 2025-09-22 12:35:57 +08:00
X1627315083
575875ec66 修改隐私政策地址 2025-09-22 12:34:58 +08:00
李志鹏
ab2bdc25f7 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-22 11:03:54 +08:00
李志鹏
9d51fac99f v 2025-09-22 11:01:28 +08:00
X1627315083
ddcad3c391 调整detail拉伸sketch但是编辑印花和画布使用的sketch不受影响 2025-09-22 10:29:27 +08:00
X1627315083
15cb0c86e7 关闭二创 generate生成失败提示 2025-09-20 10:52:10 +08:00
X1627315083
acb7767102 修改选择国家文案 2025-09-19 18:45:53 +08:00
X1627315083
3cbb448520 修复液化鼠标抬起后就会弹窗 2025-09-19 17:19:28 +08:00
X1627315083
95f7f52089 取消印花切换下一个的提示 2025-09-19 16:46:43 +08:00
X1627315083
f93b763b02 fix 2025-09-18 14:17:16 +08:00
zhangyh
a1bbc2d166 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-18 11:15:34 +08:00
zhangyh
526b934894 feat: 双击某一行进入对应页面 2025-09-18 11:15:09 +08:00
X1627315083
32b43b8d4a Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2025-09-18 11:04:42 +08:00
X1627315083
0725381f0e Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2025-09-18 11:04:37 +08:00
X1627315083
83df0ac2c8 修改历史记录路由名字 2025-09-18 11:04:34 +08:00
X1627315083
6f77d3d4b1 去掉brandDNA 2025-09-18 11:03:59 +08:00
zhangyh
5609270305 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-18 10:58:09 +08:00
zhangyh
4783ccaa76 feat: 历史页面搜索功能 2025-09-18 10:58:06 +08:00
X1627315083
409984b63d test 2025-09-18 10:56:31 +08:00
X1627315083
00460712a4 fix 2025-09-18 10:42:32 +08:00
X1627315083
fc8a62c9fb fix 2025-09-18 10:39:35 +08:00
X1627315083
ce224616e6 修复detail mask问题 2025-09-17 16:39:40 +08:00
zhangyh
a151b712ca Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2025-09-17 16:10:37 +08:00
zhangyh
67d72f38a8 feat: history页面列表滚动高度计算 2025-09-17 15:48:21 +08:00
X1627315083
cb4511ede1 视频弹窗无法播放视频 2025-09-17 12:28:50 +08:00
X1627315083
d90a61795c 修改用户指引的视频 2025-09-17 11:24:43 +08:00
X1627315083
d91b1c330e FIX 2025-09-16 18:44:42 +08:00
X1627315083
467d816bcd detail编辑红绿图的底图调整为线稿图 2025-09-16 18:36:52 +08:00
240 changed files with 28310 additions and 16912 deletions

View File

@@ -1,4 +1,4 @@
VITE_USER_NODE_ENV = 'production'
VITE_USER_NODE_ENV = 'development'
# VITE_APP_BASE_URL = 'https://aida.com.hk/test'
# VITE_APP_BASE_URL = 'http://18.167.251.121:10088'
# VITE_APP_BASE_URL = 'https://api.aida.com.hk'

View File

@@ -1,12 +1,6 @@
<<<<<<< HEAD
VITE_USER_NODE_ENV = 'development'
VITE_APP_BASE_URL = 'https://test.api.aida.com.hk'
# VITE_APP_BASE_URL = 'https://api.aida.com.hk'
=======
NODE_ENV = 'development'
# VUE_APP_BASE_URL = 'https://api.aida.com.hk'
VUE_APP_BASE_URL = 'https://test.api.aida.com.hk'
>>>>>>> 5d8304ce3ece21dd3200ffffb0c76e3ef55dd213
# VITE_APP_BASE_URL = 'http://18.167.251.121:10086'
# VITE_APP_BASE_URL = 'http://192.168.1.9:5567'

1
.gitignore vendored
View File

@@ -23,3 +23,4 @@ dist.rar
*.sln
*.sw?
.eslintrc-auto-import.json
components.d.ts

38
components.d.ts vendored
View File

@@ -1,38 +0,0 @@
/* eslint-disable */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
// biome-ignore lint: disable
export {}
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
ABadge: typeof import('ant-design-vue/es')['Badge']
ACheckbox: typeof import('ant-design-vue/es')['Checkbox']
AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider']
ADrawer: typeof import('ant-design-vue/es')['Drawer']
AImage: typeof import('ant-design-vue/es')['Image']
AInputNumber: typeof import('ant-design-vue/es')['InputNumber']
AModal: typeof import('ant-design-vue/es')['Modal']
APagination: typeof import('ant-design-vue/es')['Pagination']
APopover: typeof import('ant-design-vue/es')['Popover']
ARangePicker: typeof import('ant-design-vue/es')['RangePicker']
ASelect: typeof import('ant-design-vue/es')['Select']
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
ASlider: typeof import('ant-design-vue/es')['Slider']
ASpin: typeof import('ant-design-vue/es')['Spin']
ASwitch: typeof import('ant-design-vue/es')['Switch']
ATable: typeof import('ant-design-vue/es')['Table']
ATabPane: typeof import('ant-design-vue/es')['TabPane']
ATabs: typeof import('ant-design-vue/es')['Tabs']
AUpload: typeof import('ant-design-vue/es')['Upload']
ElCascader: typeof import('element-plus/es')['ElCascader']
ElLoading: typeof import('element-plus/es')['ElLoading']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
}
}

BIN
dist.7z

Binary file not shown.

9
package-lock.json generated
View File

@@ -35,7 +35,8 @@
"vue-i18n": "^9.6.1",
"vue-router": "^4.0.3",
"vuedraggable": "^4.1.0",
"vuex": "^4.0.0"
"vuex": "^4.0.0",
"x-sender": "^1.1.6"
},
"devDependencies": {
"@types/three": "^0.174.0",
@@ -10106,6 +10107,12 @@
}
}
},
"node_modules/x-sender": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/x-sender/-/x-sender-1.1.6.tgz",
"integrity": "sha512-es24YnTY1+g3TdDVrEgRVW8uW2nYPyHjQveBgZxk8JrB7809yd8AkYptrLgqL1trpUZtMILVW+2GIoB0V5HfVQ==",
"license": "MIT"
},
"node_modules/xml-name-validator": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz",

View File

@@ -41,7 +41,8 @@
"vue-i18n": "^9.6.1",
"vue-router": "^4.0.3",
"vuedraggable": "^4.1.0",
"vuex": "^4.0.0"
"vuex": "^4.0.0",
"x-sender": "^1.1.6"
},
"devDependencies": {
"@types/three": "^0.174.0",
@@ -105,4 +106,4 @@
"not dead",
"not ie 11"
]
}
}

View File

@@ -0,0 +1,427 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<title>style category</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
<style>
body {
margin: 0;
padding: 0;
font-family: sans-serif;
box-sizing: border-box;
background-color: #f9f9f9;
}
.viewport {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: auto;
background-color: #f9f9f9;
cursor: grab;
scrollbar-width: thick;
scrollbar-color: #666 #eee;
}
.viewport::-webkit-scrollbar {
height: 16px;
width: 16px;
}
.viewport::-webkit-scrollbar-track {
background: #eee;
border-radius: 8px;
}
.viewport::-webkit-scrollbar-thumb {
background: #666;
border-radius: 8px;
border: 3px solid #eee;
}
.viewport::-webkit-scrollbar-thumb:hover {
background: #333;
}
.content-size {
position: relative;
width: 100%;
height: 100%;
}
.content {
padding: 30px;
transform-origin: top left;
width: max-content;
min-width: 100%;
}
h1 {
text-align: center;
font-size: 100px;
margin: 40px 0 60px;
font-weight: bold;
color: #333;
}
.chart-section {
margin-bottom: 80px;
background: #fff;
border-radius: 16px;
padding: 30px;
box-shadow: 0 6px 20px rgba(0,0,0,0.08);
}
h2 {
text-align: center;
font-size: 80px;
margin: 0 0 40px;
font-weight: bold;
color: #444;
}
.chart-container {
overflow-x: auto;
width: 100%;
min-width: 8000px; /* 适配20倍组间空隙大幅扩大容器宽度 */
min-height: 1900px;
scrollbar-width: thick;
scrollbar-color: #666 #eee;
padding-bottom: 100px;
}
/* 自定义滚动条 */
.chart-container::-webkit-scrollbar {
height: 16px;
}
.chart-container::-webkit-scrollbar-track {
background: #eee;
border-radius: 8px;
}
.chart-container::-webkit-scrollbar-thumb {
background: #666;
border-radius: 8px;
border: 3px solid #eee;
}
.chart-container::-webkit-scrollbar-thumb:hover {
background: #333;
}
canvas {
width: 100%;
height: 1800px !important;
background: #fff;
border: 2px solid #ddd;
border-radius: 12px;
box-shadow: 0 4px 16px rgba(0,0,0,0.1);
}
/* 响应式调整保持默认缩放30%,不额外调整 */
@media (max-width: 1200px) {
.chart-container {
min-height: 1900px;
}
canvas {
height: 1800px !important;
}
h1 {
font-size: 48px;
}
h2 {
font-size: 36px;
}
}
</style>
<!-- 禁止页面缩放的meta标签 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
</head>
<body>
<div id="viewport" class="viewport">
<div id="content-size" class="content-size">
<div id="content" class="content">
<h1>style category</h1>
<div class="chart-section">
<h2>1. ALL </h2>
<div class="chart-container">
<canvas id="chartAll"></canvas>
</div>
</div>
<div class="chart-section">
<h2>2. Male </h2>
<div class="chart-container">
<canvas id="chartMale"></canvas>
</div>
</div>
<div class="chart-section">
<h2>3. Female </h2>
<div class="chart-container">
<canvas id="chartFemale"></canvas>
</div>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const viewport = document.getElementById('viewport');
const content = document.getElementById('content');
const contentSize = document.getElementById('content-size');
let MIN_SCALE = 1;
const MAX_SCALE = 3;
let scale = 1;
function computeMinScale() {
const cw = content.offsetWidth;
const vw = viewport.clientWidth;
if (!cw || !vw) return 1;
return Math.min(MAX_SCALE, Math.max(0.2, vw / cw));
}
function updateWrapperSize() {
const w = content.offsetWidth * scale;
const h = content.offsetHeight * scale;
contentSize.style.width = w + 'px';
contentSize.style.height = h + 'px';
}
function applyScale(newScale, ax, ay) {
const prev = scale;
const target = Math.max(MIN_SCALE, Math.min(MAX_SCALE, newScale));
if (target === prev) return;
const ratio = target / prev;
const rect = viewport.getBoundingClientRect();
const anchorX = ax != null ? ax : viewport.scrollLeft + viewport.clientWidth / 2;
const anchorY = ay != null ? ay : viewport.scrollTop + viewport.clientHeight / 2;
scale = target;
content.style.transform = 'scale(' + scale + ')';
updateWrapperSize();
let newLeft = anchorX * ratio - viewport.clientWidth / 2;
let newTop = anchorY * ratio - viewport.clientHeight / 2;
const maxLeft = Math.max(0, contentSize.scrollWidth - viewport.clientWidth);
const maxTop = Math.max(0, contentSize.scrollHeight - viewport.clientHeight);
viewport.scrollLeft = Math.max(0, Math.min(maxLeft, newLeft));
viewport.scrollTop = Math.max(0, Math.min(maxTop, newTop));
}
function initScale() {
MIN_SCALE = computeMinScale();
scale = MIN_SCALE;
content.style.transform = 'scale(' + scale + ')';
updateWrapperSize();
}
initScale();
let dragging = false;
let sx = 0, sy = 0, sl = 0, st = 0;
viewport.addEventListener('mousedown', function(e) {
if (e.button !== 0) return;
dragging = true;
viewport.style.cursor = 'grabbing';
sx = e.clientX;
sy = e.clientY;
sl = viewport.scrollLeft;
st = viewport.scrollTop;
});
window.addEventListener('mousemove', function(e) {
if (!dragging) return;
viewport.scrollLeft = sl - (e.clientX - sx);
viewport.scrollTop = st - (e.clientY - sy);
});
window.addEventListener('mouseup', function() {
dragging = false;
viewport.style.cursor = '';
});
viewport.addEventListener('wheel', function(e) {
if (e.ctrlKey || e.metaKey) {
e.preventDefault();
const factor = e.deltaY < 0 ? 1.1 : 0.9;
const rect = viewport.getBoundingClientRect();
const ax = viewport.scrollLeft + (e.clientX - rect.left);
const ay = viewport.scrollTop + (e.clientY - rect.top);
const next = scale * factor;
applyScale(next < MIN_SCALE ? MIN_SCALE : next, ax, ay);
}
}, { passive: false });
window.addEventListener('resize', function() {
const prevMin = MIN_SCALE;
MIN_SCALE = computeMinScale();
if (scale < MIN_SCALE) {
applyScale(MIN_SCALE);
} else {
updateWrapperSize();
}
});
window.addEventListener('load', function() {
initScale();
});
});
// 共用配置 - 保持原有标签处理逻辑(下划线换行)
const labels = [
'ACADEMIC','BUSINESS','CASUAL','COUNTRY_STYLE','DOPAMINE','ETHNIC','FUTURISM',
'GOTHIC','LOLITA','MERLAD','MINIMALISM','NEW_CHINESE','OUTDOOR_FUNCTIONAL',
'POST_APOCALYPTIC','PREPPY','ROCK','ROMANTIC','SEXY','SWEET','WABI_SABI','Y2K','民族风'
].map(label => label.replace('_', '\n'));
// 所有数据(保持更新后的数值)
const allData = {
male_tops: [0,686,638,491,128,11,366,35,0,20,313,126,359,166,385,187,6,3,3,219,282,0],
male_bottoms: [0,280,199,141,132,1,43,49,0,13,178,93,279,10,96,25,0,5,0,163,239,0],
male_outwear: [0,2442,2147,1245,161,19,671,216,0,58,471,168,1001,319,803,367,11,1,1,278,631,0],
female_dress: [260,1030,4322,1158,256,0,397,340,488,279,1104,312,215,170,0,223,990,607,1438,293,292,159],
female_skirt: [408,662,1177,633,214,0,381,280,278,308,358,200,297,209,0,231,584,233,714,246,385,95],
female_blouse: [618,1275,3786,710,385,0,533,412,454,453,616,221,852,181,0,437,869,533,899,336,991,169],
female_outwear: [267,1255,740,453,178,0,418,160,101,301,273,172,712,172,0,245,198,13,159,280,500,76],
female_trousers: [171,782,1899,391,232,0,267,64,137,293,351,141,865,101,0,189,654,137,319,299,427,96]
};
// 颜色配置(保持原有颜色)
const colors = {
male_tops: '#1f77b4',
male_bottoms: '#ff7f0e',
male_outwear: '#2ca02c',
female_dress: '#d62728',
female_skirt: '#9467bd',
female_blouse: '#8c564b',
female_outwear: '#e377c2',
female_trousers: '#7f7f7f'
};
// 图表基础配置 - 核心修改categoryPercentage设为0.04原0.8的1/20扩大组间空隙20倍
const baseChartConfig = {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'top',
labels: {
font: { size: 60, weight: 'bold' },
padding: 60,
boxWidth: 60
},
padding: { bottom: 60 }
},
tooltip: {
mode: 'index',
intersect: false,
padding: 30,
titleFont: { size: 60 },
bodyFont: { size: 42 },
boxPadding: 20,
cornerRadius: 12
}
},
scales: {
x: {
stacked: false,
title: {
display: true,
text: '',
font: { size: 1, weight: 'bold' },
padding: { top: 1, bottom: 1 }
},
ticks: {
maxRotation: 0, // 保持原有斜放角度向左下45度
minRotation: 0, // 强制固定角度
autoSkip: false,
font: { size: 28, weight: 'bold' },
padding: 150,
color: '#333',
lineHeight: 1.3,
align: 'right' // 斜放标签右对齐,提升可读性
},
grid: { display: false },
border: { width: 3 },
categoryPercentage: 0.5, // 核心修改原0.8 → 0.04组间空隙扩大20倍
barPercentage: 0.8, // 保持组内柱子宽度不变
},
y: {
beginAtZero: true,
title: {
display: true,
text: '',
font: { size: 1, weight: 'bold' },
padding: { right: 1 }
},
ticks: {
font: { size: 33, weight: 'bold' },
padding: 30,
color: '#333',
stepSize: 500 // 适配更大数值范围
},
grid: { color: '#e0e0e0', lineWidth: 3 },
border: { width: 3 }
}
},
layout: {
padding: { top: 60, right: 90, bottom: 100, left: 90 }
},
animation: { duration: 1500, easing: 'easeOutQuart' },
barThickness: 'flex',
maxBarThickness: 70,
minBarLength: 5
};
// 1. 创建综合图表
new Chart(document.getElementById('chartAll'), {
type: 'bar',
data: {
labels: labels,
datasets: Object.keys(allData).map(key => ({
label: key,
data: allData[key],
backgroundColor: colors[key]
}))
},
options: { ...baseChartConfig }
});
// 2. 创建男性分类图表
new Chart(document.getElementById('chartMale'), {
type: 'bar',
data: {
labels: labels,
datasets: [
{ label: 'male_tops', data: allData.male_tops, backgroundColor: colors.male_tops },
{ label: 'male_bottoms', data: allData.male_bottoms, backgroundColor: colors.male_bottoms },
{ label: 'male_outwear', data: allData.male_outwear, backgroundColor: colors.male_outwear }
]
},
options: {
...baseChartConfig,
scales: {
...baseChartConfig.scales,
x: {
...baseChartConfig.scales.x,
categoryPercentage: 0.35
},
y: {
...baseChartConfig.scales.y,
stepSize: 800 // 适配男性外套最大值2442
}
}
}
});
// 3. 创建女性分类图表
new Chart(document.getElementById('chartFemale'), {
type: 'bar',
data: {
labels: labels,
datasets: [
{ label: 'female_dress', data: allData.female_dress, backgroundColor: colors.female_dress },
{ label: 'female_skirt', data: allData.female_skirt, backgroundColor: colors.female_skirt },
{ label: 'female_blouse', data: allData.female_blouse, backgroundColor: colors.female_blouse },
{ label: 'female_outwear', data: allData.female_outwear, backgroundColor: colors.female_outwear },
{ label: 'female_trousers', data: allData.female_trousers, backgroundColor: colors.female_trousers }
]
},
options: {
...baseChartConfig,
scales: {
...baseChartConfig.scales,
x: {
...baseChartConfig.scales.x,
categoryPercentage: 0.28
},
y: {
...baseChartConfig.scales.y,
stepSize: 1000 // 适配女性连衣裙最大值4322
}
}
}
});
</script>
</body>
</html>

View File

@@ -0,0 +1,539 @@
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}

View File

@@ -0,0 +1,970 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>iconfont Demo</title>
<link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
<link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg"/>
<link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
<link rel="stylesheet" href="demo.css">
<link rel="stylesheet" href="iconfont.css">
<script src="iconfont.js"></script>
<!-- jQuery -->
<script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
<!-- 代码高亮 -->
<script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
<style>
.main .logo {
margin-top: 0;
height: auto;
}
.main .logo a {
display: flex;
align-items: center;
}
.main .logo .sub-title {
margin-left: 0.5em;
font-size: 22px;
color: #fff;
background: linear-gradient(-45deg, #3967FF, #B500FE);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
</style>
</head>
<body>
<div class="main">
<h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">
<img width="200" src="https://img.alicdn.com/imgextra/i3/O1CN01Mn65HV1FfSEzR6DKv_!!6000000000514-55-tps-228-59.svg">
</a></h1>
<div class="nav-tabs">
<ul id="tabs" class="dib-box">
<li class="dib active"><span>Unicode</span></li>
<li class="dib"><span>Font class</span></li>
<li class="dib"><span>Symbol</span></li>
</ul>
<a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=4292253" target="_blank" class="nav-more">查看项目</a>
</div>
<div class="tab-container">
<div class="content unicode" style="display: block;">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe650;</span>
<div class="name">裁剪</div>
<div class="code-name">&amp;#xe650;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe60a;</span>
<div class="name">角度</div>
<div class="code-name">&amp;#xe60a;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe69e;</span>
<div class="name">水平翻转</div>
<div class="code-name">&amp;#xe69e;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xec60;</span>
<div class="name">垂直翻转</div>
<div class="code-name">&amp;#xec60;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe8d1;</span>
<div class="name">clothes</div>
<div class="code-name">&amp;#xe8d1;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe647;</span>
<div class="name">材质</div>
<div class="code-name">&amp;#xe647;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe61b;</span>
<div class="name">IC-液化</div>
<div class="code-name">&amp;#xe61b;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe751;</span>
<div class="name">上一层</div>
<div class="code-name">&amp;#xe751;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe604;</span>
<div class="name">上一层</div>
<div class="code-name">&amp;#xe604;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe68a;</span>
<div class="name">下一层</div>
<div class="code-name">&amp;#xe68a;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe68b;</span>
<div class="name">上一层</div>
<div class="code-name">&amp;#xe68b;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6a1;</span>
<div class="name">审批</div>
<div class="code-name">&amp;#xe6a1;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe617;</span>
<div class="name">用户</div>
<div class="code-name">&amp;#xe617;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe601;</span>
<div class="name">使用次数</div>
<div class="code-name">&amp;#xe601;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe634;</span>
<div class="name">下拉</div>
<div class="code-name">&amp;#xe634;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe600;</span>
<div class="name">编辑</div>
<div class="code-name">&amp;#xe600;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe64f;</span>
<div class="name">圆形</div>
<div class="code-name">&amp;#xe64f;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe615;</span>
<div class="name">三角形</div>
<div class="code-name">&amp;#xe615;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe632;</span>
<div class="name">图层</div>
<div class="code-name">&amp;#xe632;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe616;</span>
<div class="name">平移</div>
<div class="code-name">&amp;#xe616;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe67b;</span>
<div class="name">橡皮</div>
<div class="code-name">&amp;#xe67b;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe64c;</span>
<div class="name">tx-fill-椭圆形</div>
<div class="code-name">&amp;#xe64c;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe602;</span>
<div class="name">直线</div>
<div class="code-name">&amp;#xe602;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xec5f;</span>
<div class="name">线</div>
<div class="code-name">&amp;#xec5f;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xea6f;</span>
<div class="name">正方形</div>
<div class="code-name">&amp;#xea6f;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe62d;</span>
<div class="name">图层</div>
<div class="code-name">&amp;#xe62d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe685;</span>
<div class="name">点位</div>
<div class="code-name">&amp;#xe685;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe620;</span>
<div class="name">并集</div>
<div class="code-name">&amp;#xe620;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe668;</span>
<div class="name">并集</div>
<div class="code-name">&amp;#xe668;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe603;</span>
<div class="name">标签</div>
<div class="code-name">&amp;#xe603;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe85f;</span>
<div class="name">语言</div>
<div class="code-name">&amp;#xe85f;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe626;</span>
<div class="name">撤销 返回 撤回 上一步</div>
<div class="code-name">&amp;#xe626;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe609;</span>
<div class="name">撤销 返回 撤回 上一步</div>
<div class="code-name">&amp;#xe609;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe66c;</span>
<div class="name">外套_长款外套1@1x</div>
<div class="code-name">&amp;#xe66c;</div>
</li>
</ul>
<div class="article markdown">
<h2 id="unicode-">Unicode 引用</h2>
<hr>
<p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
<ul>
<li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
<li>默认情况下不支持多色,直接添加多色图标会自动去色。</li>
</ul>
<blockquote>
<p>注意:新版 iconfont 支持两种方式引用多色图标SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)</p>
</blockquote>
<p>Unicode 使用步骤如下:</p>
<h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1762934152017') format('woff2'),
url('iconfont.woff?t=1762934152017') format('woff'),
url('iconfont.ttf?t=1762934152017') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
<pre><code class="language-css"
>.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
</code></pre>
<h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
<pre>
<code class="language-html"
>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
</code></pre>
<blockquote>
<p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看默认是 "iconfont"。</p>
</blockquote>
</div>
</div>
<div class="content font-class">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-caijian"></span>
<div class="name">
裁剪
</div>
<div class="code-name">.icon-caijian
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-angle"></span>
<div class="name">
角度
</div>
<div class="code-name">.icon-angle
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-flip-horizontal"></span>
<div class="name">
水平翻转
</div>
<div class="code-name">.icon-flip-horizontal
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-flip-vertical"></span>
<div class="name">
垂直翻转
</div>
<div class="code-name">.icon-flip-vertical
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-clothes"></span>
<div class="name">
clothes
</div>
<div class="code-name">.icon-clothes
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-caizhi"></span>
<div class="name">
材质
</div>
<div class="code-name">.icon-caizhi
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-IC-yehua"></span>
<div class="name">
IC-液化
</div>
<div class="code-name">.icon-IC-yehua
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-shangyiceng"></span>
<div class="name">
上一层
</div>
<div class="code-name">.icon-shangyiceng
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-shangyiceng1"></span>
<div class="name">
上一层
</div>
<div class="code-name">.icon-shangyiceng1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-xiayiceng"></span>
<div class="name">
下一层
</div>
<div class="code-name">.icon-xiayiceng
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-shangyiceng2"></span>
<div class="name">
上一层
</div>
<div class="code-name">.icon-shangyiceng2
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-shenpi"></span>
<div class="name">
审批
</div>
<div class="code-name">.icon-shenpi
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-yonghu"></span>
<div class="name">
用户
</div>
<div class="code-name">.icon-yonghu
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-usetime"></span>
<div class="name">
使用次数
</div>
<div class="code-name">.icon-usetime
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-xiala"></span>
<div class="name">
下拉
</div>
<div class="code-name">.icon-xiala
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-bianji"></span>
<div class="name">
编辑
</div>
<div class="code-name">.icon-bianji
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-circle"></span>
<div class="name">
圆形
</div>
<div class="code-name">.icon-circle
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-sanjiaoxing"></span>
<div class="name">
三角形
</div>
<div class="code-name">.icon-sanjiaoxing
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tuceng"></span>
<div class="name">
图层
</div>
<div class="code-name">.icon-tuceng
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-move"></span>
<div class="name">
平移
</div>
<div class="code-name">.icon-move
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-xiangpi_huaban1"></span>
<div class="name">
橡皮
</div>
<div class="code-name">.icon-xiangpi_huaban1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tx-fill-tuoyuanxing"></span>
<div class="name">
tx-fill-椭圆形
</div>
<div class="code-name">.icon-tx-fill-tuoyuanxing
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-zhixian"></span>
<div class="name">
直线
</div>
<div class="code-name">.icon-zhixian
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-xian"></span>
<div class="name">
线
</div>
<div class="code-name">.icon-xian
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-checkbox-full"></span>
<div class="name">
正方形
</div>
<div class="code-name">.icon-checkbox-full
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tuceng1"></span>
<div class="name">
图层
</div>
<div class="code-name">.icon-tuceng1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-dianwei"></span>
<div class="name">
点位
</div>
<div class="code-name">.icon-dianwei
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-bingji"></span>
<div class="name">
并集
</div>
<div class="code-name">.icon-bingji
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-bingji1"></span>
<div class="name">
并集
</div>
<div class="code-name">.icon-bingji1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-biaoqian"></span>
<div class="name">
标签
</div>
<div class="code-name">.icon-biaoqian
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-yuyan"></span>
<div class="name">
语言
</div>
<div class="code-name">.icon-yuyan
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-fanchehui"></span>
<div class="name">
撤销 返回 撤回 上一步
</div>
<div class="code-name">.icon-fanchehui
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-chehui"></span>
<div class="name">
撤销 返回 撤回 上一步
</div>
<div class="code-name">.icon-chehui
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-a-waitao_changkuanwaitao11x"></span>
<div class="name">
外套_长款外套1@1x
</div>
<div class="code-name">.icon-a-waitao_changkuanwaitao11x
</div>
</li>
</ul>
<div class="article markdown">
<h2 id="font-class-">font-class 引用</h2>
<hr>
<p>font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。</p>
<p>与 Unicode 使用方式相比,具有如下特点:</p>
<ul>
<li>相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。</li>
<li>因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。</li>
</ul>
<p>使用步骤如下:</p>
<h3 id="-fontclass-">第一步:引入项目下面生成的 fontclass 代码:</h3>
<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
</code></pre>
<h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
<pre><code class="language-html">&lt;span class="iconfont icon-xxx"&gt;&lt;/span&gt;
</code></pre>
<blockquote>
<p>"
iconfont" 是你项目下的 font-family。可以通过编辑项目查看默认是 "iconfont"。</p>
</blockquote>
</div>
</div>
<div class="content symbol">
<ul class="icon_lists dib-box">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-caijian"></use>
</svg>
<div class="name">裁剪</div>
<div class="code-name">#icon-caijian</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-angle"></use>
</svg>
<div class="name">角度</div>
<div class="code-name">#icon-angle</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-flip-horizontal"></use>
</svg>
<div class="name">水平翻转</div>
<div class="code-name">#icon-flip-horizontal</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-flip-vertical"></use>
</svg>
<div class="name">垂直翻转</div>
<div class="code-name">#icon-flip-vertical</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-clothes"></use>
</svg>
<div class="name">clothes</div>
<div class="code-name">#icon-clothes</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-caizhi"></use>
</svg>
<div class="name">材质</div>
<div class="code-name">#icon-caizhi</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-IC-yehua"></use>
</svg>
<div class="name">IC-液化</div>
<div class="code-name">#icon-IC-yehua</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-shangyiceng"></use>
</svg>
<div class="name">上一层</div>
<div class="code-name">#icon-shangyiceng</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-shangyiceng1"></use>
</svg>
<div class="name">上一层</div>
<div class="code-name">#icon-shangyiceng1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-xiayiceng"></use>
</svg>
<div class="name">下一层</div>
<div class="code-name">#icon-xiayiceng</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-shangyiceng2"></use>
</svg>
<div class="name">上一层</div>
<div class="code-name">#icon-shangyiceng2</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-shenpi"></use>
</svg>
<div class="name">审批</div>
<div class="code-name">#icon-shenpi</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-yonghu"></use>
</svg>
<div class="name">用户</div>
<div class="code-name">#icon-yonghu</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-usetime"></use>
</svg>
<div class="name">使用次数</div>
<div class="code-name">#icon-usetime</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-xiala"></use>
</svg>
<div class="name">下拉</div>
<div class="code-name">#icon-xiala</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-bianji"></use>
</svg>
<div class="name">编辑</div>
<div class="code-name">#icon-bianji</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-circle"></use>
</svg>
<div class="name">圆形</div>
<div class="code-name">#icon-circle</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-sanjiaoxing"></use>
</svg>
<div class="name">三角形</div>
<div class="code-name">#icon-sanjiaoxing</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tuceng"></use>
</svg>
<div class="name">图层</div>
<div class="code-name">#icon-tuceng</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-move"></use>
</svg>
<div class="name">平移</div>
<div class="code-name">#icon-move</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-xiangpi_huaban1"></use>
</svg>
<div class="name">橡皮</div>
<div class="code-name">#icon-xiangpi_huaban1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tx-fill-tuoyuanxing"></use>
</svg>
<div class="name">tx-fill-椭圆形</div>
<div class="code-name">#icon-tx-fill-tuoyuanxing</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-zhixian"></use>
</svg>
<div class="name">直线</div>
<div class="code-name">#icon-zhixian</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-xian"></use>
</svg>
<div class="name">线</div>
<div class="code-name">#icon-xian</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-checkbox-full"></use>
</svg>
<div class="name">正方形</div>
<div class="code-name">#icon-checkbox-full</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tuceng1"></use>
</svg>
<div class="name">图层</div>
<div class="code-name">#icon-tuceng1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-dianwei"></use>
</svg>
<div class="name">点位</div>
<div class="code-name">#icon-dianwei</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-bingji"></use>
</svg>
<div class="name">并集</div>
<div class="code-name">#icon-bingji</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-bingji1"></use>
</svg>
<div class="name">并集</div>
<div class="code-name">#icon-bingji1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-biaoqian"></use>
</svg>
<div class="name">标签</div>
<div class="code-name">#icon-biaoqian</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-yuyan"></use>
</svg>
<div class="name">语言</div>
<div class="code-name">#icon-yuyan</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-fanchehui"></use>
</svg>
<div class="name">撤销 返回 撤回 上一步</div>
<div class="code-name">#icon-fanchehui</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-chehui"></use>
</svg>
<div class="name">撤销 返回 撤回 上一步</div>
<div class="code-name">#icon-chehui</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-a-waitao_changkuanwaitao11x"></use>
</svg>
<div class="name">外套_长款外套1@1x</div>
<div class="code-name">#icon-a-waitao_changkuanwaitao11x</div>
</li>
</ul>
<div class="article markdown">
<h2 id="symbol-">Symbol 引用</h2>
<hr>
<p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
<ul>
<li>支持多色图标了,不再受单色限制。</li>
<li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
<li>兼容性较差,支持 IE9+,及现代浏览器。</li>
<li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
</ul>
<p>使用步骤如下:</p>
<h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
</code></pre>
<h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
<pre><code class="language-html">&lt;style&gt;
.icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
&lt;/style&gt;
</code></pre>
<h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
&lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
&lt;/svg&gt;
</code></pre>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function () {
$('.tab-container .content:first').show()
$('#tabs li').click(function (e) {
var tabContent = $('.tab-container .content')
var index = $(this).index()
if ($(this).hasClass('active')) {
return
} else {
$('#tabs li').removeClass('active')
$(this).addClass('active')
tabContent.hide().eq(index).fadeIn()
}
})
})
</script>
</body>
</html>

View File

@@ -1,18 +1,38 @@
@font-face {
font-family: "iconfont"; /* Project id 4292253 */
src: url('iconfont.woff2?t=1727415711578') format('woff2'),
url('iconfont.woff?t=1727415711578') format('woff'),
url('iconfont.ttf?t=1727415711578') format('truetype');
src: url('iconfont.woff2?t=1762934152017') format('woff2'),
url('iconfont.woff?t=1762934152017') format('woff'),
url('iconfont.ttf?t=1762934152017') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 1.8rem;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-caijian:before {
content: "\e650";
}
.icon-angle:before {
content: "\e60a";
}
.icon-flip-horizontal:before {
content: "\e69e";
}
.icon-flip-vertical:before {
content: "\ec60";
}
.icon-clothes:before {
content: "\e8d1";
}
.icon-caizhi:before {
content: "\e647";
}

File diff suppressed because one or more lines are too long

View File

@@ -1,170 +1,247 @@
{
"id": "",
"name": "",
"id": "4292253",
"name": "aida",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "124968799",
"name": "外套_长款外套1@1x",
"font_class": "a-waitao_changkuanwaitao11x",
"unicode": "e66c",
"unicode_decimal": 58988
"icon_id": "22138606",
"name": "裁剪",
"font_class": "caijian",
"unicode": "e650",
"unicode_decimal": 58960
},
{
"icon_id": "125198319",
"name": "撤销 返回 撤回 上一步",
"font_class": "fanchehui",
"unicode": "e626",
"unicode_decimal": 58918
"icon_id": "8875396",
"name": "角度",
"font_class": "angle",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "125198320",
"name": "撤销 返回 撤回 上一步",
"font_class": "chehui",
"unicode": "e609",
"unicode_decimal": 58889
"icon_id": "15551512",
"name": "水平翻转",
"font_class": "flip-horizontal",
"unicode": "e69e",
"unicode_decimal": 59038
},
{
"icon_id": "125524062",
"name": "语言",
"font_class": "yuyan",
"unicode": "e85f",
"unicode_decimal": 59487
"icon_id": "46016160",
"name": "垂直翻转",
"font_class": "flip-vertical",
"unicode": "ec60",
"unicode_decimal": 60512
},
{
"icon_id": "126177191",
"name": "标签",
"font_class": "biaoqian",
"unicode": "e603",
"unicode_decimal": 58883
"icon_id": "20183053",
"name": "clothes",
"font_class": "clothes",
"unicode": "e8d1",
"unicode_decimal": 59601
},
{
"icon_id": "126459101",
"name": "并集",
"font_class": "bingji",
"unicode": "e620",
"unicode_decimal": 58912
"icon_id": "15739173",
"name": "材质",
"font_class": "caizhi",
"unicode": "e647",
"unicode_decimal": 58951
},
{
"icon_id": "126459102",
"name": "并集",
"font_class": "bingji1",
"unicode": "e668",
"unicode_decimal": 58984
"icon_id": "35023469",
"name": "IC-液化",
"font_class": "IC-yehua",
"unicode": "e61b",
"unicode_decimal": 58907
},
{
"icon_id": "126901286",
"name": "点位",
"font_class": "dianwei",
"unicode": "e685",
"unicode_decimal": 59013
"icon_id": "12096844",
"name": "上一层",
"font_class": "shangyiceng",
"unicode": "e751",
"unicode_decimal": 59217
},
{
"icon_id": "130743908",
"name": "编辑",
"font_class": "bianji",
"unicode": "e600",
"unicode_decimal": 58880
"icon_id": "16531912",
"name": "上一层",
"font_class": "shangyiceng1",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "130743909",
"name": "圆形",
"font_class": "circle",
"unicode": "e64f",
"unicode_decimal": 58959
"icon_id": "24253227",
"name": "下一层",
"font_class": "xiayiceng",
"unicode": "e68a",
"unicode_decimal": 59018
},
{
"icon_id": "130743910",
"name": "三角形",
"font_class": "sanjiaoxing",
"unicode": "e615",
"unicode_decimal": 58901
"icon_id": "24253230",
"name": "上一层",
"font_class": "shangyiceng2",
"unicode": "e68b",
"unicode_decimal": 59019
},
{
"icon_id": "130743911",
"name": "图层",
"font_class": "tuceng",
"unicode": "e632",
"unicode_decimal": 58930
},
{
"icon_id": "130743912",
"name": "平移",
"font_class": "move",
"unicode": "e616",
"unicode_decimal": 58902
},
{
"icon_id": "130743913",
"name": "橡皮",
"font_class": "xiangpi_huaban1",
"unicode": "e67b",
"unicode_decimal": 59003
},
{
"icon_id": "130743914",
"name": "tx-fill-椭圆形",
"font_class": "tx-fill-tuoyuanxing",
"unicode": "e64c",
"unicode_decimal": 58956
},
{
"icon_id": "130743915",
"name": "直线",
"font_class": "zhixian",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "130743916",
"name": "线",
"font_class": "xian",
"unicode": "ec5f",
"unicode_decimal": 60511
},
{
"icon_id": "130743917",
"name": "正方形",
"font_class": "checkbox-full",
"unicode": "ea6f",
"unicode_decimal": 60015
},
{
"icon_id": "130743918",
"name": "图层",
"font_class": "tuceng1",
"unicode": "e62d",
"unicode_decimal": 58925
},
{
"icon_id": "130751283",
"icon_id": "3663275",
"name": "审批",
"font_class": "shenpi",
"unicode": "e6a1",
"unicode_decimal": 59041
},
{
"icon_id": "130751284",
"icon_id": "7638976",
"name": "用户",
"font_class": "yonghu",
"unicode": "e617",
"unicode_decimal": 58903
},
{
"icon_id": "130751285",
"icon_id": "9775414",
"name": "使用次数",
"font_class": "usetime",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "130751286",
"icon_id": "16843615",
"name": "下拉",
"font_class": "xiala",
"unicode": "e634",
"unicode_decimal": 58932
},
{
"icon_id": "1264",
"name": "编辑",
"font_class": "bianji",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "755612",
"name": "圆形",
"font_class": "circle",
"unicode": "e64f",
"unicode_decimal": 58959
},
{
"icon_id": "3101162",
"name": "三角形",
"font_class": "sanjiaoxing",
"unicode": "e615",
"unicode_decimal": 58901
},
{
"icon_id": "6774075",
"name": "图层",
"font_class": "tuceng",
"unicode": "e632",
"unicode_decimal": 58930
},
{
"icon_id": "10905244",
"name": "平移",
"font_class": "move",
"unicode": "e616",
"unicode_decimal": 58902
},
{
"icon_id": "14421659",
"name": "橡皮",
"font_class": "xiangpi_huaban1",
"unicode": "e67b",
"unicode_decimal": 59003
},
{
"icon_id": "14718690",
"name": "tx-fill-椭圆形",
"font_class": "tx-fill-tuoyuanxing",
"unicode": "e64c",
"unicode_decimal": 58956
},
{
"icon_id": "17521049",
"name": "直线",
"font_class": "zhixian",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "17581689",
"name": "线",
"font_class": "xian",
"unicode": "ec5f",
"unicode_decimal": 60511
},
{
"icon_id": "18175800",
"name": "正方形",
"font_class": "checkbox-full",
"unicode": "ea6f",
"unicode_decimal": 60015
},
{
"icon_id": "26998795",
"name": "图层",
"font_class": "tuceng1",
"unicode": "e62d",
"unicode_decimal": 58925
},
{
"icon_id": "31762941",
"name": "点位",
"font_class": "dianwei",
"unicode": "e685",
"unicode_decimal": 59013
},
{
"icon_id": "8722601",
"name": "并集",
"font_class": "bingji",
"unicode": "e620",
"unicode_decimal": 58912
},
{
"icon_id": "15192904",
"name": "并集",
"font_class": "bingji1",
"unicode": "e668",
"unicode_decimal": 58984
},
{
"icon_id": "17863630",
"name": "标签",
"font_class": "biaoqian",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "16399020",
"name": "语言",
"font_class": "yuyan",
"unicode": "e85f",
"unicode_decimal": 59487
},
{
"icon_id": "4240742",
"name": "撤销 返回 撤回 上一步",
"font_class": "fanchehui",
"unicode": "e626",
"unicode_decimal": 58918
},
{
"icon_id": "6126117",
"name": "撤销 返回 撤回 上一步",
"font_class": "chehui",
"unicode": "e609",
"unicode_decimal": 58889
},
{
"icon_id": "33174601",
"name": "外套_长款外套1@1x",
"font_class": "a-waitao_changkuanwaitao11x",
"unicode": "e66c",
"unicode_decimal": 58988
}
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

@@ -0,0 +1 @@
<svg t="1763432312095" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4678" width="200" height="200"><path d="M509.92 176C325.504 176 176 325.504 176 509.92c0 184.416 149.504 333.92 333.92 333.92 184.416 0 333.92-149.504 333.92-333.92C843.84 325.504 694.32 176 509.92 176z m166.64 214.848a16 16 0 0 1 22.624 0l11.328 11.312a16 16 0 0 1 0 22.624l-254.08 254.08a16 16 0 0 1-22.624 0l-159.616-159.632a16 16 0 0 1 0-22.624l11.312-11.312a16 16 0 0 1 22.624 0l136.992 136.992z" fill="currentColor" p-id="4679"></path></svg>

After

Width:  |  Height:  |  Size: 562 B

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1759472135618" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15482" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M341.12 85.333h373.845A170.667 170.667 0 0 1 835.67 135.34l130.987 130.986a46.933 46.933 0 0 1 8.79 54.187l-82.774 165.547A46.933 46.933 0 0 1 850.688 512h-40.021v298.667a128 128 0 0 1-128 128H341.333a128 128 0 0 1-128-128V512h-40.021a46.933 46.933 0 0 1-41.984-25.941L48.555 320.512a46.933 46.933 0 0 1 8.789-54.187L188.331 135.34a170.667 170.667 0 0 1 120.704-50.006h32.085z m-18.944 85.334h-13.141a85.333 85.333 0 0 0-60.374 25.002L137.26 307.072l59.776 119.595h54.698a46.933 46.933 0 0 1 46.934 46.933v337.067a42.667 42.667 0 0 0 42.666 42.666h341.334a42.667 42.667 0 0 0 42.666-42.666V473.6a46.933 46.933 0 0 1 46.934-46.933h54.698l59.776-119.595L775.34 195.669a85.333 85.333 0 0 0-60.374-25.002h-13.141L575.787 312.49a85.333 85.333 0 0 1-127.574 0L322.176 170.667z m114.176 0L512 255.787l75.648-85.12H436.352z" fill="#2c2c2c" p-id="15483"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 24 24" width="512" height="512"><path d="m16,18.5v1c0,2.481-2.019,4.5-4.5,4.5h-7c-2.481,0-4.5-2.019-4.5-4.5v-7c0-2.481,2.019-4.5,4.5-4.5h1c.276,0,.5.224.5.5s-.224.5-.5.5h-1c-1.93,0-3.5,1.57-3.5,3.5v7c0,1.93,1.57,3.5,3.5,3.5h7c1.93,0,3.5-1.57,3.5-3.5v-1c0-.276.224-.5.5-.5s.5.224.5.5Zm8-14v7c0,2.481-2.019,4.5-4.5,4.5h-7c-2.481,0-4.5-2.019-4.5-4.5v-7c0-2.481,2.019-4.5,4.5-4.5h7c2.481,0,4.5,2.019,4.5,4.5Zm-1,0c0-1.93-1.57-3.5-3.5-3.5h-7c-1.93,0-3.5,1.57-3.5,3.5v7c0,1.93,1.57,3.5,3.5,3.5h7c1.93,0,3.5-1.57,3.5-3.5v-7Z"/></svg>

After

Width:  |  Height:  |  Size: 652 B

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 24 24" width="512" height="512"><path d="M23.5,24H.5c-.28,0-.5-.22-.5-.5s.22-.5,.5-.5H23.5c.28,0,.5,.22,.5,.5s-.22,.5-.5,.5Zm-8.83-4.09l6.56-7.35c.77-.77,.98-1.88,.57-2.88-.42-1.01-1.36-1.65-2.45-1.65h-2.34V3.47c0-1.92-1.57-3.47-3.51-3.47h-2.99c-1.93,0-3.51,1.56-3.51,3.47v4.55s-2.33,0-2.33,0c-1.1,0-2.04,.64-2.45,1.65s-.19,2.12,.56,2.88l6.59,7.38c.73,.73,1.68,1.09,2.64,1.09s1.93-.37,2.67-1.11ZM7.5,9.03c.13,0,.26-.05,.35-.15s.15-.22,.15-.35V3.47c0-1.36,1.12-2.47,2.5-2.47h2.99c1.38,0,2.51,1.11,2.51,2.47v5.05c0,.28,.22,.5,.5,.5h2.84c.82,0,1.33,.54,1.53,1.03,.2,.5,.21,1.23-.36,1.81,0,0-.01,.01-.02,.02l-6.55,7.34c-1.07,1.07-2.81,1.07-3.86,.02L3.49,11.86c-.58-.58-.57-1.31-.36-1.81,.2-.5,.71-1.03,1.53-1.03h2.84Z"/></svg>

After

Width:  |  Height:  |  Size: 848 B

View File

@@ -0,0 +1,9 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect width="20" height="20" fill="url(#pattern0_2040_2152)"/>
<defs>
<pattern id="pattern0_2040_2152" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_2040_2152" transform="scale(0.015625)"/>
</pattern>
<image id="image0_2040_2152" width="64" height="64" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAHYAAAB2AH6XKZyAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAABVhJREFUeJztm11sFUUUx3/XoFSQ0goJivjZKKmASPUqRsTvqjEqNaKRaOKT0ahRY4I+qFEBDT6oiS/65osPNn5ECdCgEGpoxSKJYv2oiLYRio1KsFYC1N7rw7m32Xtmdm93dvYS4/6TSZgy/Z//zO6ec+bMFDJkyJAhw/8XuRrZaQIuAy4CzgXOAmYAk0v/P1xq+4BdQC/QBfxUI32poBlYC3wPFB3bt8DLwPk11p4INwGf4j5pWysAHwM313AesZEHPsPvxG1tE/J2eYEPH1CHvOoPA8eFjCkAXwKdwHZgP/B7qf0D1AMNwFxgAbAYWAqcEMI3CrwKPAMc9TAHZ5yDOK2o13YF0OjAPQ24C9gawl8EtgGnJJlAErQgT9Im7H1goUdbC4GOEFt7gUs82poQrkfClhazG7g2RbvLgJ8tdoep4SLkgUMWEW8jr23aaADWW+z/gfiPVDEHGLQYX0PtkioQZ7vGomM/cFpaRuuAncpgAfH+xwrPYi7CZsKjUSKsshhblYahmFiLqWulbyPNwBFl5F1q+9qHIQdsoFLbETwmS2DG4l9wc3jTgfuBjUA/cADoA9qBewhPfKphFjCkNL7nyGXgasxXrM2B507gTwtXsA0gIdYFbYqrgKfQ+JEiXufAsZLoiQfbGHCfo9ZtimuDI884zisJCpIujslxJZLvx9nwHEVqB3GxBHMxT3fgGcdqRdjtwNGjOEaQTcwFSMxeAryJTDo4bouj5m7F86QjDyA7uCDZipi/vwjziVwVMrYN+W6D4+fEVgwPKI5eBw4oGQ8KGkXS0Dh4SIlprzJ+hxp/S0x7ACcDhxXP7LDBURlTK5Vxvgs4GFNMJxKTQfzAa1XGD6p+XUx7IKG1R/3s0rDBUQug63CbHcT0IsXQp5BvPcqHzMT8PPodbIIUXYIIXYAo6PC33FHMRDAVM9kaBCY58t2huDpcSHQ112eBI4hp2IuoTyTg1M53pwvJAUXiUtaqhgbgc8zJd+L+9AHOUHz9LiQHFclJCQTZcDxSM9ST/wLx5EkwVXH+5UKiS15TEorSeBpz8tuRDVNSTFG8Iy4kegHqPQgrYxbyVIL8O4ifZ4ThVMW9L2xgVBjUMfnM5LrGsZzKT2oQuIH4eUYY9CcUyhu1APpgsslZjokW1X8dcbq+oIshA2EDoxZgj+rPdZZjQn9OP3jkBpiv+l+HDYxagG9U32e9/8fAv4vIeYJPLFV9pw3R2VQ6ksP4C4WNwDvAd8BjnjjLmI65tXb2X32K6HYPAtPGvVRq/ipqcLX6+UbVf8RdlxWTqw+JjQdV36WEN44FmEUK7cFd0IS8XWPAW/grr+cxCzCJo9cmRfphUkLgDcV5uQdOgE8U73ofpDcq0iJwW0LO4GlOAT+Hmrdi6rzOAy85zO3qAMlOgoNR4PGkApEbZ3up1Ji4JB7EPMzQ8gEpHULGRA65kBHUNkoKN8tewnzFVvs24gDbMfnzaRg6EbPGXyBZ5SYpHsWcfDfJiimRmI1sLbXRF6ntSXEOeMGiYwi5hZoq8sDfFuPtJK/kTAT1yHUcbX8Yt+M0J1yBWTIrIp64NUW7rcg2XdsdId3LWVZcCPxqEVNEUuiLPdpahCRgNltDHINrcmU0Ya/qlh1kB3LxwSVnqAfuRrI7nY6X2y78FmqcMAkJO6PYRRaRa3XrgOeQ875mpG5Xh2yIZiDZ4DLkdngP0UfqY8AruB2dpYY8cqQdJtpX68LPhiw1XIN5U8NH60T2Jf8ZzEcyxT24T7qPlP9golbJyzwkKrQg0WMmsiFqLGk4BPyGHGHtRnxAN5W1wwwZMmTIkMEz/gUzEqIONKOEMwAAAABJRU5ErkJggg=="/>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 24 24" width="512" height="512"><path d="M7,0h-3C1.79,0,0,1.79,0,4v3c0,2.21,1.79,4,4,4h3c2.21,0,4-1.79,4-4v-3C11,1.79,9.21,0,7,0Zm2,7c0,1.1-.9,2-2,2h-3c-1.1,0-2-.9-2-2v-3c0-1.1,.9-2,2-2h3c1.1,0,2,.9,2,2v3Zm11,6h-3c-2.21,0-4,1.79-4,4v3c0,2.21,1.79,4,4,4h3c2.21,0,4-1.79,4-4v-3c0-2.21-1.79-4-4-4Zm2,7c0,1.1-.9,2-2,2h-3c-1.1,0-2-.9-2-2v-3c0-1.1,.9-2,2-2h3c1.1,0,2,.9,2,2v3ZM7,13h-3c-2.21,0-4,1.79-4,4v3c0,2.21,1.79,4,4,4h3c2.21,0,4-1.79,4-4v-3c0-2.21-1.79-4-4-4Zm2,7c0,1.1-.9,2-2,2h-3c-1.1,0-2-.9-2-2v-3c0-1.1,.9-2,2-2h3c1.1,0,2,.9,2,2v3Zm8.18-10.47c.38,.31,.85,.46,1.32,.46s.94-.15,1.32-.46c1.56-1.25,4.18-3.7,4.18-6.06,0-1.92-1.46-3.48-3.25-3.48-.85,0-1.65,.36-2.25,.94-.59-.59-1.39-.94-2.25-.94-1.79,0-3.25,1.56-3.25,3.48,0,2.35,2.62,4.81,4.18,6.06Zm-.93-7.53c.6,0,1.14,.5,1.26,1.17,.08,.48,.5,.83,.98,.83s.9-.35,.98-.83c.12-.67,.67-1.17,1.27-1.17,.69,0,1.25,.66,1.25,1.48,0,1.06-1.35,2.83-3.43,4.5-.04,.03-.1,.03-.14,0-2.08-1.67-3.43-3.44-3.43-4.5,0-.81,.56-1.48,1.25-1.48Z"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<path fill="currentColor" d="M14 10h-2v12h2zm6 0h-2v12h2z" />
<path fill="currentColor" d="M16 4A12 12 0 1 1 4 16A12 12 0 0 1 16 4m0-2a14 14 0 1 0 14 14A14 14 0 0 0 16 2" />
</svg>

After

Width:  |  Height:  |  Size: 266 B

View File

@@ -0,0 +1 @@
<svg t="1762937400333" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4603" width="200" height="200"><path d="M817.088 484.96l-512-323.744C295.232 154.976 282.752 154.592 272.576 160.224 262.336 165.856 256 176.608 256 188.256l0 647.328c0 11.648 6.336 22.4 16.576 28.032 4.8 2.656 10.112 3.968 15.424 3.968 5.952 0 11.904-1.664 17.088-4.928l512-323.616C826.368 533.184 832 522.976 832 512 832 501.024 826.368 490.816 817.088 484.96z" fill="currentColor" p-id="4604"></path></svg>

After

Width:  |  Height:  |  Size: 524 B

View File

@@ -0,0 +1 @@
<svg t="1761795702180" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5928" width="200" height="200"><path d="M433.505 126.568c174.435 0 316.207 141.805 316.207 316.486 0 75.209-26.384 144.234-69.824 198.526l209.166 209.1c12.849 13.148 12.849 34.459 0 47.582-13.177 13.148-34.692 13.148-47.904 0l-209.166-209.1c-54.203 43.843-123.131 70.111-198.373 70.111-174.987 0-316.682-141.627-316.682-316.434 0-174.724 141.826-316.486 316.682-316.486zM433.505 710.778c147.649 0 267.808-120.113 267.808-267.647 0-147.741-120.204-267.712-267.808-267.712-147.649 0-267.808 120.099-267.808 267.712 0 147.649 120.204 267.647 267.808 267.647z" fill="currentColor" p-id="5929"></path></svg>

After

Width:  |  Height:  |  Size: 717 B

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" ?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_105_1836)">
<path d="M13 3.99976H6C4.89543 3.99976 4 4.89519 4 5.99976V17.9998C4 19.1043 4.89543 19.9998 6 19.9998H13M17 3.99976H18C19.1046 3.99976 20 4.89519 20 5.99976V6.99976M20 16.9998V17.9998C20 19.1043 19.1046 19.9998 18 19.9998H17M20 10.9998V12.9998M12 1.99976V21.9998" stroke="#292929" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
</g>
<defs>

After

Width:  |  Height:  |  Size: 752 B

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="288.000000pt" height="288.000000pt" viewBox="0 0 288.000000 288.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,288.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M379 2446 c-101 -36 -179 -116 -209 -214 -19 -62 -20 -93 -20 -792 0
-701 1 -730 20 -793 26 -83 88 -155 168 -194 l57 -28 1045 0 1045 0 47 22
c101 46 170 138 188 250 6 32 10 329 10 668 0 659 -3 692 -54 774 -35 54 -101
108 -163 131 -52 19 -78 20 -626 20 l-572 0 -46 53 c-25 29 -70 66 -100 82
l-54 30 -350 2 c-269 2 -358 0 -386 -11z m710 -175 c20 -11 42 -25 48 -33 6
-7 48 -92 92 -188 85 -183 118 -229 196 -274 73 -43 119 -46 635 -46 l490 0 0
-517 c0 -496 -1 -519 -20 -547 -10 -17 -36 -40 -57 -53 l-38 -23 -993 0 c-968
0 -994 0 -1031 20 -22 11 -48 35 -60 53 -21 34 -21 40 -21 777 0 737 0 743 21
777 12 18 37 42 57 53 34 18 60 19 340 20 280 0 306 -1 341 -19z m1381 -174
c53 -28 80 -75 80 -139 l0 -48 -506 0 c-498 0 -507 0 -541 21 -31 19 -74 88
-103 165 l-10 24 519 0 518 0 43 -23z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,3 @@
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M25 0C20.0555 0 15.222 1.46622 11.1108 4.21326C6.99953 6.9603 3.79521 10.8648 1.90302 15.4329C0.0108322 20.0011 -0.484251 25.0277 0.480379 29.8773C1.44501 34.7268 3.82603 39.1814 7.32234 42.6777C10.8187 46.174 15.2732 48.555 20.1228 49.5196C24.9723 50.4843 29.9989 49.9892 34.5671 48.097C39.1353 46.2048 43.0397 43.0005 45.7867 38.8893C48.5338 34.778 50 29.9445 50 25C50 18.3696 47.3661 12.0107 42.6777 7.32233C37.9893 2.63392 31.6304 0 25 0ZM34.8063 31.8604L31.8604 34.8063L25 27.9458L18.1396 34.8063L15.1938 31.8604L22.0542 25L15.1938 18.1396L18.1396 15.1938L25 22.0542L31.8604 15.1938L34.8063 18.1396L27.9458 25L34.8063 31.8604Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 760 B

View File

@@ -0,0 +1,3 @@
<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M25 0C11.2146 0 0 11.2146 0 25C0 38.7854 11.2146 50 25 50C38.7854 50 50 38.7854 50 25C50 11.2146 38.7854 0 25 0ZM24.8104 32.1229C24.0042 32.9292 22.9437 33.3312 21.8792 33.3312C20.8146 33.3312 19.7437 32.925 18.9292 32.1125L13.1333 26.4958L16.0354 23.5021L21.8542 29.1417L33.9562 17.2646L36.8812 20.2333L24.8104 32.1229Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 709 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

View File

@@ -8,14 +8,6 @@
"id": 2,
"title":"AiDA X SFT AI Fashion Award 2024",
"imgUrl": "/image/events/Fashion-Award-2024.png"
},{
"id": 3,
"title":"✨New Year 2025🎉Let's kick off the year with a burst of inspiration and design!",
"imgUrl": "/image/events/AiDA2025-En.jpg"
},{
"id": 4,
"title":"Welcome back Subscribe with the discount code to enjoy 50% OFF!",
"imgUrl": "/image/events/Welcome-back-En.jpg"
}
],
"eventsItem":[
@@ -96,106 +88,6 @@
]
}
]
},{
"id":3,
"title":"✨New Year 2025🎉Let's kick off the year with a burst of inspiration and design!",
"imgUrl": "/image/events/AiDA2025-En.jpg",
"textList":[
{
"paragraph":[
{
"text":"Share your work and get 1 month of free access to AiDA"
}
]
},{
"paragraph":[
{
"text":" Just do the following:"
}
]
},{
"paragraph":[
{
"text":" ✅Share your designs on AiDA's Gallery "
},{
"text":" ✅Add the tag #NewYear_2025 in the work description"
},{
"text":" ✅At least 20 likes "
}
]
},{
"paragraph":[
{
"text":"📅 Duration: January 1, 2025 January 31, 2025"
}
]
},{
"paragraph":[
{
"text":"Join in the fun and embark on a new year's journey of design. Mix your creativity with tech to make amazing, unique creations! Get your friends to help you seize this opportunity! Invite them to give your design some love with their likes💗"
}
]
},{
"paragraph":[
{
"text":"👍 AiDA is waiting for you to unlock a new world of design!"
}
]
}
]
},{
"id":4,
"title":"Welcome back Subscribe with the discount code to enjoy 50% OFF!",
"imgUrl": "/image/events/Welcome-back-En.jpg",
"textList":[
{
"paragraph":[
{
"text":"💠 In February, AiDA underwent a legendary transformation"
},{
"text":"💠 A silky-smooth interface and a turbocharged upgrade to all functions"
},{
"text":"😆 Long-time users are saying: “Wait… is this still the AiDA I knew?!"
}
]
},{
"paragraph":[
{
"text":"Demo video👉 <a href='https://sg834.apps.aliyunpds.com/disk/s/R6SsxBaju9h' target='_blank'>https://sg834.apps.aliyunpds.com/disk/s/R6SsxBaju9h</a>"
}
]
},{
"paragraph":[
{
"text":"⚡️ To welcome back our trial users, weve prepared an exclusive design power-up:"
},{
"text":"✔️ Use the promo code「RIINRMKK」 and enjoy 50% off your subscription"
},{
"text":"✔️ Boost your efficiency by 60%—save hours on every project"
},{
"text":"✔️ sNo design background? No problem! Get stunning drafts in just 5 minutes"
}
]
},{
"paragraph":[
{
"text":"⏳ The countdown is on:"
},{
"text":"✨Ignite your creativity like a volcanic eruption"
},{
"text":"✨Let your inspiration flow like a cosmic waterfall"
}
]
},{
"paragraph":[
{
"text":"Promotional Code: <strong>RIINRMKK</strong>"
},{
"text":"Duration: June 10 to June 30, 2025 After that, subscriptions return to full price. Dont miss it!"
}
]
}
]
}
]
}

View File

@@ -8,15 +8,7 @@
"id": 2,
"title":"AiDA X SFT AI时尚设计比赛2024",
"imgUrl": "/image/events/Fashion-Award-2024.png"
},{
"id": 3,
"title":"🎉搭上2025的列车打开新设计的大门",
"imgUrl": "/image/events/AiDA2025-Cn.jpg"
},{
"id": 4,
"title":"设计时速狂飙AiDA 618半价让灵感永不限流",
"imgUrl": "/image/events/Welcome-back-Cn.jpg"
}
}
],
"eventsItem":[
{
@@ -96,112 +88,6 @@
]
}
]
},{
"id":3,
"title":"🎉搭上2025的列车打开新设计的大门",
"imgUrl": "/image/events/AiDA2025-Cn.jpg",
"textList":[
{
"paragraph":[
{
"text":"快来发布作品获得1个月免费使用AiDA的福利"
}
]
},{
"paragraph":[
{
"text":" 只需要:"
}
]
},{
"paragraph":[
{
"text":" ✅在AiDA将设计作品分享至广场/Gallery"
},{
"text":" ✅点赞至少20"
},{
"text":" ✅在作品描述加上tag #NewYear_2025"
}
]
},{
"paragraph":[
{
"text":"📅 活动时间2025.1.1—2025.1.31"
}
]
},{
"paragraph":[
{
"text":"快来参与,让我们共同开启新年的设计之旅,让创意与科技完美融合,创造出属于你的独一无二的作品!机会难得,叫上你的朋友们助你一臂之力,为你点上大拇指哦!"
}
]
},{
"paragraph":[
{
"text":"👍 点赞即启程AiDA等你来解锁设计新世界"
}
]
}
]
},{
"id":4,
"title":"设计时速狂飙AiDA 618半价让灵感永不限流",
"imgUrl": "/image/events/Welcome-back-En.jpg",
"textList":[
{
"paragraph":[
{
"text":"618的钟声敲响AiDA的AI设计宇宙正式进入「超维折扣纪元」"
}
]
},{
"paragraph":[
{
"text":"💠 就在今年2月AiDA完成史诗级进化"
},{
"text":"💠 界面如丝绸般顺滑,功能矩阵全面升级。"
},{
"text":"😆 旧版用户惊呼这还是我认识的AiDA吗⁉"
}
]
},{
"paragraph":[
{
"text":"演示视频👉 <a href='https://sg834.apps.aliyunpds.com/disk/s/R6SsxBaju9h' target='_blank'>https://sg834.apps.aliyunpds.com/disk/s/R6SsxBaju9h</a>"
}
]
},{
"paragraph":[
{
"text":"⚡️ 618特供「专属暴击福利」💥"
},{
"text":"✔️ 输入口令“RIINRMKK”订阅直接享受半价"
},{
"text":"✔️ 效率提升60%,设计实践节省一大半!"
},{
"text":"✔️ 零基础也能5分钟出稿轻松搞定设计需求"
}
]
},{
"paragraph":[
{
"text":"⏳ 倒计时警报:"
},{
"text":"👉 让设计如火山喷发般炽热"
},{
"text":"👉 让灵感似银河倾泻般璀璨"
}
]
},{
"paragraph":[
{
"text":"优惠码:<strong>RIINRMKK</strong>"
},{
"text":"活动日期2025.6.10-6.30(后续订阅费用将恢复至原价)"
}
]
}
]
}
]
}

View File

@@ -62,6 +62,9 @@ li {
height: 100%;
margin: 0 auto;
}
.ant-dropdown-menu {
border-radius: 1rem;
}
.button_second {
width: 14rem;
text-align: center;
@@ -165,6 +168,7 @@ li {
}
.ant-modal-mask {
background-color: #666666;
opacity: 0.5;
}
.select_block {
height: 4rem;
@@ -237,7 +241,7 @@ li {
color: #fff;
background-color: #000;
text-align: center;
font-weight: 600;
font-weight: 500;
border: 2px solid #000;
cursor: pointer;
box-sizing: border-box;
@@ -1247,7 +1251,9 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
border-color: #000 !important;
}
.ant-spin-dot-item {
background-color: #000000;
background-color: #000000 !important;
width: 9px !important;
height: 9px !important;
}
.ant-spin {
color: #000;
@@ -1373,7 +1379,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
}
.admin_page .admin_state_item .active {
cursor: no-drop;
background-color: #f5f5f5;
background-color: #F9FAFA;
}
.admin_page .admin_search_item {
height: 4rem;
@@ -1707,7 +1713,7 @@ textarea:focus {
display: inline-block;
width: calc(25% - 2rem);
aspect-ratio: 1 / 1;
border: 1px solid #f5f5f5;
border: 1px solid #F9FAFA;
vertical-align: top;
position: relative;
cursor: pointer;
@@ -1989,7 +1995,7 @@ textarea:focus {
display: flex;
float: left;
align-items: center;
padding: 1.5rem 2rem;
padding: 1rem 2rem;
background-color: #fff;
flex: 1;
height: auto;
@@ -2314,6 +2320,8 @@ textarea:focus {
top: 0rem;
flex: 1;
border: 1px solid #dcdfe6;
width: calc(var(--width) + 6rem);
padding: 1rem;
}
.generage_btn_box {
position: relative;

View File

@@ -63,6 +63,9 @@ input:focus{
height: 100%;
margin: 0 auto;
}
.ant-dropdown-menu{
border-radius: 1rem;
}
.button_second{
width: 14rem;
text-align: center;
@@ -170,6 +173,7 @@ input:focus{
}
.ant-modal-mask{
background-color: #666666;
opacity: .5;
}
.select_block{
height: 4rem;
@@ -241,7 +245,7 @@ input:focus{
color: #fff;
background-color: #000;
text-align: center;
font-weight: 600;
font-weight: 500;
border: 2px solid #000;
cursor: pointer;
box-sizing: border-box;
@@ -1375,7 +1379,9 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
}
//loding样式
.ant-spin-dot-item{
background-color: #000000;
background-color: #000000 !important;
width: 9px !important;
height: 9px !important;
}
.ant-spin{
color: #000;
@@ -1507,7 +1513,7 @@ tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::afte
}
.active{
cursor: no-drop;
background-color: #f5f5f5;
background-color: #F9FAFA;
}
}
.admin_search_item{
@@ -1862,7 +1868,7 @@ textarea:focus{
// height: calc(10rem);
width: calc(25% - 2rem);
aspect-ratio: 1 / 1;
border: 1px solid #f5f5f5;
border: 1px solid #F9FAFA;
vertical-align: top;
position: relative;
cursor: pointer;
@@ -2057,7 +2063,7 @@ textarea:focus{
display: flex;
float: left;
align-items: center;
padding: 1.5rem 2rem;
padding: 1rem 2rem;
// padding-right: 0;
background-color: #fff;
flex: 1;
@@ -2200,6 +2206,8 @@ textarea:focus{
top: 0rem;
flex: 1;
border: 1px solid #dcdfe6;
width: calc(var(--width) + 6rem);
padding: 1rem;
}
// span{

View File

@@ -50,10 +50,10 @@
<div v-if="!isEditEmail">{{ userDetail.email }}</div>
<input v-else type="text" :value="editEmail">
</div>
<div class="icon">
<!-- <div class="icon">
<i v-if="!isEditEmail" class="fi fi-rr-edit" @click="openEdit('email')"></i>
<i v-else class="fi fi-br-check" @click="editChek('email')"></i>
</div>
</div> -->
</div>
</div>
<div class="content_item_user_left_detail_bottom">

View File

@@ -6,7 +6,7 @@
<bind v-if="item.key == 'bind' && activeKey == 'bind'" :ref="item.key"></bind>
<cancelRenewal v-if="item.key == 'cancelRenewal' && activeKey == 'cancelRenewal'" :ref="item.key"></cancelRenewal>
<template #tab>
<a-badge :count="0" >
<a-badge :count="0" v-if="!(item.key == 'cancelRenewal' && [5,6,7,8].includes(userDetail.systemUser))">
<span>{{item.title}}</span>
</a-badge>
</template>
@@ -104,6 +104,12 @@ export default defineComponent({
let key = accountfrontPage.frontPageList[0].key
accountfrontPage.activeKey = key
const data = route.query
if(!!data.subscribe){
accountfrontPage.activeKey = 'cancelRenewal'
nextTick(()=>{
domRefs.cancelRenewal[0].subscribe()
})
}
if(data?.state == 'weiXin'){
accountfrontPage.activeKey = 'bind'
wechatLogin(data)

View File

@@ -27,10 +27,10 @@
<div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div>
<div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div>
</div> -->
<div class="gmail_btn" @click="toGmailLogin">
<div v-if="!userDetail.accountExtendList?.Google" class="gallery_btn forbidden">{{ $t('frontPage.BindNow') }}</div>
<!-- <div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div> -->
<div v-if="userDetail.accountExtendList?.Google" class="gallery_btn forbidden" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div>
<div class="gmail_btn">
<div v-if="!userDetail.accountExtendList?.Google" class="gallery_btn" style="pointer-events: none;">{{ $t('frontPage.BindNow') }}</div>
<div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div>
<div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div>
<!-- <div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div> -->
</div>
</div>
@@ -111,39 +111,58 @@ export default defineComponent({
.catch((res) => {accountHomeData.loadingShow = false});
}
const ungroupWeiXinModel = ()=>{
Https.axiosGet(Https.httpUrls.unbindWeChat,).then((rv)=>{
message.success(t('frontPage.jsContent1'));
let value = {
accountExtendList:{
WeChat:undefined,
Google:accountHomeData.userDetail.accountExtendList?.Google
}
Modal.confirm({
title: t('frontPage.UnbindTip'),
okText: t('Yes'),
cancelText: t('No'),
mask:false,
centered:true,
onOk() {
Https.axiosGet(Https.httpUrls.unbindWeChat,).then((rv)=>{
message.success(t('frontPage.jsContent1'));
let value = {
accountExtendList:{
WeChat:undefined,
Google:accountHomeData.userDetail.accountExtendList?.Google
}
}
store.commit("upUserDetail", value)
})
}
store.commit("upUserDetail", value)
})
});
}
const ungroupGoogleModel = ()=>{
Https.axiosGet(Https.httpUrls.unbindGoogle,).then((rv)=>{
let value = {
accountExtendList:{
WeChat:accountHomeData.userDetail.accountExtendList?.WeChat,
Google:undefined,
}
Modal.confirm({
title: t('frontPage.UnbindTip'),
okText: t('Yes'),
cancelText: t('No'),
mask:false,
centered:true,
onOk() {
Https.axiosGet(Https.httpUrls.unbindGoogle,).then((rv)=>{
let value = {
accountExtendList:{
WeChat:accountHomeData.userDetail.accountExtendList?.WeChat,
Google:undefined,
}
}
store.commit("upUserDetail", value)
message.success(t('frontPage.jsContent1'));
})
}
store.commit("upUserDetail", value)
message.success(t('frontPage.jsContent1'));
})
});
}
const modifyEmail = ()=>{
bindPageDom.bindEmail.init('Modify')
}
const toGmailLogin = ()=>{
message.info(t('account.canNotUtilize'))
}
onMounted(async ()=>{
return
let GOOGLE_CLIENT_ID = '29310152396-nnsd3h533fld665oguu8ovrt1nukmt46.apps.googleusercontent.com'
let GOOGLE_CLIENT_ID
if(import.meta.env.VITE_USER_NODE_ENV == 'development'){
GOOGLE_CLIENT_ID = '157095842121-kdd1fdf8m8nudvj9sprstb2k2prnf9e4.apps.googleusercontent.com'
}else{
GOOGLE_CLIENT_ID = '29310152396-nnsd3h533fld665oguu8ovrt1nukmt46.apps.googleusercontent.com'
}
var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`);
if(!window.isAddGmail){
if(!existingScript){
@@ -206,7 +225,6 @@ export default defineComponent({
ungroupGoogleModel,
ungroupWeiXinModel,
modifyEmail,
toGmailLogin,
}
},
data(){
@@ -271,14 +289,21 @@ export default defineComponent({
}
>.gmail_btn{
position: relative;
border-radius: 4rem;
overflow: hidden;
> .gallery_btn{
position: relative;
z-index: 2;
}
#g_id_bind{
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
opacity: 0;
z-index: 2;
// opacity: 0;
z-index: 1;
:deep(.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe){
width: 100%;
}

View File

@@ -28,7 +28,7 @@
optionFilterProp="label"
:options="countryList"
:field-names="{ label: locale == 'CHINESE_SIMPLIFIED'?'labelCn':'label' }"
placeholder="Please select"
:placeholder="`${$t('account.plaseSelect')} ${$t('account.Country')}`"
allowClear
show-search
></a-select>
@@ -117,13 +117,12 @@ export default defineComponent({
let value = {
country:accountHomeData.Country,
title:accountHomeData.selectSex,
userName:accountHomeData.editUserName,
surname:accountHomeData.surname,
givenName:accountHomeData.givenName,
}
store.commit('upUserDetail',value)
accountHomeData.loadingShow = false
message.success(t('exportModel.jsContent7'))
message.success(t('account.jsContent13'))
}).catch((err:any)=>{
accountHomeData.loadingShow = false
})

View File

@@ -133,8 +133,14 @@ export default defineComponent({
}
.modal_title_text_intro{
margin-left: 4rem;
}
}
}
.modal_title_text_intro{
word-break: break-word;
white-space: pre-wrap;
font-family: Arial, sans-serif;
}
}
</style>

View File

@@ -22,7 +22,7 @@
</a-range-picker>
</div>
<!-- <div class="admin_state_item">
<span>Country:</span>
<span>Country or Region:</span>
<a-select
v-model:value="country"
:allowClear="true"
@@ -324,7 +324,11 @@ export default defineComponent({
filterData.orderBy = 'credits'
}
}
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
if(sorter.order){
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
}else{
filterData.order = ''
}
gettrialList();
};

View File

@@ -1,12 +1,11 @@
<template>
<div class="test_cli admin_page">
<div class="test_cli admin_page">
<div class="admin_table_search">
<div class="admin_state">
<div class="admin_state_item">
<span>{{ $t('admin.StartDate') }}:</span>
<span>{{ $t("admin.StartDate") }}:</span>
<a-range-picker
style="width:250px"
style="width: 250px"
class="range_picker"
v-model:value="rangePickerValue"
:placeholder="[
@@ -23,35 +22,56 @@
</a-range-picker>
</div>
<div class="admin_state_item">
<span>{{ $t('admin.StartTime') }}:</span>
<a-time-range-picker style="width:250px" :placeholder="[$t('admin.startTime'), $t('admin.endTime'),]" class="range_picker" valueFormat="HH:mm:ss" v-model:value="rangeTimeValue" />
<span>{{ $t("admin.StartTime") }}:</span>
<a-time-range-picker
style="width: 250px"
:placeholder="[
$t('admin.startTime'),
$t('admin.endTime'),
]"
class="range_picker"
valueFormat="HH:mm:ss"
v-model:value="rangeTimeValue"
/>
</div>
<div class="admin_state_item">
<span>{{ $t('admin.Email') }}:</span>
<input
v-model="email"
:placeholder="$t('admin.enterEmail')"
@keydown.enter="gettrialList"
type="text"
style="width: 250px"
/>
</div>
<span>{{ $t("admin.Email") }}:</span>
<input
v-model="email"
:placeholder="$t('admin.enterEmail')"
@keydown.enter="gettrialList"
type="text"
style="width: 250px"
/>
</div>
<div class="admin_state_item">
<span>{{ $t('admin.UserName') }}:</span>
<a-select
v-model:value="ids"
mode="multiple"
style="width: 250px"
:filter-option="filterOption"
:placeholder="$t('admin.selectUserName')"
max-tag-count="responsive"
:options="allUserList"
@keydown.enter="gettrialList"
></a-select>
</div>
<span>{{ $t("admin.UserName") }}:</span>
<a-select
v-model:value="ids"
mode="multiple"
style="width: 250px"
:filter-option="filterOption"
:placeholder="$t('admin.selectUserName')"
max-tag-count="responsive"
:options="allUserList"
@keydown.enter="gettrialList"
></a-select>
</div>
<div class="admin_state_item">
<span>Organization Name:</span>
<input
v-model="organizationName"
placeholder="Please enter Organization Name"
@keydown.enter="gettrialList"
type="text"
style="width: 250px"
/>
</div>
</div>
<div class="admin_search">
<div class="admin_search_item" @click="searchHistoryList">{{ $t('admin.search') }}</div>
<div class="admin_search_item" @click="searchHistoryList">
{{ $t("admin.search") }}
</div>
</div>
</div>
@@ -73,205 +93,207 @@
>
</a-table>
</div>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, createVNode, computed } from "vue";
import { useStore } from "vuex";
import { Https } from "@/tool/https";
import { useI18n } from 'vue-i18n'
export default defineComponent({
components: {
},
setup() {
const store:any = useStore()
let rangePickerValue: any = ref([]);
let rangeTimeValue: any = ref([]);
let renameData: any = ref({}); //修改名字选中的数据
const {t} = useI18n()
const columns: any = computed(() => {
return [
{
title: t('admin.Email'),
align: "center",
dataIndex: "userEmail",
key: "userEmail",
width:200,
fixed: "left",
},
{
title: t('admin.UserId'),
align: "center",
ellipsis: true,
dataIndex: "accountId",
key: "accountId",
width:100,
},
{
title: t('admin.UserName'),
align: "center",
ellipsis: 200,
dataIndex: "userName",
key: "userName",
width:100,
// customRender: (record: any) => {
// let time = formatTime(
// record.text / 1000,
// "YYYY-MM-DD hh:mm:ss"
// );
// return time;
// },
},
{
title: t('admin.Frequency'),
align: "center",
ellipsis: true,
dataIndex: "designTimes",
key: "designTimes",
width:100,
},
{
title: t('admin.CreateTime'),
align: "center",
ellipsis: true,
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "createTime",
key: "createTime",
width:200,
},
{
title: t('admin.Credits'),
align: "center",
ellipsis: true,
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "credits",
key: "credits",
width:100,
},
];
});
import { defineComponent, ref, createVNode, computed } from "vue";
import { useStore } from "vuex";
import { Https } from "@/tool/https";
import { useI18n } from "vue-i18n";
export default defineComponent({
components: {},
setup() {
const store: any = useStore();
let rangePickerValue: any = ref([]);
let rangeTimeValue: any = ref([]);
let renameData: any = ref({}); //修改名字选中的数据
const { t } = useI18n();
const columns: any = computed(() => {
return [
{
title: t("admin.Email"),
align: "center",
dataIndex: "userEmail",
key: "userEmail",
width: 200,
fixed: "left",
},
{
title: t("admin.UserId"),
align: "center",
ellipsis: true,
dataIndex: "accountId",
key: "accountId",
width: 100,
},
{
title: t("admin.UserName"),
align: "center",
ellipsis: 200,
dataIndex: "userName",
key: "userName",
width: 100,
// customRender: (record: any) => {
// let time = formatTime(
// record.text / 1000,
// "YYYY-MM-DD hh:mm:ss"
// );
// return time;
// },
},
{
title: t("admin.Frequency"),
align: "center",
ellipsis: true,
dataIndex: "designTimes",
key: "designTimes",
width: 100,
},
{
title: t("admin.CreateTime"),
align: "center",
ellipsis: true,
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "createTime",
key: "createTime",
width: 200,
},
{
title: t("admin.Credits"),
align: "center",
ellipsis: true,
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "credits",
key: "credits",
width: 100,
},
];
});
let allUserList: any = computed(()=>{
return store.state.adminPage.allUserList
})
let ids = ref([])
let email = ref('')
let dataList: any = ref([]);
let status: any = ref(0);
let filterOption = (input: any, option: any) => {
// 使用 option.label 进行搜索
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
};
return {
rangePickerValue,
rangeTimeValue,
columns,
dataList,
allUserList,
ids,
email,
renameData,
status,
filterOption,
};
},
data() {
return {
currentPage: 1,
pageSize: 10,
total: 0,
historyTableHeight: 0,
handleResizeColumn: (w:any, col:any) => {
col.width = w;
let allUserList: any = computed(() => {
return store.state.adminPage.allUserList;
});
let ids = ref([]);
let email = ref("");
let dataList: any = ref([]);
let status: any = ref(0);
let organizationName: any = ref("");
let filterOption = (input: any, option: any) => {
// 使用 option.label 进行搜索
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
};
return {
rangePickerValue,
rangeTimeValue,
columns,
dataList,
allUserList,
ids,
email,
renameData,
status,
filterOption,
organizationName,
};
},
data() {
return {
currentPage: 1,
pageSize: 10,
total: 0,
historyTableHeight: 0,
handleResizeColumn: (w: any, col: any) => {
col.width = w;
},
};
},
mounted() {
let historyTable: any = this.$refs.historyTable;
this.historyTableHeight = historyTable.clientHeight - 200;
this.gettrialList();
},
methods: {
//改变页码
changePage(e: any) {
this.currentPage = e.current;
this.pageSize = e.pageSize;
this.gettrialList();
},
};
},
mounted() {
let historyTable: any = this.$refs.historyTable;
this.historyTableHeight = historyTable.clientHeight - 200;
this.gettrialList();
},
methods: {
//改变页码
changePage(e: any) {
this.currentPage = e.current;
this.pageSize = e.pageSize;
this.gettrialList();
},
//查询列表
searchHistoryList() {
this.currentPage = 1;
this.gettrialList();
},
//查询列表
searchHistoryList() {
this.currentPage = 1;
this.gettrialList();
},
//获取列表
gettrialList() {
let startTime: any = this.rangeTimeValue?.[0]
? this.rangeTimeValue[0]
: '00:00:00';
let endTime: any = this.rangeTimeValue?.[1]
? this.rangeTimeValue[1]
: '23:59:59';
let startDate: any = this.rangePickerValue?.[0]
? this.rangePickerValue[0]+' '+startTime
: "";
let endDate: any = this.rangePickerValue?.[1]
? this.rangePickerValue[1]+' '+endTime
: "";
let ids = this.ids.join(',')
let data = {
endTime:endDate,
startTime:startDate,
ids:ids,
email:this.email.trim(),
}
Https.axiosGet(Https.httpUrls.getDesignStatistic,{params:data}).then((rv: any) => {
if (rv) {
this.dataList = rv
// this.workspaceItem.position = this.singleTypeList[0].label
}
})
},
//删除分组
// deleteGroup(record: any, index: number) {
// let deleteGroupFun = (id: any, index: number) => {
// let data = {
// userGroupId: id,
// };
// Https.axiosPost(Https.httpUrls.deleteUserGroup, data).then(
// (rv: any) => {
// this.dataList.splice(index, 1);
// }
// );
// };
// Modal.confirm({
// title: "",
// icon: createVNode(ExclamationCircleOutlined),
// okText: "Yes",
// cancelText: "No",
// centered: true,
// mask: false,
// onOk() {
// deleteGroupFun(record.id, index);
// },
// });
// },
},
});
//获取列表
gettrialList() {
let startTime: any = this.rangeTimeValue?.[0]
? this.rangeTimeValue[0]
: "00:00:00";
let endTime: any = this.rangeTimeValue?.[1]
? this.rangeTimeValue[1]
: "23:59:59";
let startDate: any = this.rangePickerValue?.[0]
? this.rangePickerValue[0] + " " + startTime
: "";
let endDate: any = this.rangePickerValue?.[1]
? this.rangePickerValue[1] + " " + endTime
: "";
let ids = this.ids.join(",");
let data = {
endTime: endDate,
startTime: startDate,
ids: ids,
email: this.email.trim(),
organizationName: this.organizationName,
};
Https.axiosGet(Https.httpUrls.getDesignStatistic, {
params: data,
}).then((rv: any) => {
if (rv) {
this.dataList = rv;
// this.workspaceItem.position = this.singleTypeList[0].label
}
});
},
//删除分组
// deleteGroup(record: any, index: number) {
// let deleteGroupFun = (id: any, index: number) => {
// let data = {
// userGroupId: id,
// };
// Https.axiosPost(Https.httpUrls.deleteUserGroup, data).then(
// (rv: any) => {
// this.dataList.splice(index, 1);
// }
// );
// };
// Modal.confirm({
// title: "",
// icon: createVNode(ExclamationCircleOutlined),
// okText: "Yes",
// cancelText: "No",
// centered: true,
// mask: false,
// onOk() {
// deleteGroupFun(record.id, index);
// },
// });
// },
},
});
</script>
<style lang="less" scoped>
.admin_page .admin_table_search .admin_state {
display: flex;
flex-wrap: wrap;
}
.admin_page .admin_table_search .admin_state {
display: flex;
flex-wrap: wrap;
}
</style>

View File

@@ -77,10 +77,12 @@ import { PieChart } from 'echarts/charts';
import { LabelLayout } from 'echarts/features';
import { useStore } from "vuex";
import { CanvasRenderer } from 'echarts/renderers';
import { useI18n } from 'vue-i18n'
export default defineComponent({
components: {
},
setup() {
const {t} = useI18n()
const store:any = useStore()
let filter:any = reactive({
dataList:computed(()=>{
@@ -115,7 +117,7 @@ export default defineComponent({
let data:any = []
rv.names.forEach((item:any,index:number) => {
let obj = {
name : item,
name : t(`admin.${item}`),
value:rv.values[index],
}
data.push(obj)

View File

@@ -1,12 +1,11 @@
<template>
<div class="test_cli admin_page">
<div class="test_cli admin_page">
<div class="admin_table_search">
<div class="admin_state">
<div class="admin_state_item">
<span>Start Date:</span>
<a-range-picker
style="width:250px"
style="width: 250px"
class="range_picker"
v-model:value="rangePickerValue"
:placeholder="[
@@ -24,34 +23,51 @@
</div>
<div class="admin_state_item">
<span>Start Time:</span>
<a-time-range-picker style="width:250px" class="range_picker" valueFormat="HH:mm:ss" v-model:value="rangeTimeValue" />
<a-time-range-picker
style="width: 250px"
class="range_picker"
valueFormat="HH:mm:ss"
v-model:value="rangeTimeValue"
/>
</div>
<div class="admin_state_item">
<span>Email:</span>
<input
v-model="email"
placeholder="Please enter email"
@keydown.enter="gettrialList"
type="text"
style="width: 250px"
/>
</div>
<span>Email:</span>
<input
v-model="email"
placeholder="Please enter email"
@keydown.enter="gettrialList"
type="text"
style="width: 250px"
/>
</div>
<div class="admin_state_item">
<span>User Name:</span>
<a-select
v-model:value="ids"
mode="multiple"
style="width: 250px"
:filter-option="filterOption"
placeholder="Select Item..."
max-tag-count="responsive"
:options="allUserList"
@keydown.enter="gettrialList"
></a-select>
</div>
<span>User Name:</span>
<a-select
v-model:value="ids"
mode="multiple"
style="width: 250px"
:filter-option="filterOption"
placeholder="Select Item..."
max-tag-count="responsive"
:options="allUserList"
@keydown.enter="gettrialList"
></a-select>
</div>
<div class="admin_state_item">
<span>Organization Name:</span>
<input
v-model="organizationName"
placeholder="Please enter Organization Name"
@keydown.enter="gettrialList"
type="text"
style="width: 250px"
/>
</div>
</div>
<div class="admin_search">
<div class="admin_search_item" @click="searchHistoryList">Search</div>
<div class="admin_search_item" @click="searchHistoryList">
Search
</div>
</div>
</div>
@@ -73,270 +89,272 @@
>
</a-table>
</div>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, createVNode, computed } from "vue";
import { useStore } from "vuex";
import { Https } from "@/tool/https";
export default defineComponent({
components: {
},
setup() {
const store:any = useStore()
let rangePickerValue: any = ref([]);
let rangeTimeValue: any = ref([]);
let renameData: any = ref({}); //修改名字选中的数据
const columns: any = computed(() => {
return [
{
title: 'Email',
align: "center",
dataIndex: "userEmail",
key: "userEmail",
width:200,
fixed: "left",
},
{
title: 'User Id',
align: "center",
ellipsis: true,
dataIndex: "accountId",
key: "accountId",
width:100,
},
{
title: 'User Name',
align: "center",
ellipsis: 200,
dataIndex: "userName",
key: "userName",
width:100,
// customRender: (record: any) => {
// let time = formatTime(
// record.text / 1000,
// "YYYY-MM-DD hh:mm:ss"
// );
// return time;
// },
},
{
title: 'isTrial',
align: "center",
ellipsis: true,
dataIndex: "isTrial",
key: "isTrial",
width:100,
customRender: (record: any) => {
let str
if(record.value == 1){
str ='Yes'
}else{
str ='No'
}
return str;
},
},
{
title: 'Frequency',
align: "center",
ellipsis: true,
dataIndex: "designTimes",
key: "designTimes",
width:100,
},
{
title: 'Country',
align: "center",
ellipsis: true,
dataIndex: "country",
key: "country",
width:200,
},
{
title: 'Title',
align: "center",
ellipsis: true,
dataIndex: "title",
key: "title",
width:100,
},
{
title: 'Surname',
align: "center",
ellipsis: true,
dataIndex: "surname",
key: "surname",
width:150,
},
{
title: 'Given Name',
align: "center",
ellipsis: true,
dataIndex: "givenName",
key: "givenName",
width:100,
},
{
title: 'Create Time',
align: "center",
ellipsis: true,
dataIndex: "createTime",
key: "createTime",
width:200,
},
{
title: 'Credits',
align: "center",
ellipsis: true,
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "credits",
key: "credits",
width:100,
},
{
title: 'Occupation',
align: "center",
ellipsis: true,
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "occupation",
key: "occupation",
width:100,
},
{
title: 'Trial Order Id',
align: "center",
ellipsis: true,
// width: 150,
// resizable: true,
dataIndex: "trialOrderId",
key: "trialOrderId",
width:100,
},
];
});
import { defineComponent, ref, createVNode, computed } from "vue";
import { useStore } from "vuex";
import { Https } from "@/tool/https";
export default defineComponent({
components: {},
setup() {
const store: any = useStore();
let rangePickerValue: any = ref([]);
let rangeTimeValue: any = ref([]);
let renameData: any = ref({}); //修改名字选中的数据
let organizationName: any = ref("");
const columns: any = computed(() => {
return [
{
title: "Email",
align: "center",
dataIndex: "userEmail",
key: "userEmail",
width: 200,
fixed: "left",
},
{
title: "User Id",
align: "center",
ellipsis: true,
dataIndex: "accountId",
key: "accountId",
width: 100,
},
{
title: "User Name",
align: "center",
ellipsis: 200,
dataIndex: "userName",
key: "userName",
width: 100,
// customRender: (record: any) => {
// let time = formatTime(
// record.text / 1000,
// "YYYY-MM-DD hh:mm:ss"
// );
// return time;
// },
},
{
title: "isTrial",
align: "center",
ellipsis: true,
dataIndex: "isTrial",
key: "isTrial",
width: 100,
customRender: (record: any) => {
let str;
if (record.value == 1) {
str = "Yes";
} else {
str = "No";
}
return str;
},
},
{
title: "Frequency",
align: "center",
ellipsis: true,
dataIndex: "designTimes",
key: "designTimes",
width: 100,
},
{
title: "Country",
align: "center",
ellipsis: true,
dataIndex: "country",
key: "country",
width: 200,
},
{
title: "Title",
align: "center",
ellipsis: true,
dataIndex: "title",
key: "title",
width: 100,
},
{
title: "Surname",
align: "center",
ellipsis: true,
dataIndex: "surname",
key: "surname",
width: 150,
},
{
title: "Given Name",
align: "center",
ellipsis: true,
dataIndex: "givenName",
key: "givenName",
width: 100,
},
{
title: "Create Time",
align: "center",
ellipsis: true,
dataIndex: "createTime",
key: "createTime",
width: 200,
},
{
title: "Credits",
align: "center",
ellipsis: true,
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "credits",
key: "credits",
width: 100,
},
{
title: "Occupation",
align: "center",
ellipsis: true,
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "occupation",
key: "occupation",
width: 100,
},
{
title: "Trial Order Id",
align: "center",
ellipsis: true,
// width: 150,
// resizable: true,
dataIndex: "trialOrderId",
key: "trialOrderId",
width: 100,
},
];
});
let allUserList: any = computed(()=>{
return store.state.adminPage.allUserList
})
let ids = ref([])
let email = ref('')
let dataList: any = ref([]);
let status: any = ref(0);
let filterOption = (input: any, option: any) => {
// 使用 option.label 进行搜索
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
};
return {
rangePickerValue,
rangeTimeValue,
columns,
dataList,
allUserList,
ids,
email,
renameData,
status,
filterOption,
};
},
data() {
return {
currentPage: 1,
pageSize: 10,
total: 0,
historyTableHeight: 0,
handleResizeColumn: (w:any, col:any) => {
col.width = w;
let allUserList: any = computed(() => {
return store.state.adminPage.allUserList;
});
let ids = ref([]);
let email = ref("");
let dataList: any = ref([]);
let status: any = ref(0);
let filterOption = (input: any, option: any) => {
// 使用 option.label 进行搜索
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
};
return {
rangePickerValue,
organizationName,
rangeTimeValue,
columns,
dataList,
allUserList,
ids,
email,
renameData,
status,
filterOption,
};
},
data() {
return {
currentPage: 1,
pageSize: 10,
total: 0,
historyTableHeight: 0,
handleResizeColumn: (w: any, col: any) => {
col.width = w;
},
};
},
mounted() {
let historyTable: any = this.$refs.historyTable;
this.historyTableHeight = historyTable.clientHeight - 200;
this.gettrialList();
},
methods: {
//改变页码
changePage(e: any) {
this.currentPage = e.current;
this.pageSize = e.pageSize;
this.gettrialList();
},
};
},
mounted() {
let historyTable: any = this.$refs.historyTable;
this.historyTableHeight = historyTable.clientHeight - 200;
this.gettrialList();
},
methods: {
//改变页码
changePage(e: any) {
this.currentPage = e.current;
this.pageSize = e.pageSize;
this.gettrialList();
},
//查询列表
searchHistoryList() {
this.currentPage = 1;
this.gettrialList();
},
//查询列表
searchHistoryList() {
this.currentPage = 1;
this.gettrialList();
},
//获取列表
gettrialList() {
let startTime: any = this.rangeTimeValue?.[0]
? this.rangeTimeValue?.[0]
: '00:00:00';
let endTime: any = this.rangeTimeValue[1]
? this.rangeTimeValue[1]
: '23:59:59';
let startDate: any = this.rangePickerValue[0]
? this.rangePickerValue[0]+' '+startTime
: "";
let endDate: any = this.rangePickerValue[1]
? this.rangePickerValue[1]+' '+endTime
: "";
let ids = this.ids.join(',')
let data = {
endTime:endDate,
startTime:startDate,
ids:ids,
email:this.email.trim(),
}
Https.axiosGet(Https.httpUrls.getDesignStatistic,{params:data}).then((rv: any) => {
if (rv) {
this.dataList = rv
// this.workspaceItem.position = this.singleTypeList[0].label
}
})
},
//删除分组
// deleteGroup(record: any, index: number) {
// let deleteGroupFun = (id: any, index: number) => {
// let data = {
// userGroupId: id,
// };
// Https.axiosPost(Https.httpUrls.deleteUserGroup, data).then(
// (rv: any) => {
// this.dataList.splice(index, 1);
// }
// );
// };
// Modal.confirm({
// title: "",
// icon: createVNode(ExclamationCircleOutlined),
// okText: "Yes",
// cancelText: "No",
// centered: true,
// mask: false,
// onOk() {
// deleteGroupFun(record.id, index);
// },
// });
// },
},
});
//获取列表
gettrialList() {
let startTime: any = this.rangeTimeValue?.[0]
? this.rangeTimeValue?.[0]
: "00:00:00";
let endTime: any = this.rangeTimeValue[1]
? this.rangeTimeValue[1]
: "23:59:59";
let startDate: any = this.rangePickerValue[0]
? this.rangePickerValue[0] + " " + startTime
: "";
let endDate: any = this.rangePickerValue[1]
? this.rangePickerValue[1] + " " + endTime
: "";
let ids = this.ids.join(",");
let data = {
endTime: endDate,
startTime: startDate,
ids: ids,
email: this.email.trim(),
organizationName: this.organizationName,
};
Https.axiosGet(Https.httpUrls.getDesignStatistic, {
params: data,
}).then((rv: any) => {
if (rv) {
this.dataList = rv;
// this.workspaceItem.position = this.singleTypeList[0].label
}
});
},
//删除分组
// deleteGroup(record: any, index: number) {
// let deleteGroupFun = (id: any, index: number) => {
// let data = {
// userGroupId: id,
// };
// Https.axiosPost(Https.httpUrls.deleteUserGroup, data).then(
// (rv: any) => {
// this.dataList.splice(index, 1);
// }
// );
// };
// Modal.confirm({
// title: "",
// icon: createVNode(ExclamationCircleOutlined),
// okText: "Yes",
// cancelText: "No",
// centered: true,
// mask: false,
// onOk() {
// deleteGroupFun(record.id, index);
// },
// });
// },
},
});
</script>
<style lang="less" scoped>
.admin_page .admin_table_search .admin_state {
display: flex;
flex-wrap: wrap;
}
.admin_page .admin_table_search .admin_state {
display: flex;
flex-wrap: wrap;
}
</style>

View File

@@ -22,7 +22,7 @@
</a-range-picker>
</div>
<div class="admin_state_item">
<span>Country:</span>
<span>Country or Region:</span>
<a-select
v-model:value="country"
:allowClear="true"
@@ -97,7 +97,7 @@
></a-select>
</div>
<div class="admin_state_item">
<span>Total Amount:</span>
<span>Total Amount: {{ totalPayer }}</span>
</div>
</div>
<div class="admin_search">
@@ -210,6 +210,8 @@ export default defineComponent({
orderBy:'',
status: "",
type: "",
totalPayer:0,
});
let selectList=reactive({
platformList:[
@@ -365,11 +367,11 @@ export default defineComponent({
ellipsis:true
},
{
title: "Country",
title: "Country or Region",
align: "center",
dataIndex: "country",
key: "country",
width:150,
width:200,
ellipsis:true
},
{
@@ -405,8 +407,11 @@ export default defineComponent({
filterData.orderBy = 'credits'
}
}
filterData.order = sorter.order == "descend" ? "DESC" : "ASC";
if(sorter.order){
filterData.order = sorter.order == "descend" ? "DESC" : "ASC";
}else{
filterData.order = ''
}
gettrialList();
};
@@ -466,6 +471,9 @@ export default defineComponent({
filter.dataList = rv.content;
filterData.total = rv.total;
filter.tableLoading = false;
rv.content.forEach((item: any) => {
filterData.totalPayer += Number(item.payerTotal)
})
// this.workspaceItem.position = this.singleTypeList[0].label
}

View File

@@ -69,13 +69,13 @@
<div class="operate_item" @click="editAffiliate(record)">Edit</div>
</div>
<div v-else-if="column?.openType" @click="openDetail(record,column?.openType)">
{{ text }} HDK
{{ text }} HKD
</div>
</template>
</a-table>
</div>
<itemAffiliateDetail ref="itemAffiliateDetail"></itemAffiliateDetail>
<editAudit ref="editAudit"></editAudit>
<editAudit ref="editAudit" @searchHistoryList="searchHistoryList"></editAudit>
</div>
</template>
<script lang="ts">
@@ -109,20 +109,33 @@ export default defineComponent({
key: "username",
},
{
title: 'Create Time',
align: "center",
width: 200,
dataIndex: "createTime",
key: "createTime",
sorter: true,
},{
title: 'State',
align: "center",
ellipsis: true,
width: 100,
dataIndex: "status",
key: "status",
},{
title: 'Visits',
align: "center",
ellipsis: true,
width: 100,
dataIndex: "visits",
key: "visits",
},{
title: 'Commission Percent',
align: "center",
ellipsis: true,
width: 100,
dataIndex: "commissionPercent",
key: "commissionPercent",
customRender: (record: any) => {
if(record.text){
return record.text+'%'
}else{
return '-'
}
},
},{
title: 'Total income',
align: "center",
@@ -154,6 +167,13 @@ export default defineComponent({
width: 250,
dataIndex: "link",
key: "link",
},{
title: 'Create Time',
align: "center",
width: 200,
dataIndex: "createTime",
key: "createTime",
sorter: true,
},{
title: 'Updata Time',
align: "center",

View File

@@ -57,6 +57,11 @@
style="width: 250px"
/>
</div>
<!-- {{ currentState }} -->
<div class="admin_state_item">
<span>State:</span>
<a-select v-model:value="currentState" style="width:250px" optionFilterProp="label" :options="state" placeholder="Please select" allowClear show-search></a-select>
</div>
</div>
<div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">Close</div>
@@ -96,14 +101,29 @@ export default defineComponent({
id: "",
commission: "",
});
let currentState = ref('')
let state = ref([
{
label:'Active',
value:'Active',
},
{
label:'Delete',
value:'Delete',
},
{
label:'Inactive',
value:'Inactive',
},
])
let init = (data) => {
let funStr = 'Edit'
console.log(data)
operations.operationsModal = true;
operations.title = funStr;
if (funStr == "Edit") {
operationsData.id = data.id;
operationsData.commission = data.commissionPercent;
currentState.value = data.status;
}
};
@@ -111,11 +131,13 @@ export default defineComponent({
return {
id: operationsData.id,
commission: operationsData.commission,
operationType: currentState.value,
};
};
let cancelDsign = () => {
operationsData.id = "";
operationsData.commission = "";
currentState.value = "";
operations.operationsModal = false;
};
let setOk = () => {
@@ -125,7 +147,7 @@ export default defineComponent({
!data.commission
)
return message.warning("Please check the input box marked with *");
Https.axiosGet(Https.httpUrls.updateCommission, {params:data}).then(
Https.axiosGet(Https.httpUrls.editAffiliate, {params:data}).then(
(rv) => {
if (rv) {
cancelDsign();
@@ -139,6 +161,8 @@ export default defineComponent({
...toRefs(operationsData),
cancelDsign,
init,
state,
currentState,
setOk,
};
},

View File

@@ -26,7 +26,7 @@
<a-select v-model:value="userType" size="large" style="width:250px" optionFilterProp="label" :options="state" placeholder="Please select" allowClear show-search></a-select>
</div> -->
<div class="admin_state_item">
<span>Country:</span>
<span>Country or Region:</span>
<a-select
v-model:value="country"
:allowClear="true"
@@ -292,11 +292,11 @@ export default defineComponent({
},
},
{
title: "Country",
title: "Country or Region",
align: "center",
dataIndex: "country",
key: "country",
width:100,
width:200,
},
{
title: "Create Date",
@@ -394,8 +394,11 @@ export default defineComponent({
filterData.orderBy = 'credits'
}
}
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
if(sorter.order){
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
}else{
filterData.order = ''
}
gettrialList();
};

View File

@@ -92,7 +92,7 @@
/>
</div>
<div class="admin_state_item">
<span>Country:</span>
<span>Country or Region:</span>
<input
:disabled="title != 'Add'"
:class="{active:title != 'Add'}"

View File

@@ -1,298 +1,331 @@
<template>
<div class="allUserPoerationModal" ref="allUserPoerationModal"></div>
<a-modal
class="allUserPoeration_modal generalModel"
v-model:visible="operationsModal"
:footer="null"
:get-container="() => $refs.allUserPoerationModal"
width="50%"
:height="'77rem'"
:maskClosable="false"
:centered="true"
:closable="false"
:mask="true"
wrapClassName="#app"
:keyboard="false"
>
<div class="generalModel_btn">
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
<svg
width="100%" height="100%"
viewBox="0 0 46 46"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<circle cx="23" cy="23" r="23" fill="black" fill-opacity="0.3" />
<rect
x="32.5063"
y="12"
width="3"
height="29"
rx="1.5"
transform="rotate(45 32.5063 12)"
fill="white"
/>
<rect
x="34.6274"
y="32.5059"
width="3"
height="29"
rx="1.5"
transform="rotate(135 34.6274 32.5059)"
fill="white"
/>
</svg>
</div>
</div>
<div class="modal_title_text">
<div>{{ title }} Coupon</div>
</div>
<div class="allUserPoeration_center admin_page">
<div class="admin_state_item">
<span>Cooperator:</span>
<input
v-model="cooperator"
placeholder="Please enter cooperator"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item">
<span>percentOff(%): <span>*</span></span>
<input
:class="{ active: title != 'Add' }"
:disabled="title != 'Add'"
v-model="percentOff"
placeholder="Please enter percentOff"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item">
<span>Commission Rate: <span>*</span></span>
<input
:class="{ active: title != 'Add' }"
:disabled="title != 'Add'"
v-model="commissionRate"
placeholder="Please enter commission rate"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item">
<!-- <div class="admin_state_item" > -->
<span>End Time: <span>*</span></span>
<a-space direction="vertical" style="width: 220px">
<a-date-picker
v-model:value="rangePickerValue"
:disabled="title != 'Add'"
style="width: 220px"
/>
</a-space>
</div>
<div class="admin_state_item">
<span>MaxRedemptions:</span>
<input
:class="{ active: title != 'Add' }"
:disabled="title != 'Add'"
v-model="maxRedemptions"
placeholder="Please enter maximum"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item">
<span>PaidCommission:</span>
<input
v-model="paidCommission"
placeholder="Please enter paidCommission"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item">
<span>Remark:</span>
<input
v-model="remark"
placeholder="Please enter remark"
type="text"
style="width: 220px"
/>
</div>
</div>
<div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">Close</div>
<div class="admin_search_item" @click="setOk">OK</div>
</div>
</a-modal>
<div class="mark_loading" v-show="loadingShow">
<a-spin size="large" />
</div>
</template>
<script>
import {
defineComponent,
ref,
reactive,
watch,
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 dayjs, { Dayjs } from "dayjs";
import md5 from "md5";
export default defineComponent({
components: {},
emits: ["searchHistoryList"],
setup(props, { emit }) {
let operations = reactive({
operationsModal: false,
operationsEdit: false,
loadingShow: false,
title: "",
});
let operationsData = reactive({
rangePickerValue: "",
percentOff: "",
commissionRate: "",
maxRedemptions: "",
cooperator: "",
paidCommission: "",
remark: "",
id: "",
});
let init = (funStr, data) => {
operations.operationsModal = true;
operations.operationsEdit = true;
operations.title = funStr;
if (funStr == "Add") operations.operationsEdit = false;
if (funStr == "Edit") {
operationsData.id = data.id;
operationsData.percentOff = data.percentOff;
operationsData.commissionRate = data.commissionRate;
operationsData.maxRedemptions = data.maxRedemptions;
operationsData.cooperator = data.cooperator;
operationsData.paidCommission = data.paidCommission;
operationsData.remark = data.remark;
operationsData.rangePickerValue = dayjs(
new Date(data.redeemBy * 1000).toISOString().split("T")[0],
"YYYY/MM/DD"
);
// operationsData.rangePickerValue='2024-08-05T00:00:06'
// operationsData.validEndTime='2024-08-05T00:00:06'
// operationsData.commissionRate = data.commissionRate
// operationsData.maxRedemptions = data.maxRedemptions
// operationsData.validStartTime = formatTime(data.validStartTime)
// operationsData.validEndTime = formatTime(data.validEndTime)
}
};
let setAddData = () => {
const timestampMs =
new Date(operationsData.rangePickerValue).getTime() / 1000; // 直接获取毫秒时间戳
return {
percentOff: operationsData.percentOff,
maxRedemptions: operationsData.maxRedemptions,
commissionRate: operationsData.commissionRate,
timestamp: timestampMs,
cooperator: operationsData.cooperator,
remark: operationsData.remark,
};
};
let setEditData = () => {
const timestampMs =
new Date(operationsData.rangePickerValue).getTime() / 1000; // 直接获取毫秒时间戳
return {
id: operationsData.id,
paidCommission: operationsData.commissionRate,
cooperator: operationsData.cooperator,
remark: operationsData.remark,
};
};
let cancelDsign = () => {
operationsData.rangePickerValue = "";
operationsData.percentOff = "";
operationsData.commissionRate = "";
operationsData.maxRedemptions = "";
operationsData.cooperator = "";
operationsData.paidCommission = "";
operationsData.remark = "";
operationsData.id = "";
operations.operationsModal = false;
};
let setOk = () => {
let data;
if (operations.title == "Add") {
data = setAddData();
if (!data.commissionRate || !data.timestamp || !data.percentOff)
return message.warning("Please check the input box marked with *");
Https.axiosPost(Https.httpUrls.createCoupon, data).then((rv) => {
if (rv) {
cancelDsign();
emit("searchHistoryList");
}
});
} else {
data = setEditData();
Https.axiosGet(Https.httpUrls.updatePromCodeInfo, {
params: data,
}).then((rv) => {
if (rv) {
cancelDsign();
emit("searchHistoryList");
}
});
}
};
return {
...toRefs(operations),
...toRefs(operationsData),
cancelDsign,
init,
focus,
blur,
setOk,
};
},
data() {
return {};
},
mounted() {},
methods: {},
});
</script>
<style lang="less" scoped>
:deep(.allUserPoeration_modal) {
.ant-modal-body {
display: flex;
flex-direction: column;
<div class="allUserPoerationModal" ref="allUserPoerationModal"></div>
<a-modal
class="allUserPoeration_modal generalModel"
v-model:visible="operationsModal"
:footer="null"
:get-container="() => $refs.allUserPoerationModal"
width="50%"
:height="'77rem'"
:maskClosable="false"
:centered="true"
:closable="false"
:mask="true"
wrapClassName="#app"
:keyboard="false"
>
<div class="generalModel_btn">
<div class="generalModel_closeIcon" @click.stop="cancelDsign()">
<svg
width="100%" height="100%"
viewBox="0 0 46 46"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<circle cx="23" cy="23" r="23" fill="black" fill-opacity="0.3" />
<rect
x="32.5063"
y="12"
width="3"
height="29"
rx="1.5"
transform="rotate(45 32.5063 12)"
fill="white"
/>
<rect
x="34.6274"
y="32.5059"
width="3"
height="29"
rx="1.5"
transform="rotate(135 34.6274 32.5059)"
fill="white"
/>
</svg>
</div>
</div>
<div class="modal_title_text">
<div>{{ title }} Coupon</div>
</div>
<div class="allUserPoeration_center admin_page">
<div class="admin_state_item">
<span>Cooperator:</span>
<input
v-model="cooperator"
placeholder="Please enter cooperator"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item">
<span>percentOff(%): <span>*</span></span>
<input
:class="{ active: title != 'Add' }"
:disabled="title != 'Add'"
v-model="percentOff"
placeholder="Please enter percentOff"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item">
<span>Commission Rate: <span>*</span></span>
<input
:class="{ active: title != 'Add' }"
:disabled="title != 'Add'"
v-model="commissionRate"
placeholder="Please enter commission rate"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item">
<!-- <div class="admin_state_item" > -->
<span>Start Time: <span>*</span></span>
<a-space direction="vertical" style="width: 220px">
<a-date-picker
v-model:value="startTime"
:disabled="title != 'Add'"
style="width: 220px"
/>
</a-space>
</div>
<div class="admin_state_item">
<!-- <div class="admin_state_item" > -->
<span>End Time: <span>*</span></span>
<a-space direction="vertical" style="width: 220px">
<a-date-picker
v-model:value="endTime"
:disabled="title != 'Add'"
style="width: 220px"
/>
</a-space>
</div>
<div class="admin_state_item">
<span>MaxRedemptions:</span>
<input
:class="{ active: title != 'Add' }"
:disabled="title != 'Add'"
v-model="maxRedemptions"
placeholder="Please enter maximum"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item">
<span>PaidCommission:</span>
<input
v-model="paidCommission"
placeholder="Please enter paidCommission"
type="text"
style="width: 220px"
/>
</div>
<div class="admin_state_item">
<span>Remark:</span>
<input
v-model="remark"
placeholder="Please enter remark"
type="text"
style="width: 220px"
/>
</div>
</div>
<div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">Close</div>
<div class="admin_search_item" @click="setOk">OK</div>
</div>
</a-modal>
<div class="mark_loading" v-show="loadingShow">
<a-spin size="large" />
</div>
</template>
<script>
import {
defineComponent,
ref,
reactive,
watch,
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 dayjs, { Dayjs } from "dayjs";
import md5 from "md5";
export default defineComponent({
components: {},
emits: ["searchHistoryList"],
setup(props, { emit }) {
let operations = reactive({
operationsModal: false,
operationsEdit: false,
loadingShow: false,
title: "",
});
let operationsData = reactive({
endTime: "",
startTime: "",
percentOff: "",
commissionRate: "",
maxRedemptions: "",
cooperator: "",
paidCommission: "",
remark: "",
id: "",
});
let init = (funStr, data) => {
operations.operationsModal = true;
operations.operationsEdit = true;
operations.title = funStr;
if (funStr == "Add") operations.operationsEdit = false;
if (funStr == "Edit") {
operationsData.id = data.id;
operationsData.percentOff = data.percentOff;
operationsData.commissionRate = data.commissionRate;
operationsData.maxRedemptions = data.maxRedemptions;
operationsData.cooperator = data.cooperator;
operationsData.paidCommission = data.paidCommission;
operationsData.remark = data.remark;
operationsData.endTime = dayjs(
new Date(data.redeemBy * 1000).toLocaleDateString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).replace(/\//g, '/'),
"YYYY/MM/DD"
);
// 确保格式一致
// operationsData.startTime = dayjs(
// new Date(data.startTime * 1000).toISOString().split("T")[0],
// "YYYY/MM/DD"
// );
operationsData.startTime = dayjs(
new Date(data.startTime * 1000).toLocaleDateString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).replace(/\//g, '/'),
"YYYY/MM/DD"
);
// operationsData.endTime='2024-08-05T00:00:06'
// operationsData.validEndTime='2024-08-05T00:00:06'
// operationsData.commissionRate = data.commissionRate
// operationsData.maxRedemptions = data.maxRedemptions
// operationsData.validStartTime = formatTime(data.validStartTime)
// operationsData.validEndTime = formatTime(data.validEndTime)
}
};
let setAddData = () => {
const emdTimeMs =
new Date(operationsData.endTime).getTime() / 1000; // 直接获取毫秒时间戳
const startTimeMs =
new Date(operationsData.startTime).getTime() / 1000; // 直接获取毫秒时间戳
return {
percentOff: operationsData.percentOff,
maxRedemptions: operationsData.maxRedemptions,
commissionRate: operationsData.commissionRate,
endTime: emdTimeMs,
startTime: startTimeMs,
cooperator: operationsData.cooperator,
remark: operationsData.remark,
};
};
let setEditData = () => {
const timestampMs =
new Date(operationsData.endTime).getTime() / 1000; // 直接获取毫秒时间戳
return {
id: operationsData.id,
paidCommission: operationsData.commissionRate,
cooperator: operationsData.cooperator,
remark: operationsData.remark,
};
};
let cancelDsign = () => {
operationsData.endTime = "";
operationsData.startTime = "";
operationsData.percentOff = "";
operationsData.commissionRate = "";
operationsData.maxRedemptions = "";
operationsData.cooperator = "";
operationsData.paidCommission = "";
operationsData.remark = "";
operationsData.id = "";
operations.operationsModal = false;
};
let setOk = () => {
let data;
if (operations.title == "Add") {
data = setAddData();
if (!data.commissionRate || !data.startTime || !data.percentOff || !data.endTime)
return message.warning("Please check the input box marked with *");
Https.axiosPost(Https.httpUrls.createCoupon, data).then((rv) => {
if (rv) {
cancelDsign();
emit("searchHistoryList");
}
});
} else {
data = setEditData();
Https.axiosGet(Https.httpUrls.updatePromCodeInfo, {
params: data,
}).then((rv) => {
if (rv) {
cancelDsign();
emit("searchHistoryList");
}
});
}
};
return {
...toRefs(operations),
...toRefs(operationsData),
cancelDsign,
init,
focus,
blur,
setOk,
};
},
data() {
return {};
},
mounted() {},
methods: {},
});
</script>
<style lang="less" scoped>
:deep(.allUserPoeration_modal) {
.ant-modal-body {
display: flex;
flex-direction: column;
}
}
}
</style>
<style lang="less" scoped>
.allUserPoeration_modal {
.closeIcon {
z-index: 2;
</style>
<style lang="less" scoped>
.allUserPoeration_modal {
.closeIcon {
z-index: 2;
}
.allUserPoeration_btn {
display: flex;
flex-direction: row;
height: auto;
justify-content: flex-end;
padding: 1rem 0;
.admin_search_item {
margin-bottom: 0;
}
}
.allUserPoeration_center {
flex: 1;
overflow-y: auto;
flex-direction: row;
flex-wrap: wrap;
}
}
.allUserPoeration_btn {
display: flex;
flex-direction: row;
height: auto;
justify-content: flex-end;
padding: 1rem 0;
.admin_search_item {
margin-bottom: 0;
}
}
.allUserPoeration_center {
flex: 1;
overflow-y: auto;
flex-direction: row;
flex-wrap: wrap;
}
}
</style>
</style>

View File

@@ -1,228 +1,305 @@
<template>
<div class="admin_page">
<div class="admin_table_search" >
<div class="admin_state">
<div class="admin_page">
<div class="admin_table_search">
<div class="admin_state">
<div class="admin_state_item">
<span>Status:</span>
<a-select
v-model:value="status"
size="large"
style="width: 250px"
optionFilterProp="label"
:options="statusList"
placeholder="Please select"
allowClear
show-search
></a-select>
</div>
</div>
<div class="admin_search">
<div class="admin_search_item" @click="searchHistoryList">
Search
</div>
<div class="admin_search_item" @click="addhHistoryList">
Add
</div>
</div>
</div>
<div class="admin_table_content" ref="historyTable">
<a-table
@resizeColumn="handleResizeColumn"
:loading="tableLoading"
:columns="columns"
:data-source="dataList"
:scroll="{ y: historyTableHeight }"
@change="changePage"
:showSorterTooltip='false'
:pagination="{
showSizeChanger: true,
current: currentPage,
pageSize: pageSize,
total: total,
showQuickJumper: true,
bordered: false,
}"
>
</a-table>
</div>
<span>Create Time:</span>
<a-range-picker
style="width: 250px"
class="range_picker"
v-model:value="rangePickerValue"
:placeholder="[
$t('HistoryPage.StartDate'),
$t('HistoryPage.EndDate'),
]"
valueFormat="YYYY-MM-DD"
>
<template #suffixIcon>
<span
class="icon iconfont range_picker_icon icon-rili"
></span>
</template>
</a-range-picker>
</div>
<div class="admin_state_item">
<span>Status:</span>
<a-select
v-model:value="status"
size="large"
style="width: 250px"
optionFilterProp="label"
:options="statusList"
placeholder="Please select"
@change="changeStatus"
allowClear
show-search
></a-select>
</div>
<div class="admin_state_item">
<span>School:</span>
<a-select
v-model:value="school"
size="large"
style="width: 250px"
optionFilterProp="label"
:options="schoolList"
placeholder="Please select"
allowClear
show-search
@focus="handleFocus"
></a-select>
</div>
</div>
<div class="admin_search">
<div class="admin_search_item" @click="searchHistoryList">
Search
</div>
<div class="admin_search_item" @click="addhHistoryList">
Add
</div>
</div>
</div>
<div class="admin_table_content" ref="historyTable">
<a-table
@resizeColumn="handleResizeColumn"
:loading="tableLoading"
:columns="columns"
:data-source="dataList"
:scroll="{ y: historyTableHeight }"
@change="changePage"
:showSorterTooltip="false"
:pagination="{
showSizeChanger: true,
current: currentPage,
pageSize: pageSize,
total: total,
showQuickJumper: true,
bordered: false,
}"
>
</a-table>
</div>
<add ref="add" @searchHistoryList="searchHistoryList"></add>
</div>
</div>
</template>
<script lang="ts">
import {
defineComponent,
ref,
createVNode,
computed,
reactive,
toRefs,
onMounted,
} from "vue";
import { formatTime } from "@/tool/util";
import { useStore } from "vuex";
import { Https } from "@/tool/https";
import {getCookie,clonAllCookie} from '@/tool/cookie'
import add from './add.vue'
export default defineComponent({
components: {add},
setup() {
const store:any = useStore()
let filter: any = reactive({
dataList: [],
tableLoading: false,
countryList: computed(()=>{
return store.state.adminPage.country
}),
add:null as any,
status:'',
});
let filterData: any = reactive({
currentPage: 1,
pageSize: 10,
total: 0,
country: "",
status: "",
type: "",
});
let selectList=reactive({
statusList:[
{
label: "all",
value: "",
import {
defineComponent,
ref,
createVNode,
computed,
reactive,
toRefs,
onMounted,
} from "vue";
import { formatTime } from "@/tool/util";
import { useStore } from "vuex";
import { Https } from "@/tool/https";
import { getCookie, clonAllCookie } from "@/tool/cookie";
import add from "./add.vue";
export default defineComponent({
components: { add },
setup() {
const store: any = useStore();
let filter: any = reactive({
dataList: [],
tableLoading: false,
countryList: computed(() => {
return store.state.adminPage.country;
}),
add: null as any,
});
let filterData: any = reactive({
currentPage: 1,
pageSize: 10,
total: 0,
country: "",
status: "",
school: "",
rangePickerValue: [],
});
let selectList = reactive({
statusList: [
{
label: "all",
value: "",
},
{
label: "Enterprise",
value: "Enterprise",
},
{
label: "Education",
value: "Education",
},
],
schoolList: [],
});
let renameData: any = ref({}); //修改名字选中的数据
const columns: any = computed(() => {
return [
{
title: "Id",
align: "center",
dataIndex: "id",
key: "id",
width: 150,
ellipsis: true,
},
{
title: "Name",
align: "center",
dataIndex: "name",
key: "name",
width: 150,
ellipsis: true,
},
{
title: "Create Time",
align: "center",
dataIndex: "createTime",
key: "createTime",
width: 150,
ellipsis: true,
},
{
title: "Type",
align: "center",
dataIndex: "type",
key: "type",
width: 150,
ellipsis: true,
},
];
});
//改变页码
let changePage = (e: any, filters: any, sorter: any) => {
filterData.currentPage = e.current;
filterData.pageSize = e.pageSize;
gettrialList();
};
const filterOption = (e: any) => {
let type = filterData.status;
if (type == "Education") type = "School";
let params = {
name: e,
type,
};
Https.axiosPost(
Https.httpUrls.organizationNameSearch,
{},
{ params: params }
).then((rv: any) => {
if (rv.length == 0) return (selectList.schoolList = []);
selectList.schoolList = rv.map((item: any) => {
return {
label: item,
value: item,
};
});
});
};
//查询列表
let searchHistoryList = () => {
filterData.currentPage = 1;
gettrialList();
};
//获取列表
let gettrialList = () => {
filter.tableLoading = true;
const dateArr = filterData.rangePickerValue;
const startDate = dateArr?.[0] ? dateArr[0] + " " + "00:00:00" : "";
const endDate = dateArr?.[1] ? dateArr[1] + " " + "23:59:59" : "";
const params = {
startTime: startDate,
endTime: endDate,
id: "",
name: filterData.school,
type: filterData.status,
size: filterData.pageSize,
page: filterData.currentPage,
}; //type: "Enterprise"
Https.axiosPost(Https.httpUrls.queryOrganization, params).then(
(rv: any) => {
if (rv) {
console.log(rv);
// filter.dataList = rv;
filter.dataList = rv.records;
filterData.total = rv.total;
filter.tableLoading = false;
// this.workspaceItem.position = this.singleTypeList[0].label
}
}
);
};
let addhHistoryList = () => {
filter.add.init("Add", "");
};
const handleFocus = () => {
if (selectList.schoolList.length == 0) {
filterOption("");
}
};
const changeStatus = () => {
filterData.school = "";
selectList.schoolList = [];
};
onMounted(() => {
gettrialList();
});
return {
...toRefs(filter),
...toRefs(filterData),
...toRefs(selectList),
columns,
renameData,
changePage,
searchHistoryList,
gettrialList,
addhHistoryList,
handleFocus,
changeStatus,
};
},
data() {
return {
historyTableHeight: 0,
handleResizeColumn: (w: any, col: any) => {
col.width = w;
},
{
label:'Enterprise',
value:'Enterprise',
},
{
label:'Education',
value:'Education',
},
],
})
let renameData: any = ref({}); //修改名字选中的数据
const columns: any = computed(() => {
return [
{
title: "Id",
align: "center",
dataIndex: "id",
key: "id",
width:150,
ellipsis:true
},
{
title: "Name",
align: "center",
dataIndex: "name",
key: "name",
width:150,
ellipsis:true
},
{
title: "Create Time",
align: "center",
dataIndex: "createTime",
key: "createTime",
width:150,
ellipsis:true
},
{
title: "Type",
align: "center",
dataIndex: "type",
key: "type",
width:150,
ellipsis:true,
},
];
});
//改变页码
let changePage = (e: any, filters:any, sorter:any) => {
filterData.currentPage = e.current;
filterData.pageSize = e.pageSize;
gettrialList();
};
//查询列表
let searchHistoryList = () => {
filterData.currentPage = 1;
gettrialList();
};
//获取列表
let gettrialList = () => {
filter.tableLoading = true;
Https.axiosGet(Https.httpUrls.queryOrganization, {params:{type:'Enterprise'}}).then(
(rv: any) => {
if (rv) {
console.log(rv)
filter.dataList = rv
// filter.dataList = rv.content;
// filterData.total = rv.total;
filter.tableLoading = false;
// this.workspaceItem.position = this.singleTypeList[0].label
}
}
);
};
let addhHistoryList = () => {
filter.add.init('Add','')
};
onMounted(() => {
gettrialList();
});
return {
...toRefs(filter),
...toRefs(filterData),
...toRefs(selectList),
columns,
renameData,
changePage,
searchHistoryList,
gettrialList,
addhHistoryList,
};
},
data() {
return {
historyTableHeight: 0,
handleResizeColumn: (w: any, col: any) => {
col.width = w;
},
};
},
mounted() {
let historyTable: any = this.$refs.historyTable;
this.historyTableHeight = historyTable.clientHeight - 200;
},
methods: {},
});
};
},
mounted() {
let historyTable: any = this.$refs.historyTable;
this.historyTableHeight = historyTable.clientHeight - 200;
},
methods: {},
});
</script>
<style lang="less" scoped>
.admin_page .admin_table_search .admin_state {
display: flex;
flex-wrap: wrap;
}
:deep(.operate_list){
.fi{
font-size: 2rem;
margin-right: 1rem;
.admin_page .admin_table_search .admin_state {
display: flex;
flex-wrap: wrap;
}
.success{
.fi-ss-check-circle{
color: #3ab45c;
:deep(.operate_list) {
.fi {
font-size: 2rem;
margin-right: 1rem;
}
.success {
.fi-ss-check-circle {
color: #3ab45c;
}
}
.pending {
.fi-ss-check-circle {
color: #ffc628;
}
}
.fail {
.fi-ss-check-circle {
color: #ff0000;
}
}
}
.pending{
.fi-ss-check-circle{
color: #ffc628;
}
}
.fail{
.fi-ss-check-circle{
color: #ff0000;
}
}
}
</style>

View File

@@ -150,11 +150,11 @@ export default defineComponent({
},
},
{
title: "Country",
title: "Country or Region",
align: "center",
dataIndex: "country",
key: "country",
width:100,
width:200,
},
{
title: "Create Date",
@@ -242,7 +242,11 @@ export default defineComponent({
filterData.orderBy = 'credits'
}
}
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
if(sorter.order){
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
}else{
filterData.order = ''
}
gettrialList();
}

View File

@@ -177,11 +177,11 @@ export default defineComponent({
},
},
{
title: "Country",
title: "Country or Region",
align: "center",
dataIndex: "country",
key: "country",
width:100,
width:200,
},
{
title: "Create Date",
@@ -268,7 +268,11 @@ export default defineComponent({
filterData.orderBy = 'credits'
}
}
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
if(sorter.order){
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
}else{
filterData.order = ''
}
gettrialList();
}

View File

@@ -23,7 +23,7 @@
</a-range-picker>
</div>
<div class="admin_state_item">
<span>Country:</span>
<span>Country or Region:</span>
<a-select
v-model:value="country"
:allowClear="true"
@@ -201,7 +201,11 @@ export default defineComponent({
filterData.orderBy = 'time'
}
}
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
if(sorter.order){
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
}else{
filterData.order = ''
}
gettrialList();
}

View File

@@ -10,6 +10,8 @@ import { fabric } from "fabric-with-all";
import { generateId } from "../utils/helper.js";
import { ClearSelectionCommand } from "./LassoCutoutCommand.js";
import { ClearSelectionContentCommand } from "./ClearSelectionContentCommand.js";
import i18n from "@/lang/index.ts";
const { t } = i18n.global;
/**
* 剪切选区到新图层命令
@@ -36,7 +38,7 @@ export class CutSelectionToNewLayerCommand extends CompositeCommand {
this.baseResolutionScale = options.baseResolutionScale || 2; // 基础分辨率倍数
this.groupId = options.groupId || generateId("lasso-copy-group-");
this.groupName = options.groupName || `选区组`;
this.groupName = options.groupName || t(`Canvas.ConstituencyGroup`);
this.groupLayer = null; // 新增:保存组图层的引用
this.originalLayersLength = 0; // 新增:保存原始图层数量
@@ -179,7 +181,7 @@ export class CutSelectionToNewLayerCommand extends CompositeCommand {
// 创建新的组图层
this.groupLayer = createLayer({
id: this.groupId,
name: this.groupName || `选区组`,
name: this.groupName || t(`Canvas.ConstituencyGroup`),
type: LayerType.GROUP,
visible: true,
locked: false,

View File

@@ -18,6 +18,7 @@ export class FillGroupLayerBackgroundCommand extends Command {
this.canvas = options.canvas;
this.layers = options.layers;
this.canvasManager = options.canvasManager;
this.layerManager = options.layerManager;
this.layerId = options.layerId;
this.fillColor = options.fillColor;
this.oldFill = null;
@@ -42,13 +43,25 @@ export class FillGroupLayerBackgroundCommand extends Command {
this.firstObj = null; // 用于存储组图层的原始对象
}
async execute() {
const layer = this.layer;
async execute(isUndo = false) {
const { layer, parent } = findLayerRecursively(
this.layers.value,
this.layerId
);
this.layer = layer;
this.parent = parent;
console.log("==========",layer);
if (!layer) return false;
this.oldFill = layer.fill ?? null;
this.oldFillColor = layer.oldFillColor ?? null;
if(!isUndo){
this.oldFill = layer.fill ?? null;
this.oldFillColor = layer.fillColor ?? null;
if(this.oldFill){
// 移除旧的填充对象
removeCanvasObjectByObject(this.canvas, this.oldFill);
}
}
const fillColor = isUndo ? this.oldFillColor : this.fillColor;
// 构建填充对象
let clippingMaskFabricObject = null;
if (layer.clippingMask) {
@@ -63,7 +76,7 @@ export class FillGroupLayerBackgroundCommand extends Command {
height: clippingMaskFabricObject.height,
left: clippingMaskFabricObject.left || 0,
top: clippingMaskFabricObject.top || 0,
fill: this.fillColor,
fill: fillColor,
layerId: this.layerId,
id: this.oldFill?.id || generateId("fill-"),
selectable: false,
@@ -84,7 +97,7 @@ export class FillGroupLayerBackgroundCommand extends Command {
height: originalInfo.height,
left: originalInfo.left + originalInfo.width / 2 || 0,
top: originalInfo.top + originalInfo.height / 2 || 0,
fill: this.fillColor,
fill: fillColor,
layerId: this.layerId,
id: this.oldFill?.id || generateId("fill-"),
selectable: false,
@@ -111,7 +124,7 @@ export class FillGroupLayerBackgroundCommand extends Command {
height: clippingMaskFabricObject.height,
left: clippingMaskFabricObject.left || 0,
top: clippingMaskFabricObject.top || 0,
fill: this.fillColor,
fill: fillColor,
layerId: this.layerId,
id: this.oldFill?.id || generateId("fill-"),
selectable: false,
@@ -127,7 +140,7 @@ export class FillGroupLayerBackgroundCommand extends Command {
height: this.canvasManager?.canvasHeight?.value || this.canvas.height,
left: this.canvas.width / 2 || 0,
top: this.canvas.height / 2 || 0,
fill: this.fillColor,
fill: fillColor,
layerId: this.layerId,
id: this.oldFill?.id || generateId("fill-"),
selectable: false,
@@ -143,8 +156,8 @@ export class FillGroupLayerBackgroundCommand extends Command {
layer.fabricObjects = [
this.newFill.toObject(["id", "layerId"]) || this.newFill,
];
layer.fill = null; // this.newFill.toObject(["id", "layerId"]);
layer.fillColor = this.fillColor;
layer.fill = this.newFill; // this.newFill.toObject(["id", "layerId"]);
layer.fillColor = fillColor;
// 取消激活对象
this.canvas.discardActiveObject(); // 取消当前活动对象
@@ -199,6 +212,7 @@ export class FillGroupLayerBackgroundCommand extends Command {
this.group.set({
id: layerObjects[0]?.id || generateId("group-"),
layerId: this.layer?.id,
layerName: this.layer?.name,
});
// this.group.setCoords();
// this.group.setObjectsCoords();
@@ -213,7 +227,7 @@ export class FillGroupLayerBackgroundCommand extends Command {
this.group.clipPath = clipPath;
}
layer.fabricObjects = [
this.group.toObject(["id", "layerId"]) || this.group,
this.group.toObject(["id", "layerId", "layerName"]) || this.group,
];
// removeCanvasObjectByObject(this.canvas, layerObjects?.[0]);
insertObjectAtZIndex(this.canvas, this.group, insertIndex, false, true);
@@ -222,8 +236,8 @@ export class FillGroupLayerBackgroundCommand extends Command {
// this.group?.addWithUpdate?.();
// layer.fabricObjects = [this.group?.toObject?.(["id", "layerId"]) || this.group];
// this.canvas.renderAll();
layer.fill = null; // this.newFill.toObject(["id", "layerId"]);
layer.fillColor = this.fillColor;
layer.fill = this.newFill; // this.newFill.toObject(["id", "layerId"]);
layer.fillColor = fillColor;
// 取消激活对象
this.canvas.discardActiveObject(); // 取消当前活动对象
@@ -237,14 +251,11 @@ export class FillGroupLayerBackgroundCommand extends Command {
return true;
}
async undo() {
this.layer.fillColor = this.oldFillColor;
this.layer.fill = this.oldFill;
if (!this.originalInfo && this.firstObj) {
if (!this.originalInfo && this.layer.fill) {
this.canvas.discardActiveObject();
this.canvas.remove(this.firstObj);
this.canvas.remove(this.layer.fill);
this.canvas.renderAll();
this.canvasManager.thumbnailManager?.generateLayerThumbnail(
this.parent && this.canvasManager.thumbnailManager?.generateLayerThumbnail(
this.parent.id
);
this.canvasManager.thumbnailManager?.generateLayerThumbnail(
@@ -264,7 +275,8 @@ export class FillGroupLayerBackgroundCommand extends Command {
canvasObj?._objects?.length > 0
) {
// 移除新添加的填充对象
if (canvasObj._objects?.[0] === this.newFill) {
// if (canvasObj._objects?.[0] === this.newFill) {
if (/^fill-/.test(canvasObj._objects?.[0]?.id)) {
canvasObj._objects.shift();
canvasObj.addWithUpdate();
canvasObj.setCoords();
@@ -284,6 +296,14 @@ export class FillGroupLayerBackgroundCommand extends Command {
this.canvas.renderAll();
this.group = null;
}
if(this.oldFill){
this.layer.fill = this.oldFill;
this.layer.fillColor = this.oldFillColor;
return this.execute(true);
}else{
this.layer.fill = null;
this.layer.fillColor = null;
}
this.canvas.discardActiveObject(); // 取消当前活动对象
// 重新排序

View File

@@ -11,6 +11,10 @@ import {
} from "./LayerCommands.js";
import { fabric } from "fabric-with-all";
import { generateId } from "../utils/helper.js";
import i18n from "@/lang/index.ts";
const { t } = i18n.global;
/**
* 套索抠图命令
@@ -37,7 +41,7 @@ export class LassoCutoutCommand extends CompositeCommand {
this.baseResolutionScale = options.baseResolutionScale || 2; // 基础分辨率倍数
this.groupId = options.groupId || generateId("lasso-group-");
this.groupName = options.groupName || `选区组`;
this.groupName = options.groupName || t(`Canvas.ConstituencyGroup`);
this.clippingMaskId = generateId("clipping-mask-");
@@ -238,7 +242,7 @@ export class LassoCutoutCommand extends CompositeCommand {
// 创建新的组图层
this.groupLayer = createLayer({
id: this.groupId,
name: this.groupName || `选区组`,
name: this.groupName || t(`Canvas.ConstituencyGroup`),
type: LayerType.GROUP,
visible: true,
locked: false,

View File

@@ -13,6 +13,9 @@ import {
import { fabric } from "fabric-with-all";
import { generateId } from "../utils/helper.js";
import { ToolCommand } from "./ToolCommands.js";
import i18n from "@/lang/index.ts";
const { t } = i18n.global;
/**
* 套索抠图命令
@@ -39,7 +42,7 @@ export class LassoCutoutCommand extends CompositeCommand {
this.baseResolutionScale = options.baseResolutionScale || 2; // 基础分辨率倍数
this.groupId = options.groupId || generateId("lasso-group-");
this.groupName = options.groupName || `选区组`;
this.groupName = options.groupName || t(`Canvas.ConstituencyGroup`);
this.clippingMaskId = generateId("clipping-mask-");
@@ -220,16 +223,26 @@ export class LassoCutoutCommand extends CompositeCommand {
await clearSelectionCmd.execute();
this.executedCommands.push(clearSelectionCmd);
const topLayerIndex = this.layerManager.layers.value.findIndex(
(layer) => layer.id === this.originalLayer.id
);
const layers = this.layerManager.layers.value;
var topLayerIndex = 0;
layers.forEach((layer, index) => {
if (layer.id === this.originalLayer.id) {
topLayerIndex = index;
}else if (layer.children.length > 0) {
layer.children.forEach((childLayer) => {
if (childLayer.id === this.originalLayer.id) {
topLayerIndex = index;
}
});
}
});
// const selectLayer = this.layerManager.layers.value[topLayerIndex];
// 创建新的组图层
this.groupLayer = createLayer({
id: this.groupId,
name: this.groupName || `选区组`,
name: this.groupName || t(`Canvas.ConstituencyGroup`),
type: LayerType.GROUP,
visible: true,
locked: false,
@@ -244,7 +257,7 @@ export class LassoCutoutCommand extends CompositeCommand {
// });
const selectLayer = createLayer({
name: `选区空图层`,
name: t(`Canvas.ConstituencyEmptyLayer`),
type: LayerType.EMPTY,
visible: true,
locked: false,
@@ -284,6 +297,7 @@ export class LassoCutoutCommand extends CompositeCommand {
this.groupLayer.children.push(selectLayer);
// 插入新组图层
console.log("新增套索添加index", topLayerIndex);
this.layerManager.layers.value.splice(topLayerIndex, 0, this.groupLayer);
this.layerManager.activeLayerId.value = selectLayer.id; // 设置新组图层为活动图层

View File

@@ -70,7 +70,7 @@ export class AddLayerCommand extends Command {
undo() {
// 从图层列表删除该图层
this.layers.value = this.beforeLayers;
this.layers.value = [...this.beforeLayers];
// 恢复原活动图层
this.activeLayerId.value = this.oldActiveLayerId;
@@ -116,7 +116,7 @@ export class AddLayerCommand extends Command {
parentLayer.children.splice(insertIndex, 0, newLayer);
console.log(
`新图层已插入到子图层位置: ${insertIndex} (父图层: ${parentLayer.name})`
`新图层已插入到子图层位置: ${insertIndex} (父图层: ${parentLayer.name})`
);
} else {
// 当前激活图层是一级图层
@@ -528,6 +528,7 @@ export class RemoveLayerCommand extends Command {
this.layerIndex = this.layers.value.findIndex(
(layer) => layer.id === this.layerId
);
this.removedLayer = this.layers.value[this.layerIndex];
this.isActiveLayer = this.layerId === this.activeLayerId.value;
@@ -563,7 +564,12 @@ export class RemoveLayerCommand extends Command {
allObjects.push(object);
}
}
layer.fabricObjects?.forEach((fabric) => {
const { object } = findObjectById(this.canvas, fabric.id);
if (object && !allObjects.includes(object)) {
allObjects.push(object);
}
});
// 递归收集子图层的对象
if (layer.children && Array.isArray(layer.children)) {
layer.children.forEach((childLayer) => {
@@ -588,6 +594,9 @@ export class RemoveLayerCommand extends Command {
}
});
this.layerIndex = this.layers.value.findIndex(
(layer) => layer.id === this.layerId
);
// 从图层列表中删除
this.layers.value.splice(this.layerIndex, 1);
@@ -599,6 +608,9 @@ export class RemoveLayerCommand extends Command {
);
if (newActiveLayer) {
this.activeLayerId.value = newActiveLayer.id;
if(this.canvas.toolId === OperationType.SELECT){
this.layerManager.selectLayerObjects(newActiveLayer.id);
}
} else {
this.activeLayerId.value = null;
}
@@ -609,7 +621,7 @@ export class RemoveLayerCommand extends Command {
// this.canvas.renderAll();
// }
await this.layerManager?.updateLayersObjectsInteractivity?.();
// this.canvas.renderAll();
this.canvas.renderAll();
console.log(
`✅ 已移除图层: ${this.removedLayer.name} (ID: ${this.layerId}),包含 ${this.originalObjects.length} 个对象`
@@ -2013,7 +2025,7 @@ export class LayerObjectsToGroupCommand extends Command {
console.error("图层或Canvas未初始化");
return null;
}
this.activeLayer = this.layerManager.getActiveLayer();
// 查找图层中是否已有组对象
const existingGroup = this._findExistingGroup();
this.existingGroupId = existingGroup?.id || null;
@@ -2053,7 +2065,7 @@ export class LayerObjectsToGroupCommand extends Command {
}
try {
await optimizeCanvasRendering(this.canvas, () => {
await optimizeCanvasRendering(this.canvas, async () => {
if (existingGroup) {
// 向现有组添加对象
this._addObjectsToExistingGroup(existingGroup, newObjectsToAdd);
@@ -2064,13 +2076,13 @@ export class LayerObjectsToGroupCommand extends Command {
this._createNewGroupWithAllObjects(newObjectsToAdd);
this.groupObjectId = this.newGroupId;
this.wasGroupCreated = true;
await this.layerManager?.layerSort?.rearrangeObjects();
}
// 更新交互性
this.layerManager?.updateLayersObjectsInteractivity?.(false);
// 更新缩略图
this._updateThumbnail();
this.layerManager?.updateLayersObjectsInteractivity?.(false).then(()=>{
// 更新缩略图
this._updateThumbnail();
});
});
// 标记为非首次执行
@@ -2220,7 +2232,7 @@ export class LayerObjectsToGroupCommand extends Command {
async undo() {
if (!this.activeLayer || !this.canvas || !this.groupObjectId) return;
this.activeLayer = this.layerManager.getActiveLayer();
try {
await optimizeCanvasRendering(this.canvas, async () => {
if (this.wasGroupCreated) {
@@ -2338,7 +2350,7 @@ export class LayerObjectsToGroupCommand extends Command {
// 将对象添加回画布
this.canvas.add(obj);
restoredObjects.push(obj);
restoredObjects.push(obj.toObject("id", "layerId", "layerName"));
console.log(
`✅ 恢复原始对象 ${obj.id || obj.type} 到位置 (${position.left}, ${
@@ -2537,9 +2549,9 @@ export class LayerObjectsToGroupCommand extends Command {
* @private
*/
_updateThumbnail() {
// this.canvas?.thumbnailManager?.generateLayerThumbnail?.(
// this.activeLayer.id
// );
this.canvas?.thumbnailManager?.generateLayerThumbnail?.(
this.activeLayer.id
);
}
getInfo() {
@@ -2569,7 +2581,6 @@ export class CreateImageLayerCommand extends Command {
this.fabricImage = options.fabricImage;
this.toolManager = options.toolManager;
this.layerName = options.layerName || null;
this.imageId = generateId("image_");
// 存储执行过程中的结果
@@ -2591,7 +2602,7 @@ export class CreateImageLayerCommand extends Command {
// 生成图层名称
const fileName =
this.layerName || `图片 ${new Date().toLocaleTimeString()}`;
this.layerName || `${new Date().toLocaleTimeString()}`;
this.fabricImage.set({
id: this.imageId,
@@ -2617,6 +2628,18 @@ export class CreateImageLayerCommand extends Command {
this.commands.push(createLayerCmd);
this.executedCommands.push(createLayerCmd);
// 新加功能-选区套索内添加图片自动居中
const { parent } = findLayerRecursively(this.layerManager.layers.value, this.newLayerId);
if(parent && parent.selectObject){
let {top,left,width,height} = parent.selectObject;
const ltop = top + height / 2;
const lleft = left + width / 2;
this.fabricImage.set({
top: ltop,
left: lleft,
})
}
// 2. 添加图片对象到图层命令
const addObjectCmd = new AddObjectToLayerCommand({
canvas: this.layerManager.canvas,
@@ -4197,6 +4220,7 @@ export class RemoveChildLayerCommand extends Command {
this.isActiveLayer = this.layerId === this.activeLayerId.value;
this.originalObjects = this.canvas.getObjects().filter((obj) => {
obj.parentId = this.parentId;
return obj.layerId === this.layerId;
});
}

Some files were not shown because too many files have changed in this diff Show More