230 Commits
13.2 ... 1.4.1

Author SHA1 Message Date
TinyAnts
bacda99c59 Merge branch 'release/1.4.1' 2023-01-18 17:13:38 +08:00
TinyAnts
8718c22cee 处理代码生成器缺少Date依赖 2023-01-18 16:53:31 +08:00
TinyAnts
c10464d873 后台-文章管理:初始浏览量填写负数时报错 2023-01-18 16:31:59 +08:00
Jason
f6589a8e33 打包 2023-01-18 11:31:55 +08:00
Jason
9223b88a72 新增验证码登录功能 2023-01-18 11:30:13 +08:00
TinyAnts
6cdc2b82e1 增加登录验证码状态 2023-01-17 18:11:53 +08:00
TinyAnts
84cded01f2 增加验证码功能 2023-01-17 18:02:55 +08:00
Jason
f2038fa7af 调整网站链接校验 2023-01-17 17:17:21 +08:00
Jason
ecd5abbd05 打包 2023-01-17 16:22:45 +08:00
Jason
8481c63ef2 添加登录日志 2023-01-17 16:21:15 +08:00
Jason
20b7c760fd 修复tabbar的问题 2023-01-17 15:56:12 +08:00
Jason
9595769d46 修复h5下登录问题 2023-01-17 15:46:07 +08:00
Jason
9e5bd06e37 修复后台菜单管理,按钮类型显示新增按钮的问题 2023-01-17 15:45:41 +08:00
TinyAnts
f51fab1deb 修复登录日志Date类型缺失 2023-01-17 11:23:36 +08:00
TinyAnts
70fb9d4b9b 修改定时任务关键词 2023-01-17 11:09:52 +08:00
TinyAnts
a8559f0d70 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2023-01-16 09:24:18 +08:00
TinyAnts
b2bfaca816 Merge tag '1.4.0' into develop 2023-01-11 10:42:17 +08:00
TinyAnts
f2bbfffe10 Merge branch 'release/1.4.0' 2023-01-11 10:42:16 +08:00
TinyAnts
803a50cf3c Merge branch 'master' into develop 2023-01-11 10:35:33 +08:00
TinyAnts
c46903a210 Merge branch 'hotfix/article' 2023-01-11 10:35:33 +08:00
TinyAnts
2f161aa3fe 修复获取全部文章问题 2023-01-11 10:35:16 +08:00
TinyAnts
22e7aa77cd Merge branch 'master' into develop 2023-01-11 10:20:26 +08:00
TinyAnts
18360d43e5 Merge branch 'hotfix/scanLogin' 2023-01-11 10:20:25 +08:00
TinyAnts
b360bb7485 修改PC端扫码登录的问题 2023-01-11 10:19:40 +08:00
TinyAnts
ded1cabf1e Merge tag '1.4.0' into develop 2023-01-10 18:29:19 +08:00
TinyAnts
f4b6179336 Merge branch 'release/1.4.0' 2023-01-10 18:29:17 +08:00
Jason
35b485c0a7 打包 2023-01-10 18:19:31 +08:00
Jason
f39417f9b9 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2023-01-10 18:08:05 +08:00
Jason
313121b2ab 调整uniapph5基础路径 2023-01-10 18:05:16 +08:00
TinyAnts
a6ad0a2feb Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2023-01-10 18:00:33 +08:00
Jason
e20fe09db4 调整提示 2023-01-10 17:55:48 +08:00
Jason
bf31eff2e0 代码生成器添加提示 2023-01-10 17:55:21 +08:00
TinyAnts
8b450e991f Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2023-01-10 17:31:12 +08:00
TinyAnts
86c8697a0f 修复代码生成器获取别名出错 2023-01-10 17:30:49 +08:00
Jason
16fbaa8b4e Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2023-01-10 17:12:19 +08:00
Jason
0f08a3ec04 indexhtml添加移动端pc端判断 2023-01-10 17:12:01 +08:00
TinyAnts
54fd266103 调整sql文件 2023-01-10 17:11:24 +08:00
Jason
b4dadbee38 pc打包 2023-01-10 16:01:19 +08:00
Jason
45645668ef 后台打包 2023-01-10 15:58:46 +08:00
Jason
79a3959a17 pc端调整 2023-01-10 15:57:36 +08:00
TinyAnts
678c5a5fb6 优化代码 2023-01-10 15:14:51 +08:00
Jason
b081a2b3e5 新增组件示例 2023-01-10 11:09:05 +08:00
TinyAnts
21866eb315 调整PC端底部版权获取信息问题 2023-01-10 10:26:26 +08:00
TinyAnts
5880ea48af Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2023-01-10 09:54:06 +08:00
TinyAnts
ae398bf417 修改文章列表的搜索参数 2023-01-10 09:54:00 +08:00
Jason
96ce0b284c Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2023-01-09 19:02:32 +08:00
Jason
5d056280b0 pc端 2023-01-09 19:02:20 +08:00
TinyAnts
712538213b 修复部分文章数据获取不到分类的问题 2023-01-09 19:00:22 +08:00
TinyAnts
97518d66d3 增加PC资讯中心接口 2023-01-09 18:53:40 +08:00
TinyAnts
570198d9bc 修复开放平台编辑参数不一致bug 2023-01-09 18:15:12 +08:00
TinyAnts
f48116e8d1 增加PC端文章详情接口 2023-01-09 18:11:28 +08:00
TinyAnts
d6bd188203 处理PC端的装修数据问题 2023-01-09 16:00:22 +08:00
Jason
144fe94ecb 后台pc相关设置 2023-01-09 15:33:09 +08:00
Jason
667b92265f Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2023-01-09 10:13:12 +08:00
Jason
964e9c5bd7 调整代码生成器 2023-01-09 10:12:49 +08:00
TinyAnts
0daebef757 修复代码生成器字段缺失问题 2023-01-09 10:08:47 +08:00
TinyAnts
691786b478 修复代码生成器字段缺失 2023-01-09 10:07:11 +08:00
TinyAnts
93aafd2dbe init 2023-01-06 23:41:15 +08:00
TinyAnts
8f936f2df4 init 2023-01-06 23:40:16 +08:00
TinyAnts
27bcde0da0 调整安装sql 2023-01-06 17:51:02 +08:00
TinyAnts
1f193e7850 代码生成器构建菜单权限 2023-01-06 17:47:21 +08:00
TinyAnts
55ee7d8a47 代码生成器构建菜单的参数处理 2023-01-06 16:50:01 +08:00
TinyAnts
c45df35bd9 调整sql安装文件 2023-01-06 16:17:42 +08:00
TinyAnts
853e64fee5 增加扫码登录功能 2023-01-06 16:13:46 +08:00
TinyAnts
f2450bc615 优化代码 2023-01-03 19:00:27 +08:00
TinyAnts
ed6b24c677 处理代码生成器关联查询 2022-12-30 12:10:07 +08:00
Jason
7a71bcf238 Merge tag 'wjx202212301141' into develop
no message
2022-12-30 11:42:09 +08:00
Jason
22bebdf804 Merge branch 'hotfix/wjx202212301141' 2022-12-30 11:42:08 +08:00
Jason
6f8e8442c0 重新打包 2022-12-30 11:41:58 +08:00
Jason
b693e829f9 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-12-30 11:40:23 +08:00
Jason
8d37e36395 代码生成器调整 2022-12-30 11:40:08 +08:00
lr
7419ceb502 Merge branch 'hotfix/uploads' 2022-12-30 11:20:01 +08:00
lr
f6491d1ba0 Merge tag 'uploads' into develop
no message
2022-12-30 11:20:01 +08:00
lr
84c4b305d1 增加uploads目录 2022-12-30 11:18:55 +08:00
TinyAnts
5f3260c586 增加根据表名获取字段 2022-12-30 11:11:36 +08:00
TinyAnts
c5781cd796 处理代码生成器关联查询 2022-12-30 10:35:58 +08:00
TinyAnts
9d4964af1b Merge tag '1.3.6' into develop 2022-12-30 10:02:14 +08:00
TinyAnts
56de8a32f1 Merge branch 'release/1.3.6' 2022-12-30 10:02:13 +08:00
TinyAnts
dbdeed946e 调整SQL文件 2022-12-30 09:53:07 +08:00
Jason
42892bcb8b Merge tag 'wjx202212300933' into develop
no message

# Conflicts:
#	frontend/assets/403.f0c419d0.js
#	frontend/assets/404.a1c8cef0.js
#	frontend/assets/add-nav.78e0236c.js
#	frontend/assets/add-nav.vue_vue_type_script_setup_true_lang.856419ed.js
#	frontend/assets/article.74bca9b5.js
#	frontend/assets/attr-setting.vue_vue_type_script_setup_true_lang.3f964a14.js
#	frontend/assets/attr.049f48d5.js
#	frontend/assets/attr.0b7b7c99.js
#	frontend/assets/attr.303c1d3b.js
#	frontend/assets/attr.80ca5719.js
#	frontend/assets/attr.a9a313fb.js
#	frontend/assets/attr.vue_vue_type_script_setup_true_lang.6d0a5dbb.js
#	frontend/assets/attr.vue_vue_type_script_setup_true_lang.8e9dd23e.js
#	frontend/assets/attr.vue_vue_type_script_setup_true_lang.9aec2f99.js
#	frontend/assets/attr.vue_vue_type_script_setup_true_lang.ab98fda4.js
#	frontend/assets/attr.vue_vue_type_script_setup_true_lang.b7d84074.js
#	frontend/assets/auth.f2a07a12.js
#	frontend/assets/auth.vue_vue_type_script_setup_true_lang.7ef0ba85.js
#	frontend/assets/cache.4c254d80.js
#	frontend/assets/code-preview.326ed395.js
#	frontend/assets/code-preview.vue_vue_type_script_setup_true_lang.136e5f05.js
#	frontend/assets/code.e8685cc5.js
#	frontend/assets/config.a5e3522c.js
#	frontend/assets/consumer.7aec82d3.js
#	frontend/assets/content.3563b530.js
#	frontend/assets/content.3f7be8fd.js
#	frontend/assets/content.54b8d1d4.js
#	frontend/assets/content.6bac01bd.js
#	frontend/assets/content.a0ce4144.js
#	frontend/assets/content.b9dac3a5.js
#	frontend/assets/content.d207a2aa.js
#	frontend/assets/content.ddf02ef6.js
#	frontend/assets/content.vue_vue_type_script_setup_true_lang.3bb51b7a.js
#	frontend/assets/content.vue_vue_type_script_setup_true_lang.afe6098d.js
#	frontend/assets/content.vue_vue_type_script_setup_true_lang.b304c701.js
#	frontend/assets/data-table.17275e70.js
#	frontend/assets/data-table.vue_vue_type_script_setup_true_lang.4be18121.js
#	frontend/assets/decoration-img.480c1d38.js
#	frontend/assets/decoration.c4bfe19f.js
#	frontend/assets/default_reply.30cc1448.js
#	frontend/assets/department.05a11643.js
#	frontend/assets/detail.0f743553.js
#	frontend/assets/dict.ce868610.js
#	frontend/assets/edit.2dbf5ac2.js
#	frontend/assets/edit.2e9c7282.js
#	frontend/assets/edit.4baeb334.js
#	frontend/assets/edit.6d9ae951.js
#	frontend/assets/edit.95929423.js
#	frontend/assets/edit.96767b58.js
#	frontend/assets/edit.9ccb2ea8.js
#	frontend/assets/edit.9ed6b70f.js
#	frontend/assets/edit.aeab9105.js
#	frontend/assets/edit.b84537ff.js
#	frontend/assets/edit.c7f85044.js
#	frontend/assets/edit.d2275167.js
#	frontend/assets/edit.d460b056.js
#	frontend/assets/edit.fcd83473.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.0af81f90.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.113cbdf9.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.2b98166e.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.4905cd93.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.4f65e8a1.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.59ff2825.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.74776acb.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.7ea5a852.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.8b4e0ec3.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.f8f78045.js
#	frontend/assets/edit.vue_vue_type_script_setup_true_lang.f8f974df.js
#	frontend/assets/environment.da0e74f3.js
#	frontend/assets/error.8fb57bb2.js
#	frontend/assets/filing.9c47550a.js
#	frontend/assets/follow_reply.107a5ac7.js
#	frontend/assets/h5.fea75e1a.js
#	frontend/assets/index.16ada191.js
#	frontend/assets/index.1771e9d1.js
#	frontend/assets/index.1fb47746.js
#	frontend/assets/index.5eb7e5c4.js
#	frontend/assets/index.6c6f898a.js
#	frontend/assets/index.75023305.js
#	frontend/assets/index.77862a69.js
#	frontend/assets/index.79dd911d.js
#	frontend/assets/index.848577dc.js
#	frontend/assets/index.84d368ba.js
#	frontend/assets/index.8982a748.js
#	frontend/assets/index.92011b5f.js
#	frontend/assets/index.9a6fb272.js
#	frontend/assets/index.a5822411.js
#	frontend/assets/index.aa44aaf7.js
#	frontend/assets/index.b7bb2d87.js
#	frontend/assets/index.bd5146fc.js
#	frontend/assets/index.beff7283.js
#	frontend/assets/index.c7812cea.js
#	frontend/assets/index.dc901e48.js
#	frontend/assets/index.ef519870.js
#	frontend/assets/index.f11ab1e9.js
#	frontend/assets/index.f66054e9.js
#	frontend/assets/index.f667cbcd.js
#	frontend/assets/index.fe3d9dae.js
#	frontend/assets/index.vue_vue_type_style_index_0_lang.c87a51a3.js
#	frontend/assets/information.28b9a11e.js
#	frontend/assets/journal.af99cc6e.js
#	frontend/assets/keyword_reply.1fe852e8.js
#	frontend/assets/login.f0fef830.js
#	frontend/assets/login_register.c80d9ed9.js
#	frontend/assets/menu.09d42840.js
#	frontend/assets/menu.0ae9ccbc.js
#	frontend/assets/menu.eae2d8fc.js
#	frontend/assets/message.1e9ad99e.js
#	frontend/assets/oa-attr.7c3cd5f4.js
#	frontend/assets/oa-menu-form-edit.d931b7f0.js
#	frontend/assets/oa-menu-form-edit.vue_vue_type_script_setup_true_lang.2af5db4a.js
#	frontend/assets/oa-menu-form.fff01e76.js
#	frontend/assets/oa-menu-form.vue_vue_type_script_setup_true_lang.f8a3c660.js
#	frontend/assets/oa-phone.85104509.js
#	frontend/assets/picker.6266f853.js
#	frontend/assets/picker.bb543009.js
#	frontend/assets/post.01f561c3.js
#	frontend/assets/preview.7ce5d1df.js
#	frontend/assets/protocol.64ac74bd.js
#	frontend/assets/role.eef9faf9.js
#	frontend/assets/setting.be7e8445.js
#	frontend/assets/setup.d2d0d2bc.js
#	frontend/assets/system.fd9f3942.js
#	frontend/assets/tabbar.777ec1ab.js
#	frontend/assets/useDictOptions.15dee2f9.js
#	frontend/assets/useMenuOa.192cb686.js
#	frontend/assets/user.4c0b4415.js
#	frontend/assets/weapp.1dfe0168.js
#	frontend/assets/website.0825f59c.js
#	frontend/assets/wx_dev.01a9b978.js
#	frontend/assets/wx_oa.1210c1af.js
#	frontend/index.html
#	public/admin/assets/403.be75ce33.js
#	public/admin/assets/403.c7652e24.js
#	public/admin/assets/404.dc53075e.js
#	public/admin/assets/404.ff366785.js
#	public/admin/assets/add-nav.71c25bc4.js
#	public/admin/assets/add-nav.8ff08431.js
#	public/admin/assets/add-nav.vue_vue_type_script_setup_true_lang.215ec6d4.js
#	public/admin/assets/add-nav.vue_vue_type_script_setup_true_lang.8851ce0d.js
#	public/admin/assets/article.38714de2.js
#	public/admin/assets/article.51338dfb.js
#	public/admin/assets/attr-setting.b26b2685.js
#	public/admin/assets/attr-setting.vue_vue_type_script_setup_true_lang.84e61532.js
#	public/admin/assets/attr-setting.vue_vue_type_script_setup_true_lang.c0a78b81.js
#	public/admin/assets/attr.0bf07d6c.js
#	public/admin/assets/attr.1105345f.js
#	public/admin/assets/attr.1a24a3b1.js
#	public/admin/assets/attr.39b6c6f4.js
#	public/admin/assets/attr.65290945.js
#	public/admin/assets/attr.6c55da6b.js
#	public/admin/assets/attr.805fa21f.js
#	public/admin/assets/attr.98b102e5.js
#	public/admin/assets/attr.ac5be732.js
#	public/admin/assets/attr.bc1c3a6a.js
#	public/admin/assets/attr.vue_vue_type_script_setup_true_lang.1024ff07.js
#	public/admin/assets/attr.vue_vue_type_script_setup_true_lang.2e693200.js
#	public/admin/assets/attr.vue_vue_type_script_setup_true_lang.610eeb03.js
#	public/admin/assets/attr.vue_vue_type_script_setup_true_lang.68317d75.js
#	public/admin/assets/attr.vue_vue_type_script_setup_true_lang.7c96b670.js
#	public/admin/assets/attr.vue_vue_type_script_setup_true_lang.9aa3d580.js
#	public/admin/assets/attr.vue_vue_type_script_setup_true_lang.9d5db47c.js
#	public/admin/assets/attr.vue_vue_type_script_setup_true_lang.a51cc6d0.js
#	public/admin/assets/attr.vue_vue_type_script_setup_true_lang.c2c86fa3.js
#	public/admin/assets/attr.vue_vue_type_script_setup_true_lang.dc504eeb.js
#	public/admin/assets/auth.58436929.js
#	public/admin/assets/auth.72ce47e2.js
#	public/admin/assets/auth.vue_vue_type_script_setup_true_lang.9144d151.js
#	public/admin/assets/auth.vue_vue_type_script_setup_true_lang.f2e0efdb.js
#	public/admin/assets/cache.1411bd71.js
#	public/admin/assets/cache.eaaa3b01.js
#	public/admin/assets/code-preview.b3fbdb96.js
#	public/admin/assets/code-preview.cbbe484e.js
#	public/admin/assets/code-preview.vue_vue_type_script_setup_true_lang.417cad3e.js
#	public/admin/assets/code-preview.vue_vue_type_script_setup_true_lang.dece62bb.js
#	public/admin/assets/code.1b609fc8.js
#	public/admin/assets/code.70be45c9.js
#	public/admin/assets/config.67eec5e0.js
#	public/admin/assets/config.72957399.js
#	public/admin/assets/consumer.ac2027e1.js
#	public/admin/assets/consumer.d53e90aa.js
#	public/admin/assets/content.0331f6f6.js
#	public/admin/assets/content.06cd617c.js
#	public/admin/assets/content.0abc6fd8.js
#	public/admin/assets/content.3eb29ea6.js
#	public/admin/assets/content.4392d29d.js
#	public/admin/assets/content.4b82873f.js
#	public/admin/assets/content.4f3df2a4.js
#	public/admin/assets/content.6d4b870e.js
#	public/admin/assets/content.7be5491b.js
#	public/admin/assets/content.7dbaf50d.js
#	public/admin/assets/content.8770db05.js
#	public/admin/assets/content.c073f4f9.js
#	public/admin/assets/content.c942e0cc.js
#	public/admin/assets/content.d57a1119.js
#	public/admin/assets/content.ea750dee.js
#	public/admin/assets/content.f103064c.js
#	public/admin/assets/content.vue_vue_type_script_setup_true_lang.217e9a8e.js
#	public/admin/assets/content.vue_vue_type_script_setup_true_lang.35dd01b2.js
#	public/admin/assets/content.vue_vue_type_script_setup_true_lang.64d77af9.js
#	public/admin/assets/content.vue_vue_type_script_setup_true_lang.96010cac.js
#	public/admin/assets/content.vue_vue_type_script_setup_true_lang.a2c85d60.js
#	public/admin/assets/content.vue_vue_type_script_setup_true_lang.e873fa0c.js
#	public/admin/assets/data-table.07e93a3a.js
#	public/admin/assets/data-table.fb9b752a.js
#	public/admin/assets/data-table.vue_vue_type_script_setup_true_lang.7f9e9084.js
#	public/admin/assets/data-table.vue_vue_type_script_setup_true_lang.f66dc883.js
#	public/admin/assets/decoration-img.4dec7bca.js
#	public/admin/assets/decoration-img.9d7f6da2.js
#	public/admin/assets/decoration.7912193e.js
#	public/admin/assets/decoration.815a1b2b.js
#	public/admin/assets/default_reply.6fdb7d94.js
#	public/admin/assets/default_reply.cf5a89f4.js
#	public/admin/assets/department.48a04152.js
#	public/admin/assets/department.86e3365f.js
#	public/admin/assets/detail.de7ed10a.js
#	public/admin/assets/detail.e67949b0.js
#	public/admin/assets/dict.68f4cb01.js
#	public/admin/assets/dict.7598c3e1.js
#	public/admin/assets/edit.04acf599.js
#	public/admin/assets/edit.1058ab87.js
#	public/admin/assets/edit.19542373.js
#	public/admin/assets/edit.195b6c37.js
#	public/admin/assets/edit.1efad864.js
#	public/admin/assets/edit.2353d155.js
#	public/admin/assets/edit.2c45ecc3.js
#	public/admin/assets/edit.32c4d425.js
#	public/admin/assets/edit.363d1c9c.js
#	public/admin/assets/edit.4a9641ad.js
#	public/admin/assets/edit.4b2283de.js
#	public/admin/assets/edit.4cadd5f2.js
#	public/admin/assets/edit.559ac486.js
#	public/admin/assets/edit.5da54424.js
#	public/admin/assets/edit.66fa646d.js
#	public/admin/assets/edit.68731657.js
#	public/admin/assets/edit.6b367aca.js
#	public/admin/assets/edit.743f4c0c.js
#	public/admin/assets/edit.872eb840.js
#	public/admin/assets/edit.886d9084.js
#	public/admin/assets/edit.8d7da4aa.js
#	public/admin/assets/edit.9a168e9e.js
#	public/admin/assets/edit.b78cf684.js
#	public/admin/assets/edit.c581b19c.js
#	public/admin/assets/edit.c5a5e1ec.js
#	public/admin/assets/edit.dec130d9.js
#	public/admin/assets/edit.e30c9927.js
#	public/admin/assets/edit.e44bdfb6.js
#	public/admin/assets/edit.ee60daaf.js
#	public/admin/assets/edit.f67b0c7d.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.1e2b9cbb.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.2026007c.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.20c72cd4.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.21beb4c8.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.309dc4b4.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.35c06c20.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.401606cd.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.4e0b8a6b.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.4fbfad27.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.4feed0c9.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.6e4cbbd1.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.71edccc3.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.735deee1.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.8031e87f.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.8a9d92ef.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.8ee65651.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.95b7f706.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.964927cf.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.9734ead4.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.a2645652.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.bc00cb19.js
#	public/admin/assets/edit.vue_vue_type_script_setup_true_lang.dec3e455.js
#	public/admin/assets/environment.a1f39ebd.js
#	public/admin/assets/environment.a824f3db.js
#	public/admin/assets/error.3245b397.js
#	public/admin/assets/error.ad96ad67.js
#	public/admin/assets/filing.a511c649.js
#	public/admin/assets/filing.eccc076c.js
#	public/admin/assets/follow_reply.b676d4ee.js
#	public/admin/assets/follow_reply.e30a481b.js
#	public/admin/assets/h5.2a7add8f.js
#	public/admin/assets/h5.afd9020f.js
#	public/admin/assets/index.011bede3.js
#	public/admin/assets/index.04d77970.js
#	public/admin/assets/index.0d2f02aa.js
#	public/admin/assets/index.136be2f4.js
#	public/admin/assets/index.1530a00e.js
#	public/admin/assets/index.16fe56fd.js
#	public/admin/assets/index.1866acee.js
#	public/admin/assets/index.1f81f8b5.js
#	public/admin/assets/index.21b73b19.js
#	public/admin/assets/index.22f8ab12.js
#	public/admin/assets/index.2539f5ae.js
#	public/admin/assets/index.28c53d29.js
#	public/admin/assets/index.2c0a48a6.js
#	public/admin/assets/index.3257f813.js
#	public/admin/assets/index.3745546a.js
#	public/admin/assets/index.3b91d655.js
#	public/admin/assets/index.3fbb5f30.js
#	public/admin/assets/index.4fd20bc9.js
#	public/admin/assets/index.50bcf3eb.js
#	public/admin/assets/index.523e1856.js
#	public/admin/assets/index.565fa41f.js
#	public/admin/assets/index.588358a2.js
#	public/admin/assets/index.58d92e59.js
#	public/admin/assets/index.5a304e0e.js
#	public/admin/assets/index.5cc34703.js
#	public/admin/assets/index.5f24c449.js
#	public/admin/assets/index.64e62b67.js
#	public/admin/assets/index.65cfc9bc.js
#	public/admin/assets/index.6d47c9ed.js
#	public/admin/assets/index.6f04b646.js
#	public/admin/assets/index.73a26a62.js
#	public/admin/assets/index.783c022e.js
#	public/admin/assets/index.7b48eeb3.js
#	public/admin/assets/index.8bcf72cb.js
#	public/admin/assets/index.942364fe.js
#	public/admin/assets/index.963c9b05.js
#	public/admin/assets/index.9ab195d2.js
#	public/admin/assets/index.a80222dc.js
#	public/admin/assets/index.a885a6ae.js
#	public/admin/assets/index.b348b281.js
#	public/admin/assets/index.b7299661.js
#	public/admin/assets/index.c93a1529.js
#	public/admin/assets/index.cdb9f716.js
#	public/admin/assets/index.d1b8bb0d.js
#	public/admin/assets/index.e66cf170.js
#	public/admin/assets/index.eeba4956.js
#	public/admin/assets/index.f040d64d.js
#	public/admin/assets/index.f6838d76.js
#	public/admin/assets/index.fd4cf356.js
#	public/admin/assets/index.fdde7276.js
#	public/admin/assets/index.vue_vue_type_style_index_0_lang.26fd2700.js
#	public/admin/assets/index.vue_vue_type_style_index_0_lang.8a5b07f4.js
#	public/admin/assets/information.5f67d768.js
#	public/admin/assets/information.aef5fed0.js
#	public/admin/assets/journal.64e725be.js
#	public/admin/assets/journal.c7bb9e85.js
#	public/admin/assets/keyword_reply.55add9d3.js
#	public/admin/assets/keyword_reply.57eeee16.js
#	public/admin/assets/login.3e20fdbc.js
#	public/admin/assets/login.dfb02019.js
#	public/admin/assets/login_register.f086e958.js
#	public/admin/assets/login_register.fce39c20.js
#	public/admin/assets/menu.00ecf38c.js
#	public/admin/assets/menu.1480198a.js
#	public/admin/assets/menu.5f3f4c47.js
#	public/admin/assets/menu.7368e3d7.js
#	public/admin/assets/menu.77a3989d.js
#	public/admin/assets/menu.b1b1aaa6.js
#	public/admin/assets/message.15ef96dc.js
#	public/admin/assets/message.8743f2b4.js
#	public/admin/assets/oa-attr.98d5d599.js
#	public/admin/assets/oa-attr.e543aa62.js
#	public/admin/assets/oa-menu-form-edit.045f9ab6.js
#	public/admin/assets/oa-menu-form-edit.6d6a7d14.js
#	public/admin/assets/oa-menu-form-edit.vue_vue_type_script_setup_true_lang.4a94d8c8.js
#	public/admin/assets/oa-menu-form-edit.vue_vue_type_script_setup_true_lang.e36a043a.js
#	public/admin/assets/oa-menu-form.57debade.js
#	public/admin/assets/oa-menu-form.5af7d29e.js
#	public/admin/assets/oa-menu-form.vue_vue_type_script_setup_true_lang.67bb8ea5.js
#	public/admin/assets/oa-menu-form.vue_vue_type_script_setup_true_lang.e41e7bd3.js
#	public/admin/assets/oa-phone.48a76668.js
#	public/admin/assets/oa-phone.66424cfe.js
#	public/admin/assets/picker.0b96d088.js
#	public/admin/assets/picker.5d8eed0a.js
#	public/admin/assets/picker.7fdea6ff.js
#	public/admin/assets/picker.dbcd437c.js
#	public/admin/assets/post.09fddbe1.js
#	public/admin/assets/post.ef78bb4b.js
#	public/admin/assets/preview.02e7bf70.js
#	public/admin/assets/preview.26af8dc8.js
#	public/admin/assets/protocol.1a7d013b.js
#	public/admin/assets/protocol.8e267222.js
#	public/admin/assets/role.86090770.js
#	public/admin/assets/role.b25c198c.js
#	public/admin/assets/setting.2f03e550.js
#	public/admin/assets/setting.5ca7d662.js
#	public/admin/assets/setup.684d6202.js
#	public/admin/assets/setup.e44fd5fe.js
#	public/admin/assets/system.2ead1522.js
#	public/admin/assets/system.35951c5a.js
#	public/admin/assets/tabbar.34f74b99.js
#	public/admin/assets/tabbar.bdd89062.js
#	public/admin/assets/useDictOptions.5cafb1f4.js
#	public/admin/assets/useDictOptions.b34b37f1.js
#	public/admin/assets/useMenuOa.870ab9e1.js
#	public/admin/assets/useMenuOa.d7923d98.js
#	public/admin/assets/user.4d5749bd.js
#	public/admin/assets/user.a9344a7d.js
#	public/admin/assets/weapp.57fd07ba.js
#	public/admin/assets/weapp.7765716e.js
#	public/admin/assets/website.4c8013dc.js
#	public/admin/assets/website.e8828dd2.js
#	public/admin/assets/wx_dev.146ac4c9.js
#	public/admin/assets/wx_dev.649507e0.js
#	public/admin/assets/wx_oa.4f05f86f.js
#	public/admin/assets/wx_oa.bdf9a81f.js
2022-12-30 09:39:13 +08:00
Jason
a7d6b7ce61 Merge branch 'hotfix/wjx202212300933' 2022-12-30 09:38:20 +08:00
Jason
d9f6b66c56 重新打包,移除打包文件 2022-12-30 09:38:09 +08:00
Jason
373bd551d7 Merge tag 'wjx202212291606' into develop
no message
2022-12-29 16:27:16 +08:00
Jason
e5f1ac1231 Merge branch 'hotfix/wjx202212291606' 2022-12-29 16:27:15 +08:00
Jason
c3e0a81b31 打包 2022-12-29 16:27:02 +08:00
Jason
df513e47ec 调整代码生成器设置 2022-12-29 16:04:32 +08:00
TinyAnts
62a3606169 修复代码生成关联表前缀问题 2022-12-29 14:16:54 +08:00
TinyAnts
97202201a2 优化定时任务 2022-12-29 11:59:10 +08:00
TinyAnts
088fffe836 调整获取所有库表不分页 2022-12-29 11:10:54 +08:00
TinyAnts
d59c9de38a 增加所有库表接口 2022-12-29 10:08:03 +08:00
TinyAnts
d63947856b 增加查询所有表接口 2022-12-29 09:43:05 +08:00
全栈程序员钟哥
36b6540a60 修改readme
Signed-off-by: 全栈程序员钟哥 <294687409@qq.com>
2022-12-28 07:34:22 +00:00
Jason
49fd6d3639 后台打包 2022-12-28 10:13:50 +08:00
Jason
3fd832d9e6 代码生成器配置调整 2022-12-28 10:12:33 +08:00
TinyAnts
aabc6205fb 增加返回字段 2022-12-28 10:05:35 +08:00
TinyAnts
4a7fd71da7 增加演示环境 ***** 敏感数据处理 2022-12-27 17:16:40 +08:00
TinyAnts
d7b6dc992f 移除多余代码 2022-12-23 18:11:10 +08:00
TinyAnts
2998041bde 移除多余代码 2022-12-23 17:52:20 +08:00
TinyAnts
2304922b8a 修复公众号授权登录bug 2022-12-23 16:13:30 +08:00
Jason
049209bfca 调整代码生成器模板 2022-12-23 14:50:25 +08:00
TinyAnts
dc5ed4b14b 修改包 2022-12-21 12:06:38 +08:00
TinyAnts
9beff48e28 增加演示环境拦截 2022-12-21 11:21:54 +08:00
TinyAnts
173640af07 微信扫码登录 2022-12-20 17:56:19 +08:00
TinyAnts
919cdc243c Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-12-20 17:33:08 +08:00
TinyAnts
670ac0208c 扫码登录 2022-12-20 17:33:01 +08:00
caijianhao
869c444fa5 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-12-20 17:09:01 +08:00
caijianhao
8b6b0e5257 调整网站信息设置接口 2022-12-20 17:08:38 +08:00
TinyAnts
8fed83cd15 优化用户端登录代码 2022-12-20 16:13:45 +08:00
caijianhao
864b54951a Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop
# Conflicts:
#	server/like-front/src/main/java/com/mdd/front/config/FrontConfig.java
2022-12-20 15:50:21 +08:00
caijianhao
9e89783add pc端首页接口 2022-12-20 15:49:29 +08:00
TinyAnts
3b8e501a0b 优化登录代码 2022-12-20 15:22:17 +08:00
TinyAnts
3e97c2201b 增加开放平台渠道设置管理 2022-12-20 14:53:08 +08:00
TinyAnts
3b5a8ae197 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop
# Conflicts:
#	server/like-front/src/main/java/com/mdd/front/config/FrontConfig.java
2022-12-20 11:56:17 +08:00
TinyAnts
43983deb48 扫码登录二维码 2022-12-20 11:55:21 +08:00
caijianhao
2022859769 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-12-20 11:36:29 +08:00
DESKTOP-9BP5159\XY-003
bdf79ccb84 pc端配置接口 2022-12-20 11:36:20 +08:00
DESKTOP-9BP5159\XY-003
2a1d803c5f 调整接口 2022-12-20 11:23:26 +08:00
TinyAnts
444ea6b4cb 修复代码生成器bug 2022-12-12 18:03:59 +08:00
TinyAnts
f76a83b918 增加描述 2022-12-08 14:55:06 +08:00
TinyAnts
6e7292b97c Merge branch 'release/1.3.5' 2022-12-07 14:58:33 +08:00
TinyAnts
4281a0f5bc Merge tag '1.3.5' into develop 2022-12-07 14:58:33 +08:00
TinyAnts
933ea5a3dd bug处理 2022-12-07 10:10:54 +08:00
TinyAnts
75c8b03969 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-12-06 10:20:56 +08:00
TinyAnts
a22fe53275 修复附件管理名称超长问题 2022-12-06 09:40:00 +08:00
TinyAnts
85ba64cd2f 处理日志功能时间线程问题 2022-12-06 09:39:33 +08:00
Jason
1d83523405 定时任务列表添加最后执行时间 2022-12-06 09:32:43 +08:00
xinjie
1ab2ca6b4e 打包 2022-12-02 17:03:56 +08:00
xinjie
5c043df578 完成定时任务对接 2022-12-02 17:01:30 +08:00
TinyAnts
f7a1b14500 修复定时任务新增没有分组 2022-12-02 16:54:46 +08:00
TinyAnts
a1a70346c9 init 2022-12-02 15:01:39 +08:00
TinyAnts
edfbe6ab4c 开放权限 2022-12-02 14:49:01 +08:00
TinyAnts
d593391f62 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-12-02 14:42:31 +08:00
TinyAnts
5f5026d40c 优化工具类的命名 2022-12-02 14:42:20 +08:00
xinjie
2453b0fc3b 修复上传文件请求头参数错误问题 2022-12-02 14:40:25 +08:00
TinyAnts
0077e75e85 修复管理员搜索bug 2022-12-02 14:18:29 +08:00
TinyAnts
327f0df6a9 增加定时任务管理 2022-12-02 14:14:34 +08:00
TinyAnts
03d09ca7d7 增加定时任务管理 2022-12-01 14:27:19 +08:00
TinyAnts
621e7916dc 计划任务管理 2022-11-30 22:09:27 +08:00
TinyAnts
c2a64e30f5 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-11-30 15:57:27 +08:00
TinyAnts
698d44696e 接入EasyExel依赖 2022-11-30 15:54:10 +08:00
xinjie
ef350201ca 调整管理员支持多部门多角色 2022-11-29 19:05:29 +08:00
TinyAnts
06bc994b42 修复管理员报错 2022-11-29 18:52:47 +08:00
windy
2c5310ca21 调整 多角色 多部门 多岗位 2022-11-29 16:57:15 +08:00
全栈程序员钟哥
0c5d7641b0 修改文档内容
Signed-off-by: 全栈程序员钟哥 <294687409@qq.com>
2022-11-22 06:21:47 +00:00
xinjie
af92e6209c 微信小程序头像,昵称调整 2022-11-21 15:52:00 +08:00
lr
cab7c3af39 Merge branch 'hotfix/lr-20221120' 2022-11-20 23:23:20 +08:00
lr
c38c46c09f Merge branch 'master' into develop 2022-11-20 23:23:20 +08:00
lr
1805cb1515 调整README信息 2022-11-20 23:23:01 +08:00
TinyAnts
0d086f6198 Merge tag '1.3.4' into develop 2022-11-17 18:55:44 +08:00
TinyAnts
4d43d7cdcc Merge branch 'release/1.3.4' 2022-11-17 18:55:42 +08:00
TinyAnts
8105c877af 安装sql 2022-11-17 18:28:16 +08:00
TinyAnts
ff5b649969 修复管理员编辑bug 2022-11-17 18:07:11 +08:00
Jason
c64d0151b3 打包,调整文件接口路径 2022-11-17 17:45:49 +08:00
Jason
98328e1bb1 打包 2022-11-17 17:33:22 +08:00
TinyAnts
402321fe3c 系统管理员编辑限制 2022-11-17 17:32:29 +08:00
TinyAnts
830c10ea73 增加系统管理员校验 2022-11-17 17:31:13 +08:00
TinyAnts
728a0f6ec5 调整注释 2022-11-17 17:03:25 +08:00
TinyAnts
40df111da7 修复通知设置bug 2022-11-17 16:40:28 +08:00
Jason
1d7c2383c1 调整素材中心按钮权限相关 2022-11-17 16:38:59 +08:00
Jason
3137a59566 Merge branch 'develop' of https://gitee.com/likeshop_gitee/likeadmin-java into develop 2022-11-17 16:25:37 +08:00
Jason
339f63c0c0 调整素材相关接口 2022-11-17 16:25:28 +08:00
TinyAnts
edc5357b8c 调整素材接口 2022-11-17 16:14:51 +08:00
TinyAnts
e22508240d Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-11-17 16:09:06 +08:00
TinyAnts
8480f98f28 调整登录异常监控 2022-11-17 16:09:01 +08:00
Jason
45b11402ce 调整管理员 2022-11-17 16:06:23 +08:00
TinyAnts
ef53643368 修复用户忘记密码bug 2022-11-17 15:42:26 +08:00
TinyAnts
41d372da5f 修复用户修改密码依然是密码错误bug 2022-11-17 15:40:47 +08:00
TinyAnts
aa4ba06be0 修复用户修改密码bug 2022-11-17 15:30:06 +08:00
TinyAnts
aa92623d7c 调整登录时效读配置 2022-11-17 15:27:11 +08:00
TinyAnts
b13523ca5e 优化登录时效配置 2022-11-17 15:18:45 +08:00
TinyAnts
522c698f6c 修复uniapp端更新手机号后createTime被更新 2022-11-17 15:07:32 +08:00
TinyAnts
b1fe1d9d47 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-11-17 14:59:48 +08:00
TinyAnts
25a85adf9e 处理编辑管理员 2022-11-17 14:59:32 +08:00
Jason
54c58d6ee1 调整后台底部导航,上传文件接口 2022-11-17 14:57:35 +08:00
TinyAnts
52615d1646 sa-token异常拦截 2022-11-17 14:53:29 +08:00
TinyAnts
2cd73748bb 修复底部导航编辑bug 2022-11-17 12:18:53 +08:00
TinyAnts
e23cb64f32 调整上传目录配置 2022-11-17 12:02:04 +08:00
TinyAnts
c639499fbc 修复静态图片404问题 2022-11-17 11:50:27 +08:00
TinyAnts
bd97df6f7b 优化代码 2022-11-17 11:39:14 +08:00
TinyAnts
e211426c1a 优化404拦截写法 2022-11-16 23:21:59 +08:00
TinyAnts
dafaf09011 修复json响应工具 2022-11-16 23:09:33 +08:00
TinyAnts
97b8f7016d 调整代码生成器 2022-11-16 22:59:16 +08:00
TinyAnts
3247a5f7d0 调整代码生成器 2022-11-16 22:06:21 +08:00
TinyAnts
57c88cf773 调整代码生成器 2022-11-16 19:01:45 +08:00
TinyAnts
329734b332 代码生成器 2022-11-16 18:17:59 +08:00
TinyAnts
c622781003 代码生成器调整 2022-11-16 17:54:01 +08:00
xinjie
e89f22cd8c 调整接口的一些字段及接口名称 2022-11-16 16:18:59 +08:00
TinyAnts
6db7255ed3 优化通知驱动类 2022-11-16 16:11:38 +08:00
TinyAnts
7a37ac18ac 修复通知设置bug 2022-11-16 15:01:40 +08:00
TinyAnts
ca9a251176 修复管理员编辑bug 2022-11-16 12:08:09 +08:00
TinyAnts
798d12c16f 修复登录问题 2022-11-16 12:00:43 +08:00
TinyAnts
124b1ff5dd 调整json转换工具 2022-11-16 11:49:39 +08:00
TinyAnts
a5d63d6c96 接入sa-token 2022-11-16 11:35:52 +08:00
TinyAnts
956bf841b3 整体优化代码结构 2022-11-15 22:25:17 +08:00
xinjie
e685304616 移动端-资讯中心下拉导航栏消失问题 2022-11-15 14:59:23 +08:00
xinjie
abbd23e332 可视化装修能拖拽排序 2022-11-15 14:46:12 +08:00
xinjie
37d39503bd 修改工作台二维码图片 2022-11-15 14:30:34 +08:00
xinjie
8055572f19 设置添加面包屑,logo配置 2022-11-15 14:23:03 +08:00
xinjie
7383a145b4 设置添加面包屑,logo配置 2022-11-15 14:18:24 +08:00
TinyAnts
1ab009544f Merge tag '13.3' into develop 2022-10-14 17:09:06 +08:00
TinyAnts
fb9e5c3d49 Merge branch 'release/13.3' 2022-10-14 17:09:06 +08:00
TinyAnts
32232cb604 修改安装SQL 2022-10-14 16:16:20 +08:00
TinyAnts
bd5f7bcad0 修改版本号 2022-10-14 16:14:02 +08:00
Jason
8e5d515e4c 调整版本号 2022-10-14 15:49:14 +08:00
Jason
abf98ee5e7 修复代码生成的页面无法缓存的问题 2022-10-14 15:39:02 +08:00
Jason
61a9a453f4 调整dictvalue组件 2022-10-14 15:28:44 +08:00
Jason
3dd371161b 打包 2022-10-14 14:54:18 +08:00
TinyAnts
88af20071b 修复代码生成器导入小数报错问题 2022-10-14 11:40:10 +08:00
TinyAnts
514b0108a5 修复代码生成器新增bug 2022-10-14 11:33:14 +08:00
TinyAnts
8c2729493d 修复代码生成存在小数的问题 2022-10-14 11:26:40 +08:00
Jason
47e968ddf9 部分输入框添加长度限制 2022-10-14 11:15:47 +08:00
TinyAnts
4d5615f90d 去除调试的注释 2022-10-14 11:09:29 +08:00
TinyAnts
8283695735 调整参数校验 2022-10-14 10:49:37 +08:00
Jason
8432eef4cf 调整所有排序的最大值 2022-10-14 10:47:21 +08:00
TinyAnts
e0407759d4 优化部门排序限制 2022-10-14 10:14:38 +08:00
TinyAnts
2eae8d9e94 优化统一时间写法 2022-10-14 10:00:25 +08:00
Ants
6efc39f902 !24 更新登录信息
Merge pull request !24 from 也曾为你、像超人/N/A
2022-10-14 01:58:27 +00:00
TinyAnts
0a708b79f0 修复登录重复更新信息bug 2022-10-14 09:55:52 +08:00
也曾为你、像超人
36e4725565 更新登录信息
Signed-off-by: 也曾为你、像超人 <1553592282@qq.com>
2022-10-13 13:07:38 +00:00
Jason
5029618235 !21 修复I5TUL1问题
Merge pull request !21 from 2014520/develop
2022-10-13 09:24:45 +00:00
Jason
1595d987ed 路由验权调整 2022-10-13 17:00:50 +08:00
Jason
35cec2a64c 登录页面跳转 2022-10-13 16:59:59 +08:00
Jason
6ee54646a8 调整微信公众号回复管理弹窗点击空白关闭问题 2022-10-13 16:59:34 +08:00
Jason
3deaa814a4 调整后台文案 2022-10-13 16:08:31 +08:00
Jason
4c458aeeac 管理员弹窗因类型问题警告 2022-10-13 15:48:05 +08:00
Jason
a99227d2ef 修复富文本编辑器全屏层级问题 2022-10-13 15:47:31 +08:00
Jason
10c95a0dee 修复h5协议跳转问题 2022-10-13 15:03:11 +08:00
Jason
3094503b17 调整图片选择器 2022-10-13 15:01:12 +08:00
TinyAnts
0e7944bd37 Merge tag '13.2' into develop 2022-09-30 16:32:41 +08:00
zhangliang
e16fc88e81 修复I5TUL1问题-编辑用户信息字段超长 2022-09-30 14:52:11 +08:00
997 changed files with 33546 additions and 7265 deletions

4
.gitignore vendored
View File

@@ -7,4 +7,6 @@ application-dev.yml
application-pro.yml
application-dem.yml
application-prod.yml
application-test.yml
application-test.yml
/public/uploads/*
!/public/uploads/index.html

View File

@@ -14,7 +14,8 @@
账号admin 密码123456
### 手机端uniapp前台
<img width="40%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=260c0869d9ba7e692b2db1e216078241" /><br>
### 开发文档
地址:[https://www.likeadmin.cn](https://www.likeadmin.cn "https://www.likeadmin.cn")
## 👨‍💻‍简介
@@ -52,6 +53,3 @@
<div class="half">
<img width="30%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=2dbac190afadfb6650a04c8af44980e1" /> <img width="30%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=73adbdb91ff5c43ca3e694a99effae7a" /> <img width="30%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=55b51eaebd7d696f96ccbf60d4694368" />
</div><br>
### 🪐接口文档
[点击这里进入更多更详细文档。](https://www.likeadmin.cn "点击这里进入更多更详细文档。")

View File

@@ -4,7 +4,7 @@ import fsExtra from 'fs-extra'
const { existsSync, remove, copy } = fsExtra
const cwd = process.cwd()
//打包发布路径,谨慎改动
const releaseRelativePath = '../frontend'
const releaseRelativePath = '../public/admin'
const distPath = path.resolve(cwd, 'dist')
const releasePath = path.resolve(cwd, releaseRelativePath)

View File

@@ -2,10 +2,10 @@ import request from '@/utils/request'
// 配置
export function getConfig() {
return request.get({ url: '/common/index/config' })
return request.get({ url: '/index/config' })
}
// 工作台主页
export function getWorkbench() {
return request.get({ url: '/common/index/console' })
return request.get({ url: '/index/console' })
}

View File

@@ -2,10 +2,10 @@ import request from '@/utils/request'
// 微信开发平台配置保存
export function setWxDevConfig(params: any) {
return request.post({ url: '/channel/wx/save', params })
return request.post({ url: '/channel/op/save', params })
}
// 微信开发平台配置详情
export function getWxDevConfig() {
return request.get({ url: '/channel/wx/detail' })
return request.get({ url: '/channel/op/detail' })
}

View File

@@ -1,39 +1,39 @@
import request from '@/utils/request'
export function fileCateAdd(params: Record<string, any>) {
return request.post({ url: '/common/album/cateAdd', params })
return request.post({ url: '/albums/cateAdd', params })
}
export function fileCateEdit(params: Record<string, any>) {
return request.post({ url: '/common/album/cateRename', params })
return request.post({ url: '/albums/cateRename', params })
}
// 文件分类删除
export function fileCateDelete(params: Record<string, any>) {
return request.post({ url: '/common/album/cateDel', params })
return request.post({ url: '/albums/cateDel', params })
}
// 文件分类列表
export function fileCateLists(params: Record<string, any>) {
return request.get({ url: '/common/album/cateList', params })
return request.get({ url: '/albums/cateList', params })
}
// 文件列表
export function fileList(params: Record<string, any>) {
return request.get({ url: '/common/album/albumList', params })
return request.get({ url: '/albums/albumList', params })
}
// 文件删除
export function fileDelete(params: Record<string, any>) {
return request.post({ url: '/common/album/albumDel', params })
return request.post({ url: '/albums/albumDel', params })
}
// 文件移动
export function fileMove(params: Record<string, any>) {
return request.post({ url: '/common/album/albumMove', params })
return request.post({ url: '/albums/albumMove', params })
}
// 文件重命名
export function fileRename(params: { id: number; name: string }) {
return request.post({ url: '/common/album/albumRename', params })
return request.post({ url: '/albums/albumRename', params })
}

View File

@@ -14,3 +14,33 @@ export function systemLogLists(params: any) {
export function systemCache() {
return request.get({ url: '/monitor/cache' })
}
// 定时任务列表
export function crontabLists(params: any) {
return request.get({ url: '/crontab/list', params })
}
// 添加定时任务
export function crontabAdd(params: any) {
return request.post({ url: '/crontab/add', params })
}
// 定时任务详情
export function crontabDetail(params: any) {
return request.get({ url: '/crontab/detail', params })
}
// 编辑定时任务
export function crontabEdit(params: any) {
return request.post({ url: '/crontab/edit', params })
}
// 删除定时任务
export function crontabDel(params: any) {
return request.post({ url: '/crontab/del', params })
}
// 获取登录日志列表
export function loginLogLists(params: any) {
return request.get({ url: '/system/log/login', params })
}

View File

@@ -10,6 +10,15 @@ export function dataTable(params: any) {
return request.get({ url: '/gen/db', params })
}
// 数据表所有列表接口
export function dataTableAll() {
return request.get({ url: '/gen/dbAll' })
}
//表名查字段
export function dataTableToColumn(params: any) {
return request.get({ url: '/gen/dbColumn', params })
}
//选择要生成代码的数据表
export function selectTable(params: any) {
return request.post(

View File

@@ -6,6 +6,11 @@ export function login(params: Record<string, any>) {
return request.post({ url: '/system/login', params: { ...params, terminal: config.terminal } })
}
// 登录
export function loginCaptcha() {
return request.get({ url: '/system/captcha' })
}
// 退出登录
export function logout() {
return request.post({ url: '/system/logout' })

View File

@@ -6,10 +6,15 @@
</div>
</template>
<script lang="ts" setup>
const props = defineProps<{
options: any[]
value: any
}>()
const props = withDefaults(
defineProps<{
options: any[]
value: any
}>(),
{
options: () => []
}
)
const values = computed(() => {
if (props.value !== null && typeof props.value !== 'undefined') {

View File

@@ -110,7 +110,7 @@ const handleCreated = (editor: any) => {
<style lang="scss">
.w-e-full-screen-container {
z-index: 999999;
z-index: 999;
}
.w-e-text-container [data-slate-editor] ul {
list-style: disc;

View File

@@ -24,10 +24,7 @@
<overflow-tooltip :content="data.name" />
</span>
<el-dropdown
v-perms="[
'common:album:cateRename',
'common:album:cateDel'
]"
v-perms="['albums:cateRename', 'albums:cateDel']"
v-if="data.id > 0"
:hide-on-click="false"
>
@@ -35,7 +32,7 @@
<template #dropdown>
<el-dropdown-menu>
<popover-input
v-perms="['common:album:cateRename']"
v-perms="['albums:cateRename']"
@confirm="handleEditCate($event, data.id)"
size="default"
:value="data.name"
@@ -51,7 +48,7 @@
</div>
</popover-input>
<div
v-perms="['common:album:cateDel']"
v-perms="['albums:cateDel']"
@click="handleDeleteCate(data.id)"
>
<el-dropdown-item>删除分组</el-dropdown-item>
@@ -68,7 +65,7 @@
<div class="flex justify-center p-2 border-t border-br">
<popover-input
v-perms="['common:album:cateAdd']"
v-perms="['albums:cateAdd']"
@confirm="handleAddCate"
size="default"
width="400px"
@@ -85,7 +82,7 @@
<div class="flex-1 flex">
<upload
v-if="type == 'image'"
v-perms="['common:upload:image']"
v-perms="['upload:image']"
class="mr-3"
:data="{ cid: cateId }"
:type="type"
@@ -96,7 +93,7 @@
</upload>
<upload
v-if="type == 'video'"
v-perms="['common:upload:video']"
v-perms="['upload:video']"
class="mr-3"
:data="{ cid: cateId }"
:type="type"
@@ -106,7 +103,7 @@
<el-button type="primary">本地上传</el-button>
</upload>
<el-button
v-perms="['common:album:albumDel']"
v-perms="['albums:albumDel']"
v-if="mode == 'page'"
:disabled="!select.length"
@click.stop="batchFileDelete()"
@@ -115,7 +112,7 @@
</el-button>
<popup
v-perms="['common:album:albumMove']"
v-perms="['albums:albumMove']"
v-if="mode == 'page'"
class="ml-3"
@confirm="batchFileMove"
@@ -214,7 +211,7 @@
<overflow-tooltip class="mt-1" :content="item.name" />
<div class="operation-btns flex items-center">
<popover-input
v-perms="['common:album:albumRename']"
v-perms="['albums:albumRename']"
@confirm="handleFileRename($event, item.id)"
size="default"
:value="item.name"
@@ -263,7 +260,7 @@
<el-table-column prop="createTime" label="上传时间" min-width="100" />
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<div class="inline-block" v-perms="['common:album:albumRename']">
<div class="inline-block" v-perms="['albums:albumRename']">
<popover-input
@confirm="handleFileRename($event, row.id)"
size="default"
@@ -281,7 +278,7 @@
查看
</el-button>
</div>
<div class="inline-block" v-perms="['common:album:albumDel']">
<div class="inline-block" v-perms="['albums:albumDel']">
<el-button
type="primary"
link
@@ -315,14 +312,14 @@
</el-checkbox>
</span>
<el-button
v-perms="['common:album:albumDel']"
v-perms="['albums:albumDel']"
:disabled="!select.length"
@click="batchFileDelete()"
>
删除
</el-button>
<popup
v-perms="['common:album:albumMove']"
v-perms="['albums:albumMove']"
class="ml-3 inline"
@confirm="batchFileMove"
:disabled="!select.length"

View File

@@ -83,6 +83,7 @@ import FileItem from './file.vue'
import Material from './index.vue'
import Preview from './preview.vue'
import useAppStore from '@/stores/modules/app'
import { useThrottleFn } from '@vueuse/shared'
export default defineComponent({
components: {
Popup,
@@ -170,17 +171,21 @@ export default defineComponent({
if (limit.value == -1) return null
return limit.value - fileList.value.length
})
const handleConfirm = () => {
const selectUri = select.value.map((item) =>
props.excludeDomain ? item.path : item.uri
)
if (!isAdd.value) {
fileList.value.splice(currentIndex.value, 1, selectUri.shift())
} else {
fileList.value = [...fileList.value, ...selectUri]
}
handleChange()
}
const handleConfirm = useThrottleFn(
() => {
const selectUri = select.value.map((item) =>
props.excludeDomain ? item.path : item.uri
)
if (!isAdd.value) {
fileList.value.splice(currentIndex.value, 1, selectUri.shift())
} else {
fileList.value = [...fileList.value, ...selectUri]
}
handleChange()
},
1000,
false
)
const showPopup = (index: number) => {
if (disabled.value) return
if (index >= 0) {

View File

@@ -79,9 +79,9 @@ export default defineComponent({
setup(props, { emit }) {
const userStore = useUserStore()
const uploadRefs = shallowRef<InstanceType<typeof ElUpload>>()
const action = ref(`${config.baseUrl}${config.urlPrefix}/common/upload/${props.type}`)
const action = ref(`${config.baseUrl}${config.urlPrefix}/upload/${props.type}`)
const headers = computed(() => ({
token: userStore.token,
['like-admin']: userStore.token,
version: config.version
}))
const visible = ref(false)

View File

@@ -1,7 +1,7 @@
const config = {
terminal: 1, //终端
title: '后台管理系统', //网站默认标题
version: '1.2.0', //版本号
version: '1.4.0', //版本号
baseUrl: `${import.meta.env.VITE_APP_BASE_URL || ''}/`, //请求接口域名
urlPrefix: 'api', //请求默认前缀
timeout: 10 * 1000 //请求超时时长

View File

@@ -1,4 +1,6 @@
const defaultSetting = {
showCrumb: true, // 是否显示面包屑
showLogo: true, // 是否显示logo
isUniqueOpened: false, //只展开一个一级菜单
sideWidth: 200, //侧边栏宽度
sideTheme: 'light', //侧边栏主题

View File

@@ -22,6 +22,7 @@ export enum RequestCodeEnum {
LOGIN_DISABLE_ERROR = 331, //登陆账号已被禁用
TOKEN_EMPTY = 332, // TOKEN参数为空
TOKEN_INVALID = 333, // TOKEN参数无效
VERIFICATION_CODE_ERROR = 334, // 验证码错误
NO_PERMISSTION = 403, //无相关权限
REQUEST_404_ERROR = 404, //请求接口不存在
SYSTEM_ERROR = 500 //系统错误

View File

@@ -8,7 +8,7 @@
<div class="navbar-item">
<refresh />
</div>
<div class="flex items-center px-2" v-if="!isMobile">
<div class="flex items-center px-2" v-if="!isMobile && settingStore.showCrumb">
<breadcrumb />
</div>
</div>

View File

@@ -57,9 +57,23 @@
/>
</div>
</div>
<div class="setting-item mb-5">
<div class="text-tx-secondary mb-4">菜单栏宽度</div>
<div><el-input-number v-model="sideWidth" :min="180" :max="250" /></div>
<div class="setting-item mb-5 flex justify-between items-center">
<div class="text-tx-secondary flex-none mr-3">菜单栏宽度</div>
<div>
<el-input-number v-model="sideWidth" :min="180" :max="250" />
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
<div class="text-tx-secondary flex-none mr-3">显示LOGO</div>
<div>
<el-switch v-model="showLogo" :active-value="true" :inactive-value="false" />
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
<div class="text-tx-secondary flex-none mr-3">显示面包屑</div>
<div>
<el-switch v-model="showCrumb" :active-value="true" :inactive-value="false" />
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
<el-button @click="resetTheme">重置主题</el-button>
@@ -158,6 +172,30 @@ const theme = computed({
}
})
const showLogo = computed({
get() {
return settingStore.showLogo
},
set(value) {
settingStore.setSetting({
key: 'showLogo',
value
})
}
})
const showCrumb = computed({
get() {
return settingStore.showCrumb
},
set(value) {
settingStore.setSetting({
key: 'showCrumb',
value
})
}
})
const isDark = useDark()
const themeChange = () => {
settingStore.setTheme(isDark.value)

View File

@@ -1,6 +1,6 @@
<template>
<div class="side" :style="sideStyle">
<side-logo :show-title="!isCollapsed" :theme="sideTheme" />
<side-logo v-if="settingStore.showLogo" :show-title="!isCollapsed" :theme="sideTheme" />
<side-menu
:routes="routes"
:isCollapsed="isCollapsed"

View File

@@ -6,5 +6,6 @@ import './styles/index.scss'
import 'virtual:svg-icons-register'
const app = createApp(App)
console.log(app)
app.use(install)
app.mount('#app')

View File

@@ -26,7 +26,10 @@ router.beforeEach(async (to, from, next) => {
document.title = to.meta.title ?? config.title
const userStore = useUserStore()
const tabsStore = useTabsStore()
if (userStore.token) {
if (whiteList.includes(to.path)) {
// 在免登录白名单,直接进入
next()
} else if (userStore.token) {
// 获取用户信息
const hasGetUserInfo = Object.keys(userStore.userInfo).length !== 0
if (hasGetUserInfo) {
@@ -71,9 +74,6 @@ router.beforeEach(async (to, from, next) => {
next({ path: loginPath, query: { redirect: to.fullPath } })
}
}
} else if (whiteList.includes(to.path)) {
// 在免登录白名单,直接进入
next()
} else {
next({ path: loginPath, query: { redirect: to.fullPath } })
}

View File

@@ -34,11 +34,13 @@ const useUserStore = defineStore({
this.perms = []
},
login(playload: any) {
const { account, password } = playload
const { account, password, code, uuid } = playload
return new Promise((resolve, reject) => {
login({
username: account,
password: password
password,
code,
uuid
})
.then((data) => {
this.token = data.token

View File

@@ -21,7 +21,7 @@ const axiosHooks: AxiosHooks = {
// 添加token
if (withToken) {
const token = getToken()
headers.token = token
headers['like-admin'] = token
}
// POST请求下如果无data则将params视为data
if (
@@ -69,6 +69,7 @@ const axiosHooks: AxiosHooks = {
case RequestCodeEnum.NO_PERMISSTION:
case RequestCodeEnum.FAILED:
case RequestCodeEnum.SYSTEM_ERROR:
case RequestCodeEnum.VERIFICATION_CODE_ERROR:
msg && feedback.msgError(msg)
return Promise.reject(data)

View File

@@ -17,7 +17,7 @@
@keyup.enter="handleEnter"
>
<template #prepend>
<icon name="el-icon-Avatar" />
<icon name="el-icon-User" />
</template>
</el-input>
</el-form-item>
@@ -34,6 +34,25 @@
</template>
</el-input>
</el-form-item>
<el-form-item prop="code">
<div class="flex items-center">
<el-input
v-model="formData.code"
placeholder="请输入验证码"
@keyup.enter="handleLogin"
>
<template #prepend>
<icon name="local-icon-anquan" />
</template>
</el-input>
<div
class="ml-4 w-[100px] flex-none cursor-pointer"
@click="getLoginCaptcha"
>
<img class="w-full" :src="codeImg" alt="" />
</div>
</div>
</el-form-item>
</el-form>
<div class="mb-5">
<el-checkbox v-model="remAccount" label="记住账号"></el-checkbox>
@@ -58,6 +77,7 @@ import cache from '@/utils/cache'
import { ACCOUNT_KEY } from '@/enums/cacheEnums'
import { PageEnum } from '@/enums/pageEnum'
import { useLockFn } from '@/hooks/useLockFn'
import { loginCaptcha } from '@/api/user'
const passwordRef = shallowRef<InputInstance>()
const formRef = shallowRef<FormInstance>()
const appStore = useAppStore()
@@ -66,9 +86,12 @@ const route = useRoute()
const router = useRouter()
const remAccount = ref(false)
const config = computed(() => appStore.config)
const codeImg = ref()
const formData = reactive({
account: '',
password: ''
password: '',
code: '',
uuid: ''
})
const rules = {
account: [
@@ -84,8 +107,21 @@ const rules = {
message: '请输入密码',
trigger: ['blur']
}
],
code: [
{
required: true,
message: '请输入验证码',
trigger: ['blur']
}
]
}
const getLoginCaptcha = async () => {
const data = await loginCaptcha()
formData.uuid = data.uuid
codeImg.value = data.img
}
// 回车按键监听
const handleEnter = () => {
if (!formData.password) {
@@ -99,9 +135,13 @@ const handleLogin = async () => {
// 记住账号,缓存
cache.set(ACCOUNT_KEY, {
remember: remAccount.value,
account: formData.account
account: remAccount.value ? formData.account : ''
})
await userStore.login(formData)
try {
await userStore.login(formData)
} catch (error) {
getLoginCaptcha()
}
const {
query: { redirect }
} = route
@@ -112,6 +152,7 @@ const { isLock, lockFn: lockLogin } = useLockFn(handleLogin)
onMounted(() => {
const value = cache.get(ACCOUNT_KEY)
getLoginCaptcha()
if (value?.remember) {
remAccount.value = value.remember
formData.account = value.account
@@ -125,6 +166,9 @@ onMounted(() => {
@apply min-h-screen bg-no-repeat bg-center bg-cover;
.login-card {
height: 400px;
:deep(.el-input-group__prepend) {
padding: 0 15px;
}
}
}
</style>

View File

@@ -14,7 +14,7 @@
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :min="0" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
<div class="form-tips">默认为0 数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -81,7 +81,7 @@
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :min="0" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
<div class="form-tips">默认为0 数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -44,6 +44,12 @@ export const rules = reactive<FormRules>({
required: true,
message: '必填项不能为空',
trigger: ['blur', 'change']
},
{
pattern:
/(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/,
message: '请输入合法的网址链接',
trigger: ['blur', 'change']
}
],
appId: [
@@ -121,7 +127,6 @@ export const useMenuOa = (ref: any) => {
await refs[i].menuFormRef.validate()
} catch (error) {
menuIndex.value = i
feedback.msgError(`菜单${i + 1}必填项不能为空~`)
return
}
}
@@ -137,7 +142,6 @@ export const useMenuOa = (ref: any) => {
await refs[i].menuFormRef.validate()
} catch (error) {
menuIndex.value = i
feedback.msgError(`菜单${i + 1}必填项不能为空~`)
return
}
}

View File

@@ -5,7 +5,6 @@
:title="popupTitle"
:async="true"
width="500px"
:clickModalClose="true"
@confirm="handleSubmit"
@close="handleClose"
>
@@ -72,7 +71,7 @@
</el-form-item> -->
<el-form-item label="排序">
<div class="flex-1">
<el-input-number v-model="formData.sort" :min="0"/>
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
</div>
</el-form-item>
<el-form-item label="启用状态">

View File

@@ -3,14 +3,14 @@
<el-card class="!border-none" shadow="never">
<el-alert
type="warning"
title="温馨提示:填写微信开放平台开发配置,请前往微信开放平台创建应用并完成认证;APP应用配置主要用于APP微信登录和微信支付"
title="温馨提示:填写微信开放平台开发配置,请前往微信开放平台创建应用并完成认证;网站应用配置主要用于网站微信登录和微信支付"
:closable="false"
show-icon
/>
</el-card>
<el-form ref="formRef" :model="formData" label-width="160px">
<el-card class="!border-none mt-4" shadow="never">
<div class="font-medium mb-7">APP应用</div>
<div class="font-medium mb-7">网站应用</div>
<el-form-item label="AppID" prop="appId">
<div class="w-80">
<el-input v-model="formData.appId" placeholder="请输入AppID" />
@@ -23,20 +23,15 @@
</div>
</div>
</el-form-item>
<el-form-item>
<div class="form-tips">
小程序账号登录微信公众平台点击开发>开发设置->开发者ID设置AppID和AppSecret
</div>
</el-form-item>
</el-card>
</el-form>
<footer-btns v-perms="['channel:wx:save']">
<footer-btns v-perms="['channel:op:save']">
<el-button type="primary" @click="handelSave">保存</el-button>
</footer-btns>
</div>
</template>
<script lang="ts" setup name="wxDevConfig">
import { getWxDevConfig, setWxDevConfig } from '@/api/channel/wx_dev'
import { getWxDevConfig, setWxDevConfig } from '@/api/channel/wx_op'
import feedback from '@/utils/feedback'
const formData = reactive({

View File

@@ -15,7 +15,11 @@
</el-form-item>
<el-form-item label="账号:">
{{ formData.username }}
<popover-input class="ml-[10px]" @confirm="handleEdit($event, 'username')">
<popover-input
class="ml-[10px]"
:limit="32"
@confirm="handleEdit($event, 'username')"
>
<el-button type="primary" link v-perms="['user:edit']">
<icon name="el-icon-EditPen" />
</el-button>
@@ -23,7 +27,11 @@
</el-form-item>
<el-form-item label="真实姓名:">
{{ formData.realName || '-' }}
<popover-input class="ml-[10px]" @confirm="handleEdit($event, 'realName')">
<popover-input
class="ml-[10px]"
:limit="32"
@confirm="handleEdit($event, 'realName')"
>
<el-button type="primary" link v-perms="['user:edit']">
<icon name="el-icon-EditPen" />
</el-button>

View File

@@ -1,37 +1,36 @@
<template>
<div>
<div>
<del-wrap
class="max-w-[400px]"
v-for="(item, index) in modelValue"
:key="index"
@close="handleDelete(index)"
>
<div class="bg-fill-light flex items-center w-full p-4 mb-4">
<material-picker
v-model="item.image"
upload-class="bg-body"
size="60px"
exclude-domain
>
<template #upload>
<div class="upload-btn w-[60px] h-[60px]">
<icon name="el-icon-Plus" :size="20" />
<draggable class="draggable" v-model="navLists" animation="300">
<template v-slot:item="{ element: item, index }">
<del-wrap class="max-w-[400px]" :key="index" @close="handleDelete(index)">
<div class="bg-fill-light flex items-center w-full p-4 mb-4 cursor-move">
<material-picker
v-model="item.image"
upload-class="bg-body"
size="60px"
exclude-domain
>
<template #upload>
<div class="upload-btn w-[60px] h-[60px]">
<icon name="el-icon-Plus" :size="20" />
</div>
</template>
</material-picker>
<div class="ml-3 flex-1">
<div class="flex">
<span class="text-tx-regular flex-none mr-3">名称</span>
<el-input v-model="item.name" placeholder="请输入名称" />
</div>
<div class="flex mt-[18px]">
<span class="text-tx-regular flex-none mr-3">链接</span>
<link-picker v-model="item.link" />
</div>
</div>
</template>
</material-picker>
<div class="ml-3 flex-1">
<div class="flex">
<span class="text-tx-regular flex-none mr-3">名称</span>
<el-input v-model="item.name" placeholder="请输入名称" />
</div>
<div class="flex mt-[18px]">
<span class="text-tx-regular flex-none mr-3">链接</span>
<link-picker v-model="item.link" />
</div>
</div>
</div>
</del-wrap>
</del-wrap>
</template>
</draggable>
</div>
<div>
<el-button type="primary" @click="handleAdd">添加</el-button>
@@ -41,7 +40,7 @@
<script lang="ts" setup>
import feedback from '@/utils/feedback'
import type { PropType } from 'vue'
import Draggable from 'vuedraggable'
const props = defineProps({
modelValue: {
type: Array as PropType<any[]>,
@@ -57,9 +56,19 @@ const props = defineProps({
}
})
const emit = defineEmits(['update:modelValue'])
const navLists = computed({
get() {
return props.modelValue
},
set(value) {
emit('update:modelValue', value)
}
})
const handleAdd = () => {
if (props.modelValue?.length < props.max) {
props.modelValue.push({
navLists.value.push({
image: '',
name: '导航名称',
link: {}
@@ -72,7 +81,7 @@ const handleDelete = (index: number) => {
if (props.modelValue?.length <= props.min) {
return feedback.msgError(`最少保留${props.min}`)
}
props.modelValue.splice(index, 1)
navLists.value.splice(index, 1)
}
</script>

View File

@@ -11,6 +11,7 @@
:is="widgets[widget?.name]?.attr"
:content="widget?.content"
:styles="widget?.styles"
:type="type"
/>
</keep-alive>
</div>
@@ -23,6 +24,10 @@ const props = defineProps({
widget: {
type: Object as PropType<Record<string, any>>,
default: () => ({})
},
type: {
type: String as PropType<'mobile' | 'pc'>,
default: 'mobile'
}
})
</script>

View File

@@ -0,0 +1,67 @@
<template>
<div class="pages-preview">
<div
v-for="(widget, index) in pageData"
:key="widget.id"
class="relative"
:class="{
'cursor-pointer': !widget?.disabled
}"
@click="handleClick(widget, index)"
>
<div
class="absolute w-full h-full z-[100] border-dashed"
:class="{
select: index == modelValue,
'border-[#dcdfe6] border-2': !widget?.disabled
}"
:style="widget.styles"
></div>
<slot>
<component
:is="widgets[widget?.name]?.content"
:content="widget.content"
:styles="widget.styles"
:key="widget.id"
/>
</slot>
</div>
</div>
</template>
<script lang="ts" setup>
import widgets from '../widgets'
import type { PropType } from 'vue'
defineProps({
pageData: {
type: Array as PropType<any[]>,
default: () => []
},
modelValue: {
type: Number,
default: 0
}
})
const emit = defineEmits<{
(event: 'update:modelValue', value: number): void
}>()
const handleClick = (widget: any, index: number) => {
if (widget.disabled) return
emit('update:modelValue', index)
}
</script>
<style lang="scss" scoped>
.pages-preview {
width: 460px;
height: 360px;
background: url(../../image/pc_index.png);
background-size: 100% 100%;
background-repeat: no-repeat;
.select {
@apply border-primary border-solid;
}
}
</style>

View File

@@ -1,7 +1,7 @@
<template>
<div>
<el-form label-width="70px">
<el-form-item label="是否启用">
<el-form-item label="是否启用" v-if="type == 'mobile'">
<el-radio-group v-model="content.enabled">
<el-radio :label="1">开启</el-radio>
<el-radio :label="0">停用</el-radio>
@@ -10,28 +10,44 @@
<el-form-item label="图片设置">
<div class="flex-1">
<div class="form-tips">最多添加5张建议图片尺寸750px*340px</div>
<del-wrap
v-for="(item, index) in content.data"
:key="index"
@close="handleDelete(index)"
class="max-w-[400px]"
>
<div class="bg-fill-light flex items-center w-full p-4 mt-4">
<material-picker
v-model="item.image"
upload-class="bg-body"
exclude-domain
/>
<div class="ml-3 flex-1">
<el-form-item label="图片名称">
<el-input v-model="item.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item class="mt-[18px]" label="图片链接">
<link-picker v-model="item.link" />
</el-form-item>
</div>
</div>
</del-wrap>
<draggable class="draggable" v-model="content.data" animation="300">
<template v-slot:item="{ element: item, index }">
<del-wrap
:key="index"
@close="handleDelete(index)"
class="max-w-[400px]"
>
<div
class="bg-fill-light flex items-center w-full p-4 mt-4 cursor-move"
>
<material-picker
v-model="item.image"
upload-class="bg-body"
exclude-domain
/>
<div class="ml-3 flex-1">
<el-form-item label="图片名称">
<el-input
v-model="item.name"
placeholder="请输入名称"
/>
</el-form-item>
<el-form-item class="mt-[18px]" label="图片链接">
<link-picker
v-if="type == 'mobile'"
v-model="item.link"
/>
<el-input
v-if="type == 'pc'"
placeholder="请输入链接"
v-model="item.link.path"
/>
</el-form-item>
</div>
</div>
</del-wrap>
</template>
</draggable>
</div>
</el-form-item>
<el-form-item v-if="content.data?.length < limit">
@@ -44,6 +60,7 @@
import feedback from '@/utils/feedback'
import type { PropType } from 'vue'
import type options from './options'
import Draggable from 'vuedraggable'
const limit = 5
type OptionsType = ReturnType<typeof options>
const props = defineProps({
@@ -54,6 +71,10 @@ const props = defineProps({
styles: {
type: Object as PropType<OptionsType['styles']>,
default: () => ({})
},
type: {
type: String as PropType<'mobile' | 'pc'>,
default: 'mobile'
}
})

View File

@@ -1,7 +1,12 @@
<template>
<div class="banner">
<div class="banner-image">
<decoration-img width="100%" height="170px" :src="getImage" fit="contain" />
<div class="banner" :style="styles">
<div class="banner-image w-full h-full">
<decoration-img
width="100%"
:height="styles.height || height"
:src="getImage"
fit="contain"
/>
</div>
</div>
</template>
@@ -18,6 +23,10 @@ const props = defineProps({
styles: {
type: Object as PropType<OptionsType['styles']>,
default: () => ({})
},
height: {
type: String,
default: '170px'
}
})

View File

@@ -10,28 +10,36 @@
<el-form-item label="图片设置">
<div class="flex-1">
<div class="form-tips">最多添加5张建议图片尺寸750px*200px</div>
<del-wrap
v-for="(item, index) in content.data"
:key="index"
@close="handleDelete(index)"
class="max-w-[400px]"
>
<div class="bg-fill-light flex items-center w-full p-4 mt-4">
<material-picker
v-model="item.image"
upload-class="bg-body"
exclude-domain
/>
<div class="ml-3 flex-1">
<el-form-item label="图片名称">
<el-input v-model="item.name" placeholder="请输入名称" />
</el-form-item>
<el-form-item class="mt-[18px]" label="图片链接">
<link-picker v-model="item.link" />
</el-form-item>
</div>
</div>
</del-wrap>
<draggable class="draggable" v-model="content.data" animation="300">
<template v-slot:item="{ element: item, index }">
<del-wrap
:key="index"
@close="handleDelete(index)"
class="max-w-[400px]"
>
<div
class="bg-fill-light flex items-center w-full p-4 mt-4 cursor-move"
>
<material-picker
v-model="item.image"
upload-class="bg-body"
exclude-domain
/>
<div class="ml-3 flex-1">
<el-form-item label="图片名称">
<el-input
v-model="item.name"
placeholder="请输入名称"
/>
</el-form-item>
<el-form-item class="mt-[18px]" label="图片链接">
<link-picker v-model="item.link" />
</el-form-item>
</div>
</div>
</del-wrap>
</template>
</draggable>
</div>
</el-form-item>
<el-form-item v-if="content.data?.length < limit">
@@ -44,6 +52,7 @@
import feedback from '@/utils/feedback'
import type { PropType } from 'vue'
import type options from './options'
import Draggable from 'vuedraggable'
const limit = 5
type OptionsType = ReturnType<typeof options>
const props = defineProps({

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 KiB

View File

@@ -47,7 +47,7 @@ const menus: Record<
[pagesTypeEnum.HOME]: {
id: 1,
pageType: 1,
name: '商城首页',
name: '首页装修',
pageData: generatePageData(['search', 'banner', 'nav', 'news'])
},
[pagesTypeEnum.USER]: {

View File

@@ -0,0 +1,90 @@
<template>
<div class="decoration-pages min-w-[1100px]">
<el-card shadow="never" class="!border-none flex-1 flex" :body-style="{ flex: 1 }">
<div class="flex h-full items-start">
<Menu v-model="activeMenu" :menus="menus" />
<preview-pc class="mx-4" v-model="selectWidgetIndex" :pageData="getPageData" />
<attr-setting class="flex-1" :widget="getSelectWidget" type="pc" />
</div>
</el-card>
<footer-btns class="mt-4" :fixed="false" v-perms="['decorate:pages:save']">
<el-button type="primary" @click="setData">保存</el-button>
</footer-btns>
</div>
</template>
<script lang="ts" setup name="decorationPc">
import Menu from './component/pages/menu.vue'
import PreviewPc from './component/pages/preview-pc.vue'
import AttrSetting from './component/pages/attr-setting.vue'
import widgets from './component/widgets'
import { getDecoratePages, setDecoratePages } from '@/api/decoration'
import { getNonDuplicateID } from '@/utils/util'
enum pagesTypeEnum {
HOME = '4'
}
const generatePageData = (widgetNames: string[]) => {
return widgetNames.map((widgetName) => {
const options = {
id: getNonDuplicateID(),
...(widgets[widgetName]?.options() || {})
}
return options
})
}
const menus: Record<
string,
{
id: number
name: string
pageData: any[]
}
> = reactive({
[pagesTypeEnum.HOME]: {
id: 4,
pageType: 4,
name: 'pc首页装修',
pageData: []
}
})
const activeMenu = ref('4')
const selectWidgetIndex = ref(0)
const getPageData = computed(() => {
return menus[activeMenu.value]?.pageData ?? []
})
const getSelectWidget = computed(() => {
return menus[activeMenu.value]?.pageData[selectWidgetIndex.value] ?? ''
})
const getData = async () => {
const data = await getDecoratePages({ id: activeMenu.value })
menus[String(data.id)].pageData = JSON.parse(data.pageData)
selectWidgetIndex.value = getPageData.value.findIndex((item) => !item.disabled)
}
const setData = async () => {
await setDecoratePages({
...menus[activeMenu.value],
pageData: JSON.stringify(menus[activeMenu.value].pageData)
})
getData()
}
watch(
activeMenu,
() => {
selectWidgetIndex.value = getPageData.value.findIndex((item) => !item.disabled)
getData()
},
{
immediate: true
}
)
</script>
<style lang="scss" scoped>
.decoration-pages {
min-height: calc(100vh - var(--navbar-height) - 80px);
@apply flex flex-col;
}
</style>

View File

@@ -188,7 +188,7 @@ const onMove = (e: any) => {
const getData = async () => {
const data = await getDecorateTabbar()
tabbar.list = data.list.map((item: any) => ({ ...item, link: JSON.parse(item.link) }))
tabbar.list = data.list
tabbar.style = data.style
}
const setData = async () => {

View File

@@ -8,7 +8,7 @@
ref="formRef"
class="ls-form"
:model="formData"
label-width="100px"
label-width="130px"
:rules="rules"
>
<el-tabs v-model="activeName">
@@ -218,11 +218,50 @@
</div>
</el-form-item>
<el-form-item label="生成方式" prop="gen.genType">
<el-radio-group v-model="formData.gen.genType">
<el-radio :label="GenType.ZIP">压缩包下载</el-radio>
<el-radio :label="GenType.CUSTOM_PATH">自定义路径</el-radio>
</el-radio-group>
<div>
<el-radio-group v-model="formData.gen.genType">
<el-radio :label="GenType.ZIP">压缩包下载</el-radio>
<el-radio :label="GenType.CUSTOM_PATH">自定义路径</el-radio>
</el-radio-group>
<div class="form-tips">压縮包下载方式暂不支持自动构建菜单权限</div>
</div>
</el-form-item>
<el-form-item label="菜单构建" prop="gen.menuStatus" required>
<div>
<el-radio-group v-model="formData.gen.menuStatus">
<el-radio :label="1">自动构建</el-radio>
<el-radio :label="0">手动添加</el-radio>
</el-radio-group>
<div class="form-tips">
自动构建自动执行生成菜单sql 手动添加自行添加菜单
</div>
</div>
</el-form-item>
<el-form-item label="父级菜单" prop="gen.menuPid">
<el-tree-select
class="w-80"
v-model="formData.gen.menuPid"
:data="optionsData.menu"
clearable
node-key="id"
:props="{
label: 'menuName'
}"
default-expand-all
placeholder="请选择父级菜单"
check-strictly
/>
</el-form-item>
<el-form-item label="菜单名称" prop="gen.menuName">
<div class="w-80">
<el-input
v-model="formData.gen.menuName"
placeholder="请输入菜单名称"
clearable
/>
</div>
</el-form-item>
<el-form-item
v-if="formData.gen.genType == GenType.CUSTOM_PATH"
label="自定义路径"
@@ -273,6 +312,48 @@
</el-form-item>
</template>
</el-tab-pane>
<el-tab-pane label="关联配置" name="relation">
<el-form-item label="关联子表的表名" prop="gen.subTableName">
<el-select
class="w-80"
v-model="formData.gen.subTableName"
clearable
@change="handleTableChange"
>
<el-option
v-for="item in optionsData.dataTable"
:key="item.tableName"
:value="item.tableName"
:label="`${item.tableName}${item.tableComment}`"
/>
</el-select>
</el-form-item>
<el-form-item label="子表关联的外键名 " prop="gen.subTableFk">
<el-select
class="w-80"
v-model="formData.gen.subTableFk"
clearable
:loading="columnLoading"
>
<el-option
v-for="item in tableColumn"
:key="item.id"
:value="item.columnName"
:label="`${item.columnName}${item.columnComment}`"
/>
</el-select>
</el-form-item>
<el-form-item label="关联表主键 " prop="gen.subTableFr">
<el-select class="w-80" v-model="formData.gen.subTableFr" clearable>
<el-option
v-for="item in formData.column"
:key="item.id"
:value="item.columnName"
:label="`${item.columnName}${item.columnComment}`"
/>
</el-select>
</el-form-item>
</el-tab-pane>
</el-tabs>
</el-form>
</el-card>
@@ -283,7 +364,7 @@
</template>
<script lang="ts" setup name="tableEdit">
import { generateEdit, tableDetail } from '@/api/tools/code'
import { dataTableAll, generateEdit, tableDetail, dataTableToColumn } from '@/api/tools/code'
import { dictTypeAll } from '@/api/setting/dict'
import type { FormInstance } from 'element-plus'
import feedback from '@/utils/feedback'
@@ -322,9 +403,13 @@ const formData = reactive({
moduleName: '',
subTableFk: '',
subTableName: '',
subTableFr: '',
treeParent: '',
treePrimary: '',
treeName: ''
treeName: '',
menuName: '',
menuStatus: 0,
menuPid: 0
}
})
@@ -345,15 +430,18 @@ const getDetails = async () => {
const data = await tableDetail({
id: route.query.id
})
Object.keys(formData).forEach((key) => {
//@ts-ignore
formData[key] = data[key]
})
getTableColumn()
}
const { optionsData } = useDictOptions<{
dictType: any[]
menu: any[]
dataTable: any[]
}>({
dictType: {
api: dictTypeAll
@@ -361,13 +449,29 @@ const { optionsData } = useDictOptions<{
menu: {
api: menuLists,
transformData(data: any) {
const menu = { id: 0, name: '顶级', children: [] }
const menu = { id: 0, menuName: '顶级', children: [] }
menu.children = data
return menu
return [menu]
}
},
dataTable: {
api: dataTableAll
}
})
const columnLoading = ref(false)
const tableColumn = ref<any[]>([])
const getTableColumn = async () => {
columnLoading.value = true
const res = await dataTableToColumn({ tableName: formData.gen.subTableName })
columnLoading.value = false
tableColumn.value = res
}
const handleTableChange = () => {
formData.gen.subTableFk = ''
getTableColumn()
}
const handleSave = async () => {
try {
await formRef.value?.validate()

View File

@@ -26,17 +26,27 @@
/>
</el-form-item>
<el-form-item label="部门名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入部门名称" clearable />
<el-input
v-model="formData.name"
placeholder="请输入部门名称"
clearable
:maxlength="100"
/>
</el-form-item>
<el-form-item label="负责人" prop="duty">
<el-input v-model="formData.duty" placeholder="请输入负责人姓名" clearable />
<el-input
v-model="formData.duty"
placeholder="请输入负责人姓名"
clearable
:maxlength="30"
/>
</el-form-item>
<el-form-item label="联系电话" prop="mobile">
<el-input v-model="formData.mobile" placeholder="请输入联系电话" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :min="0" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
<div class="form-tips">默认为0 数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -10,14 +10,19 @@
>
<el-form ref="formRef" :model="formData" label-width="84px" :rules="formRules">
<el-form-item label="岗位名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入岗位名称" clearable />
<el-input
v-model="formData.name"
placeholder="请输入岗位名称"
clearable
:maxlength="100"
/>
</el-form-item>
<el-form-item label="岗位编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入岗位编码" clearable />
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :min="0" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
<div class="form-tips">默认为0 数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -28,18 +28,19 @@
<el-form-item label="名称" prop="nickname">
<el-input v-model="formData.nickname" placeholder="请输入名称" clearable />
</el-form-item>
<el-form-item label="归属部门" prop="deptId">
<el-form-item label="归属部门" prop="deptIds">
<el-tree-select
class="flex-1"
v-model="formData.deptId"
v-model="formData.deptIds"
:data="optionsData.dept"
clearable
node-key="id"
multiple
:props="{
value: 'id',
label: 'name',
disabled(data: any) {
return data.isStop
return !!data.isStop
}
}"
check-strictly
@@ -47,11 +48,12 @@
placeholder="请选择上级部门"
/>
</el-form-item>
<el-form-item label="岗位" prop="deptId">
<el-form-item label="岗位" prop="postIds">
<el-select
class="flex-1"
clearable
v-model="formData.postId"
multiple
v-model="formData.postIds"
placeholder="请选择岗位"
>
<el-option
@@ -63,10 +65,11 @@
</el-select>
</el-form-item>
<el-form-item label="角色" prop="role">
<el-form-item label="角色" prop="roleIds">
<el-select
v-model="formData.role"
v-model="formData.roleIds"
:disabled="isRoot"
multiple
class="flex-1"
clearable
placeholder="请选择角色"
@@ -76,7 +79,7 @@
v-for="(item, index) in optionsData.role"
:key="index"
:label="item.name"
:value="String(item.id)"
:value="item.id"
/>
</el-select>
</el-form-item>
@@ -135,12 +138,12 @@ const popupTitle = computed(() => {
})
const formData = reactive({
id: '',
id: 0,
username: '',
nickname: '',
deptId: '',
postId: '',
role: '',
deptIds: [],
postIds: [],
roleIds: [],
avatar: '',
password: '',
passwordConfirm: '',
@@ -149,7 +152,7 @@ const formData = reactive({
})
const isRoot = computed(() => {
return formData.role == '0'
return formData.id == 1
})
const passwordConfirmValidator = (rule: object, value: string, callback: any) => {
@@ -174,8 +177,9 @@ const formRules = reactive({
trigger: ['blur']
}
],
role: [
roleIds: [
{
type: 'array',
required: true,
message: '请选择角色',
trigger: ['blur']
@@ -231,6 +235,13 @@ const open = (type = 'add') => {
}
const setFormData = async (row: any) => {
formRules.password = []
formRules.passwordConfirm = [
{
validator: passwordConfirmValidator,
trigger: 'blur'
}
]
const data = await adminDetail({
id: row.id
})
@@ -239,16 +250,7 @@ const setFormData = async (row: any) => {
//@ts-ignore
formData[key] = data[key]
}
Number(formData.deptId) == 0 && (formData.deptId = '')
Number(formData.postId) == 0 && (formData.postId = '')
}
formRules.password = []
formRules.passwordConfirm = [
{
validator: passwordConfirmValidator,
trigger: 'blur'
}
]
}
const handleClose = () => {

View File

@@ -52,8 +52,18 @@
</el-table-column>
<el-table-column label="账号" prop="username" min-width="100" />
<el-table-column label="名称" prop="nickname" min-width="100" />
<el-table-column label="角色" prop="role" min-width="100" />
<el-table-column label="部门" prop="dept" min-width="100" />
<el-table-column
label="角色"
prop="role"
show-tooltip-when-overflow
min-width="100"
/>
<el-table-column
label="部门"
prop="dept"
show-tooltip-when-overflow
min-width="100"
/>
<el-table-column label="创建时间" prop="createTime" min-width="180" />
<el-table-column label="最近登录时间" prop="lastLoginTime" min-width="180" />
<el-table-column label="最近登录IP" prop="lastLoginIp" min-width="120" />

View File

@@ -166,7 +166,7 @@
</el-form-item>
<el-form-item label="菜单排序" prop="menuSort">
<div>
<el-input-number v-model="formData.menuSort" />
<el-input-number v-model="formData.menuSort" :max="9999" />
<div class="form-tips">数值越大越排前</div>
</div>
</el-form-item>
@@ -224,7 +224,7 @@ const formData = reactive({
//路由参数
params: '',
//是否缓存 0=否, 1=是
isCache: 1,
isCache: 0,
//是否显示 0=否, 1=是
isShow: 1,
//是否禁用 0=否, 1=是

View File

@@ -60,6 +60,7 @@
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button
v-if="row.menuType !== MenuEnum.BUTTON"
v-perms="['system:menu:add']"
type="primary"
link

View File

@@ -31,7 +31,7 @@
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" :min="0" />
<el-input-number v-model="formData.sort" :min="0" :max="9999" />
<div class="form-tips">数值越大越排前</div>
</div>
</el-form-item>

View File

@@ -0,0 +1,81 @@
<!-- 系统日志 -->
<template>
<div class="login-log">
<el-card class="!border-none" shadow="never">
<el-form class="ls-form" :model="formData" inline>
<el-form-item label="用户名称">
<el-input
class="w-[280px]"
placeholder="请输入"
v-model="formData.username"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="状态">
<el-select class="w-[280px]" v-model="formData.status" placeholder="请选择">
<el-option label="全部" value="" />
<el-option label="失败" :value="0" />
<el-option label="成功" :value="1" />
</el-select>
</el-form-item>
<el-form-item label="登录时间">
<daterange-picker
v-model:startTime="formData.startTime"
v-model:endTime="formData.endTime"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none mt-4" shadow="never" v-loading="pager.loading">
<div>
<el-table :data="pager.lists" size="large">
<el-table-column label="用户名称" prop="username" min-width="120" />
<el-table-column label="登录地址" prop="ip" min-width="120" />
<el-table-column label="浏览器" prop="browser" min-width="120" />
<el-table-column label="摱作系統" prop="os" min-width="120" />
<el-table-column prop="status" label="状态" min-width="100">
<template #default="{ row }">
<el-tag v-if="row.status == 1" type="success">成功</el-tag>
<el-tag v-if="row.status == 0" type="danger">失败</el-tag>
</template>
</el-table-column>
<el-table-column label="登录时间" prop="createTime" min-width="180" />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script setup lang="ts" name="journal">
import { loginLogLists } from '@/api/setting/system'
import { usePaging } from '@/hooks/usePaging'
// 查询表单
const formData = ref({
username: '',
status: '',
startTime: '',
endTime: ''
})
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: loginLogLists,
params: formData.value
})
getLists()
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,142 @@
<template>
<div class="article-edit">
<el-card class="!border-none" shadow="never">
<el-page-header :content="$route.meta.title" @back="$router.back()" />
</el-card>
<el-card class="mt-4 !border-none" shadow="never">
<el-form
ref="formRef"
class="ls-form"
:model="formData"
label-width="96px"
:rules="rules"
>
<el-form-item label="任务名称" prop="name">
<div class="w-80">
<el-input
v-model="formData.name"
placeholder="请输入任务名称"
maxlength="30"
clearable
/>
</div>
</el-form-item>
<el-form-item label="任务分组" prop="groups">
<el-select
class="w-80"
v-model="formData.groups"
clearable
placeholder="请选择任务分组"
>
<el-option label="默认" value="default" />
<el-option label="系统" value="system" />
</el-select>
</el-form-item>
<el-form-item label="调用方法" prop="command">
<div class="w-80">
<el-input
v-model="formData.command"
placeholder="请输入调用目标字符串"
clearable
/>
</div>
</el-form-item>
<el-form-item label="cron表达式" prop="rules">
<div class="w-80">
<el-input v-model="formData.rules" placeholder="请输入cron执行表达式" />
</div>
</el-form-item>
<el-form-item label="备注" prop="remark">
<div class="w-80">
<el-input
v-model="formData.remark"
type="textarea"
:autosize="{ minRows: 3, maxRows: 6 }"
:maxlength="200"
show-word-limit
clearable
/>
</div>
</el-form-item>
<el-form-item label="执行策略" prop="groups">
<el-radio-group v-model="formData.strategy">
<el-radio :label="1"> 立即执行 </el-radio>
<el-radio :label="2"> 执行一次 </el-radio>
<el-radio :label="3"> 放弃执行 </el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否并发" prop="concurrent">
<el-radio-group v-model="formData.concurrent">
<el-radio :label="1"> 允许 </el-radio>
<el-radio :label="0"> 禁止 </el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="状态">
<el-switch v-model="formData.status" :active-value="1" :inactive-value="2" />
</el-form-item>
</el-form>
</el-card>
<footer-btns>
<el-button type="primary" @click="handleSave">保存</el-button>
</footer-btns>
</div>
</template>
<script lang="ts" setup name="scheduledTaskEdit">
import type { FormInstance } from 'element-plus'
import { crontabAdd, crontabEdit, crontabDetail } from '@/api/setting/system'
import useMultipleTabs from '@/hooks/useMultipleTabs'
import feedback from '@/utils/feedback'
const route = useRoute()
const router = useRouter()
const formData = reactive({
id: '',
name: '',
groups: '',
command: '',
rules: '',
status: 1,
strategy: 1,
concurrent: 0,
remark: ''
})
const { removeTab } = useMultipleTabs()
const formRef = shallowRef<FormInstance>()
const rules = reactive({
name: [{ required: true, message: '请输入任务名称' }],
command: [{ required: true, message: '请输入调用目标字符串' }],
rules: [{ required: true, message: '请输入cron执行表达式' }]
})
const getDetails = async () => {
const data = await crontabDetail({
id: route.query.id
})
Object.keys(formData).forEach((key) => {
//@ts-ignore
formData[key] = data[key]
})
}
const handleSave = async () => {
await formRef.value?.validate()
if (route.query.id) {
await crontabEdit(formData)
} else {
await crontabAdd(formData)
}
feedback.msgSuccess('操作成功')
removeTab()
router.back()
}
onMounted(async () => {
if (!route.query.id) {
return
}
await getDetails()
})
</script>

View File

@@ -0,0 +1,111 @@
<template>
<div>
<el-card shadow="never" class="!border-none">
<router-link
v-perms="['crontab/add', 'crontab/add:edit']"
:to="getRoutePath('crontab/add:edit')"
>
<el-button type="primary" class="mb-[16px]">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
</router-link>
<el-table
ref="paneTable"
class="m-t-24"
:data="pager.lists"
v-loading="pager.loading"
style="width: 100%"
>
<el-table-column prop="name" label="名称" min-width="120" />
<el-table-column prop="groups" label="分组" min-width="100">
<template #default="{ row }">
<dict-value
:value="row.groups"
:options="[
{
name: '默认',
value: 'default'
},
{
name: '系统',
value: 'system'
}
]"
/>
</template>
</el-table-column>
<el-table-column prop="command" label="调用目标字符串" min-width="100" />
<el-table-column prop="rules" label="cron表达式" min-width="100" />
<el-table-column prop="status" label="状态" min-width="100">
<template #default="{ row }">
<el-tag v-if="row.status == 1" type="success">运行中</el-tag>
<el-tag v-if="row.status == 2" type="info">已停止</el-tag>
<el-tag v-if="row.status == 3" type="danger">错误</el-tag>
</template>
</el-table-column>
<el-table-column prop="error" label="错误信息" min-width="120" />
<el-table-column label="最后执行时间" prop="endTime" min-width="180" />
<el-table-column prop="taskTime" label="执行耗时ms" min-width="100" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<div class="flex">
<el-button type="primary" link>
<router-link
v-perms="['crontab/edit', 'crontab/add:edit']"
:to="{
path: getRoutePath('crontab/add:edit'),
query: {
id: row.id
}
}"
>
<el-button type="primary" link> 编辑 </el-button>
</router-link>
</el-button>
<el-button
v-perms="['crontab/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</div>
</template>
</el-table-column>
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup name="scheduledTask">
import { crontabLists, crontabDel } from '@/api/setting/system'
import { usePaging } from '@/hooks/usePaging'
import { getRoutePath } from '@/router'
import feedback from '@/utils/feedback'
const { pager, getLists } = usePaging({
fetchFun: crontabLists,
params: {}
})
const handleDelete = async (id: number) => {
await feedback.confirm('确定要删除?')
await crontabDel({ id })
feedback.msgSuccess('删除成功')
getLists()
}
getLists()
</script>
<style lang="scss"></style>

View File

@@ -84,7 +84,9 @@ const handleDelete = (index: number) => {
// 设置备案信息
const handleSubmit = async () => {
await setCopyright(formData.value)
await setCopyright({
list: formData.value
})
feedback.msgSuccess('操作成功')
getData()
}

View File

@@ -34,7 +34,7 @@
</el-form-item>
</el-card>
<el-card shadow="never" class="!border-none mt-4">
<div class="text-xl font-medium mb-[20px]">商城设置</div>
<div class="text-xl font-medium mb-[20px]">前台设置</div>
<el-form-item label="商城名称" prop="shopName">
<div class="w-80">
<el-input
@@ -52,6 +52,44 @@
</div>
</el-form-item>
</el-card>
<el-card shadow="never" class="!border-none mt-4">
<div class="text-xl font-medium mb-[20px]">PC端设置</div>
<el-form-item label="PC端LOGO" prop="pcLogo">
<div>
<material-picker v-model="formData.pcLogo" :limit="1" />
<div class="form-tips">建议尺寸120*28px支持jpgjpegpng格式</div>
</div>
</el-form-item>
<el-form-item label="网站标题" prop="pcTitle">
<div class="w-80">
<el-input
v-model.trim="formData.pcTitle"
placeholder="请输入PC端网站标题"
maxlength="30"
show-word-limit
/>
</div>
</el-form-item>
<el-form-item label="网站图标" prop="pcIco">
<div>
<material-picker v-model="formData.pcIco" :limit="1" />
<div class="form-tips">建议尺寸100*100像素支持jpgjpegpng格式</div>
</div>
</el-form-item>
<el-form-item label="网站描述" prop="pcDesc">
<div class="w-80">
<el-input v-model.trim="formData.pcDesc" placeholder="请输入PC端网站描述" />
</div>
</el-form-item>
<el-form-item label="网站关键词" prop="pcKeywords">
<div class="w-80">
<el-input
v-model.trim="formData.pcKeywords"
placeholder="请输入PC端网站关键词"
/>
</div>
</el-form-item>
</el-card>
</el-form>
<footer-btns v-perms="['setting:website:save']">
<el-button type="primary" @click="handleSubmit">保存</el-button>
@@ -73,7 +111,12 @@ const formData = reactive({
logo: '', // 网站logo
backdrop: '', // 登录页广告图
shopName: '',
shopLogo: ''
shopLogo: '',
pcDesc: '',
pcIco: '',
pcKeywords: '',
pcLogo: '',
pcTitle: ''
})
// 表单验证
@@ -119,6 +162,27 @@ const rules = {
message: '请选择商城LOGO',
trigger: ['change']
}
],
pcLogo: [
{
required: true,
message: '请选择PC端LOGO',
trigger: ['change']
}
],
pcTitle: [
{
required: true,
message: '请输入PC端网站标题',
trigger: ['blur']
}
],
pcIco: [
{
required: true,
message: '请选择PC端网站图标',
trigger: ['change']
}
]
}

View File

@@ -0,0 +1,63 @@
<template>
<div>
<el-card header="基础使用" shadow="none" class="!border-none">
<div class="flex flex-wrap">
<div class="flex m-4">
<div class="mr-4">选择图片</div>
<material-picker v-model="state.value1" />
</div>
<div class="flex m-4">
<div class="mr-4">选择视频</div>
<material-picker type="video" v-model="state.value3" />
</div>
<div class="flex flex-1 m-4">
<div class="mr-4">多张图片</div>
<div class="flex-1">
<!-- 外层需要有足够的宽度这样预览图和选择按钮才不会直接换行 -->
<material-picker :limit="4" v-model="state.value2" />
</div>
</div>
</div>
</el-card>
<el-card header="进阶用法" shadow="none" class="!border-none mt-4">
<div class="flex flex-wrap">
<div class="flex m-4">
<div class="mr-4">自定义选择器大小</div>
<material-picker size="60px" v-model="state.value4" />
</div>
<div class="flex m-4">
<div class="mr-4">使用插槽</div>
<material-picker v-model="state.value5">
<template #upload>
<el-button>选择文件</el-button>
</template>
</material-picker>
</div>
<div class="flex m-4">
<div class="mr-4">选出地址不带域名</div>
<material-picker :exclude-domain="true" v-model="state.value6" />
</div>
</div>
<div>
<div class="flex m-4 items-center">
<div class="w-20 flex-none">带域名</div>
<el-input class="w-[500px]" :model-value="state.value5" />
</div>
<div class="flex m-4 items-center">
<div class="w-20 flex-none">不带域名</div>
<el-input class="w-[500px]" :model-value="state.value6" />
</div>
</div>
</el-card>
</div>
</template>
<script lang="ts" setup>
const state = reactive({
value1: '',
value2: [],
value3: '',
value4: '',
value5: '',
value6: ''
})
</script>

View File

@@ -0,0 +1,64 @@
<template>
<div>
<el-card header="element-plus图标" shadow="none" class="!border-none">
<div class="flex items-center">
<icon class="m-4" :size="24" name="el-icon-Search" />
<icon class="m-4" :size="24" name="el-icon-Plus" />
<icon class="m-4" :size="24" name="el-icon-FullScreen" />
<icon class="m-4" :size="24" name="el-icon-Setting" />
<icon class="m-4" :size="24" name="el-icon-Warning" />
</div>
</el-card>
<el-card header="本地图标" shadow="none" class="!border-none mt-4">
<div class="flex items-center">
<icon class="m-4" :size="24" name="local-icon-baoxian" />
<icon class="m-4" :size="24" name="local-icon-youhui" />
<icon class="m-4" :size="24" name="local-icon-daiyunying" />
<icon class="m-4" :size="24" name="local-icon-diancanshezhi" />
<icon class="m-4" :size="24" name="local-icon-dianzifapiao" />
</div>
</el-card>
<el-card header="图标选择器" shadow="none" class="!border-none mt-4">
<div class="flex items-center">
<icon-picker v-model="state.value" />
</div>
</el-card>
<el-card
header="element-plus图标库大全点击复制图标名称"
shadow="none"
class="!border-none mt-4"
>
<div class="flex items-center">
<div class="flex flex-wrap">
<div v-for="item in getElementPlusIconNames()" :key="item" class="m-1">
<el-button v-copy="item">
<icon :name="item" :size="20" />
</el-button>
</div>
</div>
</div>
</el-card>
<el-card
header="本地图标库大全(点击复制图标名称)"
shadow="none"
class="!border-none mt-4"
>
<div class="flex items-center">
<div class="flex flex-wrap">
<div v-for="item in getLocalIconNames()" :key="item" class="m-1">
<el-button v-copy="item">
<icon :name="item" :size="20" />
</el-button>
</div>
</div>
</div>
</el-card>
</div>
</template>
<script lang="ts" setup>
import Icon from '@/components/icon/index.vue'
import { getElementPlusIconNames, getLocalIconNames } from '@/components/icon'
const state = reactive({
value: ''
})
</script>

View File

@@ -0,0 +1,12 @@
<template>
<div>
<el-card header="基础使用" shadow="none" class="!border-none">
<link-picker v-model="state.value1" />
</el-card>
</div>
</template>
<script lang="ts" setup>
const state = reactive({
value1: {}
})
</script>

View File

@@ -0,0 +1,9 @@
<template>
<div>
<el-card header="基础使用" shadow="none" class="!border-none">
<overflow-tooltip class="w-20 m-4" content="超出自动打点,悬浮弹窗显示全部内容" />
<overflow-tooltip class="w-60 m-4" content="超出自动打点,悬浮弹窗显示全部内容" />
</el-card>
</div>
</template>
<script lang="ts" setup></script>

View File

@@ -0,0 +1,48 @@
<template>
<div>
<el-card header="基础使用" shadow="none" class="!border-none">
<div class="flex flex-wrap">
<div class="m-4">
<popover-input @confirm="onConfirm">
<template #default>
<el-button> 点击输入 </el-button>
</template>
</popover-input>
</div>
<div class="m-4">
<popover-input type="number" @confirm="onConfirm">
<template #default>
<el-button> 输入数字 </el-button>
</template>
</popover-input>
</div>
<div class="m-4">
<popover-input size="small" @confirm="onConfirm">
<template #default>
<el-button> 调整大小 </el-button>
</template>
</popover-input>
</div>
<div class="m-4">
<popover-input :limit="20" :show-limit="true" @confirm="onConfirm">
<template #default>
<el-button> 限制输入长度 </el-button>
</template>
</popover-input>
</div>
<div class="m-4">
<popover-input value="默认值" @confirm="onConfirm">
<template #default>
<el-button> 默认值 </el-button>
</template>
</popover-input>
</div>
</div>
</el-card>
</div>
</template>
<script lang="ts" setup>
const onConfirm = (value: string) => {
console.log(value)
}
</script>

View File

@@ -0,0 +1,16 @@
<template>
<div>
<el-card header="基础使用" shadow="none" class="!border-none">
<editor v-model="state.value1" height="500px" />
</el-card>
<el-card header="简洁模式" shadow="none" class="!border-none mt-4">
<editor v-model="state.value2" height="500px" mode="simple" />
</el-card>
</div>
</template>
<script lang="ts" setup>
const state = reactive({
value1: '',
value2: ''
})
</script>

View File

@@ -0,0 +1,65 @@
<template>
<div>
<el-card header="基础使用" shadow="none" class="!border-none">
<div class="flex flex-wrap">
<div class="m-4">
<upload
@change="onChange"
@success="onSuccess"
@error="onError"
:show-progress="true"
>
<el-button type="primary">上传图片</el-button>
</upload>
</div>
<div class="m-4">
<upload
type="video"
@change="onChange"
@success="onSuccess"
@error="onError"
:show-progress="true"
>
<el-button type="primary">上传视频</el-button>
</upload>
</div>
<div class="m-4">
<upload
:multiple="false"
@change="onChange"
@success="onSuccess"
@error="onError"
:show-progress="true"
>
<el-button type="primary">取消多选</el-button>
</upload>
</div>
<div class="m-4">
<upload
:limit="2"
@change="onChange"
@success="onSuccess"
@error="onError"
:show-progress="true"
>
<el-button type="primary">一次最多上传2张</el-button>
</upload>
</div>
</div>
</el-card>
</div>
</template>
<script lang="ts" setup>
import Upload from '@/components/upload/index.vue'
const onChange = (file: any) => {
console.log('上传文件的状态发生改变', file)
}
const onSuccess = (file: any) => {
console.log('上传文件成功', file)
}
const onError = (file: any) => {
console.log('上传文件失败', file)
}
</script>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

View File

@@ -141,8 +141,8 @@ import menu_generator from './image/menu_generator.png'
import menu_file from './image/menu_file.png'
import menu_auth from './image/menu_auth.png'
import menu_web from './image/menu_web.png'
import qq_group from './image/qq_group.png'
import customer_service from './image/customer_service.png'
import oa_code from './image/oa_code.png'
import service_code from './image/service_code.png'
// 表单数据
const workbenchData: any = reactive({
version: {
@@ -156,12 +156,12 @@ const workbenchData: any = reactive({
},
support: [
{
image: qq_group,
title: '扫码进入QQ交流群',
desc: '疑难疑点 进入QQ群'
image: oa_code,
title: '官方公众号',
desc: '关注官方公众号'
},
{
image: customer_service,
image: service_code,
title: '添加企业客服微信',
desc: '想了解更多请添加客服'
}
@@ -186,7 +186,7 @@ const workbenchData: any = reactive({
{
name: '字典管理',
image: menu_dict,
url: '/setting/dict'
url: '/dev_tools/dict'
},
{
name: '代码生成器',

View File

@@ -1 +0,0 @@
import o from"./error.2b025df1.js";import{d as r,o as t,c as m,V as p}from"./@vue.cab01781.js";import"./element-plus.8115766e.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./vue-router.5046cc50.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";const i={class:"error404"},L=r({__name:"404",setup(e){return(u,c)=>(t(),m("div",i,[p(o,{code:"404",title:"\u54CE\u5440\uFF0C\u51FA\u9519\u4E86\uFF01\u60A8\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u2026"})]))}});export{L as default};

View File

@@ -1 +0,0 @@
import"./add-nav.vue_vue_type_script_setup_true_lang.4d0f9da8.js";import{_ as S}from"./add-nav.vue_vue_type_script_setup_true_lang.4d0f9da8.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.2e76481a.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.45f93d74.js";import"./index.15556fef.js";import"./picker.6a412a5d.js";import"./index.3647ec2c.js";import"./usePaging.52ce9b34.js";import"./index.vue_vue_type_script_setup_true_lang.23d9d5f1.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{S as default};

View File

@@ -1 +0,0 @@
import{C as F,w as b}from"./element-plus.8115766e.js";import{_ as v}from"./index.2e76481a.js";import{_ as A}from"./picker.45f93d74.js";import{_ as B}from"./picker.6a412a5d.js";import{f as _,b as y}from"./index.53063276.js";import{d as C,o as u,c as r,a as e,W as D,a8 as E,L as w,M as m,V as t,T as U}from"./@vue.cab01781.js";const N={class:"bg-fill-light flex items-center w-full p-4 mb-4"},$={class:"upload-btn w-[60px] h-[60px]"},z={class:"ml-3 flex-1"},L={class:"flex"},T=e("span",{class:"text-tx-regular flex-none mr-3"},"\u540D\u79F0",-1),I={class:"flex mt-[18px]"},M=e("span",{class:"text-tx-regular flex-none mr-3"},"\u94FE\u63A5",-1),P=U("\u6DFB\u52A0"),K=C({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:10},min:{type:Number,default:1}},setup(d){const l=d,p=()=>{var a;((a=l.modelValue)==null?void 0:a.length)<l.max?l.modelValue.push({image:"",name:"\u5BFC\u822A\u540D\u79F0",link:{}}):_.msgError(`\u6700\u591A\u6DFB\u52A0${l.max}\u4E2A`)},i=a=>{var s;if(((s=l.modelValue)==null?void 0:s.length)<=l.min)return _.msgError(`\u6700\u5C11\u4FDD\u7559${l.min}\u4E2A`);l.modelValue.splice(a,1)};return(a,s)=>{const f=y,x=B,V=F,h=A,g=v,k=b;return u(),r("div",null,[e("div",null,[(u(!0),r(D,null,E(d.modelValue,(o,c)=>(u(),w(g,{class:"max-w-[400px]",key:c,onClose:n=>i(c)},{default:m(()=>[e("div",N,[t(x,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:m(()=>[e("div",$,[t(f,{name:"el-icon-Plus",size:20})])]),_:2},1032,["modelValue","onUpdate:modelValue"]),e("div",z,[e("div",L,[T,t(V,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),e("div",I,[M,t(h,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])])])])]),_:2},1032,["onClose"]))),128))]),e("div",null,[t(k,{type:"primary",onClick:p},{default:m(()=>[P]),_:1})])])}}});export{K as _};

View File

@@ -1 +0,0 @@
import"./attr-setting.vue_vue_type_script_setup_true_lang.173991cf.js";import{_ as cm}from"./attr-setting.vue_vue_type_script_setup_true_lang.173991cf.js";import"./index.8b3d114e.js";import"./attr.vue_vue_type_script_setup_true_lang.22676784.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.2e76481a.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.45f93d74.js";import"./index.15556fef.js";import"./picker.6a412a5d.js";import"./index.3647ec2c.js";import"./usePaging.52ce9b34.js";import"./index.vue_vue_type_script_setup_true_lang.23d9d5f1.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";import"./content.vue_vue_type_script_setup_true_lang.c187246b.js";import"./decoration-img.e07a9eab.js";import"./attr.vue_vue_type_script_setup_true_lang.7393e332.js";import"./content.cbf0d4cf.js";import"./attr.vue_vue_type_script_setup_true_lang.dd81a142.js";import"./add-nav.vue_vue_type_script_setup_true_lang.4d0f9da8.js";import"./content.1302931d.js";import"./attr.vue_vue_type_script_setup_true_lang.bec38aae.js";import"./content.vue_vue_type_script_setup_true_lang.e5408794.js";import"./attr.vue_vue_type_script_setup_true_lang.06a2fa18.js";import"./content.250698bc.js";import"./decoration.a3e48437.js";import"./attr.vue_vue_type_script_setup_true_lang.0b87e513.js";import"./content.d99d9dd5.js";import"./attr.vue_vue_type_script_setup_true_lang.4d4e4b9a.js";import"./content.vue_vue_type_script_setup_true_lang.f8910cfe.js";import"./attr.vue_vue_type_script_setup_true_lang.0583d8bc.js";import"./content.90ee9825.js";export{cm as default};

View File

@@ -1 +0,0 @@
import{w as i}from"./index.8b3d114e.js";import{d as l,o as t,c as d,a as m,U as f,L as c,R as p,u as g,aK as b}from"./@vue.cab01781.js";const u={class:"pages-setting"},w={class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2"},k=l({__name:"attr-setting",props:{widget:{type:Object,default:()=>({})}},setup(e){return(y,x)=>{var s,a,n,o,r;return t(),d("div",u,[m("div",w,f((s=e.widget)==null?void 0:s.title),1),(t(),c(b,null,[(t(),c(p((n=g(i)[(a=e.widget)==null?void 0:a.name])==null?void 0:n.attr),{class:"pt-5 pr-4",content:(o=e.widget)==null?void 0:o.content,styles:(r=e.widget)==null?void 0:r.styles},null,8,["content","styles"]))],1024))])}}});export{k as _};

View File

@@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.dd81a142.js";import{_ as T}from"./attr.vue_vue_type_script_setup_true_lang.dd81a142.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./add-nav.vue_vue_type_script_setup_true_lang.4d0f9da8.js";import"./index.2e76481a.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.45f93d74.js";import"./index.15556fef.js";import"./picker.6a412a5d.js";import"./index.3647ec2c.js";import"./usePaging.52ce9b34.js";import"./index.vue_vue_type_script_setup_true_lang.23d9d5f1.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{T as default};

View File

@@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.7393e332.js";import{_ as R}from"./attr.vue_vue_type_script_setup_true_lang.7393e332.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./picker.6a412a5d.js";import"./index.15556fef.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./index.3647ec2c.js";import"./usePaging.52ce9b34.js";import"./index.2e76481a.js";import"./index.vue_vue_type_script_setup_true_lang.23d9d5f1.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{R as default};

View File

@@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.22676784.js";import{_ as S}from"./attr.vue_vue_type_script_setup_true_lang.22676784.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.2e76481a.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.45f93d74.js";import"./index.15556fef.js";import"./picker.6a412a5d.js";import"./index.3647ec2c.js";import"./usePaging.52ce9b34.js";import"./index.vue_vue_type_script_setup_true_lang.23d9d5f1.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{S as default};

View File

@@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.bec38aae.js";import{_ as T}from"./attr.vue_vue_type_script_setup_true_lang.bec38aae.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./add-nav.vue_vue_type_script_setup_true_lang.4d0f9da8.js";import"./index.2e76481a.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.45f93d74.js";import"./index.15556fef.js";import"./picker.6a412a5d.js";import"./index.3647ec2c.js";import"./usePaging.52ce9b34.js";import"./index.vue_vue_type_script_setup_true_lang.23d9d5f1.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{T as default};

View File

@@ -1 +0,0 @@
import"./attr.vue_vue_type_script_setup_true_lang.4d4e4b9a.js";import{_ as S}from"./attr.vue_vue_type_script_setup_true_lang.4d4e4b9a.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.2e76481a.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./picker.45f93d74.js";import"./index.15556fef.js";import"./picker.6a412a5d.js";import"./index.3647ec2c.js";import"./usePaging.52ce9b34.js";import"./index.vue_vue_type_script_setup_true_lang.23d9d5f1.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{S as default};

View File

@@ -1 +0,0 @@
import{O as y,P as U,D as v,C as w,w as N,F as O}from"./element-plus.8115766e.js";import{_ as $}from"./index.2e76481a.js";import{_ as j}from"./picker.45f93d74.js";import{_ as I}from"./picker.6a412a5d.js";import{f}from"./index.53063276.js";import{d as L,o as c,c as E,V as e,M as t,a as _,W as R,a8 as T,L as V,S as G,T as r}from"./@vue.cab01781.js";const M=r("\u5F00\u542F"),P=r("\u505C\u7528"),S={class:"flex-1"},W=_("div",{class:"form-tips"},"\u6700\u591A\u6DFB\u52A05\u5F20\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A750px*340px",-1),q={class:"bg-fill-light flex items-center w-full p-4 mt-4"},z={class:"ml-3 flex-1"},H=r("\u6DFB\u52A0\u56FE\u7247"),ee=L({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(a){const d=a,m=5,b=()=>{var n;((n=d.content.data)==null?void 0:n.length)<m?d.content.data.push({image:"",name:"",link:{}}):f.msgError(`\u6700\u591A\u6DFB\u52A0${m}\u5F20\u56FE\u7247`)},g=n=>{var u;if(((u=d.content.data)==null?void 0:u.length)<=1)return f.msgError("\u6700\u5C11\u4FDD\u7559\u4E00\u5F20\u56FE\u7247");d.content.data.splice(n,1)};return(n,u)=>{const p=y,h=U,s=v,k=I,x=w,B=j,A=$,C=N,D=O;return c(),E("div",null,[e(D,{"label-width":"70px"},{default:t(()=>{var i;return[e(s,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(h,{modelValue:a.content.enabled,"onUpdate:modelValue":u[0]||(u[0]=o=>a.content.enabled=o)},{default:t(()=>[e(p,{label:1},{default:t(()=>[M]),_:1}),e(p,{label:0},{default:t(()=>[P]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(s,{label:"\u56FE\u7247\u8BBE\u7F6E"},{default:t(()=>[_("div",S,[W,(c(!0),E(R,null,T(a.content.data,(o,F)=>(c(),V(A,{key:F,onClose:l=>g(F),class:"max-w-[400px]"},{default:t(()=>[_("div",q,[e(k,{modelValue:o.image,"onUpdate:modelValue":l=>o.image=l,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),_("div",z,[e(s,{label:"\u56FE\u7247\u540D\u79F0"},{default:t(()=>[e(x,{modelValue:o.name,"onUpdate:modelValue":l=>o.name=l,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(s,{class:"mt-[18px]",label:"\u56FE\u7247\u94FE\u63A5"},{default:t(()=>[e(B,{modelValue:o.link,"onUpdate:modelValue":l=>o.link=l},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)])])]),_:2},1032,["onClose"]))),128))])]),_:1}),((i=a.content.data)==null?void 0:i.length)<m?(c(),V(s,{key:0},{default:t(()=>[e(C,{type:"primary",onClick:b},{default:t(()=>[H]),_:1})]),_:1})):G("",!0)]}),_:1})])}}});export{ee as _};

View File

@@ -1 +0,0 @@
import{O as y,P as U,D as v,C as w,w as N,F as O}from"./element-plus.8115766e.js";import{_ as $}from"./index.2e76481a.js";import{_ as j}from"./picker.45f93d74.js";import{_ as I}from"./picker.6a412a5d.js";import{f}from"./index.53063276.js";import{d as L,o as c,c as E,V as e,M as t,a as _,W as R,a8 as T,L as V,S as G,T as r}from"./@vue.cab01781.js";const M=r("\u5F00\u542F"),P=r("\u505C\u7528"),S={class:"flex-1"},W=_("div",{class:"form-tips"},"\u6700\u591A\u6DFB\u52A05\u5F20\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A750px*200px",-1),q={class:"bg-fill-light flex items-center w-full p-4 mt-4"},z={class:"ml-3 flex-1"},H=r("\u6DFB\u52A0\u56FE\u7247"),ee=L({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(a){const d=a,m=5,b=()=>{var n;((n=d.content.data)==null?void 0:n.length)<m?d.content.data.push({image:"",name:"",link:{}}):f.msgError(`\u6700\u591A\u6DFB\u52A0${m}\u5F20\u56FE\u7247`)},g=n=>{var u;if(((u=d.content.data)==null?void 0:u.length)<=1)return f.msgError("\u6700\u5C11\u4FDD\u7559\u4E00\u5F20\u56FE\u7247");d.content.data.splice(n,1)};return(n,u)=>{const p=y,h=U,s=v,k=I,x=w,B=j,A=$,C=N,D=O;return c(),E("div",null,[e(D,{"label-width":"70px"},{default:t(()=>{var i;return[e(s,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(h,{modelValue:a.content.enabled,"onUpdate:modelValue":u[0]||(u[0]=o=>a.content.enabled=o)},{default:t(()=>[e(p,{label:1},{default:t(()=>[M]),_:1}),e(p,{label:0},{default:t(()=>[P]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(s,{label:"\u56FE\u7247\u8BBE\u7F6E"},{default:t(()=>[_("div",S,[W,(c(!0),E(R,null,T(a.content.data,(o,F)=>(c(),V(A,{key:F,onClose:l=>g(F),class:"max-w-[400px]"},{default:t(()=>[_("div",q,[e(k,{modelValue:o.image,"onUpdate:modelValue":l=>o.image=l,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),_("div",z,[e(s,{label:"\u56FE\u7247\u540D\u79F0"},{default:t(()=>[e(x,{modelValue:o.name,"onUpdate:modelValue":l=>o.name=l,placeholder:"\u8BF7\u8F93\u5165\u540D\u79F0"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e(s,{class:"mt-[18px]",label:"\u56FE\u7247\u94FE\u63A5"},{default:t(()=>[e(B,{modelValue:o.link,"onUpdate:modelValue":l=>o.link=l},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)])])]),_:2},1032,["onClose"]))),128))])]),_:1}),((i=a.content.data)==null?void 0:i.length)<m?(c(),V(s,{key:0},{default:t(()=>[e(C,{type:"primary",onClick:b},{default:t(()=>[H]),_:1})]),_:1})):G("",!0)]}),_:1})])}}});export{ee as _};

View File

@@ -1 +0,0 @@
import"./auth.vue_vue_type_script_setup_true_lang.fd1472cb.js";import{_ as K}from"./auth.vue_vue_type_script_setup_true_lang.fd1472cb.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./role.c2f1c968.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./menu.1fa1a49d.js";import"./index.15556fef.js";export{K as default};

View File

@@ -1 +0,0 @@
import"./code-preview.vue_vue_type_script_setup_true_lang.06019e12.js";import{_ as H}from"./code-preview.vue_vue_type_script_setup_true_lang.06019e12.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";export{H as default};

View File

@@ -1 +0,0 @@
import{r as n}from"./index.53063276.js";function r(e){return n.get({url:"/gen/list",params:e})}function a(e){return n.get({url:"/gen/db",params:e})}function o(e){return n.post({url:"/gen/importTable",params:e},{isParamsToData:!1})}function s(e){return n.get({url:"/gen/detail",params:e})}function u(e){return n.post({url:"/gen/syncTable",params:e},{isParamsToData:!1})}function l(e){return n.post({url:"/gen/delTable",params:e})}function g(e){return n.post({url:"/gen/editTable",params:e})}function i(e){return n.get({url:"/gen/previewCode",params:e})}function d(e){return n.get({url:"/gen/genCode",params:e})}function f(e){return n.get({responseType:"blob",url:"/gen/downloadCode",params:e},{isTransformResponse:!1})}export{l as a,i as b,d as c,f as d,r as e,o as f,g,a as h,u as s,s as t};

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
import"./content.vue_vue_type_script_setup_true_lang.e5408794.js";import{_ as I}from"./content.vue_vue_type_script_setup_true_lang.e5408794.js";import"./decoration-img.e07a9eab.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";export{I as default};

View File

@@ -1 +0,0 @@
import"./content.vue_vue_type_script_setup_true_lang.c187246b.js";import{_ as I}from"./content.vue_vue_type_script_setup_true_lang.c187246b.js";import"./decoration-img.e07a9eab.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";export{I as default};

View File

@@ -1 +0,0 @@
import"./content.vue_vue_type_script_setup_true_lang.f8910cfe.js";import{_ as I}from"./content.vue_vue_type_script_setup_true_lang.f8910cfe.js";import"./decoration-img.e07a9eab.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";export{I as default};

View File

@@ -1 +0,0 @@
import o from"./decoration-img.e07a9eab.js";import{d as s,e as c,o as r,c as i,a as p,V as d,u as m}from"./@vue.cab01781.js";const u={class:"banner"},_={class:"banner-image"},h=s({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){const n=t,a=c(()=>{const{data:e}=n.content;return Array.isArray(e)&&e[0]?e[0].image:""});return(e,l)=>(r(),i("div",u,[p("div",_,[d(o,{width:"100%",height:"170px",src:m(a),fit:"contain"},null,8,["src"])])]))}});export{h as _};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

View File

@@ -1 +0,0 @@
import"./data-table.vue_vue_type_script_setup_true_lang.f8226619.js";import{_ as K}from"./data-table.vue_vue_type_script_setup_true_lang.f8226619.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.15556fef.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./usePaging.52ce9b34.js";import"./code.b9c692cc.js";export{K as default};

View File

@@ -1 +0,0 @@
import{N as A,I as B,o as w,D as N,w as T,F as h}from"./element-plus.8115766e.js";import{_ as P}from"./index.vue_vue_type_script_setup_true_lang.23d9d5f1.js";import{m as L,f as R,b as V}from"./index.53063276.js";import{u as $}from"./vue-router.5046cc50.js";import{g as I,u as q}from"./consumer.79e96512.js";import{d as y,a0 as O,s as S,ag as U,o as i,c as j,V as e,M as t,a as C,T as l,U as u,O as f,L as F}from"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./lodash.b68d77aa.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";const z={class:"bg-page py-5 pl-20 mb-10"},H=C("div",{class:"mb-3 text-tx-regular"},"\u7528\u6237\u5934\u50CF",-1),M=y({name:"consumerDetail"}),xe=y({...M,setup(G){const b=$(),o=O({avatar:"",channel:"",createTime:"",lastLoginIp:"",lastLoginTime:"",mobile:"",nickname:"",realName:0,sex:0,sn:"",username:""}),D=S(),E=async()=>{const n=await I({id:b.query.id});Object.keys(o).forEach(a=>{o[a]=n[a]})},m=async(n,a)=>{L(n)||(await q({id:b.query.id,field:a,value:n}),R.msgSuccess("\u7F16\u8F91\u6210\u529F"),E())};return E(),(n,a)=>{const g=A,v=B,k=w,r=N,p=V,d=T,c=P,x=h,_=U("perms");return i(),j("div",null,[e(v,{class:"!border-none",shadow:"never"},{default:t(()=>[e(g,{content:"\u7528\u6237\u8BE6\u60C5",onBack:a[0]||(a[0]=s=>n.$router.back())})]),_:1}),e(v,{class:"mt-4 !border-none",header:"\u57FA\u672C\u8D44\u6599",shadow:"never"},{default:t(()=>[e(x,{ref_key:"formRef",ref:D,class:"ls-form",model:o,"label-width":"120px"},{default:t(()=>[C("div",z,[H,e(k,{src:o.avatar,size:58},null,8,["src"])]),e(r,{label:"\u7528\u6237\u7F16\u53F7\uFF1A"},{default:t(()=>[l(u(o.sn),1)]),_:1}),e(r,{label:"\u7528\u6237\u6635\u79F0\uFF1A"},{default:t(()=>[l(u(o.nickname),1)]),_:1}),e(r,{label:"\u8D26\u53F7\uFF1A"},{default:t(()=>[l(u(o.username)+" ",1),e(c,{class:"ml-[10px]",onConfirm:a[1]||(a[1]=s=>m(s,"username"))},{default:t(()=>[f((i(),F(d,{type:"primary",link:""},{default:t(()=>[e(p,{name:"el-icon-EditPen"})]),_:1})),[[_,["user:edit"]]])]),_:1})]),_:1}),e(r,{label:"\u771F\u5B9E\u59D3\u540D\uFF1A"},{default:t(()=>[l(u(o.realName||"-")+" ",1),e(c,{class:"ml-[10px]",onConfirm:a[2]||(a[2]=s=>m(s,"realName"))},{default:t(()=>[f((i(),F(d,{type:"primary",link:""},{default:t(()=>[e(p,{name:"el-icon-EditPen"})]),_:1})),[[_,["user:edit"]]])]),_:1})]),_:1}),e(r,{label:"\u6027\u522B\uFF1A"},{default:t(()=>[l(u(o.sex)+" ",1),e(c,{class:"ml-[10px]",type:"select",options:[{label:"\u672A\u77E5",value:0},{label:"\u7537",value:1},{label:"\u5973",value:2}],onConfirm:a[3]||(a[3]=s=>m(s,"sex"))},{default:t(()=>[f((i(),F(d,{type:"primary",link:""},{default:t(()=>[e(p,{name:"el-icon-EditPen"})]),_:1})),[[_,["user:edit"]]])]),_:1})]),_:1}),e(r,{label:"\u8054\u7CFB\u7535\u8BDD\uFF1A"},{default:t(()=>[l(u(o.mobile||"-")+" ",1),e(c,{class:"ml-[10px]",type:"number",onConfirm:a[4]||(a[4]=s=>m(s,"mobile"))},{default:t(()=>[f((i(),F(d,{type:"primary",link:""},{default:t(()=>[e(p,{name:"el-icon-EditPen"})]),_:1})),[[_,["user:edit"]]])]),_:1})]),_:1}),e(r,{label:"\u6CE8\u518C\u6765\u6E90\uFF1A"},{default:t(()=>[l(u(o.channel),1)]),_:1}),e(r,{label:"\u6CE8\u518C\u65F6\u95F4\uFF1A"},{default:t(()=>[l(u(o.createTime),1)]),_:1}),e(r,{label:"\u6700\u8FD1\u767B\u5F55\u65F6\u95F4\uFF1A"},{default:t(()=>[l(u(o.lastLoginTime),1)]),_:1})]),_:1},8,["model"])]),_:1})])}}});export{xe as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
import"./edit.vue_vue_type_script_setup_true_lang.e90a4447.js";import{_ as J}from"./edit.vue_vue_type_script_setup_true_lang.e90a4447.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./message.64de6ab3.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./index.15556fef.js";export{J as default};

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
import"./edit.vue_vue_type_script_setup_true_lang.cf5a43ab.js";import{_ as J}from"./edit.vue_vue_type_script_setup_true_lang.cf5a43ab.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.15556fef.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./dict.3012ac4c.js";export{J as default};

View File

@@ -1 +0,0 @@
import"./edit.vue_vue_type_script_setup_true_lang.e99120b3.js";import{_ as K}from"./edit.vue_vue_type_script_setup_true_lang.e99120b3.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./department.8edce8dc.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./index.15556fef.js";import"./useDictOptions.311ad035.js";export{K as default};

View File

@@ -1 +0,0 @@
import"./edit.vue_vue_type_script_setup_true_lang.5e78bb2a.js";import{_ as J}from"./edit.vue_vue_type_script_setup_true_lang.5e78bb2a.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./role.c2f1c968.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./index.15556fef.js";export{J as default};

View File

@@ -1 +0,0 @@
import"./edit.vue_vue_type_script_setup_true_lang.2aee2dbe.js";import{_ as J}from"./edit.vue_vue_type_script_setup_true_lang.2aee2dbe.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./menu.1fa1a49d.js";import"./index.15556fef.js";export{J as default};

View File

@@ -1 +0,0 @@
import"./edit.vue_vue_type_script_setup_true_lang.7b9a68ad.js";import{_ as I}from"./edit.vue_vue_type_script_setup_true_lang.7b9a68ad.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./index.15556fef.js";export{I as default};

View File

@@ -1 +0,0 @@
import"./edit.vue_vue_type_script_setup_true_lang.777802bf.js";import{_ as J}from"./edit.vue_vue_type_script_setup_true_lang.777802bf.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./article.7422eecc.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./index.15556fef.js";export{J as default};

View File

@@ -1 +0,0 @@
import"./edit.vue_vue_type_script_setup_true_lang.ab8ef30c.js";import{_ as J}from"./edit.vue_vue_type_script_setup_true_lang.ab8ef30c.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./wx_oa.0c8a7653.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./index.15556fef.js";export{J as default};

View File

@@ -1 +0,0 @@
import"./edit.vue_vue_type_script_setup_true_lang.ae578893.js";import{_ as J}from"./edit.vue_vue_type_script_setup_true_lang.ae578893.js";import"./element-plus.8115766e.js";import"./@vue.cab01781.js";import"./@vueuse.724ed0af.js";import"./@element-plus.92b4185f.js";import"./lodash-es.29c53eac.js";import"./dayjs.66926594.js";import"./axios.2d915936.js";import"./async-validator.fb49d0f5.js";import"./@ctrl.82a509e0.js";import"./@popperjs.36402333.js";import"./escape-html.e5dfadb9.js";import"./normalize-wheel-es.8aeb3683.js";import"./index.15556fef.js";import"./index.53063276.js";import"./lodash.b68d77aa.js";import"./vue-router.5046cc50.js";import"./pinia.e85e8286.js";import"./vue-demi.bfae2336.js";import"./css-color-function.a8f9466d.js";import"./color.903ca10f.js";import"./clone.9d64bb7a.js";import"./color-convert.69e17089.js";import"./color-string.e356f5de.js";import"./color-name.e7a4e1d3.js";import"./nprogress.a96d99f2.js";import"./vue-clipboard3.91d4fd5f.js";import"./clipboard.c0a70c0c.js";import"./echarts.6ad8c478.js";import"./zrender.f91f2f01.js";import"./highlight.js.4ebdf9a4.js";import"./@highlightjs.0ab41b7b.js";import"./dict.3012ac4c.js";export{J as default};

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