330 Commits

Author SHA1 Message Date
李志鹏
3ed5a37e5b 1 2026-05-15 16:25:08 +08:00
李志鹏
5546c71ec0 线稿图手动排序后更新bug 2026-05-15 15:01:17 +08:00
李志鹏
8a7776a4b6 去掉管理员界面的allUser编辑userName 2026-05-15 10:15:18 +08:00
X1627315083@163.com
a1281c8e3f fix 2026-05-14 18:06:01 +08:00
X1627315083@163.com
9a40e69081 fix 2026-05-14 09:27:06 +08:00
X1627315083@163.com
e27b43dc67 管理员页面增加globalAward流量页面 2026-05-13 17:29:05 +08:00
X1627315083@163.com
b6a55a8124 调整选择风格布局 2026-05-12 17:18:16 +08:00
6cace08a51 style: 去除底边距 2026-04-28 17:11:19 +08:00
6207095221 feat: 管理员页面 2026-04-28 17:11:10 +08:00
李志鹏
7bb38bf2e5 处理Safari 不支持requestIdleCallback方法 2026-04-24 17:11:48 +08:00
X1627315083@163.com
743fc762d6 fix 2026-04-23 16:57:03 +08:00
7297e4e7a4 bugfix 2026-04-23 14:08:59 +08:00
3bff1ebb66 feat: 工具函数 2026-04-23 14:05:00 +08:00
0d1656ee0a style: 字体间距 2026-04-23 13:56:54 +08:00
7d0873d874 style: 调整活动页样式 2026-04-23 13:56:47 +08:00
82941bca7c feat: 活动页 2026-04-23 11:22:21 +08:00
949ff9292d feat: 活动页面文案 2026-04-23 11:10:02 +08:00
X1627315083@163.com
11c9de8ced fix 2026-04-22 16:12:23 +08:00
X1627315083@163.com
fd518ad9b3 更新youtube地址 2026-04-22 13:24:23 +08:00
X1627315083@163.com
a2b45e2041 Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2026-04-17 16:35:14 +08:00
X1627315083@163.com
da64b57c1c 登录页路由加语言设置 2026-04-17 16:35:12 +08:00
李志鹏
7c14b1d831 Merge branch 'StableVersion' of http://18.167.251.121:10003/aidlab/aida_front into StableVersion 2026-04-15 11:37:13 +08:00
李志鹏
8966b52430 红绿图b 2026-04-15 11:37:11 +08:00
X1627315083@163.com
5fa049f73d 隐藏brandDNA功能 2026-04-14 15:30:19 +08:00
X1627315083@163.com
575445f767 fix 2026-04-14 15:27:57 +08:00
李志鹏
f43c56236b 液化苹果浏览器闪屏问题 2026-04-14 10:02:06 +08:00
李志鹏
4352f7c2f4 111 2026-04-13 11:52:24 +08:00
李志鹏
c6b1bdbdf1 红绿图导出问题 2026-04-13 11:20:26 +08:00
X1627315083@163.com
f16aa6ea14 fix 2026-04-10 18:14:20 +08:00
X1627315083@163.com
a25abeb527 fix 2026-04-10 16:54:22 +08:00
X1627315083@163.com
d359cd7763 注释选择信用卡支付和支付宝支付的选项,改为默认信用卡自动续费支付 2026-03-30 10:43:27 +08:00
23085d9a9b Merge branch 'dev_vite' into StableVersion 2026-03-25 10:18:13 +08:00
bb021ae9ac style: 文案修改 2026-03-25 10:12:45 +08:00
bfb4e128f5 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-03-25 09:48:39 +08:00
2f9b33e4ca feat: transaction分页器显示总数据数量 2026-03-25 09:48:36 +08:00
X1627315083@163.com
35c6dfe29c 印花默认为正片叠底 2026-03-24 14:43:12 +08:00
X1627315083@163.com
48c37e0810 风格字段全部处理空情况 2026-03-23 17:22:57 +08:00
b869a82fae Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2026-03-23 14:08:42 +08:00
e61a8e372d feat: Transaction Record页面totalamount改为所有数据总数 2026-03-23 13:59:17 +08:00
X1627315083@163.com
f5a74991c9 fix 2026-03-23 11:57:10 +08:00
X1627315083@163.com
e58e8540c9 fix 2026-03-23 10:41:16 +08:00
e75ed7684e Merge branch 'StableVersion' into dev_vite 2026-03-13 14:05:39 +08:00
918d71072b bugfix: 首尾帧模式上传图片转视频 2026-03-13 14:01:44 +08:00
X1627315083@163.com
242bc7a01d fix 2026-03-06 18:44:48 +08:00
X1627315083@163.com
02ad8a340a 用户身份默认值改为1 2026-03-05 17:33:50 +08:00
X1627315083@163.com
0c250a21b4 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2026-03-05 10:58:10 +08:00
X1627315083@163.com
f781060e7b fix 2026-03-05 10:55:54 +08:00
李志鹏
832c9101ab Merge branch 'StableVersion' of http://18.167.251.121:10003/aidlab/aida_front into StableVersion 2026-03-02 11:28:42 +08:00
李志鹏
c48e836f8e fix 2026-03-02 11:28:39 +08:00
李志鹏
6f0780ac2e Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-03-02 11:24:06 +08:00
李志鹏
5acb91e584 fix 2026-03-02 11:24:05 +08:00
X1627315083@163.com
f66ba9e6fa 修复design过程中切换其他页面在切换回来后like异常 2026-03-02 09:50:32 +08:00
7a90cb8db9 feat: 隐藏竞赛活动入口 2026-02-25 15:02:47 +08:00
dafe87fad8 feat: 竞赛页面活动页 2026-02-25 15:01:40 +08:00
c44747e2c2 feat: 竞赛页面地址 2026-02-25 14:48:47 +08:00
X1627315083@163.com
341c765c73 修复getMoudel后直接打开detail印花衣服没有类型我呢提 2026-02-25 13:36:49 +08:00
X1627315083@163.com
ed6cc294a5 注册页面可以根据输入的地址设置不同的语言 2026-02-24 17:27:13 +08:00
X1627315083@163.com
a77dc718f9 fix 2026-02-24 11:30:02 +08:00
X1627315083@163.com
86953a91a1 fix 2026-02-24 11:28:18 +08:00
cabbb653bd Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-09 14:35:33 +08:00
99533c12b6 bugfix: 竞赛表单验证码输入 2026-02-09 11:52:31 +08:00
X1627315083@163.com
59da67e4b4 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2026-02-06 16:46:37 +08:00
X1627315083@163.com
1428f191dd fix 2026-02-06 14:17:46 +08:00
李志鹏
13024cdd99 画布loading 2026-02-06 13:07:06 +08:00
李志鹏
fd85ea02c1 画布loading 2026-02-06 13:05:19 +08:00
李志鹏
c196ab6678 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-02-06 11:11:06 +08:00
李志鹏
c005b85c06 设置画布loading 2026-02-06 11:11:04 +08:00
李志鹏
b50dbbc246 去掉部件选取 2026-02-06 10:36:31 +08:00
X1627315083@163.com
01d09f4c34 修复overall印花和画布中印花scale不同 2026-02-05 17:38:27 +08:00
X1627315083@163.com
79c9a66296 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-05 16:49:50 +08:00
X1627315083@163.com
761b1b3512 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2026-02-05 16:49:47 +08:00
X1627315083@163.com
b2cb7378d6 修复overall模式角度设置不上 2026-02-05 16:41:56 +08:00
4d9ea75146 chore: i18n内容 2026-02-05 16:30:24 +08:00
f7e6926ee9 bugfix: events i18n 2026-02-05 16:25:12 +08:00
7aba4e30c9 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-05 10:33:47 +08:00
dc1ab330cf AiDA跳转竞赛页面 2026-02-05 10:33:42 +08:00
李志鹏
18c70fe6a3 1 2026-02-05 10:32:56 +08:00
李志鹏
5c746aca4d fix 2026-02-05 10:27:53 +08:00
李志鹏
72c4898101 部件选取框选工具合并操作 2026-02-05 10:26:40 +08:00
X1627315083@163.com
a905971dae 测试 2026-02-05 10:16:52 +08:00
69643dbc83 chore: prettier配置 2026-02-05 10:07:39 +08:00
f3a707d6d8 feat: 上传过程中不允许删除文件 2026-02-05 10:07:30 +08:00
8f4a43db14 feat: size改为form内 2026-02-04 17:30:09 +08:00
186a158114 chore: 中文版竞赛海报 2026-02-04 17:27:20 +08:00
3da4a97400 bugfix: i18n问题 2026-02-04 16:10:10 +08:00
X1627315083@163.com
96b3636aea 取消3d 拼贴功能 2026-02-04 15:59:45 +08:00
228e3d56b5 bugfix: 参赛表单i18n 2026-02-04 13:50:55 +08:00
99ea7eedc7 bugfix: award参赛表单 2026-02-04 13:39:13 +08:00
d4fb435db9 feat: 参赛表单页面i18n 2026-02-04 13:33:05 +08:00
0c8b3ee8f1 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-04 10:57:30 +08:00
ca782d0aff feat: 竞赛主页中文 2026-02-04 10:57:25 +08:00
X1627315083
3dfb607b91 Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2026-02-03 15:29:37 +08:00
X1627315083
981b4dad5c fix 2026-02-03 15:29:07 +08:00
X1627315083
181e6a87b8 Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2026-02-03 10:46:09 +08:00
287825b4bf Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-02 17:18:17 +08:00
1ffc303721 feat: 竞赛页面AiDA入口 2026-02-02 17:00:32 +08:00
李志鹏
bdf1bb2669 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-02-02 16:52:11 +08:00
李志鹏
1fe79ffcf9 fix 2026-02-02 16:52:10 +08:00
758f63615a style: 字体大小 2026-02-02 16:13:01 +08:00
20145742c5 style: timeline布局修改 2026-02-02 15:48:50 +08:00
8ec9b1bcea Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-02 14:09:43 +08:00
a9cb6e16e9 style: select样式 2026-02-02 14:09:28 +08:00
X1627315083
5690fc6c5b fix 2026-02-02 13:55:12 +08:00
X1627315083
9db6a589f0 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-02 13:48:09 +08:00
X1627315083
896490e57b fix 2026-02-02 13:48:07 +08:00
fca04ba44b Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-02 13:41:56 +08:00
25e4fc06c6 style: 样式修改 2026-02-02 13:41:51 +08:00
X1627315083
4bd7740753 修复detail添加印花sort值设置不对 2026-02-02 13:30:43 +08:00
X1627315083
c428bfd93b Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-02 11:48:12 +08:00
X1627315083
2a29c6b2cc fix 2026-02-02 11:48:10 +08:00
李志鹏
e9d7203804 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-02-02 11:33:38 +08:00
李志鹏
5d7cec520b 平铺默认参数 2026-02-02 11:33:36 +08:00
X1627315083
fe72df0c07 fix 2026-02-02 11:30:26 +08:00
X1627315083
7c04332290 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-02 11:08:22 +08:00
X1627315083
73d912d3cd detail设置印花顺序相关问题 2026-02-02 11:08:20 +08:00
李志鹏
b320294764 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-02-02 10:37:14 +08:00
李志鹏
4913d02c93 fix 2026-02-02 10:37:13 +08:00
X1627315083
56916c8d10 fix 2026-02-02 10:31:37 +08:00
李志鹏
393a06eceb Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-02-02 09:47:13 +08:00
李志鹏
fdb6a87ab4 添加印花元素排序priority 2026-02-02 09:47:10 +08:00
6d868c7c7a Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-30 17:21:15 +08:00
89a89ea5ef style: 竞赛主页样式修改 2026-01-30 17:21:11 +08:00
李志鹏
811e179889 fix 2026-01-30 14:52:10 +08:00
李志鹏
0e0eed2566 fix 2026-01-30 14:12:17 +08:00
李志鹏
8588c74ffd 图层可以持续粘贴 2026-01-30 13:54:21 +08:00
李志鹏
62e7f34c98 画布问题更改 2026-01-30 13:47:38 +08:00
李志鹏
8f0a56965f Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-29 17:17:26 +08:00
李志鹏
59422e54d8 fix 2026-01-29 17:16:31 +08:00
X1627315083
012f0ef1b5 修复画布打开发布后仍然可以对画布里面复制内容 2026-01-29 16:55:38 +08:00
X1627315083
ec4ae4a259 画布打开发布界面复制不能再把图片元素复制到画布上 2026-01-29 15:43:27 +08:00
X1627315083
8da66d54c0 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-29 14:10:57 +08:00
X1627315083
2839953d8e 添加印花默认不正片叠底 2026-01-29 14:10:55 +08:00
X1627315083
2d5d1b7a5e 删除衣服时候imgDom要随着变化 2026-01-29 09:55:15 +08:00
李志鹏
33aaf0b600 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-29 09:38:36 +08:00
李志鹏
bf4d7bdba8 打开服装选取功能 2026-01-29 09:38:33 +08:00
X1627315083
944071201d 修复detail黑色颜色bug 2026-01-28 17:11:28 +08:00
X1627315083
f6556ec9a9 fix 2026-01-28 17:10:58 +08:00
X1627315083
8967439d4e Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2026-01-28 16:35:58 +08:00
X1627315083
85ae158952 fix 2026-01-28 16:35:40 +08:00
X1627315083
813d2e9645 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2026-01-28 16:12:36 +08:00
X1627315083
d94ade6641 fix 2026-01-28 16:11:55 +08:00
X1627315083
eda893ce10 fix 2026-01-28 15:20:02 +08:00
X1627315083
c8cb2de9ab Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2026-01-28 14:24:23 +08:00
X1627315083
7cda2cce27 调整画布遮罩修改了及时更新 2026-01-28 14:23:31 +08:00
41893cab86 Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2026-01-28 10:14:31 +08:00
b23531f18b Merge branch 'dev_vite' into StableVersion 2026-01-28 10:11:07 +08:00
de78bfc051 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-28 10:09:48 +08:00
李志鹏
0a507fb158 部件选取icon大小 2026-01-28 10:08:36 +08:00
X1627315083
a18dead4ff fix 2026-01-28 10:05:08 +08:00
X1627315083
76047b763d 修复detail新增衣服报错 2026-01-28 09:32:52 +08:00
0930e8cc77 bugfix: 教育管理员搜索用户 2026-01-27 17:34:25 +08:00
X1627315083
9f09a2f31b fix 2026-01-27 14:18:14 +08:00
X1627315083
1e0bf83d12 fix 2026-01-27 14:18:00 +08:00
李志鹏
1764e2a0bf fix 2026-01-27 13:30:11 +08:00
李志鹏
0729917a7e 打开部件选取 2026-01-27 11:20:56 +08:00
李志鹏
b7f7aea0b7 Merge branch 'StableVersion' of http://18.167.251.121:10003/aidlab/aida_front into StableVersion 2026-01-27 11:01:35 +08:00
李志鹏
4dfa9433fd 画布 部件选取、印花禁用多选 2026-01-27 11:01:33 +08:00
李志鹏
79293901b3 多选解决 2026-01-27 10:58:27 +08:00
X1627315083
03a9e2f52c fix 2026-01-27 10:15:20 +08:00
X1627315083
fb1d09d98e 修改注册输入验证码最小高度 2026-01-27 10:12:13 +08:00
李志鹏
8ff7a31e92 部件选取多语言 2026-01-26 17:07:06 +08:00
李志鹏
65323febee Merge branch 'StableVersion' of http://18.167.251.121:10003/aidlab/aida_front into StableVersion 2026-01-26 16:47:09 +08:00
李志鹏
b158341d6e 印花组禁止多选 2026-01-26 16:47:03 +08:00
李志鹏
44674b5396 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-26 16:16:42 +08:00
李志鹏
9cecbdcf9b 部件选取 2026-01-26 16:16:40 +08:00
X1627315083
a6b0a60eb6 调整编辑按钮样式 2026-01-26 15:11:03 +08:00
X1627315083
68067aa777 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-26 15:07:19 +08:00
X1627315083
ca6fe65dd8 detail等比缩放 2026-01-26 15:07:16 +08:00
564e179082 feat: 表单过期 2026-01-26 13:26:46 +08:00
dc469add22 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-26 12:27:59 +08:00
d54e656192 style: award主页动画 2026-01-26 12:27:55 +08:00
李志鹏
ba49b02ebe 印花组不让多选 2026-01-26 09:40:38 +08:00
X1627315083
06fa763f26 Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2026-01-24 13:26:06 +08:00
X1627315083
6ad81a1896 修复detail角度和镜像问题 2026-01-24 13:25:40 +08:00
X1627315083
9b0ec12738 Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2026-01-24 11:56:10 +08:00
X1627315083
26abb2aa88 修复颜色bug 2026-01-24 11:55:51 +08:00
X1627315083
07b7a6f1d7 FIX 2026-01-23 22:31:51 +08:00
bff3ea8459 Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2026-01-23 21:44:21 +08:00
29e68757a6 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-23 21:43:51 +08:00
12ea0f7c35 feat: 试用期5天改为7天 2026-01-23 21:43:48 +08:00
X1627315083
920d01a972 调整维护时间 2026-01-23 21:42:43 +08:00
X1627315083
13b4767992 fix 2026-01-23 19:46:34 +08:00
X1627315083
086481bfb9 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-23 18:33:06 +08:00
X1627315083
89bdba45be fix 2026-01-23 18:33:04 +08:00
李志鹏
8d0b792fd4 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-23 17:54:32 +08:00
李志鹏
a6bfca3b2f 111 2026-01-23 17:54:24 +08:00
X1627315083
a1b51d5807 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-23 17:52:58 +08:00
X1627315083
2f32cee502 fix 2026-01-23 17:52:55 +08:00
李志鹏
a05655da1c 111 2026-01-23 17:50:33 +08:00
李志鹏
6cdc8c5486 111 2026-01-23 17:43:15 +08:00
X1627315083
972743d3b8 fix 2026-01-23 16:58:03 +08:00
X1627315083
df5cb918a2 调整detail前后对比大小 2026-01-23 16:06:47 +08:00
X1627315083
bc8ce0bd47 fix 2026-01-23 15:57:40 +08:00
李志鹏
4afe1b637e Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-23 15:41:45 +08:00
李志鹏
55ede508cb 111 2026-01-23 15:41:43 +08:00
X1627315083
fbb66fd192 fix 2026-01-23 15:31:24 +08:00
X1627315083
c87b41ae11 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-23 15:25:36 +08:00
X1627315083
142c24a947 fix 2026-01-23 15:25:34 +08:00
李志鹏
2ee200e1ba Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-23 15:24:42 +08:00
李志鹏
86db2f22a1 同步印花的缩放偏移显示 2026-01-23 15:24:39 +08:00
X1627315083
9cc012b851 修复detail相关bug 2026-01-23 14:43:19 +08:00
X1627315083
c5b7365977 调整部署日期修复detail印花累加问题 2026-01-23 13:34:28 +08:00
X1627315083
43464ae85e fix 2026-01-22 16:00:45 +08:00
X1627315083
39c85cd1d1 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-22 15:40:31 +08:00
X1627315083
3c77c97532 fix 2026-01-22 15:40:28 +08:00
李志鹏
2ab23d0f30 印花元素分类 2026-01-22 15:23:15 +08:00
X1627315083
85d4569a25 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-22 14:30:42 +08:00
X1627315083
cd7d572e43 更新首次打开detail 应该使用接口数据而不是new数据 2026-01-22 14:30:40 +08:00
37157ca94d bugfix: 文件路径 2026-01-22 14:19:50 +08:00
a30897a4b2 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-22 14:08:03 +08:00
9a62d277f2 feat: 上传文件Url 2026-01-22 14:07:56 +08:00
李志鹏
0de5fe276a Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-22 13:46:57 +08:00
李志鹏
ca17956135 111 2026-01-22 13:46:55 +08:00
028c6a6540 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-22 13:34:44 +08:00
9d8c3155e6 feat: 表单回显时禁止操作 2026-01-22 13:34:38 +08:00
李志鹏
6c921730ef 背景报错 2026-01-22 13:17:11 +08:00
李志鹏
eaa94edfac Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-22 11:19:14 +08:00
李志鹏
1b30a7a873 更改画布标题 2026-01-22 11:19:12 +08:00
X1627315083
59399d672f fix 2026-01-22 10:48:42 +08:00
X1627315083
bb5c319a7f 修复detail打开画布直接提交数据没有正确更新 2026-01-22 10:29:58 +08:00
X1627315083
b114d352f6 修复detail印花界面打开花不修改元素preview后没有同步元素数据 2026-01-22 09:51:57 +08:00
李志鹏
ea4b27776a 11 2026-01-21 17:15:56 +08:00
李志鹏
faa6db9c73 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-21 16:55:18 +08:00
李志鹏
6b5c2c0b2e fix 2026-01-21 16:55:16 +08:00
X1627315083
de3cb37bc1 fix 2026-01-21 16:54:40 +08:00
X1627315083
9a69450fb6 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2026-01-21 16:54:22 +08:00
X1627315083
513eac9e49 fix 2026-01-21 16:46:51 +08:00
李志鹏
8c4f4c206b 111 2026-01-21 16:38:10 +08:00
李志鹏
c731df2ae7 Merge branch 'StableVersion' of http://18.167.251.121:10003/aidlab/aida_front into StableVersion 2026-01-21 16:31:09 +08:00
李志鹏
40c9bb1190 json修复 2026-01-21 16:31:07 +08:00
X1627315083
ef1c1c349d 画布图片数据递归设置minio地址 2026-01-21 16:27:59 +08:00
1c49dc25b1 feat: 回显表单 2026-01-21 16:24:56 +08:00
542583efc6 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-21 15:29:38 +08:00
f8f5b98854 feat: 上传文件接口&表单成功提交页面 2026-01-21 15:29:34 +08:00
李志鹏
39a65add7c Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-21 15:05:14 +08:00
李志鹏
0feade1f5b 111 2026-01-21 15:05:12 +08:00
X1627315083
5d45eee7a3 修复直接在印花preview后印花overall丢失 2026-01-21 14:45:39 +08:00
李志鹏
d31a809fa8 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-21 13:37:52 +08:00
李志鹏
750d90ee0b 瞎改 2026-01-21 13:37:50 +08:00
X1627315083
70537847bc 修复detail撤回存储数据过大问题 2026-01-21 11:55:43 +08:00
X1627315083
4688f234d9 修复印花编辑界面重复对画布上添加 2026-01-21 10:38:03 +08:00
X1627315083
5599edfcd0 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-21 10:09:31 +08:00
X1627315083
73c2d1d41e fix 2026-01-21 10:09:29 +08:00
李志鹏
2fad680490 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-21 10:06:13 +08:00
李志鹏
85da122590 平铺按钮位置调整 2026-01-21 10:06:11 +08:00
X1627315083
62e977c703 修复印花overall偏移和画布对不上问题 2026-01-21 09:59:17 +08:00
X1627315083
a1e0e19412 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-21 09:43:57 +08:00
X1627315083
b10fd72008 fix 2026-01-21 09:43:26 +08:00
X1627315083
a78056c898 fix: 修复canvas快捷键隐藏问题、提交preview后切换sketch再切回来前后片变为最早版本 2026-01-21 09:41:38 +08:00
X1627315083
07c261d74c Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2026-01-20 16:48:37 +08:00
X1627315083
fc28d78357 处理generate生成失败逻辑 2026-01-20 16:48:34 +08:00
李志鹏
6bee02dfa5 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-20 16:44:57 +08:00
李志鹏
e19c850214 fix 2026-01-20 16:44:56 +08:00
9bdd0a23d3 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-20 16:41:41 +08:00
08b8a52d83 style:页面动画 2026-01-20 16:41:37 +08:00
李志鹏
11fb6f908c 平铺不可以添加相同的token 2026-01-20 16:39:02 +08:00
李志鹏
27198cc35b Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-20 16:11:42 +08:00
李志鹏
844694d638 平铺偏移 2026-01-20 16:11:40 +08:00
695a91ac1c bugfix: 教育版管理员页面分页器消失 2026-01-20 15:44:55 +08:00
4fd66fcc05 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-20 15:42:23 +08:00
aa193f08cb style: 页面动画效果 2026-01-20 15:42:17 +08:00
X1627315083
3692361551 fix 2026-01-20 15:40:36 +08:00
X1627315083
008e14ec57 ifx 2026-01-20 15:31:06 +08:00
X1627315083
248732b085 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-20 15:29:06 +08:00
X1627315083
033950babe 修复印花界面,切换线稿图印花储存有问题 2026-01-20 15:29:04 +08:00
李志鹏
dbd1651a37 gap 2026-01-20 14:10:10 +08:00
X1627315083
25ad9799f8 修改sketch或者切换sketch bug修复 2026-01-20 13:49:34 +08:00
李志鹏
747a3b0ebc Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-20 13:18:30 +08:00
李志鹏
27e43f3c97 老数据重置画布大小 2026-01-20 13:18:28 +08:00
516ad19db7 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-20 10:31:57 +08:00
d1af68d60a chore: award页面修改 2026-01-20 10:31:52 +08:00
李志鹏
eb1de5abb3 fix 2026-01-20 10:31:47 +08:00
X1627315083
cdcb18c02c fix 2026-01-19 17:16:20 +08:00
f11805c65a chore: 字体包 2026-01-19 17:08:41 +08:00
ce21acba93 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-19 17:07:09 +08:00
a48e517e76 feat: award表单页面 2026-01-19 17:07:05 +08:00
李志鹏
f837542797 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-19 16:57:12 +08:00
李志鹏
74b43e431b 去除画布打印信息 2026-01-19 16:57:11 +08:00
X1627315083
c20ef9d00c fix 2026-01-19 16:55:45 +08:00
X1627315083
a7b5cc1685 当前页面直接提交数据没有存储到衣服上 2026-01-19 16:53:20 +08:00
X1627315083
5971ab56c0 ifx 2026-01-19 16:40:10 +08:00
X1627315083
7ff2c2095a 添加元素图层合并模式由正片叠底改为默认 2026-01-19 16:08:08 +08:00
李志鹏
9613d2b5b2 fix 2026-01-19 15:26:04 +08:00
X1627315083
94b9977ef6 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-19 14:44:47 +08:00
X1627315083
315254b6d5 fix 2026-01-19 14:44:45 +08:00
李志鹏
31c2ca4e8b 平铺画布更改 2026-01-19 14:44:18 +08:00
李志鹏
af5f178476 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-19 14:26:07 +08:00
李志鹏
0aae85e94d 添加任务队列 2026-01-19 14:25:44 +08:00
X1627315083
4c25e4a5a3 fix 2026-01-19 13:58:31 +08:00
李志鹏
87fd5b9a93 fix 2026-01-19 13:37:24 +08:00
李志鹏
e81049c332 印花其他属性同步 2026-01-19 11:16:23 +08:00
李志鹏
28bc0f2f0e Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-19 11:07:06 +08:00
李志鹏
4126e0b24d 元素默认正常模式 2026-01-19 11:07:04 +08:00
X1627315083
e4cdebfe40 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-19 11:03:03 +08:00
X1627315083
55f4e5626e 调整画布previwe后颜色板块变为空了 2026-01-19 11:02:55 +08:00
a0a751c661 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-19 10:56:44 +08:00
9aa3a2f889 feat: award页面 2026-01-19 10:56:39 +08:00
李志鹏
43e3a79124 点选 2026-01-19 10:47:30 +08:00
李志鹏
6b0d26ed6e 隐藏画布时候关闭键盘事件 2026-01-16 16:42:53 +08:00
李志鹏
9b29939bfe fix 2026-01-16 16:31:54 +08:00
李志鹏
0add8bc412 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-16 15:16:36 +08:00
李志鹏
618b9bab1f fix 2026-01-16 15:16:33 +08:00
X1627315083
226e183f52 修复印花画布不同步问题和overall模式大小没有同步 2026-01-16 14:57:48 +08:00
X1627315083
b78832875c Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-16 14:37:55 +08:00
X1627315083
c4c4753403 修复detail无法submit 2026-01-16 14:37:53 +08:00
3014414c97 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-16 14:30:53 +08:00
6a5a0930e9 feat: award页面 2026-01-16 14:30:48 +08:00
X1627315083
f813384a6e 调整修改overall模式印花参数的icon位置 2026-01-16 14:14:30 +08:00
X1627315083
a720fba84e 修复印花线稿合成图显示异常 2026-01-16 13:39:00 +08:00
李志鹏
2b7db933d9 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-16 13:02:28 +08:00
李志鹏
ba5b1657a5 控制导出图片大小 2026-01-16 13:02:26 +08:00
X1627315083
30109fdb79 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-01-16 10:34:17 +08:00
X1627315083
83226f006c fix 2026-01-16 10:34:15 +08:00
李志鹏
a5e21c93b3 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-16 10:29:05 +08:00
李志鹏
1989c22562 同步印花平铺的位置信息 2026-01-16 10:29:03 +08:00
X1627315083
882740592c fix 2026-01-15 17:34:54 +08:00
X1627315083
0c995054a2 fix 2026-01-15 17:26:56 +08:00
李志鹏
6780c0fbb1 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-15 17:15:21 +08:00
李志鹏
7101daeb90 fix 2026-01-15 17:15:05 +08:00
X1627315083
0d0de45a25 detail submit preview完善 2026-01-15 17:14:11 +08:00
李志鹏
28b6153ab0 导出图片添加配置 2026-01-15 14:10:05 +08:00
李志鹏
7a4fc0736d 很多很多 2026-01-15 13:42:33 +08:00
fb1bfc353c Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2026-01-15 10:47:57 +08:00
cc0127f195 bugfix: 教育版管理员页面分页器消失 2026-01-15 10:38:53 +08:00
X1627315083
f4043d6f61 调整手机注册输入验证码样式 2026-01-14 16:56:39 +08:00
李志鹏
9912f310ec token 2026-01-14 15:08:25 +08:00
李志鹏
7bf1a0bd57 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-14 14:43:46 +08:00
李志鹏
810dd2351b 111 2026-01-14 14:43:43 +08:00
李志鹏
e42975159f Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-01-14 14:42:23 +08:00
X1627315083
1df7b62fe6 调整系统维护页面文案 2025-12-19 21:36:42 +08:00
190 changed files with 19950 additions and 12051 deletions

View File

@@ -7,5 +7,7 @@ VITE_APP_BASE_URL = 'https://develop.api.aida.com.hk'
# VITE_APP_BASE_URL = 'https://www.api.aida.com.hk'
# 徐佩
# VITE_APP_BASE_URL = 'http://192.168.31.118:5567'
# 李天祥
# VITE_APP_BASE_URL = 'http://192.168.31.82:5567'
# 海波
# VITE_APP_BASE_URL = 'http://192.168.31.34:5567'

View File

@@ -5,4 +5,3 @@ VITE_USER_NODE_ENV = 'development'
VITE_APP_BASE_URL = 'https://develop.api.aida.com.hk'
# VITE_APP_BASE_URL = 'http://localhost:22170'

33
.prettierrc.js Normal file
View File

@@ -0,0 +1,33 @@
/** @type {import('prettier').Config} */
module.exports = {
// 打印宽度
printWidth: 100,
// 使用 4 空格缩进
tabWidth: 4,
// 使用 4 空格缩进,不使用制表符
useTabs: true,
// 行尾使用 LF (Unix 风格)
endOfLine: 'lf',
// 语句末尾使用分号
semi: false,
// 使用单引号
singleQuote: false,
// 对象和数组末尾不添加尾随逗号
trailingComma: 'none',
// JSX 引号使用单引号
jsxSingleQuote: false,
// 括号内侧空格
bracketSpacing: true,
// JSX 标签不换行
bracketSameLine: false,
// 箭头函数参数始终使用括号
arrowParens: 'always',
// HTML、Vue、Angular 和 Markdown 使用 LF
htmlWhitespaceSensitivity: 'css',
// Vue 文件脚本和样式缩进
vueIndentScriptAndStyle: false,
// 行注释位置在注释上方,不加空格
proseWrap: 'preserve',
// 根据文件类型自动推断
embeddedLanguageFormatting: 'auto',
};

View File

@@ -17,6 +17,7 @@
<link rel="stylesheet" href="/css/sloganFamily.css">
<link rel="stylesheet" href="/css/pingfang.css">
<link rel="stylesheet" href="/css/fonts/fontFamily.css">
</head>
<body>

BIN
public/css/fonts/ARIAL.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,41 @@
/* 字体定义 */
@font-face {
font-family: 'Arial';
src: url('./fonts/ARIAL.ttf') format('truetype');
}
@font-face {
font-family: 'ArialBold';
src: url('./fonts/ARIALBD.ttf') format('truetype');
}
@font-face {
font-family: 'ArialMedium';
src: url('./fonts/ArialMdm.ttf') format('truetype');
}
@font-face {
font-family: 'Poppins';
src: url('./fonts/Poppins-Regular.ttf') format('truetype');
font-weight: normal;
}
@font-face {
font-family: 'PoppinsMedium';
src: url('./fonts/Poppins-Medium.ttf') format('truetype');
}
@font-face {
font-family: 'PoppinsBold';
src: url('./fonts/Poppins-SemiBold.ttf') format('truetype');
}
@font-face {
font-family: 'Instrument';
src: url('./InstrumentSans-Regular.ttf') format('truetype');
}
@font-face {
font-family: 'InstrumentBold';
src: url('./InstrumentSans-Bold.ttf') format('truetype');
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 MiB

View File

@@ -0,0 +1,17 @@
<?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="201.000000pt" height="200.000000pt" viewBox="0 0 201.000000 200.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,200.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1654 1990 c-26 -8 -153 -110 -162 -129 -1 -3 81 -89 183 -191 l185
-185 56 55 c30 30 62 67 70 82 22 41 18 123 -8 176 -29 57 -126 158 -169 176
-47 20 -118 27 -155 16z"/>
<path d="M868 1243 c-525 -527 -498 -492 -568 -725 -54 -179 -59 -219 -30
-248 19 -19 29 -21 64 -16 113 18 361 105 431 152 28 18 251 235 498 481 l447
448 -188 188 -187 187 -467 -467z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 799 B

View File

@@ -0,0 +1,17 @@
<?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="200.000000pt" height="200.000000pt" viewBox="0 0 200.000000 200.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,200.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M757 1273 c-214 -214 -402 -406 -418 -427 -32 -43 -37 -82 -15 -124
23 -44 327 -338 376 -363 l45 -24 463 -3 462 -3 0 46 0 45 -342 0 -343 0 342
343 c187 188 346 352 352 364 16 32 13 74 -7 105 -9 14 -110 116 -224 227
l-207 201 -47 0 -48 0 -389 -387z m207 -342 l209 -209 -128 -131 c-76 -78
-144 -138 -169 -151 -51 -24 -106 -26 -149 -4 -41 20 -337 314 -337 334 0 13
347 370 360 370 3 0 99 -94 214 -209z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 847 B

View File

@@ -0,0 +1 @@
<svg focusable="false" class="" data-icon="paper-clip" width="1em" height="1em" fill="#00000073" aria-hidden="true" viewBox="64 64 896 896"><path d="M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z"></path></svg>

After

Width:  |  Height:  |  Size: 985 B

View File

@@ -0,0 +1,20 @@
<?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="200.000000pt" height="200.000000pt" viewBox="0 0 200.000000 200.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,200.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M250 1545 l0 -205 80 0 80 0 0 -340 0 -340 -80 0 -80 0 0 -205 0
-205 205 0 205 0 0 80 0 80 340 0 340 0 0 -80 0 -80 205 0 205 0 0 205 0 205
-80 0 -80 0 0 340 0 340 80 0 80 0 0 205 0 205 -205 0 -205 0 0 -80 0 -80
-340 0 -340 0 0 80 0 80 -205 0 -205 0 0 -205z m320 0 l0 -125 -120 0 -120 0
0 125 0 125 120 0 120 0 0 -125z m1100 0 l0 -125 -120 0 -120 0 0 125 0 125
120 0 120 0 0 -125z m-330 -125 l0 -80 85 0 85 0 0 -340 0 -340 -85 0 -85 0 0
-80 0 -80 -340 0 -340 0 0 80 0 80 -85 0 -85 0 0 340 0 340 85 0 85 0 0 80 0
80 340 0 340 0 0 -80z m-770 -965 l0 -125 -120 0 -120 0 0 125 0 125 120 0
120 0 0 -125z m1100 0 l0 -125 -120 0 -120 0 0 125 0 125 120 0 120 0 0 -125z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,68 +1,29 @@
<?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="103.000000pt" height="92.000000pt" viewBox="0 0 103.000000 92.000000"
preserveAspectRatio="xMidYMid meet">
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 184.06 163.52">
<defs>
<style>
.cls-1, .cls-2 {
fill: #333;
}
<g transform="translate(0.000000,92.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M365 895 c-5 -2 -36 -6 -67 -10 -45 -5 -58 -10 -59 -23 0 -11 -2 -12
-6 -4 -7 17 -32 15 -40 -4 -4 -11 -8 -12 -13 -4 -5 8 -13 9 -21 4 -7 -4 -22
-9 -34 -10 -11 -1 -41 -11 -66 -21 l-47 -18 20 -63 c11 -38 23 -60 30 -56 6 4
8 -1 3 -15 -3 -11 -3 -21 2 -21 4 0 9 -12 9 -26 1 -14 5 -28 8 -32 4 -3 33 3
66 15 33 11 61 19 62 18 2 -2 1 -139 -2 -304 l-5 -301 309 2 309 3 -2 108 c-2
77 2 113 11 125 10 12 10 14 1 8 -7 -4 -13 -2 -13 4 0 6 10 8 23 5 18 -5 26
-1 36 17 9 17 10 18 6 3 -5 -16 -4 -18 6 -7 18 17 -1 34 -40 37 l-32 2 -2 151
c-1 82 0 147 3 144 9 -12 44 -11 52 1 5 8 8 7 8 -4 0 -14 26 -28 52 -29 11 0
39 70 33 80 -3 5 1 11 7 13 10 4 9 8 -2 16 -13 10 -8 15 12 12 8 -1 38 91 32
98 -2 2 -10 -2 -18 -8 -9 -7 -17 -8 -20 -2 -3 5 0 11 6 14 7 2 -18 14 -56 26
-38 12 -71 19 -74 16 -3 -3 -11 0 -18 6 -8 6 -20 9 -28 6 -8 -3 -16 -2 -18 3
-5 15 -154 30 -286 29 -70 0 -131 -2 -137 -4z m21 -30 c-6 -18 3 -47 14 -40 4
2 18 -7 30 -20 27 -29 17 -34 -14 -7 -20 16 -20 16 -7 -1 23 -29 66 -47 112
-47 34 0 40 3 35 16 -5 14 -4 15 9 4 13 -11 19 -9 36 6 12 11 29 35 38 54 15
31 20 35 58 35 24 0 43 -2 43 -5 0 -11 115 -27 121 -18 3 5 9 2 13 -7 4 -13
14 -16 34 -12 15 2 36 1 47 -4 16 -7 14 -8 -10 -5 l-30 5 32 -14 c39 -18 39
-19 14 -83 -15 -38 -17 -52 -8 -61 9 -9 8 -11 -7 -5 -16 6 -18 4 -12 -19 3
-14 2 -29 -4 -32 -6 -3 -7 1 -4 9 6 16 -9 20 -73 19 -12 0 -20 4 -17 8 3 5 -4
9 -15 9 -20 0 -21 -5 -21 -151 l0 -151 -27 8 c-16 4 -38 7 -50 7 -19 -1 -21 2
-13 17 15 28 12 57 -6 57 -11 0 -15 -8 -12 -27 4 -24 1 -27 -23 -26 -15 1 -25
4 -22 9 2 4 -2 7 -10 7 -9 0 -14 -10 -14 -25 0 -13 3 -22 8 -19 5 3 6 -1 3 -9
-2 -7 0 -25 5 -40 8 -20 7 -25 -3 -21 -7 3 -13 -2 -13 -11 0 -12 7 -15 26 -11
14 3 21 3 14 0 -7 -3 -9 -12 -6 -20 3 -7 10 -11 16 -7 5 3 7 1 4 -4 -9 -14 3
-74 12 -68 4 2 7 -6 7 -18 -1 -32 32 -34 44 -3 5 14 7 34 5 46 -3 13 0 18 7
14 8 -5 9 -1 5 10 -4 9 -3 15 2 12 5 -3 12 1 15 10 3 8 2 12 -4 9 -6 -3 -10
-1 -10 4 0 13 3 13 24 5 13 -5 16 -24 16 -103 0 -63 4 -102 13 -111 10 -12 9
-12 -4 -2 -13 10 -88 12 -300 10 l-284 -3 3 303 3 302 -26 0 c-14 0 -25 -4
-25 -10 0 -5 -7 -6 -17 -3 -9 4 -14 2 -10 -3 4 -6 -6 -9 -24 -6 -28 4 -41 -11
-19 -21 6 -3 5 -4 -2 -3 -7 2 -13 11 -13 22 -1 32 -25 104 -35 104 -5 0 -6 7
-3 17 4 10 2 14 -5 9 -7 -4 -10 2 -8 17 3 29 14 47 29 47 7 0 3 -8 -8 -17
l-20 -16 20 8 c11 4 28 10 37 12 10 3 18 9 18 13 0 4 6 7 12 7 22 -2 158 26
158 32 0 3 20 6 45 5 25 0 45 3 45 8 0 4 3 8 6 8 3 0 4 -7 0 -15z m237 -5 c-3
-9 1 -8 11 4 9 11 16 15 16 9 0 -6 -7 -16 -15 -23 -8 -7 -15 -9 -15 -4 0 10
-29 -28 -30 -40 0 -4 8 -5 17 -2 15 6 15 4 -2 -14 -22 -24 -37 -26 -28 -4 5
14 3 15 -15 5 -26 -14 -77 -14 -103 -1 -10 6 -27 27 -38 48 l-19 37 113 0 c95
0 112 -2 108 -15z"/>
<path d="M346 641 c-3 -5 1 -12 10 -15 23 -9 36 -7 29 4 -3 6 1 7 9 4 9 -3 16
-1 16 5 0 13 -56 15 -64 2z"/>
<path d="M440 640 c0 -16 33 -26 38 -12 2 7 8 10 13 6 5 -3 9 0 9 5 0 6 -13
11 -30 11 -16 0 -30 -5 -30 -10z"/>
<path d="M530 641 c0 -12 37 -24 50 -16 20 12 10 25 -20 25 -16 0 -30 -4 -30
-9z"/>
<path d="M620 641 c0 -12 37 -24 50 -16 20 12 10 25 -20 25 -16 0 -30 -4 -30
-9z"/>
<path d="M310 593 c0 -20 5 -30 16 -30 10 0 14 8 12 25 -4 37 -28 40 -28 5z"/>
<path d="M697 613 c-13 -13 -7 -50 8 -50 10 0 15 10 15 29 0 27 -9 35 -23 21z"/>
<path d="M317 534 c-4 -4 -7 -20 -7 -36 0 -35 23 -34 28 1 4 25 -10 46 -21 35z"/>
<path d="M692 503 c4 -39 28 -42 28 -4 0 21 -5 31 -16 31 -11 0 -14 -8 -12
-27z"/>
<path d="M312 415 c4 -33 22 -33 26 0 2 18 -1 25 -13 25 -12 0 -15 -7 -13 -25z"/>
<path d="M312 329 c2 -19 8 -33 13 -31 15 3 12 55 -3 60 -10 3 -13 -5 -10 -29z"/>
<path d="M342 278 c3 -7 19 -14 37 -16 24 -3 32 0 29 10 -3 7 -19 14 -37 16
-24 3 -32 0 -29 -10z"/>
<path d="M443 275 c0 -10 10 -15 29 -15 18 0 28 5 28 15 0 10 -10 15 -28 15
-19 0 -29 -5 -29 -15z"/>
<path d="M530 275 c0 -10 10 -15 33 -15 22 0 28 3 18 9 -11 7 -11 9 0 14 8 3
-1 6 -18 6 -23 1 -33 -4 -33 -14z"/>
</g>
</svg>
.cls-2 {
stroke: #333;
stroke-miterlimit: 10;
}
</style>
</defs>
<path class="cls-2" d="M35.53,54.52c-.76-.96-.84-1.16-2.06-1.12-4.02.13-16.7,6.5-19.81,4.48C12.45,52.21-1.21,21.14.68,18.17c56.98-23.47,125.74-23.63,182.7,0,1.88,2.98-11.77,34.04-12.98,39.72-3.11,2.01-15.78-4.36-19.81-4.48-1.23-.04-1.3.16-2.06,1.12v48c2.87,3.81,14.6,2.98,14.05,8.95-1.06,5.75-12.53,3.84-13.85,8.24l.34,39.85c.08.98-1.55,3.46-2.04,3.46H37.03c-2.08,0-1.5-3.59-1.5-4.5V54.52ZM41.53,47.52v108.5h101v-36c-7.66,1.58-6.82,23.41-12.7,24.86-1.18.17-2.67-.14-3.63-.79-2.98-2.02-6.47-24.26-10.3-25.81-.94-.38-4.46.95-5.31-1.9-1.01-3.4,3.85-4,4.01-5.02-.12-4.15-6.85-15.14-3.84-18.1,4.45-3.04,8.95,1.93,13.76,1.74-1.35-3.15-2.75-11.61,2.46-11.03s3.05,9.89,1.55,13.02l14,4.01v-53.5c0-5.17,22.25,4.69,23.94,3.46,1.7-8.98,7.54-18.42,9.64-26.94.32-1.3.79-1.48-.58-2.5-2.81-2.08-21.4-6.93-25.98-8.02-10.05-2.4-20.36-3.72-30.52-5.53-2.44.17-3.98,7.98-6.05,10.97-13.1,18.91-41.58,12.05-45.92-9.95l-2-1.02c-19.44,3.3-39.69,6.08-57.48,14.6l10.03,28.4c4.22.52,22.41-8.34,23.94-3.46ZM110.53,8.02h-37c4,20.53,33,20.53,37,0Z"/>
<path class="cls-1" d="M89.27,117.8c-.94.96-10.2,1.42-11.25-.78-4.1-8.61,17.67-5.76,11.25.78Z"/>
<path class="cls-1" d="M94.79,117.8c-6.42-6.54,15.35-9.39,11.25-.78-1.05,2.19-10.31,1.74-11.25.78Z"/>
<path class="cls-1" d="M60.62,113.11c1.1-1.64,14.59-2.57,12.84,3.27-1.14,3.81-16.87,2.76-12.84-3.27Z"/>
<path class="cls-1" d="M62.18,46.17h9.69s1.53,3.19,1.53,3.19c-1.22,4.73-18.53,3.97-11.22-3.19Z"/>
<path class="cls-1" d="M112.19,46.18l10.91.77.34,3.47c-.87,2.65-12.93,2.92-12.96-1.9l1.7-2.34Z"/>
<path class="cls-1" d="M56.23,84.18c6.63-1.86,6.45,14.76-.7,11.35-2.24-1.07-2.61-10.42.7-11.35Z"/>
<path class="cls-1" d="M89.37,46.16l.96,3.22c-.81,4.5-16.92,3.98-12.37-2.43l11.42-.79Z"/>
<path class="cls-1" d="M94.68,46.16l11.42.79.34,3.47c-1.03,3.13-16.69,2.9-11.76-4.26Z"/>
<path class="cls-1" d="M54.75,63.76c-1.01-.99-2.01-12.94,3.11-11.63,5.4,1.38,2.78,17.42-3.11,11.63Z"/>
<path class="cls-1" d="M129.31,63.76c-5.88,5.78-8.51-10.25-3.11-11.63,5.12-1.31,4.12,10.64,3.11,11.63Z"/>
<path class="cls-1" d="M59.44,68.12c1.19.8,3.28,13.19-3.02,12.43l-2.23-1.77c-.57-2.83-.34-14.39,5.25-10.66Z"/>
<path class="cls-1" d="M59.44,111.92c-5.59,3.73-5.82-7.83-5.25-10.66l2.23-1.77c6.3-.76,4.22,11.63,3.02,12.43Z"/>
<path class="cls-1" d="M129.32,79.79c-5.12,5.18-7.81-7.81-4.7-11.67l3.28.02,1.48,1.52c-.35,2.45,1.51,8.54-.07,10.13Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

View File

@@ -0,0 +1,3 @@
<svg width="22" height="12" viewBox="0 0 22 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 1L11 11L21 1" stroke="#585858" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 492 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

View File

@@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19.6144 18.7388L5.16736 4.29184C4.95412 4.0786 4.60838 4.0786 4.39514 4.29184C4.18189 4.50509 4.18189 4.85082 4.39514 5.06407L18.8421 19.5111C19.0554 19.7243 19.4011 19.7243 19.6144 19.5111C19.8276 19.2978 19.8276 18.9521 19.6144 18.7388Z" fill="#232323"/>
<path d="M5.15908 19.5378L19.6061 5.09079C19.8193 4.87755 19.8193 4.53181 19.6061 4.31857C19.3928 4.10533 19.0471 4.10533 18.8339 4.31857L4.38685 18.7656C4.17361 18.9788 4.17361 19.3246 4.38685 19.5378C4.6001 19.751 4.94583 19.751 5.15908 19.5378Z" fill="#232323"/>
</svg>

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

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" rx="2.79453" fill="url(#pattern0_226_198)"/>
<defs>
<pattern id="pattern0_226_198" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_226_198" transform="scale(0.0104167)"/>
</pattern>
<image id="image0_226_198" width="96" height="96" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAKcUlEQVR4AeydSewlRR3H3xtHUXAZdz2YGQ+aeDDiCYgCMxwENFGMMdF4cDx48gB6VOOuiR4UPWlkGSAsBxK2BMI6wxYgLMOSEJYAQ9jXGbZh58/n0/Oq6ffmLd3Vr1/369f/1PfV0lW/qvr+flVdr7pe/9f1Cv6tra1tAseDU8FDYDdYVWffd9L584CcbCpIZy+3AqhgK9hOBQ+BE8FWYIUb8FfV2feD6fxxQE40SBXyU+K53EwFQPpmIOmnInEz6Nx0BlTINjkDMxUxUQEU3gDUqlavpU+vtrs6yoCcqYh/waMjZfR6Eh+rAApYWOKPT3J1H2UYOIHCTktySnDY7aeADPkOpeHcXSyWAcnfPuB2SMaQAsjgUNHyLTCUsYuUZkBOXS3JcSpsSAGk/gGYEa9zFTDgrPL7rNxUAVi/y8puzs+yU034BLhOV5OpAqhrSDPEO1cdAy7pE+mJAtCI1r86U0/S9Vo/3E1IviMkCqApqzj1rNHvebl3EFRUnkbfW4f1a/neHJDRuUgGipJvNe4wbHQEfM/YCmCUpP6gz1rvs4QfBXeDO8GN4HpwNdgxgiuJXwvM8zD+XvA+EOQRzO2OUwHpHTl3seXLOEp+tgevEbkX3ADOBaeD/4C/gz8O4PJc/I74b8Ffwb/BNeAZEOsOVgFOQbEClqGc5Gudwva+zccT4H5wIXBF8n/8k8Apot/vnw0uAtvBDnD1ANfi3wguBeeQ92LwJIh1m9uuAMkfJedVErT2M/G1dBXgtHI7ca35Zfy8bg8Z3wCxboMKGPpqHCupoeW0eqEiXqSNEn0G/n/B/7DiK8Gt4FHwNNgL3uTaRMeiRXnhugqYmj9knOAnCphwrVXJr9Abb6qn4Z8FbgLeePGKORSkMkOh9xPQiPHiXKnCcVVWXipLkCuc56jR6cZ53rn9Okh8EbxFeuJGrDpJy/nh6idn1vHZ2qiAbE93E7kMuLrZmSWdtNSRnlVamr6IwAIVUHl3AonO0Ya9mUr8yRB8BdgVWoDFN6bfjWlIICfSl/BsUW+4flnS+h/IXjCMMpyaDNaOtihAqxeB0FsInA0uhOys5WfzcLl+1xYFBCb9kuXUcx8JD0J+eqMl3iM+OlJMrhVtUECW1Kdh83JwPrgLJG6ecz6ysqNIhSd1xH60QQHZvr9E5A7ghpqbZAR7Wn5Vc74jrJTsNigga5H39Ho992ueZLqRHKL53IhlTyyE3OyI+xgZ/TKGF+faoAB7rhVq8Y8QeQEUcnnJHyP046R9AES7tijgeRi4DdwM0t3JPMSaR6sWlO0RPwB8AXwVHAGOBFuAD1AOxz8UHAN+TP5jwOdAtGuLAtzhfBwWJD/dnQykkj7WQWJ2+pJ8404r36TAT8BvgIcV/oQfng34LODXxH2MeyT+p0G0a4sCvPk6/wuXobkIUUEik/nrhH8AfgF+Dr4FtgAVcgS+4aPwDweHgI3gQOD9JntvIGmfm/XZFgVIgN9+heFZ/R66zkhw2vksiZJ67MD/BH5e56acoydv/jRfWxTgDfgxrHk3iNmfl3wt22nHeX19ytC+wCzrjiJf0W1RgFav9dunGDjvf42CXwGj5JPUiybYwtPQFgVo9bnn/jGEuJx0/nfaqYzsMfXm/4nSuMINSpM0Edsky5b6QhVbcVtGQGz/Qzl5yCpg1pwfypX2rbi0kBYIkHC/TYeuOCJCuFJ/mRUgaYGc6GXgQICEi0G0l5Ud0irxl1kBWUJcuZTpi+QrIytzIeEyja6igVpediqYVoekhesuQV0JhXhR32Ws36ZDuazskDbNt93Trk+81jQF2NCYznj6Id0D6imlGFSeSixW6r3cGk1Muxu3DNXynM89SOXJYw9Q+XD9KvrqjwfDSWXTPJ18Keme0bwE3404vChnWc95eopCmR5d9OBtqC/4tuEKavCQ1058z5h6uNc223aSirkmjgB74Kk1j4b7Q3F3Hz2R7K5k2JH0lLI7lV4zj3k912nZGPgoU3L/SeG/AevzNHSoL/jW607oP8jjQV6V4PFEonGuqQrQsi5hX+cc4EnkG/B90uVJ5YCrBmk34T8M9rKpth7ktkTy+gOV9ZR9BewC1nMNvrLDyehQn76n6m7muqeqt0G5I0FjIRjnmqoA52Tn9aK9ehtycs/F5HXujn2w7j3H+4ZtLdrONH9TFWDn0keLWGouq4bQ3OQHBmLKDNrjvF+4vlBv8JuqANuVbg3EkBQ6WJF/AHLdQRVpO0kr7Oxo4UILKKDFa2ELqCqqChXwGUoKwwTjXFMVENebxZXSOD5EdaLUN+hOAbAY4bT6T1LuU6A7lgIJi3ZhBHyQig3jxbk5joC4BixpKUeAx1GE4ehudAqIo06rP4iiwjDBONdUBbi+Tr8gDdbdcT2sppRLT+8BrR0BKsAt4mroi5A6YgQuk53/RStXQXbqI4GnvF/ERkgKxSf65ge5ZoGRNnwYoZ4lso2tnIIc4n7LpJ+FnJtrWmeRQkXzK9v1/0cNlEUu7ZetJKL85ylzLNb5Q3A0OAx4UtkTygFHkRZOK28kfCBWWnQzbs0ylD0IKOMQfGUqO5yItj7r/gbXTPe86Hdp35dBaddUBXhz8yDsr+ih++9/wXd/3mcCwtPKPgvwmYCnlD04axmyRTm/UHnS2Xd8hvp8BmBdwvCfkezzAOv8DmGNBK+ca5oC3B725uvyzre4HEr3JNdzmyrEV+sITyd77Wiu/wh8G5Q5py+ZHspVlmdDD0OedVhXgPWrJNvzJa47/7tSc8FANM41TQG2J+am5gtHymwJeM/xeGJRFm1vzD0krUcBaaQhgTwd0upEaLIKkMQQL+pbNnvTz8qeJqs/7WKea01UQJ52qyQR8vpUyukrxIv6Eq6MUC4rO6RV4i+rAkbJcC4eTSsSVwFlZRSpL83bFgWkHVq2QKeAmjXWKaBTQM0M1Fx9NwI6BdTMQM3VdyOgU0DNDNRc/XKOgJpJm2f1nQLmyWaErE4BEaTNs0ingHmyGSGrU0AEafMsogJK/cRmno1ZQVl7OgXUq/VdKsBfANbbjNWtPVGA/zlidSmot+c7HAEX1NuGla79gnX9ft+XW3fT0OLt4Ha5dwRYtf/aQ38KuktzZsAfmO97VQGa8EfHjoQ519GJm8CAPwpPjD6MAPP9zI8OC2HAY5ZJRakCGAXeB5JhkVzpPqpi4ES4TqzfClIFGAEeQu2WpRBRkXOal+NU/JAC0IzbEt/nqhnxOjdHBuR0y4DjVOyQAkwlQ5KRsD5eY52n2ULjYg70hrL6fT6yMrKyuVTaOatI/n6c7qcAqxoowReZLss9wZ80je2L/ckBFaCMHFkLZ5HDseQraWKjUcIe8EsyuTraT3Ok1+0kLbThKQK+uQovyr1OKV/ahJe4rOwkIeJDzjbLIXBqHytiogJCbgpvA18kriIcSgQb4zwRnby4mxb5PwTwopxlfUmUilBmlJBBIVeTW+UM+CavQfJ4b6YCQjGEqQinJZXhT3n8T0UqZKJ2Q9kKfa1ey3UESF5sVZb1lWe+/cp3FaVyZgTsu5buF1k52QRPTjfpMnNG+d67AAAA///vdBW6AAAABklEQVQDAJAXvRKwmZ6CAAAAAElFTkSuQmCC"/>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

View File

@@ -0,0 +1,10 @@
<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_226_195)">
<path d="M-0.00195312 1.4335C-0.00195312 0.641696 0.656004 0 1.46782 0H18.5422C19.354 0 20.0119 0.641696 20.0119 1.4335V18.5804C20.0119 19.3722 19.354 20.0139 18.5422 20.0139H1.46782C0.656004 20.0139 -0.00195312 19.3722 -0.00195312 18.5804V1.4335ZM6.18109 16.7541V7.71661H3.17776V16.7541H6.18109ZM4.68005 6.482C5.72703 6.482 6.37873 5.78902 6.37873 4.92092C6.35996 4.03405 5.72828 3.35983 4.70006 3.35983C3.67185 3.35983 3.00013 4.0353 3.00013 4.92092C3.00013 5.78902 3.65183 6.482 4.66003 6.482H4.68005ZM10.8193 16.7541V11.7069C10.8193 11.4367 10.8393 11.1665 10.9194 10.9739C11.1358 10.4347 11.6299 9.87561 12.4605 9.87561C13.5475 9.87561 13.9815 10.7037 13.9815 11.9195V16.7541H16.9848V11.5705C16.9848 8.79361 15.5038 7.50271 13.5274 7.50271C11.9338 7.50271 11.2196 8.37832 10.8193 8.995V9.02627H10.7993L10.8193 8.995V7.71661H7.81723C7.85475 8.5647 7.81723 16.7541 7.81723 16.7541H10.8193Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_226_195">
<rect width="20.0139" height="20.0139" rx="1.55252" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,12 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_226_203)">
<path d="M20 17C20 18.6569 18.6569 20 17 20H3C1.34307 20 0 18.6569 0 17V3C0 1.34313 1.34313 0 3 0H17C18.6569 0 20 1.34313 20 3V17Z" fill="white"/>
<path d="M13.3881 7.45803C11.7739 7.54236 10.3702 8.03169 9.2306 9.13723C8.0792 10.2542 7.55366 11.6228 7.69726 13.3195C7.06633 13.2414 6.49166 13.1554 5.91373 13.1067C5.71413 13.0899 5.47726 13.1138 5.3082 13.2092C4.747 13.5258 4.20906 13.8834 3.57133 14.282C3.68833 13.7528 3.76406 13.2894 3.89813 12.8437C3.99673 12.5161 3.95106 12.3338 3.64926 12.1204C1.71153 10.7523 0.894728 8.70496 1.50599 6.59703C2.07153 4.64703 3.46033 3.46443 5.3474 2.84796C7.92313 2.00663 10.8177 2.86483 12.3839 4.90976C12.9495 5.64843 13.2964 6.47749 13.3881 7.45803ZM5.95893 6.80123C5.9738 6.41569 5.63973 6.06836 5.24293 6.05676C4.83666 6.04483 4.50253 6.35529 4.49066 6.75563C4.47866 7.16136 4.789 7.48649 5.1982 7.49689C5.60386 7.50716 5.94393 7.19629 5.95893 6.80123ZM9.835 6.05649C9.43673 6.06383 9.1002 6.40303 9.10726 6.79009C9.11453 7.19129 9.44466 7.50516 9.8542 7.50023C10.2648 7.49529 10.5762 7.17809 10.5723 6.76843C10.5689 6.36629 10.2403 6.04909 9.835 6.05649Z" fill="#232323"/>
<path d="M17.0146 17.5216C16.5035 17.294 16.0346 16.9525 15.5354 16.9004C15.0381 16.8484 14.5154 17.1353 13.9951 17.1885C12.4104 17.3506 10.9907 16.909 9.82001 15.8264C7.59355 13.767 7.91168 10.6094 10.4876 8.92184C12.777 7.42197 16.1345 7.92197 17.7487 10.0031C19.1573 11.8191 18.9917 14.2298 17.2721 15.7554C16.7745 16.1969 16.5955 16.5602 16.9148 17.1423C16.9737 17.2498 16.9804 17.3858 17.0146 17.5216ZM11.1963 11.8883C11.5217 11.8886 11.7897 11.634 11.802 11.3126C11.815 10.9723 11.5413 10.6869 11.2006 10.6855C10.8632 10.684 10.5806 10.9734 10.5924 11.3086C10.6035 11.6288 10.8733 11.8879 11.1963 11.8883ZM14.9471 10.6868C14.6314 10.6846 14.3631 10.9431 14.3502 11.2621C14.3365 11.6032 14.6017 11.8834 14.9393 11.8842C15.2658 11.8854 15.5239 11.6384 15.5357 11.3134C15.5483 10.9715 15.2831 10.6892 14.9471 10.6868Z" fill="#232323"/>
</g>
<defs>
<clipPath id="clip0_226_203">
<rect width="20" height="20" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -1,93 +1,130 @@
{
"eventsList": [
"eventsList": [
{
"id": 1,
"title": "Just post your design work, you could have the chance to come to Hong Kong and interact with industry leaders face-to-face",
"imgUrl": "/image/events/workshop-En.jpg"
},
{
"id": 1,
"title":"Just post your design work, you could have the chance to come to Hong Kong and interact with industry leaders face-to-face",
"imgUrl": "/image/events/workshop-En.jpg"
},{
"id": 2,
"title":"AiDA X SFT AI Fashion Award 2024",
"title": "AiDA X SFT AI Fashion Award 2024",
"imgUrl": "/image/events/Fashion-Award-2024.png"
},
{
"id": 3,
"title": "AiDA Global Design Awards 2026",
"imgUrl": "/image/events/award-poster.gif"
}
],
"eventsItem":[
{
"id":1,
"title":"Just post your design work, you could have the chance to come to Hong Kong and interact with industry leaders face-to-face",
"imgUrl": "/image/events/workshop-En.jpg",
"textList":[
{
"paragraph":[
{
"text":"🎨AiDA Workshop!"
}
]
},{
"paragraph":[
{
"text":"The process is simple: use AiDA to post your design work on the 'Gallery', and the one with the most likes(at least 20 likes) will be invited to the AiDA Workshop offline event in Hong Kong on November 14th, to exchange ideas with the Royal College of Art (RCA), Jae Lim, co-founder of the renowned fashion brand BESFXXK, and outstanding designers! "
}
]
},{
"paragraph":[
{
"text":"<b>⚠ATTENTION❗❗</b>"
}
]
},{
"paragraph":[
{
"text":"1. Add the tag in the work description #AiDAworkshop_2024"
},{
"text":"2. One winner only"
}
]
},{
"paragraph":[
{
"text":"<b>🤩Code-Create will provide (Terms and conditions apply):</b>"
}
]
},{
"paragraph":[
{
"text":"✅Round-trip transportation fee (only within China)"
}
]
},{
"paragraph":[
{
"text":"✅One night accommodation fee"
}
]
},{
"paragraph":[
{
"text":"⌛Deadline: October 31, 2024"
}
]
}
]
},
{
"id":2,
"title":"AiDA X SFT AI Fashion Award 2024",
"imgUrl": "/image/events/Fashion-Award-2024.png",
"textList":[
{
"paragraph":[
{
"text":"With the aim of inspiring students to innovate in fashion design using AI, Code-Create and The Hong Kong Polytechnic University School of Fashion and Textiles (SFT) have jointly launched the 'AiDA X SFT AI Fashion Award 2024'. This competition provides students with valuable practical AiDA experience, laying the foundation for the future fashion design industry and positioning them as pioneers in AI fashion."
}
]
},{
"paragraph":[
{
"text":"The competition is open to all SFT students, with the winners having the chance to win cash prizes (up to 20,000 HKD), internship opportunity at BESFXXK (will work with the renowned designer, Mr Jae Hyuk Lim, for the BESFXXK collection, that will be featured at NY Fashion Week and Paris Fashion Week) and more surprises! Scan the QR code to learn more."
}
]
}
]
],
"eventsItem": [
{
"id": 3,
"title": "AiDA Global Design Awards 2026",
"imgUrl": "/image/events/award-poster.gif",
"tips": "For inquiries: awards2026@code-create.com.hk",
"textList": [
{
"paragraph": [
{
"text": "Click the “View Details” button for more information and to join the competition! The AiDA Global Design Award 2026 is an international design competition hosted by CodeCreate, a globally leading AI fashion solutions provider, celebrating the future of creativity powered by artificial intelligence. Open to designers worldwide the competition brings together global talent, empowering AI as a creative partner—pushing fashion beyond traditional boundaries and unlocking new possibilities where technology amplifies human imagination."
}
]
},
{
"paragraph": [
{
"text": "Participants have the opportunity to compete for cash prizes totaling up to US$9,000, gain global media exposure showcased by top international platforms, and connect with designers and industry leaders worldwide. Finalists will also attend an exclusive award ceremony in Hong Kong, with travel allowance, allowing them to showcase their talent, network with professionals, and celebrate their achievements on an international stage."
}
]
}
]
},
{
"id": 1,
"title": "Just post your design work, you could have the chance to come to Hong Kong and interact with industry leaders face-to-face",
"imgUrl": "/image/events/workshop-En.jpg",
"textList": [
{
"paragraph": [
{
"text": "🎨AiDA Workshop!"
}
]
},
{
"paragraph": [
{
"text": "The process is simple: use AiDA to post your design work on the 'Gallery', and the one with the most likes(at least 20 likes) will be invited to the AiDA Workshop offline event in Hong Kong on November 14th, to exchange ideas with the Royal College of Art (RCA), Jae Lim, co-founder of the renowned fashion brand BESFXXK, and outstanding designers! "
}
]
},
{
"paragraph": [
{
"text": "<b>⚠ATTENTION❗❗</b>"
}
]
},
{
"paragraph": [
{
"text": "1. Add the tag in the work description #AiDAworkshop_2024"
},
{
"text": "2. One winner only"
}
]
},
{
"paragraph": [
{
"text": "<b>🤩Code-Create will provide (Terms and conditions apply):</b>"
}
]
},
{
"paragraph": [
{
"text": "✅Round-trip transportation fee (only within China)"
}
]
},
{
"paragraph": [
{
"text": "✅One night accommodation fee"
}
]
},
{
"paragraph": [
{
"text": "⌛Deadline: October 31, 2024"
}
]
}
]
},
{
"id": 2,
"title": "AiDA X SFT AI Fashion Award 2024",
"imgUrl": "/image/events/Fashion-Award-2024.png",
"textList": [
{
"paragraph": [
{
"text": "With the aim of inspiring students to innovate in fashion design using AI, Code-Create and The Hong Kong Polytechnic University School of Fashion and Textiles (SFT) have jointly launched the 'AiDA X SFT AI Fashion Award 2024'. This competition provides students with valuable practical AiDA experience, laying the foundation for the future fashion design industry and positioning them as pioneers in AI fashion."
}
]
},
{
"paragraph": [
{
"text": "The competition is open to all SFT students, with the winners having the chance to win cash prizes (up to 20,000 HKD), internship opportunity at BESFXXK (will work with the renowned designer, Mr Jae Hyuk Lim, for the BESFXXK collection, that will be featured at NY Fashion Week and Paris Fashion Week) and more surprises! Scan the QR code to learn more."
}
]
}
]
}
]
}
}

View File

@@ -1,93 +1,130 @@
{
"eventsList": [
{
"id": 1,
"title":"什么?只要发布设计作品就有机会来香港与大佬面对面交流?!",
"imgUrl": "/image/events/workshop-Cn.jpg"
},{
"id": 2,
"title":"AiDA X SFT AI时尚设计比赛2024",
"imgUrl": "/image/events/Fashion-Award-2024.png"
}
"eventsList": [
{
"id": 1,
"title": "什么?只要发布设计作品就有机会来香港与大佬面对面交流?!",
"imgUrl": "/image/events/workshop-Cn.jpg"
},
{
"id": 2,
"title": "AiDA X SFT AI时尚设计比赛2024",
"imgUrl": "/image/events/Fashion-Award-2024.png"
},
{
"id": 3,
"title": "AiDA全球设计奖 2026",
"imgUrl": "/image/events/award-poster-zh.gif"
}
],
"eventsItem":[
{
"id":1,
"title":"什么?只要发布设计作品就有机会来香港与大佬面对面交流?!",
"imgUrl": "/image/events/workshop-Cn.jpg",
"textList":[
{
"paragraph":[
{
"text":"🎨这是一趟艺术巅峰之旅AiDA Workshop"
}
]
},{
"paragraph":[
{
"text":"参与过程很简单利用AiDA 在 “Gallery广场 ”发布设计作品,最终获赞最高者(至少20个赞将被邀请至11月14日 举办的AiDA Workshop香港线下活动与英国皇家艺术学院RCA、韩国知名时尚品牌BESFXXK创始人JAE以及优秀设计师一同交流(名额仅限1名"
}
]
},{
"paragraph":[
{
"text":"<b>⚠️注意❗❗</b>"
}
]
},{
"paragraph":[
{
"text":"1. 作品描述添加tag: #AiDAworkshop_2024"
},{
"text":"2. 一个冠军名额"
}
]
},{
"paragraph":[
{
"text":"<b>🤩Code-Create将提供适用条款条规</b>"
}
]
},{
"paragraph":[
{
"text":"✅往返机票/动车费用(仅限中国地区)"
}
]
},{
"paragraph":[
{
"text":"✅一晚酒店住宿费用"
}
]
},{
"paragraph":[
{
"text":"⌛截止时间2024.10.31"
}
]
}
]
},
{
"id":2,
"title":"AiDA X SFT AI时尚设计比赛2024",
"imgUrl": "/image/events/Fashion-Award-2024.png",
"textList":[
{
"paragraph":[
{
"text":"秉承着激发学生使用AI进行时尚设计的创新能力的初衷Code-Create和香港理工大学时装及纺织学院SFT共同举办了“AiDA X SFT AI时尚设计比赛2024”让学生们在比赛中获得宝贵的AiDA实践经验为未来的时尚设计行业打下了坚实的基础成为时尚界的AI先锋。"
}
]
},{
"paragraph":[
{
"text":" 此次比赛面向全体SFT 学生最终获奖者将赢取丰厚奖金最高可达2万港币获得在BESFXXK的实习机会将与著名设计师Lim Jae Hyuk先生合作设计BESFXXK 系列,该系列将在纽约时装周和巴黎时装周上展出)及更多惊喜哦!扫描二维码获取更多比赛信息。"
}
]
}
]
}
]
}
"eventsItem": [
{
"id": 3,
"title": "AiDA全球设计奖 2026",
"imgUrl": "/image/events/award-poster-zh.gif",
"tips": "如有疑问请联系awards2026@code-create.com.hk",
"textList": [
{
"paragraph": [
{
"text": "秉承推动 AI 赋能创意设计的初衷CodeCreate 举办了「AiDA 全球设计大奖 2026」面向来全球的设计师鼓励大家探索 AI 与时尚设计的无限可能,突破传统界限,释放科技与想象力的创新潜能。点击“查看详情”按钮获取更多比赛信息,抓住成为 AI 时尚先锋的机会吧!"
}
]
},
{
"paragraph": [
{
"text": "参赛者将有机会赢取总奖金 9,000 美元,作品还将获得国际媒体展示机会,并与全球设计师和行业领袖建立联系。入围决赛者将受邀参加在香港举办的 专属颁奖典礼,主办方提供差旅津贴,让设计师在国际舞台展示才华、拓展人脉,并共同庆祝创意成果。"
}
]
}
]
},
{
"id": 1,
"title": "什么?只要发布设计作品就有机会来香港与大佬面对面交流?!",
"imgUrl": "/image/events/workshop-Cn.jpg",
"textList": [
{
"paragraph": [
{
"text": "🎨这是一趟艺术巅峰之旅AiDA Workshop"
}
]
},
{
"paragraph": [
{
"text": "参与过程很简单利用AiDA 在 “Gallery广场 ”发布设计作品,最终获赞最高者(至少20个赞将被邀请至11月14日 举办的AiDA Workshop香港线下活动与英国皇家艺术学院RCA、韩国知名时尚品牌BESFXXK创始人JAE以及优秀设计师一同交流(名额仅限1名"
}
]
},
{
"paragraph": [
{
"text": "<b>⚠️注意❗❗</b>"
}
]
},
{
"paragraph": [
{
"text": "1. 作品描述添加tag: #AiDAworkshop_2024"
},
{
"text": "2. 一个冠军名额"
}
]
},
{
"paragraph": [
{
"text": "<b>🤩Code-Create将提供适用条款条规</b>"
}
]
},
{
"paragraph": [
{
"text": "✅往返机票/动车费用(仅限中国地区)"
}
]
},
{
"paragraph": [
{
"text": "✅一晚酒店住宿费用"
}
]
},
{
"paragraph": [
{
"text": "⌛截止时间2024.10.31"
}
]
}
]
},
{
"id": 2,
"title": "AiDA X SFT AI时尚设计比赛2024",
"imgUrl": "/image/events/Fashion-Award-2024.png",
"textList": [
{
"paragraph": [
{
"text": "秉承着激发学生使用AI进行时尚设计的创新能力的初衷Code-Create和香港理工大学时装及纺织学院SFT共同举办了“AiDA X SFT AI时尚设计比赛2024”让学生们在比赛中获得宝贵的AiDA实践经验为未来的时尚设计行业打下了坚实的基础成为时尚界的AI先锋。"
}
]
},
{
"paragraph": [
{
"text": " 此次比赛面向全体SFT 学生最终获奖者将赢取丰厚奖金最高可达2万港币获得在BESFXXK的实习机会将与著名设计师Lim Jae Hyuk先生合作设计BESFXXK 系列,该系列将在纽约时装周和巴黎时装周上展出)及更多惊喜哦!扫描二维码获取更多比赛信息。"
}
]
}
]
}
]
}

View File

@@ -2488,3 +2488,25 @@ textarea:focus {
background: #ffffff;
color: #000;
}
.flex {
display: flex;
}
.flex-col {
flex-direction: column;
}
.flex-center {
justify-content: center;
align-items: center;
}
.align-center {
align-items: center;
}
.space-between {
justify-content: space-between;
}
.justify-center {
justify-content: center;
}
.flex-1{
flex: 1;
}

View File

@@ -2406,3 +2406,25 @@ textarea:focus{
color: #000;
}
}
.flex {
display: flex;
}
.flex-col {
flex-direction: column;
}
.flex-center {
justify-content: center;
align-items: center;
}
.align-center {
align-items: center;
}
.space-between {
justify-content: space-between;
}
.justify-center {
justify-content: center;
}
.flex-1{
flex: 1;
}

View File

@@ -1,22 +1,37 @@
<template>
<div class="account_systemMessage">
<div class="account_systemMessage">
<div class="account_generalMessage_title modal_title_text">
<!-- <span>系统消息</span> -->
<div class="account_generalMessage_title_setting" @click="allRead">{{$t('account.AllRead')}}</div>
<div class="account_generalMessage_title_setting" @click="allRead">
{{ $t("account.AllRead") }}
</div>
</div>
<div class="account_generalMessage_item modal_title_text" v-for="item in dataList" :key="item.id" @click="setRead(item)">
<div
class="account_generalMessage_item modal_title_text"
v-for="item in dataList"
:key="item.id"
@click="setRead(item)"
>
<a-badge :dot="item.isRead == 0"></a-badge>
<div class="account_generalMessage_item_title">
<div class="account_generalMessage_item_title_text" :title="item.content">{{ item.content.title }}</div>
<div class="account_generalMessage_item_title_text" :title="item.content">
{{ item.content.title }}
</div>
<div class="modal_title_text_intro">{{ item.createTime }}</div>
</div>
<div class="modal_title_text_intro">
{{ item.content.content }}
<span v-if="item.content.link" class="account_generalMessage_item_link">{{ item.content.link }}</span>
<span v-if="item.content.link" class="account_generalMessage_item_link">{{
item.content.link
}}</span>
</div>
</div>
<div class="account_generalMessage_item modal_title_text" style="display:flex;justify-content: center;" v-if="dataList.length == 0 && isNoData">
{{$t('account.dataNull')}}
<div
class="account_generalMessage_item modal_title_text"
style="display: flex; justify-content: center"
v-if="dataList.length == 0 && isNoData"
>
{{ $t("account.dataNull") }}
</div>
<div class="page_loading_box" v-show="!isNoData">
<span class="page_loading" ref="loadingDom" v-show="!isShowMark"></span>
@@ -24,120 +39,138 @@
<a-spin size="large" />
</span>
</div>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent,computed,ref,reactive,nextTick,toRefs,createVNode, onMounted} from 'vue'
import { Https } from "@/tool/https";
import { useRouter,useRoute } from 'vue-router'
import { useStore } from "vuex";
import { useI18n } from 'vue-i18n'
import {
defineComponent,
computed,
ref,
reactive,
nextTick,
toRefs,
createVNode,
onMounted
} from "vue"
import { Https } from "@/tool/https"
import { useRouter, useRoute } from "vue-router"
import { useStore } from "vuex"
import { useI18n } from "vue-i18n"
import { isValidUrl } from "@/tool/util"
export default defineComponent({
components:{
},
components: {},
// emits:['putListData'],
props:['setReadStatus','setAllmessage','getHistory'],
setup(prop,{emit}) {
props: ["setReadStatus", "setAllmessage", "getHistory"],
setup(prop, { emit }) {
const router = useRouter()
const store = useStore();
const store = useStore()
let accountMessage = reactive({
dataList: [],
page:1,
size:10,
page: 1,
size: 10,
isNoData: false,
isShowMark: false,
isShowMark: false
})
let loadingDom:any = ref(null)
let setmessageList = ()=>{
let loadingDom: any = ref(null)
let setmessageList = () => {
accountMessage.isShowMark = true
let data = {
page: accountMessage.page,
size: accountMessage.size,
size: accountMessage.size
}
prop.getHistory(data).then((rv:any)=>{
accountMessage.isShowMark = false
if(rv.content.length == 0) {
prop.getHistory(data)
.then((rv: any) => {
accountMessage.isShowMark = false
if (rv.content.length == 0) {
accountMessage.isNoData = true
} else {
rv.content.forEach((item: any) => {
item.content = JSON.parse(item.content)
})
accountMessage.dataList.push(...rv.content)
}
})
.catch(() => {
accountMessage.isShowMark = false
accountMessage.isNoData = true
}else{
rv.content.forEach((item:any) => {
item.content = JSON.parse(item.content)
});
accountMessage.dataList.push(...rv.content)
})
}
let setRead = (item: any) => {
let content = item.content.content
if (isValidUrl(content)) {
if (import.meta.env.VITE_APP_BASE_URL === "https://develop.api.aida.com.hk") {
content += "&env=dev"
}
}).catch(() => {
accountMessage.isShowMark = false
accountMessage.isNoData = true
})
}
let setRead = (item:any)=>{
prop.setReadStatus(item).then((rv:any)=>{
item.isRead = 1
}).catch((err:any)=>{
})
}
let allRead = ()=>{
// emit('setAllmessage')
prop.setAllmessage().then(()=>{
accountMessage.dataList.forEach((item:any)=>{
window.open(content, "_blank")
}
prop.setReadStatus(item)
.then((rv: any) => {
item.isRead = 1
})
}).catch((err:any)=>{
})
.catch((err: any) => {})
}
let allRead = () => {
// emit('setAllmessage')
prop.setAllmessage()
.then(() => {
accountMessage.dataList.forEach((item: any) => {
item.isRead = 1
})
})
.catch((err: any) => {})
}
// provide('exhibitionList',exhibitionList)
onMounted (()=>{
onMounted(() => {
accountMessage.isNoData = false
accountMessage.page = 0
let imgParent:any = document.querySelector('.account_systemMessage .page_loading')
let imgParent: any = document.querySelector(".account_systemMessage .page_loading")
new IntersectionObserver(
(entries, observer) => {
// 如果不是相交,则直接返回
// console.log(entries[0]);
if (!entries[0].intersectionRatio) return;
accountMessage.page+=1
if (!entries[0].intersectionRatio) return
accountMessage.page += 1
setmessageList()
},
}
// { root:worksPage }
).observe(loadingDom.value);
).observe(loadingDom.value)
})
return{
...toRefs(accountMessage),
setmessageList,
setRead,
allRead,
loadingDom,
}
},
data(){
return{
}
},
return {
...toRefs(accountMessage),
setmessageList,
setRead,
allRead,
loadingDom
}
},
data() {
return {}
}
})
</script>
<style lang="less" scoped>
.account_systemMessage{
.account_systemMessage {
width: 100%;
.account_generalMessage_item{
.account_generalMessage_item {
font-size: var(--aida-fsize1-6);
.account_generalMessage_item_title{
.account_generalMessage_item_title {
display: flex;
align-items: center;
margin-bottom: 2rem;
.account_generalMessage_item_title_text{
.account_generalMessage_item_title_text {
max-width: 80%;
white-space: nowrap;
overflow: hidden;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.modal_title_text_intro{
.modal_title_text_intro {
margin-left: 4rem;
}
}
}
.modal_title_text_intro{
.modal_title_text_intro {
word-break: break-word;
white-space: pre-wrap;
font-family: Arial, sans-serif;

File diff suppressed because it is too large Load Diff

View File

@@ -148,6 +148,7 @@
total: total,
showQuickJumper: true,
bordered: false,
showTotal: (total) => `Total Transaction: ${total}`
}"
>
<template #bodyCell="{ column, text, record, index }">
@@ -465,13 +466,16 @@ export default defineComponent({
(rv: any) => {
if (rv) {
// this.dataList = rv
// console.log('rv----',rv);
filter.dataList = rv.content;
filterData.total = rv.total;
filter.tableLoading = false;
filterData.totalPayer = rv.content.reduce((total: number, item: any) => {
const value = item && item.status === 'Success' ? parseFloat(item.payerTotal) : 0;
return total + (isNaN(value) ? 0 : value);
}, 0);
filterData.totalPayer = rv.totalAmount;
// filterData.totalPayer = rv.content.reduce((total: number, item: any) => {
// const value = item && item.status === 'Success' ? parseFloat(item.payerTotal) : 0;
// return total + (isNaN(value) ? 0 : value);
// }, 0);
// this.workspaceItem.position = this.singleTypeList[0].label
}

File diff suppressed because it is too large Load Diff

View File

@@ -321,6 +321,7 @@ export default defineComponent({
data = setEditData()
if (!data.userName || !data.userEmail || !data.validEndTime || !data.systemUser)
return message.warning('Please check the input box marked with *')
delete data.userName
Https.axiosPost(Https.httpUrls.modifyUser, {}, { params: data }).then(rv => {
if (rv) {
cancelDsign()

View File

@@ -0,0 +1,99 @@
<template>
<div class="admin_page globalAwardPopularity" ref="adminPage">
<div class="admin_table_search">
<div class="admin_state">
<div class="admin_state_item">
<span>Current Time:</span>
<span>{{ currentTimeStr }}</span>
</div>
<div class="admin_state_item">
<span>Raw Visi Count:</span>
<span>{{ rawVisitCount }}</span>
</div>
<div class="admin_state_item">
<span>Unique Visit Count:</span>
<span>{{ uniqueVisitCount }}</span>
</div>
</div>
<div class="admin_search">
<div class="admin_search_item" @click="getGlobalAwardPopularity">
<i class="fi fi-br-refresh"></i>
</div>
</div>
</div>
<!-- <div class="admin_table_content" ref="questionnaireTable">
</div> -->
</div>
</template>
<script lang="ts">
import { defineComponent, ref, createVNode,toRefs, computed,reactive, onMounted, nextTick } from "vue";
import { Https } from "@/tool/https";
import type { TableColumnsType } from 'ant-design-vue';
export default defineComponent({
components: {},
setup() {
const currentTime = ref(new Date())
const currentTimeStr = computed(()=>{
return currentTime.value.toLocaleString()
})
const rawVisitCount = ref(0)
const uniqueVisitCount = ref(0)
const getGlobalAwardPopularity = () => {
Https.axiosGet(Https.httpUrls.getGlobalAwardPopularity,).then((rv)=>{
currentTime.value = new Date()
rawVisitCount.value = rv.rawVisitCount
uniqueVisitCount.value = rv.uniqueVisitCount
})
}
onMounted(()=>{
getGlobalAwardPopularity()
})
return {
currentTimeStr,
getGlobalAwardPopularity,
rawVisitCount,
uniqueVisitCount,
};
},
data() {
return {
};
},
mounted() {
},
methods: {},
});
</script>
<style lang="less" scoped>
.admin_page.globalAwardPopularity{
.admin_table_search{
// flex: 1;
width: min-content;
justify-content: flex-start;
border-radius: 2rem;
box-shadow: 0 0 1rem rgba(0, 0, 0, 0.2);
margin-left: 2rem;
flex-wrap: nowrap;
gap: 3rem;
}
.admin_state{
flex-direction: column;
width: auto;
cursor: auto;
.admin_state_item{
> span{
font-size: 2rem;
}
}
}
.admin_search{
i{
display: flex;
}
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -207,7 +207,8 @@ export class BackgroundSizeCommand extends Command {
this.bgLayer = this.layers.value.find((layer) => layer.isBackground);
// 记录原尺寸
this.backgroundObject = findObjectById(this.canvas, this.bgLayer.fabricObject.id).object;
this.bgId = this.bgLayer.fabricObject?.id || this.bgLayer.fabricObjects?.[0]?.id;
this.backgroundObject = findObjectById(this.canvas, this.bgId).object;
this.oldWidth = this.backgroundObject.width;
this.oldHeight = this.backgroundObject.height;

View File

@@ -50,7 +50,6 @@ export class FillGroupLayerBackgroundCommand extends Command {
);
this.layer = layer;
this.parent = parent;
console.log("==========",layer);
if (!layer) return false;
if(!isUndo){
@@ -107,7 +106,6 @@ export class FillGroupLayerBackgroundCommand extends Command {
});
}
}
// 判断fabricObjects是否是组对象
const firstObj = layer.fabricObjects?.[0] || null;
// 如果没有找到第一个对象,则直接添加到当前画布
@@ -174,8 +172,8 @@ export class FillGroupLayerBackgroundCommand extends Command {
}
const canvasObj = findObjectById(this.canvas, firstObj?.id)?.object;
if (
(canvasObj && canvasObj.type === "group") ||
canvasObj._objects?.length > 0
canvasObj && (canvasObj.type === "group" ||
canvasObj._objects?.length > 0)
) {
this.newFill.set({
left: 0,
@@ -343,10 +341,6 @@ export class FillGroupLayerBackgroundCommand extends Command {
minTop = Infinity,
maxRight = -Infinity,
maxBottom = -Infinity;
console.log(
"计算当前所有对象的边界信息:===>",
this.originalfabricObjects.length
);
this.originalfabricObjects?.forEach((obj) => {
const { object } = findObjectById(this.canvas, obj.id) || {};
if (object) {

View File

@@ -7,11 +7,11 @@ import {
insertObjectAtZIndex,
removeCanvasObjectByObject,
createPatternTransform,
getTransformScaleAngle,
imageAddGapToCanvas,
} from "../utils/helper";
import { restoreFabricObject } from "../utils/objectHelper";
const scale = 0.3;// 默认缩放比例
export const FillSourceToBase64 = (source) => {
if (source?.toDataURL) {
return source.toDataURL?.();
@@ -38,7 +38,6 @@ export class FillRepeatCommand extends Command {
this.fillRepeat = options.fillRepeat;
this.oldObjects = null;
this.oldLocked = null;
this.oldIsDisableUnlock = null;
}
async execute() {
@@ -63,17 +62,15 @@ export class FillRepeatCommand extends Command {
);
});
image.set({
id: object.id,
layerId: object.layerId,
layerName: object.layerName,
...this.copyObjectProperties(object),
...(fill_.originalInfo || {
top: object.top,
left: object.left,
})
});
layer.fabricObjects = [image.toObject(["id", "layerId", "layerName"])];
this.oldLocked = layer.locked;
layer.locked = false;
// this.oldLocked = layer.locked;
// layer.locked = false;
this.canvas.add(image);
this.canvas.remove(object);
@@ -109,24 +106,35 @@ export class FillRepeatCommand extends Command {
height: object.height,
}
};
const fdObject = this.canvasManager.getFixedLayerObject();
const bgObject = this.canvasManager.getBackgroundLayerObject();
const tObject = fdObject || bgObject;
const tWidth = tObject.width;
const tHeight = tObject.height;
// const offsetX = object.fill?.hasOwnProperty("offsetX") ? object.fill.offsetX : tObject.width / 2;
// const offsetY = object.fill?.hasOwnProperty("offsetY") ? object.fill.offsetY : tObject.height / 2;
const scaleX_ = tWidth / img.width / 5;
const scaleY_ = tHeight / img.height / 5;
const scale_ = tWidth > tHeight ? scaleX_ : scaleY_;
const patternTransform = object.fill?.hasOwnProperty("patternTransform") ? object.fill.patternTransform : createPatternTransform(scale_, 0);
const scale = getTransformScaleAngle(patternTransform).scale;
const offsetX = tWidth / 2 - img.width * scale / 2;
const offsetY = tHeight / 2 - img.height * scale / 2;
const pattern = new fabric.Pattern({
source: img,
repeat: this.fillRepeat,
patternTransform: object.fill?.hasOwnProperty("patternTransform") ? object.fill.patternTransform : createPatternTransform(scale, 0),
offsetX: object.fill?.hasOwnProperty("offsetX") ? object.fill.offsetX : bgObject.width / 2, // 水平偏移
offsetY: object.fill?.hasOwnProperty("offsetY") ? object.fill.offsetY : bgObject.height / 2, // 垂直偏移
patternTransform,
offsetX, // 水平偏移
offsetY, // 垂直偏移
});
const rect = new fabric.Rect({
id: object.id,
layerId: object.layerId,
layerName: object.layerName,
...this.copyObjectProperties(object),
fill_,
});
layer.fabricObjects = [rect.toObject(["id", "layerId", "layerName"])];
this.oldLocked = layer.locked;
// this.oldIsDisableUnlock = layer.isDisableUnlock;
// layer.isDisableUnlock = true;
// this.oldLocked = layer.locked;
if (this.oldObjects.type === "rect") {
rect.set({
width: object.width,
@@ -142,17 +150,17 @@ export class FillRepeatCommand extends Command {
flipY: object.flipY,
});
} else {
let scaleX = bgObject.scaleX || 1;
let scaleY = bgObject.scaleY || 1;
let scaleX = tObject.scaleX || 1;
let scaleY = tObject.scaleY || 1;
rect.set({
width: bgObject.width,
height: bgObject.height,
top: bgObject.top - bgObject.height * scaleY / 2,
left: bgObject.left - bgObject.width * scaleX / 2,
width: tWidth,
height: tHeight,
top: tObject.top - tHeight * scaleY / 2,
left: tObject.left - tWidth * scaleX / 2,
scaleX,
scaleY,
});
layer.locked = true;
// layer.locked = true;
}
rect.set("fill", pattern);
this.canvas.add(rect);
@@ -181,14 +189,23 @@ export class FillRepeatCommand extends Command {
this.canvas.remove(object);
this.canvas.add(this.oldObjects);
layer.fabricObjects = [this.oldObjects.toObject(["id", "layerId", "layerName"])];
layer.locked = this.oldLocked;
// layer.isDisableUnlock = this.oldIsDisableUnlock;
// layer.locked = this.oldLocked;
await this.layerManager?.updateLayersObjectsInteractivity();
await this.layerManager?.sortLayersWithTool?.();
this.canvas.renderAll();
this.canvasManager.thumbnailManager?.generateLayerThumbnail(this.layerId);
return true;
}
// 复制原对象的属性
copyObjectProperties(object) {
return {
id: object.id,
layerId: object.layerId,
layerName: object.layerName,
isPrintTrims: object.isPrintTrims,
}
}
}
@@ -227,6 +244,10 @@ export class FillRepeatChangeCommand extends Command {
...this.newPattern,
});
object.set("fill", pattern);
if (object.globalCompositeOperation_) {
object.globalCompositeOperation = object.globalCompositeOperation_;
object.globalCompositeOperation_ = null;
}
this.canvas.renderAll();
return true;
}
@@ -273,7 +294,7 @@ export class FillRepeatGapChangeCommand extends Command {
this.oldGapY = null;
}
async execute(isUndo = false) {
async execute(isCommand = true, isUndo = false) {
const { layer } = findLayerRecursively(this.layers.value, this.layerId);
if (!layer || !layer.fabricObjects || layer.fabricObjects.length === 0) {
console.warn("图层不存在或没有 fabric 对象");
@@ -304,21 +325,18 @@ export class FillRepeatGapChangeCommand extends Command {
object.fill_.gapY = this.newGapY;
}
const image = new Image();
image.crossOrigin = "anonymous";
image.src = object.fill_.source;
await image.decode();
object.fill_.width = image.width;
object.fill_.height = image.height;
// 创建透明 Canvas
const tcanvas = document.createElement('canvas');
tcanvas.width = image.width + object.fill_.gapX;
tcanvas.height = image.height + object.fill_.gapY;
const ctx = tcanvas.getContext('2d');
ctx.clearRect(0, 0, tcanvas.width, tcanvas.height);
ctx.drawImage(image, 0, 0);
const fill = object.get("fill");
fill.source = tcanvas;
fill.source = imageAddGapToCanvas(image, object.fill_.gapX, object.fill_.gapY);
object.set("fill", new fabric.Pattern(fill));
if (isCommand && object.globalCompositeOperation_) {
object.globalCompositeOperation = object.globalCompositeOperation_;
object.globalCompositeOperation_ = null;
}
this.canvas.renderAll();
return true;
}
@@ -328,7 +346,7 @@ export class FillRepeatGapChangeCommand extends Command {
console.warn("没有旧间隙可恢复");
return false;
}
await this.execute(true);
await this.execute(true, true);
return true;
}

View File

@@ -147,11 +147,11 @@ export class LassoCutoutCommand extends CompositeCommand {
}
// 确定源图层
const sourceLayer = this.layerManager.getActiveLayer();
if (!sourceLayer) {
console.error("无法执行套索抠图:源图层无效");
return false;
}
// const sourceLayer = this.layerManager.getActiveLayer();
// if (!sourceLayer) {
// console.error("无法执行套索抠图:源图层无效");
// return false;
// }
// 获取源图层的所有对象(包括子图层)
// const sourceObjects = this._getLayerObjects(sourceLayer);
@@ -225,7 +225,7 @@ export class LassoCutoutCommand extends CompositeCommand {
const layers = this.layerManager.layers.value;
var topLayerIndex = 0;
layers.forEach((layer, index) => {
if(this.originalLayer)layers.forEach((layer, index) => {
if (layer.id === this.originalLayer.id) {
topLayerIndex = index;
}else if (layer.children.length > 0) {

View File

@@ -280,8 +280,13 @@ export class PasteLayerCommand extends Command {
isCut: undefined,
serializedObjects: undefined,
};
if (this.insertIndex !== undefined && this.insertIndex !== null) {
if(this.newLayer.isPrintTrims){
this.layers.value.forEach((layer) => {
if (layer.isPrintTrimsGroup) {
layer.children.unshift(this.newLayer);
}
})
}else if (this.insertIndex !== undefined && this.insertIndex !== null) {
this.layers.value.splice(this.insertIndex, 0, this.newLayer);
} else {
this.layers.value.push(this.newLayer);
@@ -3684,7 +3689,7 @@ export class ChangeFixedImageCommand extends Command {
opacity: currentObj.opacity,
};
console.log(`保存渲染顺序: z-index = ${this.previousZIndex}`);
// console.log(`保存渲染顺序: z-index = ${this.previousZIndex}`);
}
}
@@ -3794,7 +3799,7 @@ export class ChangeFixedImageCommand extends Command {
false
);
if (insertSuccess) {
console.log(`新图像插入到z-index位置: ${this.previousZIndex}`);
// console.log(`新图像插入到z-index位置: ${this.previousZIndex}`);
} else {
// 如果插入失败,回退到普通添加
this.canvas.add(newImage);

View File

@@ -600,7 +600,7 @@ export class ChangeFixedImageCommand extends Command {
opacity: currentObj.opacity,
};
console.log(`保存渲染顺序: z-index = ${this.previousZIndex}`);
// console.log(`保存渲染顺序: z-index = ${this.previousZIndex}`);
}
}
@@ -716,7 +716,7 @@ export class ChangeFixedImageCommand extends Command {
false
);
if (insertSuccess) {
console.log(`新图像插入到z-index位置: ${this.previousZIndex}`);
// console.log(`新图像插入到z-index位置: ${this.previousZIndex}`);
} else {
// 如果插入失败,回退到普通添加
this.canvas.add(newImage);

View File

@@ -0,0 +1,56 @@
import { Command } from "./Command.js";
/**
* 部件绘制命令
*/
export class PartDrawCommand extends Command {
constructor(options) {
super({
name: "部件绘制命令",
saveState: false,
});
this.canvas = options.canvas;
this.partManager = options.partManager;
this.partCanvas = options.partCanvas;
this.oldPartCanvas = this.partManager.partCanvas;
}
execute() {
this.partManager.drawPartCanvas(this.partCanvas);
return true;
}
undo() {
this.partManager.drawPartCanvas(this.oldPartCanvas);
return true;
}
}
/**
* 部件点选绘制命令
*/
export class PartPointDrawCommand extends Command {
constructor(options) {
super({
name: "部件点选绘制命令",
saveState: false,
});
this.canvas = options.canvas;
this.partManager = options.partManager;
this.partCanvas = options.partCanvas;
this.pointList = options.pointList;
this.oldPartCanvas = this.partManager.partCanvas;
this.oldPointList = [...this.partManager.pointList];
}
async execute() {
const list = [...this.pointList];
const canvas = this.partCanvas;
const res = await this.partManager.pointDrawPartCanvas(list, canvas);
return res;
}
async undo() {
const list = [...this.oldPointList];
const canvas = this.oldPartCanvas;
const res = await this.partManager.pointDrawPartCanvas(list, canvas);
return res;
}
}

View File

@@ -285,17 +285,15 @@ export class RasterizeLayerCommand extends Command {
// 提取排序后的对象
this.objectsToRasterize = objectsWithZIndex.map((item) => item.object);
console.log(
`📊 收集到 ${this.layersToRasterize.length} 个图层,${this.objectsToRasterize.length} 个对象进行组合`
);
console.log(
"🔢 对象z-index顺序:",
objectsWithZIndex.map((item) => ({
id: item.object.id,
type: item.object.type,
zIndex: item.zIndex,
}))
);
// console.log(`📊 收集到 ${this.layersToRasterize.length} 个图层,${this.objectsToRasterize.length} 个对象进行组合` );
// console.log(
// "🔢 对象z-index顺序:",
// objectsWithZIndex.map((item) => ({
// id: item.object.id,
// type: item.object.type,
// zIndex: item.zIndex,
// }))
// );
}
/**
@@ -611,17 +609,17 @@ export class ExportLayerToImageCommand extends Command {
// 提取排序后的对象
this.objectsToRasterize = objectsWithZIndex.map((item) => item.object);
console.log(
`📊 收集到 ${this.layersToRasterize.length} 个图层,${this.objectsToRasterize.length} 个对象进行组合`
);
console.log(
"🔢 对象z-index顺序:",
objectsWithZIndex.map((item) => ({
id: item.object.id,
type: item.object.type,
zIndex: item.zIndex,
}))
);
// console.log(
// `📊 收集到 ${this.layersToRasterize.length} 个图层,${this.objectsToRasterize.length} 个对象进行组合`
// );
// console.log(
// "🔢 对象z-index顺序:",
// objectsWithZIndex.map((item) => ({
// id: item.object.id,
// type: item.object.type,
// zIndex: item.zIndex,
// }))
// );
}
/**

View File

@@ -159,6 +159,8 @@ export class BatchInitializeRedGreenModeCommand extends Command {
absolutePositioned: true,
opacity: 0.01, // 设置为几乎透明
id: generateId("redGreenImageMask_"),
rx: 15,
ry: 15,
});
// this.canvas.add(this.redGreenImageMask);
this.canvas.clipPath = this.redGreenImageMask;

View File

@@ -25,7 +25,7 @@ export class TransformCommand extends Command {
this.layerManager = options.layerManager;
this.layers = options.layers || null;
this.lastSelectLayerId = options.lastSelectLayerId || null; // 最后选择的图层ID
this.isCommand = options.isCommand == undefined ? true : options.isCommand
const targetObject =
findObjectById(this.canvas, this.objectId)?.object || null;
@@ -189,6 +189,11 @@ export class TransformCommand extends Command {
object.set(key, value);
});
if(this.isCommand && object.globalCompositeOperation_){
object.globalCompositeOperation = object.globalCompositeOperation_;
object.globalCompositeOperation_ = null;
}
// 确保对象更新
object.setCoords();
}

View File

@@ -154,6 +154,8 @@ const isVisible = computed(() => {
OperationType.ERASER,
OperationType.RED_BRUSH,
OperationType.GREEN_BRUSH,
OperationType.PART_BRUSH,
OperationType.PART_ERASER,
].includes(props.activeTool);
});

View File

@@ -11,6 +11,7 @@ const layerManager = inject("layerManager");
const isShowLayerPanel = inject("isShowLayerPanel", ref(false));
const props = defineProps({
title: String,
activeTool: String,
canvasWidth: Number,
canvasHeight: Number,
@@ -22,6 +23,7 @@ const props = defineProps({
default: true, // 是否显示图层面板
},
isBackgroundChangeable: Boolean,
isChangeCanvasSize: Boolean,
});
const emit = defineEmits([
@@ -273,7 +275,7 @@ onMounted(() => {
<template>
<div class="canvas-header">
<div class="canvas-header-wrapper">
<span class="canvas-title">{{ $t('Canvas.Canvas') }}</span>
<span class="canvas-title">{{ props.title || $t("Canvas.Canvas") }}</span>
<!-- 默认设置 -->
<!-- v-if="
!activeTool ||
@@ -284,6 +286,7 @@ onMounted(() => {
<div class="setting-group">
<span class="setting-label">{{ $t("Canvas.width") }}</span>
<a-input-number
:disabled="!isChangeCanvasSize"
:value="canvasWidth?.toFixed(2)"
class="setting-input"
:min="1"
@@ -300,6 +303,7 @@ onMounted(() => {
<div class="setting-group">
<span class="setting-label">{{ $t("Canvas.height") }}</span>
<a-input-number
:disabled="!isChangeCanvasSize"
:value="canvasHeight?.toFixed(2)"
class="setting-input"
:min="1"

View File

@@ -242,7 +242,7 @@ const canDeleteComputed = computed(() => {
return parentLayer?.children?.length > 1;
}
// 否则直接返回根图层的可删除状态
return props.layers.length > 3;
return true;
});
</script>

View File

@@ -414,14 +414,14 @@ function deleteSelectedLayers() {
}
// 检查删除后是否还有足够的普通图层
const remainingNormalLayers = layers.value.filter(
(layer) => !layer.isBackground && !layer.isFixed && !selectedLayerIds.value.includes(layer.id)
).length;
// const remainingNormalLayers = layers.value.filter(
// (layer) => !layer.isBackground && !layer.isFixed && !selectedLayerIds.value.includes(layer.id)
// ).length;
if (remainingNormalLayers < 1) {
console.warn("不能删除所有普通图层");
return;
}
// if (remainingNormalLayers < 1) {
// console.warn("不能删除所有普通图层");
// return;
// }
// 确认删除
if (selectedLayers.length > 1) {
@@ -584,15 +584,16 @@ function handleLayerClick(layer, event) {
// 如果不是多选模式,才可激活图层
// 1.如果是组,则设置组下的第一个子图层为活动图层
// 2.否则直接设置活动图层
if (isGroupLayerType(layer) && layer.children && layer.children.length > 0) {
if (isGroupLayerType(layer) && layer.children && layer.children.length > 0 && !layer.isPrintTrimsGroup) {
// 如果是组图层,设置第一个子图层为活动图层
layerManager?.setAllActiveGroupLayerCanvasObject?.(layer);
setActiveLayer(layer.children[0].id, { parentId: layer.id });
} else {
let id = layer.isPrintTrimsGroup ? layer.children?.[0]?.id || layer.id : layer.id;
// 选中画布中的图层对象
layerManager?.selectLayerObjects(layer.id);
layerManager?.selectLayerObjects(id);
// 否则直接设置当前图层为活动图层
setActiveLayer(layer.id);
setActiveLayer(id);
layerManager?.updateLayersObjectsInteractivity();
}
}
@@ -876,13 +877,15 @@ function toggleSelectedLayersVisibility() {
function canDeleteLayers() {
const selectedLayers = getSelectedLayers();
console.log(selectedLayers);
if (selectedLayers.length === 0) return false;
// 检查是否包含不能删除的图层
const undeletableLayers = selectedLayers.filter((layer) => layer.isBackground || layer.isFixed);
if (undeletableLayers.length > 0) return false;
return true
// 检查删除后是否还有足够的普通图层
const remainingNormalLayers = layers.value.filter(
(layer) => !layer.isBackground && !layer.isFixed && !selectedLayerIds.value.includes(layer.id)

View File

@@ -119,7 +119,7 @@ export default defineComponent({
})
const palletRef = ref(null)
watch(()=>palletData.color_,(newVal:any)=>{
if(!newVal?.rgba?.r)return
if(newVal?.rgba?.r == null)return
if(palletData.color?.gradient?.gradientShow){
palletData.color.gradient.gradientList[palletData.color.gradient.selectIndex].rgba = {
r:newVal.rgba.r,
@@ -143,7 +143,7 @@ export default defineComponent({
},{deep: true })
const setOperate = ()=>{
if(!palletData.color.rgba)return message.info(t('DesignDetailAlter.jsContent7'))
palletData.color.rgba = palletData.color?.rgba?.r?palletData.color.rgba:{r:0,g:0,b:0,a:1}
palletData.color.rgba = palletData.color?.rgba?.r != null?palletData.color.rgba:{r:0,g:0,b:0,a:1}
palletData.gradient.selectIndex = 0
palletData.gradient.gradientShow = true
if(!palletData.color.gradient){
@@ -257,7 +257,7 @@ export default defineComponent({
}
const openPallet = ()=>{
if(palletData.palletShow && props.selectColor?.rgba?.r){
if(palletData.palletShow && props.selectColor?.rgba?.r != null){
if(props.selectColor.gradient){
palletData.color_.rgba = props.selectColor.gradient.gradientList[0].rgba
}else{

View File

@@ -15,6 +15,20 @@
{{ t("Canvas.GarmentPartSelector") }}
</div>
<!-- 移除关闭按钮完全通过工具切换控制显示隐藏 -->
<div class="tip">
<div>
<img
src="/src/assets/images/canvas/shubiao-l.png"
/>
<span>{{ t("Canvas.LeftClickAdd") }}</span>
</div>
<div>
<img
src="/src/assets/images/canvas/shubiao-r.png"
/>
<span>{{ t("Canvas.RightClickRemove") }}</span>
</div>
</div>
</div>
<div class="tool-types">
@@ -23,9 +37,9 @@
:key="item.type"
:class="[
'tool-btn',
{ active: selectionType === item.type },
{ active: toolType === item.type },
]"
@click="setSelectionType(item.type)"
@click="setPartType(item.type)"
>
<svg-icon :name="item.icon" :size="item.size" />
<span>{{ item.label }}</span>
@@ -37,23 +51,21 @@
<!-- 底部选区操作工具栏 -->
<div class="tool-actions">
<div class="action-btn" @click="copySelectionToNewLayer">
<div class="action-btn" @click="onCreate">
<svg-icon name="CPaste" size="16" />
<span class="btn-text">{{
$t("Canvas.creation")
}}</span>
</div>
<div class="action-btn" @click="cutSelectionToNewLayer">
<!-- <div class="action-btn" @click="onCopyCreate">
<svg-icon name="CCut" size="26" />
<span class="btn-text">{{
$t("Canvas.CreateAndCopy")
}}</span>
</div>
<div class="action-btn" @click="clearSelectionContent">
<svg-icon name="CClear" size="18" />
<span class="btn-text">{{
$t("Canvas.TheClearlySelectedContent")
}}</span>
</div> -->
<div class="action-btn" @click="onReset">
<svg-icon name="CCut" size="26" />
<span class="btn-text">{{ $t("Canvas.TheClearlySelectedContent") }}</span>
</div>
</div>
</div>
@@ -64,23 +76,9 @@
<script setup>
import { ref, onMounted, watch } from "vue";
import { useI18n } from "vue-i18n";
import {
CreateSelectionCommand,
InvertSelectionCommand,
FeatherSelectionCommand,
FillSelectionCommand,
} from "../commands/SelectionCommands";
import { ToolCommand } from "../commands/ToolCommands";
import {
LassoCutoutCommand,
ClearSelectionCommand,
// CutSelectionToNewLayerCommand,
} from "../commands/LassoCutoutCommand";
import { OperationType } from "../utils/layerHelper";
import { ClearSelectionContentCommand } from "../commands/ClearSelectionContentCommand";
import { CutSelectionToNewLayerCommand } from "../commands/CutSelectionToNewLayerCommand";
// 国际化
const { t } = useI18n();
const props = defineProps({
canvas: {
type: Object,
@@ -90,7 +88,11 @@
type: Object,
required: true,
},
selectionManager: {
partManager: {
type: Object,
required: true,
},
partManager: {
type: Object,
required: true,
},
@@ -111,7 +113,7 @@
// 响应式数据
const visible = ref(false);
const selectionType = ref("rectangle");
const toolType = ref(OperationType.PART);
//打开隐藏操作面板
const closePanel = ref(false);
const setClosePanel = () => {
@@ -121,32 +123,30 @@
const toolList = [
{
type: OperationType.PART,
label: "Point Selection",
label: t("Canvas.PointSelection"),
icon: "CPoint",
size: "20",
},
{
type: OperationType.PART_RECTANGLE,
label: "Marquee Selection",
icon: "CRectangle",
size: "26",
label: t("Canvas.MarqueeSelection"),
icon: "CMarquee",
size: "20",
},
{
type: OperationType.PART_BRUSH,
label: "Brush Selection",
icon: "CBrush",
size: "24",
label: t("Canvas.BrushSelection"),
icon: "CBrush2",
size: "16",
},
{
type: OperationType.PART_ERASER,
label: "Erase",
icon: "CEraser",
size: "24",
label: t("Canvas.Erase"),
icon: "CEraser2",
size: "22",
},
];
// 国际化
const { t } = useI18n();
onMounted(() => {});
@@ -165,13 +165,7 @@
if (selectionTools.includes(newTool)) {
show();
// 根据工具类型设置选区类型
selectionType.value = newTool;
// 更新选区管理器的选区类型
if (props.selectionManager) {
props.selectionManager.setSelectionType(selectionType.value);
props.selectionManager.setupSelectionEvents();
}
toolType.value = newTool;
} else {
close();
}
@@ -197,20 +191,28 @@
/**
* 设置选区类型
*/
function setSelectionType(type) {
selectionType.value = type;
function setPartType(type) {
toolType.value = type;
// 通过 ToolManager 切换工具,这会自动通知 SelectionManager
// 通过 ToolManager 切换工具,这会自动通知 partManager
if (props.toolManager) {
props.toolManager.setToolWithCommand(type);
}
// 备用方案:如果没有 toolManager直接更新 selectionManager
else if (props.selectionManager) {
props.selectionManager.setSelectionType(type);
props.selectionManager.setupSelectionEvents();
}
}
// 创建
function onCreate() {
props.partManager.createPart();
}
// 复制并创建
function onCopyCreate() {
}
// 清空当前点位
function onReset() {
props.partManager.clearPart();
}
</script>
<style scoped lang="less">
@@ -286,6 +288,28 @@
// border-bottom: 1px solid rgba(0, 0, 0, 0.05);
background-color: rgba(255, 255, 255, 0.8);
border-radius: 8px 8px 0 0;
position: relative;
> .tip {
position: absolute;
top: 0;
right: 0;
display: flex;
> div {
display: flex;
align-items: center;
justify-content: center;
margin-left: 10px;
> img {
width: 12px;
height: 12px;
margin-right: 5px;
}
> span {
font-size: 10px;
color: #333;
}
}
}
}
.header-title {
@@ -366,33 +390,9 @@
.tool-actions {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-columns: repeat(2, 1fr);
gap: 5px;
padding: 0 10px;
}
/* 平板适配 - 每行4个按钮 */
@media screen and (max-width: 768px) {
.tool-actions {
grid-template-columns: repeat(3, 1fr);
gap: 8px 6px;
padding: 0 8px;
}
}
/* 手机适配 - 每行3个按钮 */
@media screen and (max-width: 480px) {
.tool-actions {
grid-template-columns: repeat(3, 1fr);
gap: 6px 4px;
padding: 0 6px;
}
.header-btn {
font-size: 11px;
padding: 2px 4px;
min-width: 28px;
}
padding: 0 30px;
}
.action-btn {
@@ -432,5 +432,4 @@
opacity: 0.5;
cursor: not-allowed;
}
</style>

View File

@@ -14,7 +14,7 @@
<span class="label">{{ t("Canvas.scale") }}</span>
<slider
:min="1"
:max="500"
:max="1000"
:step="1"
is-input
:tipFormatter="(v) => `${scale}%`"
@@ -32,8 +32,8 @@
is-input
:tipFormatter="(v) => `${v}px`"
:value="gapX"
@input="(e) => emit('inputFill_Gap', e, gapY)"
@change="(e) => emit('changeFill_Gap', e, gapY)"
@input="(e) => emit('inputFillGap', e, gapY)"
@change="(e) => emit('changeFillGap', e, gapY)"
/>
</div>
<div class="repeat-setting-item">
@@ -45,26 +45,26 @@
is-input
:tipFormatter="(v) => `${v}px`"
:value="gapY"
@input="(e) => emit('inputFill_Gap', gapX, e)"
@change="(e) => emit('changeFill_Gap', gapX, e)"
@input="(e) => emit('inputFillGap', gapX, e)"
@change="(e) => emit('changeFillGap', gapX, e)"
/>
</div>
<div class="repeat-setting-item">
<span class="label">{{ t("Canvas.offset") }}</span>
<offset-tool
:left="offsetX"
:top="offsetY"
@input="(e) => emit('inputFillOffset', e)"
@change="(e) => emit('changeFillOffset', e)"
:left="offset.x"
:top="offset.y"
@input="inputFillOffset"
@change="changeFillOffset"
:show-dish="false"
/>
</div>
<div class="repeat-setting-item offset">
<offset-tool
:left="offsetX"
:top="offsetY"
@input="(e) => emit('inputFillOffset', e)"
@change="(e) => emit('changeFillOffset', e)"
:left="offset.x"
:top="offset.y"
@input="inputFillOffset"
@change="changeFillOffset"
:show-input="false"
/>
</div>
@@ -79,6 +79,16 @@
import Slider from "../tools/Slider.vue";
import { useI18n } from "vue-i18n";
const { t } = useI18n();
const emit = defineEmits([
"inputFillAngle",
"changeFillAngle",
"inputFillOffset",
"changeFillOffset",
"inputFillScale",
"changeFillScale",
"inputFillGap",
"changeFillGap",
]);
const props = defineProps({
object: {
@@ -89,36 +99,53 @@
const angle = computed(
() => getTransformScaleAngle(props.object.fill?.patternTransform).angle
);
const scale = computed(() => {
const patternTransform = props.object.fill?.patternTransform;
const scaleValue = getTransformScaleAngle(patternTransform).scale * 100;
return Number(Number(scaleValue).toFixed(2));
});
const gapX = computed(() => props.object.fill_?.gapX || 0);
const gapY = computed(() => props.object.fill_?.gapY || 0);
const offsetX = computed(
() => (props.object.fill?.offsetX / props.object.width) * 100
);
const offsetY = computed(
() => (props.object.fill?.offsetY / props.object.height) * 100
);
const emit = defineEmits([
"inputFillAngle",
"changeFillAngle",
"inputFillOffset",
"changeFillOffset",
"inputFillScale",
"changeFillScale",
"inputFill_Gap",
"changeFill_Gap",
]);
const inputFillScale = (e) => {
// 缩放比例
const scale = computed(() => {
const object = props.object;
const patternTransform = object.fill?.patternTransform;
const scaleValue = getTransformScaleAngle(patternTransform).scale;
const scaleX = scaleValue / (object.width / object.fill_.width / 5);
const scaleY = scaleValue / (object.height / object.fill_.height / 5);
const scaleXY = object.width > object.height ? scaleX : scaleY;
return Number(Number(scaleXY * 100).toFixed(2));
});
const inputFillScale = (e) => setFillScale(e, true);
const changeFillScale = (e) => setFillScale(e, false);
const setFillScale = (e, isInput) => {
const object = props.object;
const scale = e / 100;
emit("inputFillScale", scale);
const scaleX = (object.width / object.fill_.width / 5) * scale;
const scaleY = (object.height / object.fill_.height / 5) * scale;
const scaleXY = object.width > object.height ? scaleX : scaleY;
emit(isInput ? "inputFillScale" : "changeFillScale", scaleXY);
};
const changeFillScale = (e) => {
const scale = e / 100;
emit("changeFillScale", scale);
// 偏移量
const offset = computed(() => {
const object = props.object;
const patternTransform = object.fill?.patternTransform;
const scale = getTransformScaleAngle(patternTransform).scale;
const offsetX = object.fill?.offsetX;
const offsetY = object.fill?.offsetY;
const twidth = object.fill_?.width;
const theight = object.fill_?.height;
const x = ((offsetX + (twidth * scale) / 2) * 100) / object.width;
const y = ((offsetY + (theight * scale) / 2) * 100) / object.height;
return { x, y };
});
const inputFillOffset = (e) => setFillOffset(e, true);
const changeFillOffset = (e) => setFillOffset(e, false);
const setFillOffset = (e, isInput) => {
const { left, top } = e;
const object = props.object;
const patternTransform = object.fill?.patternTransform;
const scale = getTransformScaleAngle(patternTransform).scale;
const x = (left / 100) * object.width - (object.fill_?.width * scale) / 2;
const y = (top / 100) * object.height - (object.fill_?.height * scale) / 2;
emit(isInput ? "inputFillOffset" : "changeFillOffset", { x, y });
};
</script>
@@ -126,6 +153,7 @@
.repeat-setting {
user-select: none;
width: 228px;
overflow: hidden;
> .title {
line-height: 35px;
font-size: 14px;

View File

@@ -22,7 +22,7 @@
v-for="v in activeObjects"
:key="v.id"
>
<div class="title">{{ v.layer?.name }}</div>
<!-- <div class="title">{{ v.layer?.name }}</div> -->
<div class="list">
<div
class="input"
@@ -125,6 +125,10 @@
"
:options="selectOptions"
@change="(e) => changeFillRepeat(e, v)"
:disabled="
v.layer?.metadata?.sourceData?.type ===
'trims'
"
/>
</div>
<!-- 平铺设置 -->
@@ -154,11 +158,11 @@
@changeFillScale="
(e) => changeFillScale(e, v)
"
@inputFill_Gap="
(x, y) => inputFill_Gap(x, y, v)
@inputFillGap="
(x, y) => inputFillGap(x, y, v)
"
@changeFill_Gap="
(x, y) => changeFill_Gap(x, y, v)
@changeFillGap="
(x, y) => changeFillGap(x, y, v)
"
/>
</template>
@@ -282,10 +286,10 @@
activeObjects.value.forEach((v) => {
v.layer = props.layerManager.getLayerById(v.layerId);
});
if (activeObjects.value.length === 0) {
close();
} else {
if (activeObjects.value.length === 1) {
show();
} else {
close();
}
};
//取消当前选中
@@ -311,6 +315,7 @@
layerManager: props.layerManager,
layers: layers,
lastSelectLayerId: lastSelectLayerId,
isCommand,
});
if (isCommand) {
props.commandManager.execute(cmd);
@@ -332,6 +337,7 @@
const finalState = computeAngleState(angle, obj, initialState);
transformObject(obj, initialState, finalState, false);
if (!obj.hasOwnProperty("oldState")) obj.oldState = initialState;
props.canvasManager.beforeChangeCanvas([obj]);
};
const changeAngle = (angle, obj) => {
var initialState;
@@ -424,6 +430,7 @@
});
obj.set("fill", pattern);
props.canvas.renderAll();
props.canvasManager.beforeChangeCanvas([obj]);
};
const changeFillAngle = (angle, obj) => {
const fill = obj.get("fill");
@@ -433,21 +440,22 @@
};
changeFill(obj, pattern);
};
// 改变填充便宜
// 改变填充偏移
const inputFillOffset = (value, obj) => {
if (!obj.oldPattern) obj.oldPattern = obj.get("fill");
const pattern = new fabric.Pattern({
...obj.get("fill"),
offsetX: (value.left / 100) * obj.width,
offsetY: (value.top / 100) * obj.height,
offsetX: value.x,
offsetY: value.y,
});
obj.set("fill", pattern);
props.canvas.renderAll();
props.canvasManager.beforeChangeCanvas([obj]);
};
const changeFillOffset = (value, obj) => {
const pattern = new fabric.Pattern({
offsetX: (value.left / 100) * obj.width,
offsetY: (value.top / 100) * obj.height,
offsetX: value.x,
offsetY: value.y,
});
changeFill(obj, pattern);
};
@@ -462,6 +470,7 @@
});
obj.set("fill", pattern);
props.canvas.renderAll();
props.canvasManager.beforeChangeCanvas([obj]);
};
const changeFillScale = (scale, obj) => {
const fill = obj.get("fill");
@@ -483,7 +492,7 @@
props.commandManager.execute(cmd);
};
// 改变填充间隙
const inputFill_Gap = (gapX, gapY, obj) => {
const inputFillGap = (gapX, gapY, obj) => {
const cmd = new FillRepeatGapChangeCommand({
canvas: props.canvas,
layers: layers,
@@ -494,9 +503,10 @@
newGapY: gapY,
record: true,
});
cmd.execute();
cmd.execute(false);
props.canvasManager.beforeChangeCanvas([obj]);
};
const changeFill_Gap = (gapX, gapY, obj) => {
const changeFillGap = (gapX, gapY, obj) => {
if (obj.oldFill_) {
obj.fill_ = { ...obj.oldFill_ };
delete obj.oldFill_;
@@ -760,7 +770,7 @@
}
.tool-content {
overflow-y: auto;
// overflow-y: auto;
max-height: 20rem;
margin-top: 1rem;
padding: 0 1.5rem;

View File

@@ -29,8 +29,11 @@ const props = defineProps({
type: Boolean,
default: false,
},
clothingMinIOPath: {
type: String,
default: "", // 衣服底图URL-线稿
},
});
const commandManager = inject("commandManager");
const layerManager = inject("layerManager"); // 图层管理器
@@ -52,6 +55,7 @@ commandManager.setChangeCallback((info) => {
emit("undo-redo-status-changed", {
canUndo: canUndo.value,
canRedo: canRedo.value,
type: info.type,
commandManager,
});
});
@@ -166,19 +170,19 @@ const normalToolsList = ref([
icon: { name: "CFont", size: "20" },
class: "text-btn",
},
// {
// id: OperationType.PART,
// title: t("Canvas.GarmentPartSelector"),
// action: () => selectTool(OperationType.PART),
// icon: { name: "CPart", size: "28" },
// class: "part-btn",
// activeList: [
// OperationType.PART,
// OperationType.PART_RECTANGLE,
// OperationType.PART_BRUSH,
// OperationType.PART_ERASER,
// ],
// },
{
id: OperationType.PART,
title: t("Canvas.GarmentPartSelector"),
action: () => selectTool(OperationType.PART),
icon: { name: "CPart", size: "28" },
class: "part-btn",
activeList: [
OperationType.PART,
OperationType.PART_RECTANGLE,
OperationType.PART_BRUSH,
OperationType.PART_ERASER,
],
},
{
id: "help",
title: t("Canvas.help"),
@@ -249,7 +253,13 @@ const redGreenToolsList = ref([
// 根据模式选择工具列表
const toolsList = computed(() => {
return props.isRedGreenMode ? redGreenToolsList.value : normalToolsList.value;
const list = props.isRedGreenMode ? redGreenToolsList.value : normalToolsList.value;
return list.filter(tool => {
if(tool.id === OperationType.PART){
return !!props.clothingMinIOPath;
}
return true;
});
});
function selectTool(tool, isRedGreenMode = false) {

File diff suppressed because it is too large Load Diff

View File

@@ -409,7 +409,7 @@ export class BrushIndicator {
// this.show(e.e);
this._mouseEnterHandler && this._mouseEnterHandler(e)
} else {
// requestIdleCallback(() => {
// setTimeout(() => {
// this.updatePosition(e.e);
// });

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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