61 Commits

Author SHA1 Message Date
TinyAnts
abc001b76b Merge branch 'release/1.3.1' 2022-09-21 17:42:27 +08:00
TinyAnts
4574db504a 调整SQL文件 2022-09-21 17:38:49 +08:00
TinyAnts
dfc50e2623 调整版本号 2022-09-21 17:33:24 +08:00
Jason
04290c78de 打包 2022-09-21 17:24:38 +08:00
Jason
a717ee326c code lint 2022-09-21 16:44:00 +08:00
Jason
5e844a1d38 后台页面调整 2022-09-21 16:42:53 +08:00
Jason
cbdb12f5d7 修改搜索页面样式问题 2022-09-21 14:11:23 +08:00
TinyAnts
a8e08053be 修复素材移动bug 2022-09-21 11:59:22 +08:00
TinyAnts
a70ec891d7 增加基类继承 2022-09-21 11:35:51 +08:00
TinyAnts
d12cae1937 调整验证器增加基类 2022-09-21 11:29:36 +08:00
TinyAnts
78726b8373 增加验证器基类 2022-09-21 11:21:15 +08:00
TinyAnts
5dfea2ad46 修复文章分类删除bug 2022-09-21 10:32:17 +08:00
TinyAnts
6e0f1ade38 修复文章分类删除bug 2022-09-21 10:29:58 +08:00
TinyAnts
f89d34915b 忽略文件 2022-09-21 10:26:42 +08:00
TinyAnts
8db154f01d 增加idea注释 2022-09-21 10:24:50 +08:00
TinyAnts
878f740bda 修复系统管理员账号被可被慕改bug 2022-09-21 10:07:24 +08:00
TinyAnts
1df98b147a 优化配置和静态资源 2022-09-21 09:59:51 +08:00
Jason
cadad25176 菜单调整,资讯图标预览调整 2022-09-20 18:50:08 +08:00
Jason
73984d52c0 Merge branch 'develop' of https://gitee.com/likeshop_gitee/likeadmin-java into develop 2022-09-20 18:49:02 +08:00
Jason
c3ea44292f 视频播放 2022-09-20 18:48:47 +08:00
TinyAnts
02317bee8e 调整视频上传大小限制 2022-09-20 18:43:48 +08:00
Jason
61dc2bf16d 调整登录页面样式 2022-09-20 16:23:29 +08:00
Jason
db45652f28 打包 2022-09-20 15:44:27 +08:00
Jason
51b35b664d 调整备注 2022-09-20 12:15:36 +08:00
Jason
29999f4e4a 调整登录,注册 2022-09-20 12:15:08 +08:00
Jason
77fb6acc2d 个人中心账号复制,切换tab页面时报错 2022-09-20 11:36:41 +08:00
Jason
b512eac708 调整工具函数 2022-09-20 11:06:54 +08:00
Jason
654c7b3c11 后台打包 2022-09-20 11:00:40 +08:00
Jason
fe5522dc2d 多标签tabs 调整 2022-09-20 10:58:38 +08:00
Jason
aee93d81b4 修改部门验证 2022-09-19 15:26:00 +08:00
Jason
56da1c18dd 部分多行文本框添加字数限制 2022-09-19 15:20:43 +08:00
Jason
ccd4747203 修复富文本编辑器样式问题 2022-09-19 14:52:45 +08:00
Jason
5240b89b35 后台打包 2022-09-19 14:04:54 +08:00
Jason
db7a0e3161 后台-岗位-文案错误 2022-09-19 12:13:58 +08:00
Jason
8f52978021 后台-热搜-删除搜索的id 2022-09-19 12:13:26 +08:00
Jason
83469090dd 字典数据无法访问bug 2022-09-19 12:12:40 +08:00
Jason
fa4de3214d Merge branch 'develop' of https://gitee.com/likeshop_gitee/likeadmin-java into develop 2022-09-19 12:12:03 +08:00
Jason
65da3d4a3a 素材中心优化 2022-09-19 12:11:54 +08:00
TinyAnts
a7e50bf511 修复后台上传视频获取不到名称bug 2022-09-19 11:57:35 +08:00
TinyAnts
e40689135f 修复前端默认logo与后台不一致bug 2022-09-19 10:10:43 +08:00
TinyAnts
3560cd45c5 Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-09-19 10:07:44 +08:00
TinyAnts
8d75e4c934 修复微信授权登录都是同一个账号bug 2022-09-19 10:07:27 +08:00
lr
9393de9063 Merge branch 'hotfix/lr-20220818-redeme' 2022-09-18 16:29:40 +08:00
lr
e0f11a53e2 Merge branch 'master' into develop 2022-09-18 16:29:40 +08:00
lr
b142dee20f 调整REMDME信息 2022-09-18 16:29:18 +08:00
lr
3d83b85588 Merge branch 'hotfix/lr-20220818' 2022-09-18 16:27:04 +08:00
lr
18cbb4374c Merge branch 'master' into develop 2022-09-18 16:27:04 +08:00
lr
ba7560b9e2 调整README信息 2022-09-18 16:26:42 +08:00
Jason
b7e010b634 Merge tag 'wjx202209160658' into develop
no message
2022-09-16 18:59:59 +08:00
Jason
8167380abe Merge branch 'hotfix/wjx202209160658' 2022-09-16 18:59:59 +08:00
Jason
c69c104cd6 打包 2022-09-16 18:59:46 +08:00
Jason
370cde09c4 Merge tag 'wjx202209160657' into develop
no message
2022-09-16 18:58:25 +08:00
Jason
5ae19337d9 Merge branch 'hotfix/wjx202209160657' 2022-09-16 18:58:25 +08:00
Jason
387b38a009 删除h5打包 2022-09-16 18:58:10 +08:00
Jason
8ee7d03ce2 Merge tag 'wjx202209160652' into develop
no message

# Conflicts:
#	h5/assets/account.304e4c09.js
#	h5/assets/index.5ddae38f.js
#	h5/assets/news-card.cacc1bdf.js
#	h5/assets/pages-bind_mobile-bind_mobile.1e39d2a7.js
#	h5/assets/pages-change_password-change_password.5516de7d.js
#	h5/assets/pages-collection-collection.5d101da7.js
#	h5/assets/pages-customer_service-customer_service.35e5d1d2.js
#	h5/assets/pages-forget_pwd-forget_pwd.0cebded6.js
#	h5/assets/pages-index-index.e7cbfcb8.js
#	h5/assets/pages-login-login.3d278588.js
#	h5/assets/pages-news-news.e71c4738.js
#	h5/assets/pages-news_detail-news_detail.32038bef.js
#	h5/assets/pages-register-register.07ea7f19.js
#	h5/assets/pages-search-search.fb4812e5.js
#	h5/assets/pages-user-user.97ccd207.js
#	h5/assets/pages-user_data-user_data.1a85e802.js
#	h5/assets/pages-user_set-user_set.a86f2f01.js
#	h5/assets/pages-webview-webview.320ac922.js
#	h5/assets/tabbar.3ac4b4ec.js
#	h5/assets/u-avatar.aaafa077.js
#	h5/assets/u-button.f89bd070.js
#	h5/assets/u-checkbox.e15726da.js
#	h5/assets/u-form-item.f2bc17f6.js
#	h5/assets/u-form.e908a5a2.js
#	h5/assets/u-icon.947d1557.js
#	h5/assets/u-image.f03d2bad.js
#	h5/assets/u-parse.466924cc.js
#	h5/assets/u-popup.c389a818.js
#	h5/assets/u-search.939c3f7f.js
#	h5/assets/u-verification-code.8f91217a.js
#	h5/assets/uni.fb5f5659.css
#	h5/assets/uni_modules-vk-uview-ui-components-u-avatar-cropper-u-avatar-cropper.e582869e.js
#	h5/assets/z-paging.34848bf3.js
#	h5/index.html
2022-09-16 18:55:34 +08:00
Jason
9be1caf811 Merge tag 'wjx202209160644' into develop
no message

# Conflicts:
#	h5/assets/account.461df912.js
#	h5/assets/index.4cc19f69.js
#	h5/assets/news-card.f9659a05.js
#	h5/assets/news.7d996083.js
#	h5/assets/pages-as_us-as_us.8bc9b466.js
#	h5/assets/pages-bind_mobile-bind_mobile.34dd4d4a.js
#	h5/assets/pages-change_password-change_password.16c95aef.js
#	h5/assets/pages-collection-collection.7f1501b9.js
#	h5/assets/pages-customer_service-customer_service.bd6a8b1f.js
#	h5/assets/pages-forget_pwd-forget_pwd.ed85d829.js
#	h5/assets/pages-index-index.19c7f55a.js
#	h5/assets/pages-login-login.432b5d68.js
#	h5/assets/pages-news-news.b7c7c850.js
#	h5/assets/pages-register-register.b6b6ae54.js
#	h5/assets/pages-search-search.26e01199.js
#	h5/assets/pages-user-user.3fd280ce.js
#	h5/assets/pages-user_data-user_data.6cd74f38.js
#	h5/assets/pages-user_set-user_set.5b8235ee.js
#	h5/assets/pages-webview-webview.d074f33b.js
#	h5/assets/tabbar.32c15533.js
#	h5/assets/u-avatar.40df6bc2.js
#	h5/assets/u-button.eb2fc020.js
#	h5/assets/u-checkbox.a3de132d.js
#	h5/assets/u-form-item.80dd7f49.js
#	h5/assets/u-form.9f54964a.js
#	h5/assets/u-icon.adf02ff2.js
#	h5/assets/u-image.554b827f.js
#	h5/assets/u-parse.a2aa510a.js
#	h5/assets/u-popup.2aaf05d4.js
#	h5/assets/u-search.18076790.js
#	h5/assets/u-verification-code.a41295d0.js
#	h5/assets/uni_modules-vk-uview-ui-components-u-avatar-cropper-u-avatar-cropper.8be1cad8.js
#	h5/assets/z-paging.ae4248a3.js
#	h5/index.html
2022-09-16 18:48:08 +08:00
Jason
53071be070 Merge tag 'wjx202209160640' into develop
no message

# Conflicts:
#	h5/assets/account.304e4c09.js
#	h5/assets/account.9ecc88ea.js
#	h5/assets/account.e236fd55.js
#	h5/assets/index.24de5888.js
#	h5/assets/index.5ddae38f.js
#	h5/assets/index.9d01590f.js
#	h5/assets/news-card.0f53c999.js
#	h5/assets/news-card.c91540ca.js
#	h5/assets/news-card.cacc1bdf.js
#	h5/assets/news.5c5bd132.js
#	h5/assets/news.7d996083.js
#	h5/assets/news.eb80f754.js
#	h5/assets/pages-as_us-as_us.27714390.js
#	h5/assets/pages-as_us-as_us.8bc9b466.js
#	h5/assets/pages-as_us-as_us.a75e6bf4.js
#	h5/assets/pages-bind_mobile-bind_mobile.1e39d2a7.js
#	h5/assets/pages-bind_mobile-bind_mobile.3d1ff6fd.js
#	h5/assets/pages-bind_mobile-bind_mobile.b0b2132a.js
#	h5/assets/pages-change_password-change_password.3e609524.js
#	h5/assets/pages-change_password-change_password.5516de7d.js
#	h5/assets/pages-change_password-change_password.7fcdae1a.js
#	h5/assets/pages-collection-collection.14907c26.js
#	h5/assets/pages-collection-collection.53abd56e.js
#	h5/assets/pages-collection-collection.5d101da7.js
#	h5/assets/pages-customer_service-customer_service.0e4773a4.js
#	h5/assets/pages-customer_service-customer_service.35e5d1d2.js
#	h5/assets/pages-customer_service-customer_service.c942a0bb.js
#	h5/assets/pages-forget_pwd-forget_pwd.0c22cfa7.js
#	h5/assets/pages-forget_pwd-forget_pwd.0cebded6.js
#	h5/assets/pages-forget_pwd-forget_pwd.41860f0c.js
#	h5/assets/pages-index-index.21b55a1c.js
#	h5/assets/pages-index-index.697592e8.js
#	h5/assets/pages-index-index.e7cbfcb8.js
#	h5/assets/pages-login-login.3d278588.js
#	h5/assets/pages-login-login.583742c3.js
#	h5/assets/pages-login-login.cc17b6ae.js
#	h5/assets/pages-news-news.6e6dfc74.js
#	h5/assets/pages-news-news.e71c4738.js
#	h5/assets/pages-news-news.f27837dc.js
#	h5/assets/pages-register-register.07ea7f19.js
#	h5/assets/pages-register-register.127a8342.js
#	h5/assets/pages-register-register.707197f6.js
#	h5/assets/pages-search-search.5bd1eb0e.js
#	h5/assets/pages-search-search.c9a4fc47.js
#	h5/assets/pages-search-search.fb4812e5.js
#	h5/assets/pages-user-user.29445b03.js
#	h5/assets/pages-user-user.97ccd207.js
#	h5/assets/pages-user-user.e6fd2164.js
#	h5/assets/pages-user_data-user_data.1a85e802.js
#	h5/assets/pages-user_data-user_data.2a0211b5.js
#	h5/assets/pages-user_data-user_data.65619aff.js
#	h5/assets/pages-user_set-user_set.9387105d.js
#	h5/assets/pages-user_set-user_set.a86f2f01.js
#	h5/assets/pages-user_set-user_set.d71e173b.js
#	h5/assets/pages-webview-webview.183e0d8c.js
#	h5/assets/pages-webview-webview.320ac922.js
#	h5/assets/pages-webview-webview.c3fa2ff9.js
#	h5/assets/shop.067e3a04.js
#	h5/assets/tabbar.1370a2f3.js
#	h5/assets/tabbar.3ac4b4ec.js
#	h5/assets/tabbar.5a261344.js
#	h5/assets/u-avatar.0975a40c.js
#	h5/assets/u-avatar.665749d0.js
#	h5/assets/u-avatar.aaafa077.js
#	h5/assets/u-button.4291cf3a.js
#	h5/assets/u-button.6324a944.js
#	h5/assets/u-button.f89bd070.js
#	h5/assets/u-checkbox.4a48075d.js
#	h5/assets/u-checkbox.a9e5c7b5.js
#	h5/assets/u-checkbox.e15726da.js
#	h5/assets/u-form-item.8b18cdc2.js
#	h5/assets/u-form-item.e8316076.js
#	h5/assets/u-form-item.f2bc17f6.js
#	h5/assets/u-form.718bda0a.js
#	h5/assets/u-form.9d11b0a8.js
#	h5/assets/u-form.e908a5a2.js
#	h5/assets/u-icon.947d1557.js
#	h5/assets/u-icon.b22654a8.js
#	h5/assets/u-icon.b511ef4e.js
#	h5/assets/u-image.2abefbca.js
#	h5/assets/u-image.dcffbc78.js
#	h5/assets/u-image.f03d2bad.js
#	h5/assets/u-parse.2b02a1d4.js
#	h5/assets/u-parse.466924cc.js
#	h5/assets/u-parse.cd76eaa8.js
#	h5/assets/u-popup.0657d28e.js
#	h5/assets/u-popup.6fa83f64.js
#	h5/assets/u-popup.c389a818.js
#	h5/assets/u-search.939c3f7f.js
#	h5/assets/u-search.9f49742b.js
#	h5/assets/u-search.dad6632d.js
#	h5/assets/u-verification-code.419886b4.js
#	h5/assets/u-verification-code.8f91217a.js
#	h5/assets/u-verification-code.9a7d2ff4.js
#	h5/assets/uni_modules-vk-uview-ui-components-u-avatar-cropper-u-avatar-cropper.75f62b2e.js
#	h5/assets/uni_modules-vk-uview-ui-components-u-avatar-cropper-u-avatar-cropper.859f9abd.js
#	h5/assets/uni_modules-vk-uview-ui-components-u-avatar-cropper-u-avatar-cropper.e582869e.js
#	h5/assets/util.7b793930.js
#	h5/assets/z-paging.34848bf3.js
#	h5/assets/z-paging.51f9fb6d.js
#	h5/assets/z-paging.9a4d68b6.js
#	h5/index.html
2022-09-16 18:43:18 +08:00
TinyAnts
769c1c0ff6 Merge branch 'master' into develop 2022-09-16 18:39:48 +08:00
TinyAnts
b660028a6c Merge branch 'develop' of https://gitee.com/likeadmin/likeadmin_java into develop 2022-09-16 18:33:51 +08:00
TinyAnts
4ee067a1f7 Merge tag '1.3.0' into develop 2022-09-16 18:25:36 +08:00
Jason
3f699d3c7c 打包 2022-09-16 18:23:03 +08:00
432 changed files with 963 additions and 559 deletions

1
.gitignore vendored
View File

@@ -5,5 +5,6 @@
target/
application-dev.yml
application-pro.yml
application-dem.yml
application-prod.yml
application-test.yml

View File

@@ -1,5 +1,5 @@
<h1 align="center">likeadmin通用管理后台Java</h1>
<h4 align="center">🚀快速开发、🛠️ 一键生成代码、📱手机自适应</h4>
<h4 align="center">🚀快速开发、🛠️ 一键生成代码、✅后台多端自适应、📱手机端uniapp前台</h4>
<p align="center">
<a href="https://www.java.com/zh-CN/download/"><img src="https://img.shields.io/badge/JAVA-8-d74f11"> </a><a href="#"> <img src="https://img.shields.io/badge/Spring Boot-2-5ea931"> </a><a href="https://www.tslang.cn/"><img src="https://img.shields.io/badge/TypeScript-3-294e80"></a> <a href="#"><img src="https://img.shields.io/badge/Vue.js-3-4eb883"> </a><a href="#"><img src="https://img.shields.io/badge/vite-2-ffc018"> </a><a href="#"><img src="https://img.shields.io/badge/Element Plus-2-409eff"> </a><a target="_blank" href="https://www.docker.com/"><img src="https://img.shields.io/badge/Docker--139cff"></a>
<div align="center">
@@ -7,9 +7,14 @@
</div>
<br>
## 👀体验后台
## 👀体验
### 管理后台
地址https://demo-java.likeadmin.cn <br>
账号admin 密码123456
### 手机端uniapp前台
<img width="40%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=260c0869d9ba7e692b2db1e216078241" /><br>
## 👨‍💻‍简介
@@ -20,24 +25,33 @@
1.likeadmin已经搭建好前后端分离的底层包含程序安装、登录、登出、工作台、菜单权限控制、角色、管理员、部门管理、岗位管理、素材管理、网站设置、图库管理等基础功能无需重复造轮子。更有开发者工具功能一生成代码大大节省开发时间。<br>
2.可视化系统程序安装界面,可自定义安装数据,开发者可快速扩展发行自己的软件产品。<br>
3.likeadmin定位为通用的软件系统管理后台方便开发者快速开发软件系统文档清晰、代码易懂、简单易用。<br>
4.未来将持续集成通用的微信/支付宝支付,阿里云/腾讯云短信,阿里云/腾讯云OSS等通用模块
4.手机端uniapp前台含导导航配置、微信登录、个人登录等等基础功能方便根据业务开发含手机前台的项目
### 🐙 后端架构方面
1.服务端使用JAVA8开发性能有突破性的提升。<br>
2.使用Spring Boot2.5框架目前国内流行的JAVA框架高性能、简单易用、文档齐全、支持Mave高级项目管理工具、支持Redis等。
### 🐹 前端架构方面
#### 后台
1.使用最流性的前后端分离方案typescript、vue3、vite开发保持了代码的简洁、一致和规范。<br>
2.后台界面使用element-plus UI框架简单精美的后台界面丰富的组件库方便快速开发满足各种后台交互。
<br>
### 前台
手机端uniapp前台可以编译成手机H5网页、微信小程序、安卓App苹果App等客户端。<br>
### 🛠️ 代码生成器
一键生成前后端业务代码,大大提示开发效率。
### 🖥️界面预览
一键生成前后端业务代码,大大提示开发效率。<br>
## 界面预览
### 🖥️后台页面
![](https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=9cf02b831e49d6a411bafbc4d79f51d4)<br>
![](https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=eb83547d55b4f41f0d92fd6a3e01d87e)
![](https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=818d843fb9cba396226e32dad1a58f3c)<br>
![](https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=194ab31919cd4dd619e6c453d7a44304)<br>
![](https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=f6770e2a8069d7b6ea3d83b91204b9d6)<br>
<br>
### 📱手机端前台界面
<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

@@ -55,6 +55,7 @@
"vite": "^3.0.0",
"vite-plugin-style-import": "^2.0.0",
"vite-plugin-svg-icons": "^2.0.1",
"vite-plugin-vue-setup-extend": "^0.4.0",
"vue-tsc": "^0.38.1"
}
}

View File

@@ -39,7 +39,7 @@ const props = withDefaults(
}>(),
{
modelValue: '',
mode: 'simple',
mode: 'default',
height: '100%',
width: 'auto',
toolbarConfig: () => ({
@@ -100,3 +100,34 @@ const handleCreated = (editor: any) => {
editorRef.value = editor // 记录 editor 实例,重要!
}
</script>
<style lang="scss">
.w-e-text-container [data-slate-editor] ul {
list-style: disc;
}
.w-e-text-container [data-slate-editor] ol {
list-style: decimal;
}
h1 {
font-size: 2em;
}
h2 {
font-size: 1.5em;
}
h3 {
font-size: 1.17em;
}
h4 {
font-size: 1em;
}
h5 {
font-size: 0.83em;
}
h1,
h2,
h3,
h4,
h5 {
font-weight: bold;
}
</style>

View File

@@ -20,7 +20,11 @@ const props = defineProps({
type: [String, Number],
default: 0
},
...imageProps
...imageProps,
hideOnClickModal: {
type: Boolean,
default: true
}
})
const styles = computed<CSSProperties>(() => {

View File

@@ -1,8 +1,14 @@
<template>
<div>
<div class="file-item" :style="{ height: fileSize, width: fileSize }">
<div class="file-item relative" :style="{ height: fileSize, width: fileSize }">
<el-image class="image" v-if="type == 'image'" fit="contain" :src="uri"></el-image>
<video class="video" v-else-if="type == 'video'" :src="uri"></video>
<div
v-if="type == 'video'"
class="absolute left-1/2 top-1/2 translate-x-[-50%] translate-y-[-50%] rounded-full w-5 h-5 flex justify-center items-center bg-[rgba(0,0,0,0.3)]"
>
<icon name="el-icon-CaretRight" :size="18" color="#fff" />
</div>
<slot></slot>
</div>
</div>

View File

@@ -226,14 +226,16 @@
<el-checkbox :modelValue="isSelect(row.id)" @change="selectFile(row)" />
</template>
</el-table-column>
<el-table-column label="图片" width="60">
<el-table-column label="图片" width="100">
<template #default="{ row }">
<file-item :uri="row.uri" file-size="40px"></file-item>
<file-item :uri="row.uri" file-size="50px" :type="type"></file-item>
</template>
</el-table-column>
<el-table-column label="名称" min-width="100" show-overflow-tooltip>
<template #default="{ row }">
<el-link @click.stop="handlePreview(row.uri)">{{ row.name }}</el-link>
<el-link @click.stop="handlePreview(row.uri)" :underline="false">
{{ row.name }}
</el-link>
</template>
</el-table-column>
<el-table-column prop="createTime" label="上传时间" min-width="100" />

View File

@@ -37,7 +37,7 @@ const options = reactive({
mirror: false, //镜像画面
ligthOff: false, //关灯模式
volume: 0.3, //默认音量大小
control: false, //是否显示控制器
control: true, //是否显示控制器
title: '', //视频名称
poster: '', //封面
...props

View File

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

View File

@@ -1,13 +1,15 @@
const defaultSetting = {
sideWidth: 200,
sideTheme: 'light',
sideDarkColor: '#1d2124',
theme: '#4A5DFF',
openMultipleTabs: true,
successTheme: '#67c23a',
warningTheme: '#e6a23c',
dangerTheme: '#f56c6c',
errorTheme: '#f56c6c',
infoTheme: '#909399'
sideWidth: 200, //侧边栏宽度
sideTheme: 'light', //侧边栏主题
sideDarkColor: '#1d2124', //侧边栏深色主题颜色
openMultipleTabs: true, // 是否开启多标签tab栏
theme: '#4A5DFF', //主题色
successTheme: '#67c23a', //成功主题色
warningTheme: '#e6a23c', //警告主题色
dangerTheme: '#f56c6c', //危险主题色
errorTheme: '#f56c6c', //错误主题色
infoTheme: '#909399' //信息主题色
}
//以上各种主题色分别对应element-plus的几种行为主题
export default defaultSetting

View File

@@ -0,0 +1,47 @@
import useTabsStore from '@/stores/modules/multipleTabs'
import useSettingStore from '@/stores/modules/setting'
export default function useMultipleTabs() {
const router = useRouter()
const route = useRoute()
const tabsStore = useTabsStore()
const settingStore = useSettingStore()
const tabsLists = computed(() => {
return tabsStore.getTabList
})
const currentTab = computed(() => {
return route.fullPath
})
const addTab = () => {
if (!settingStore.openMultipleTabs) return
tabsStore.addTab(router)
}
const removeTab = (fullPath?: any) => {
if (!settingStore.openMultipleTabs) return
fullPath = fullPath ?? route.fullPath
tabsStore.removeTab(fullPath, router)
}
const removeOtherTab = () => {
if (!settingStore.openMultipleTabs) return
tabsStore.removeOtherTab(route)
}
const removeAllTab = () => {
if (!settingStore.openMultipleTabs) return
tabsStore.removeAllTab(router)
}
return {
tabsLists,
currentTab,
addTab,
removeTab,
removeOtherTab,
removeAllTab
}
}

View File

@@ -3,12 +3,12 @@
<div class="flex-1 min-w-0">
<el-tabs
:model-value="currentTab"
:closable="tabsState.length > 1"
:closable="tabsLists.length > 1"
@tab-change="handleChange"
@tab-remove="handleRemove"
@tab-remove="removeTab($event)"
>
<template v-for="item in tabsState" :key="item.path">
<el-tab-pane :label="item.title" :name="item.path"></el-tab-pane>
<template v-for="item in tabsLists" :key="item.fullPath">
<el-tab-pane :label="item.title" :name="item.fullPath"></el-tab-pane>
</template>
</el-tabs>
</div>
@@ -28,40 +28,31 @@
</template>
<script setup lang="ts">
import useMultipleTabs from '@/hooks/useMultipleTabs'
import { useWatchRoute } from '@/hooks/useWatchRoute'
import useTabsStore, { getRouteParams } from '@/stores/modules/multipleTabs'
const router = useRouter()
const tabsStore = useTabsStore()
const { route } = useWatchRoute((route) => {
tabsStore.addTab(route, router)
const { removeOtherTab, addTab, removeAllTab, removeTab, tabsLists, currentTab } = useMultipleTabs()
useWatchRoute(() => {
addTab()
})
const currentTab = computed(() => {
return route.path
})
const tabsState = computed(() => {
return tabsStore.getTabList
})
const handleChange = (path: any) => {
const tabItem = tabsStore.tasMap[path]
const handleChange = (fullPath: any) => {
const tabItem = tabsStore.tasMap[fullPath]
router.push(getRouteParams(tabItem))
}
const handleRemove = (path: any) => {
tabsStore.removeTab(path, router)
}
const handleCommand = (command: any) => {
switch (command) {
case 'closeCurrent':
handleRemove(route.path)
removeTab()
break
case 'closeOther':
tabsStore.removeOtherTab(route.path)
removeOtherTab()
break
case 'closeAll':
tabsStore.removeAllTab(router)
removeAllTab()
break
}
}

View File

@@ -3,7 +3,9 @@
<el-scrollbar>
<div class="p-4">
<router-view v-if="isRouteShow" v-slot="{ Component, route }">
<component :is="Component" :key="route.fullPath" />
<keep-alive :include="includeList" :max="20">
<component :is="Component" :key="route.fullPath" />
</keep-alive>
</router-view>
</div>
</el-scrollbar>
@@ -12,8 +14,13 @@
<script setup lang="ts">
import useAppStore from '@/stores/modules/app'
import useTabsStore from '@/stores/modules/multipleTabs'
import useSettingStore from '@/stores/modules/setting'
const appStore = useAppStore()
const tabsStore = useTabsStore()
const settingStore = useSettingStore()
const isRouteShow = computed(() => appStore.isRouteShow)
const includeList = computed(() => (settingStore.openMultipleTabs ? tabsStore.getCacheTabList : []))
</script>
<style></style>

View File

@@ -65,7 +65,6 @@ import theme_light from '@/assets/images/theme_white.png'
import theme_dark from '@/assets/images/theme_black.png'
const settingStore = useSettingStore()
const predefineColors = ref(['#409EFF', '#28C76F', '#EA5455', '#FF9F43', '#01CFE8', '#4A5DFF'])
const sideThemeList = [
{

View File

@@ -11,6 +11,7 @@ import { INDEX_ROUTE, INDEX_ROUTE_NAME } from './router/routes'
import { PageEnum } from './enums/pageEnum'
import useTabsStore from './stores/modules/multipleTabs'
import { clearAuthInfo } from './utils/auth'
import config from './config'
// NProgress配置
NProgress.configure({ showSpinner: false })
@@ -22,6 +23,7 @@ const whiteList: string[] = [PageEnum.LOGIN, PageEnum.ERROR_403]
router.beforeEach(async (to, from, next) => {
// 开始 Progress Bar
NProgress.start()
document.title = to.meta.title ?? config.title
const userStore = useUserStore()
const tabsStore = useTabsStore()
if (userStore.token) {

View File

@@ -86,8 +86,8 @@ export function findFirstValidRoute(routes: RouteRecordRaw[]): string | undefine
}
//通过权限字符查询路由路径
export function getRoutePath(perms: string) {
const router = useRouter()
return router.getRoutes().find((item) => item.meta?.perms == perms)?.path || ''
const routerObj = useRouter() || router
return routerObj.getRoutes().find((item) => item.meta?.perms == perms)?.path || ''
}
// 重置路由

View File

@@ -11,6 +11,7 @@ import { PageEnum } from '@/enums/pageEnum'
interface TabItem {
name: RouteRecordName
fullPath: string
path: string
title?: string
query?: LocationQuery
@@ -24,8 +25,8 @@ interface TabsSate {
indexRouteName: RouteRecordName
}
const getHasTabIndex = (path: string, tabList: TabItem[]) => {
return tabList.findIndex((item) => item.path == path)
const getHasTabIndex = (fullPath: string, tabList: TabItem[]) => {
return tabList.findIndex((item) => item.fullPath == fullPath)
}
const isCannotAddRoute = (route: RouteLocationNormalized, router: Router) => {
@@ -39,8 +40,12 @@ const isCannotAddRoute = (route: RouteLocationNormalized, router: Router) => {
return false
}
const findTabsIndex = (path: string, tabList: TabItem[]) => {
return tabList.findIndex((item) => item.path === path)
const findTabsIndex = (fullPath: string, tabList: TabItem[]) => {
return tabList.findIndex((item) => item.fullPath === fullPath)
}
const getComponentName = (route: RouteLocationNormalized) => {
return route.matched.at(-1)?.components?.default?.name
}
export const getRouteParams = (tabItem: TabItem) => {
@@ -63,45 +68,67 @@ const useTabsStore = defineStore({
getters: {
getTabList(): TabItem[] {
return this.tabList
},
getCacheTabList(): string[] {
return Array.from(this.cacheTabList)
}
},
actions: {
setRouteName(name: RouteRecordName) {
this.indexRouteName = name
},
addCache(componentName?: string) {
if (componentName) this.cacheTabList.add(componentName)
},
removeCache(componentName?: string) {
if (componentName && this.cacheTabList.has(componentName)) {
this.cacheTabList.delete(componentName)
}
console.log(this.cacheTabList)
},
clearCache() {
this.cacheTabList.clear()
},
resetState() {
this.cacheTabList = new Set()
this.tabList = []
this.tasMap = {}
this.indexRouteName = ''
},
addTab(route: RouteLocationNormalized, router: Router) {
const { name, path, query, meta, params } = route
addTab(router: Router) {
const route = unref(router.currentRoute)
const { name, query, meta, params, fullPath, path } = route
if (isCannotAddRoute(route, router)) return
const hasTabIndex = getHasTabIndex(path!, this.tabList)
const hasTabIndex = getHasTabIndex(fullPath!, this.tabList)
const componentName = getComponentName(route)
const tabItem = {
name: name!,
path,
fullPath,
title: meta?.title,
query,
params
}
this.tasMap[path] = tabItem
this.tasMap[fullPath] = tabItem
if (meta?.keepAlive) {
this.addCache(componentName)
}
if (hasTabIndex != -1) {
this.tabList.splice(hasTabIndex, 1, tabItem)
return
}
this.tabList.push(tabItem)
},
removeTab(path: string, router: Router) {
removeTab(fullPath: string, router: Router) {
const { currentRoute, push } = router
const index = findTabsIndex(path, this.tabList)
const index = findTabsIndex(fullPath, this.tabList)
// 移除tab
if (this.tabList.length > 1) {
index !== -1 && this.tabList.splice(index, 1)
}
if (path !== currentRoute.value.path) {
const componentName = getComponentName(currentRoute.value)
this.removeCache(componentName)
if (fullPath !== currentRoute.value.fullPath) {
return
}
// 删除选中的tab
@@ -116,17 +143,24 @@ const useTabsStore = defineStore({
const toRoute = getRouteParams(toTab)
push(toRoute)
},
removeOtherTab(path: string) {
this.tabList = this.tabList.filter((item) => item.path == path)
removeOtherTab(route: RouteLocationNormalized) {
this.tabList = this.tabList.filter((item) => item.fullPath == route.fullPath)
const componentName = getComponentName(route)
this.cacheTabList.forEach((name) => {
if (componentName !== name) {
this.removeCache(name)
}
})
},
removeAllTab(router: Router) {
const { push, currentRoute } = router
const { path, name } = unref(currentRoute)
const { name } = unref(currentRoute)
if (name == this.indexRouteName) {
this.removeOtherTab(path)
this.removeOtherTab(currentRoute.value)
return
}
this.tabList = []
this.clearCache()
push(PageEnum.INDEX)
}
}

View File

@@ -28,12 +28,6 @@ const useUserStore = defineStore({
}),
getters: {},
actions: {
resetState() {
this.token = ''
this.userInfo = {}
this.perms = []
this.menu = []
},
login(playload: any) {
const { account, password } = playload
return new Promise((resolve, reject) => {
@@ -54,8 +48,9 @@ const useUserStore = defineStore({
logout() {
return new Promise((resolve, reject) => {
logout()
.then((data) => {
router.push(PageEnum.LOGIN)
.then(async (data) => {
this.token = ''
await router.push(PageEnum.LOGIN)
clearAuthInfo()
resolve(data)
})

View File

@@ -115,6 +115,9 @@
.el-image__error {
font-size: 12px;
}
.el-tabs__nav-wrap::after {
height: 1px;
}
}
@media (max-width: 768px) {
.el-pagination > .el-pagination__jump {

View File

@@ -11,8 +11,8 @@ export function getToken() {
export function clearAuthInfo() {
const userStore = useUserStore()
const tabsStore = useTabsStore()
userStore.resetState()
tabsStore.resetState()
userStore.$reset()
tabsStore.$reset()
cache.remove(TOKEN_KEY)
resetRouter()
}

View File

@@ -71,7 +71,7 @@ export class Axios {
this.removeCancelToken(err.config?.url!)
}
if (err.code == AxiosError.ECONNABORTED) {
if (err.code == AxiosError.ECONNABORTED || err.code == AxiosError.ERR_NETWORK) {
setTimeout(() => {
console.log(err)
this.retryRequest(err)

View File

@@ -6,7 +6,7 @@
<image-contain :src="config.webBackdrop" :width="400" height="100%" />
</div>
<div
class="login-form bg-body flex flex-col px-10 pt-10 md:w-[400px] w-[375px] flex-none mx-auto"
class="login-form bg-body flex flex-col justify-center px-10 py-10 md:w-[400px] w-[375px] flex-none mx-auto"
>
<div class="text-center text-3xl font-medium mb-8">{{ config.webName }}</div>
<el-form ref="formRef" :model="formData" size="large" :rules="rules">

View File

@@ -65,7 +65,7 @@
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="articleColumn">
import { articleCateDelete, articleCateLists, articleCateStatus } from '@/api/article'
import { usePaging } from '@/hooks/usePaging'
import feedback from '@/utils/feedback'

View File

@@ -18,6 +18,10 @@
<el-input
v-model="formData.title"
placeholder="请输入文章标题"
type="textarea"
:autosize="{ minRows: 3, maxRows: 3 }"
maxlength="64"
show-word-limit
clearable
/>
</div>
@@ -42,6 +46,10 @@
<el-input
v-model="formData.intro"
placeholder="请输入文章简介"
type="textarea"
:autosize="{ minRows: 3, maxRows: 6 }"
:maxlength="200"
show-word-limit
clearable
/>
</div>
@@ -50,8 +58,10 @@
<div class="w-80">
<el-input
type="textarea"
:rows="6"
:autosize="{ minRows: 6, maxRows: 6 }"
v-model="formData.summary"
maxlength="200"
show-word-limit
clearable
/>
</div>
@@ -101,11 +111,12 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="articleListsEdit">
import type { FormInstance } from 'element-plus'
import feedback from '@/utils/feedback'
import { useDictOptions } from '@/hooks/useDictOptions'
import { articleCateAll, articleDetail, articleEdit, articleAdd } from '@/api/article'
import useMultipleTabs from '@/hooks/useMultipleTabs'
const route = useRoute()
const router = useRouter()
@@ -123,6 +134,7 @@ const formData = reactive({
summary: ''
})
const { removeTab } = useMultipleTabs()
const formRef = shallowRef<FormInstance>()
const rules = reactive({
title: [{ required: true, message: '请输入文章标题', trigger: 'blur' }],
@@ -155,6 +167,7 @@ const handleSave = async () => {
await articleAdd(formData)
}
feedback.msgSuccess('操作成功')
removeTab()
router.back()
}

View File

@@ -54,10 +54,11 @@
<el-table-column label="ID" prop="id" min-width="80" />
<el-table-column label="封面" min-width="100">
<template #default="{ row }">
<el-image
<image-contain
v-if="row.image"
:src="row.image"
class="w-[60px] h-[45px]"
:width="60"
:height="45"
:preview-src-list="[row.image]"
preview-teleported
fit="contain"
@@ -117,7 +118,7 @@
</el-card>
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="articleLists">
import { articleLists, articleDelete, articleStatus, articleCateAll } from '@/api/article'
import { useDictOptions } from '@/hooks/useDictOptions'
import { usePaging } from '@/hooks/usePaging'
@@ -159,5 +160,9 @@ const handleDelete = async (id: number) => {
getLists()
}
onActivated(() => {
getLists()
})
getLists()
</script>

View File

@@ -32,7 +32,7 @@
</footer-btns>
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="h5Config">
import { getH5Config, setH5Config } from '@/api/channel/h5'
import feedback from '@/utils/feedback'

View File

@@ -140,7 +140,7 @@
</footer-btns>
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="weappConfig">
import { getWeappConfig, setWeappConfig } from '@/api/channel/weapp'
import feedback from '@/utils/feedback'

View File

@@ -35,7 +35,7 @@
</footer-btns>
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="wxDevConfig">
import { getWxDevConfig, setWxDevConfig } from '@/api/channel/wx_dev'
import feedback from '@/utils/feedback'

View File

@@ -156,7 +156,7 @@
</footer-btns>
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="wxOaConfig">
import { getOaConfig, setOaConfig } from '@/api/channel/wx_oa'
import feedback from '@/utils/feedback'
import { useClipboard } from '@vueuse/core'

View File

@@ -1,4 +1,4 @@
<script setup lang="ts">
<script setup lang="ts" name="wxOaMenu">
import OaPhone from './menu_com/oa-phone.vue'
import OaAttr from './menu_com/oa-attr.vue'
import { useMenuOa } from './menu_com/useMenuOa'

View File

@@ -56,6 +56,8 @@
v-model="formData.content"
:autosize="{ minRows: 4, maxRows: 4 }"
type="textarea"
maxlength="200"
show-word-limit
placeholder="请输入回复内容"
/>
</div>

View File

@@ -75,7 +75,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="consumerDetail">
import type { FormInstance } from 'element-plus'
import { getUserDetail, userEdit } from '@/api/consumer'
import feedback from '@/utils/feedback'

View File

@@ -70,7 +70,7 @@
</el-card>
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="consumerLists">
import { usePaging } from '@/hooks/usePaging'
import { getRoutePath } from '@/router'
import { getUserList } from '@/api/consumer'
@@ -86,6 +86,9 @@ const { pager, getLists, resetPage, resetParams } = usePaging({
fetchFun: getUserList,
params: queryParams
})
onActivated(() => {
getLists()
})
getLists()
</script>

View File

@@ -12,7 +12,7 @@
</footer-btns>
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="decorationPages">
import Menu from '../component/pages/menu.vue'
import Preview from '../component/pages/preview.vue'
import AttrSetting from '../component/pages/attr-setting.vue'

View File

@@ -132,7 +132,7 @@
</footer-btns>
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="decorationTabbar">
import { getDecorateTabbar, setDecorateTabbar } from '@/api/decoration'
import feedback from '@/utils/feedback'
import Draggable from 'vuedraggable'

View File

@@ -18,6 +18,7 @@
<el-input
v-model="formData.base.tableName"
placeholder="请输入表名称"
clearable
/>
</div>
</el-form-item>
@@ -26,6 +27,7 @@
<el-input
v-model="formData.base.tableComment"
placeholder="请输入表描述"
clearable
/>
</div>
</el-form-item>
@@ -34,6 +36,7 @@
<el-input
v-model="formData.base.entityName"
placeholder="请输入实体类名称"
clearable
/>
</div>
</el-form-item>
@@ -43,6 +46,7 @@
<el-input
v-model="formData.base.authorName"
placeholder="请输入作者"
clearable
/>
</div>
</el-form-item>
@@ -50,9 +54,12 @@
<div class="w-80">
<el-input
v-model="formData.base.remarks"
class="el-input"
class="w-full"
type="textarea"
:rows="4"
:autosize="{ minRows: 4, maxRows: 4 }"
maxlength="200"
show-word-limit
clearable
/>
</div>
</el-form-item>
@@ -90,7 +97,7 @@
v-model="row.isRequired"
:true-label="1"
:false-label="0"
></el-checkbox>
/>
</template>
</el-table-column>
<el-table-column label="插入" width="80">
@@ -99,7 +106,7 @@
v-model="row.isInsert"
:true-label="1"
:false-label="0"
></el-checkbox>
/>
</template>
</el-table-column>
<el-table-column label="编辑" width="80">
@@ -108,7 +115,7 @@
v-model="row.isEdit"
:true-label="1"
:false-label="0"
></el-checkbox>
/>
</template>
</el-table-column>
<el-table-column label="列表" width="80">
@@ -117,7 +124,7 @@
v-model="row.isList"
:true-label="1"
:false-label="0"
></el-checkbox>
/>
</template>
</el-table-column>
<el-table-column label="查询" width="80">
@@ -126,7 +133,7 @@
v-model="row.isQuery"
:true-label="1"
:false-label="0"
></el-checkbox>
/>
</template>
</el-table-column>
<el-table-column label="查询方式">
@@ -196,6 +203,7 @@
<el-input
v-model="formData.gen.moduleName"
placeholder="请输入模块名"
clearable
/>
<div class="form-tips">生成文件所在模块名</div>
</div>
@@ -205,6 +213,7 @@
<el-input
v-model="formData.gen.functionName"
placeholder="请输入功能名称"
clearable
/>
</div>
</el-form-item>
@@ -223,6 +232,7 @@
<el-input
v-model="formData.gen.genPath"
placeholder="请输入自定义路径"
clearable
/>
</div>
</el-form-item>
@@ -272,14 +282,14 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="tableEdit">
import { generateEdit, tableDetail } from '@/api/tools/code'
import { dictTypeAll } from '@/api/setting/dict'
import type { FormInstance } from 'element-plus'
import feedback from '@/utils/feedback'
import { menuLists } from '@/api/perms/menu'
import { useDictOptions } from '@/hooks/useDictOptions'
import useMultipleTabs from '@/hooks/useMultipleTabs'
enum GenTpl {
CRUD = 'crud',
TREE = 'tree'
@@ -292,6 +302,7 @@ enum GenType {
const route = useRoute()
const router = useRouter()
const { removeTab } = useMultipleTabs()
const activeName = ref('column')
const formData = reactive({
base: {
@@ -363,6 +374,7 @@ const handleSave = async () => {
const { base, column, gen } = formData
await generateEdit({ ...base, ...gen, column })
feedback.msgSuccess('操作成功')
removeTab()
router.back()
} catch (error: any) {
for (const err in error) {

View File

@@ -3,10 +3,20 @@
<el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="formData" inline>
<el-form-item label="表名称">
<el-input class="w-56" v-model="formData.tableName" />
<el-input
class="w-56"
v-model="formData.tableName"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="表描述">
<el-input class="w-56" v-model="formData.tableComment" />
<el-input
class="w-56"
v-model="formData.tableComment"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
@@ -138,7 +148,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="codeGenerate">
import {
generateTable,
syncColumn,
@@ -228,5 +238,9 @@ const handleCommand = (command: any, row: any) => {
}
}
onActivated(() => {
getLists()
})
getLists()
</script>

View File

@@ -13,10 +13,20 @@
</template>
<el-form class="ls-form" :model="formData" inline>
<el-form-item label="表名称">
<el-input class="w-56" v-model="formData.tableName" />
<el-input
class="w-56"
v-model="formData.tableName"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="表描述">
<el-input class="w-56" v-model="formData.tableComment" />
<el-input
class="w-56"
v-model="formData.tableComment"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>

View File

@@ -23,7 +23,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="materialCenter">
const tabsMap = [
{
type: 'image',

View File

@@ -37,7 +37,7 @@
<div class="w-full max-w-[320px]">
<el-input
type="textarea"
:rows="6"
:autosize="{ minRows: 6, maxRows: 6 }"
v-model="formData.smsNotice.content"
/>
</div>
@@ -58,10 +58,11 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="noticeEdit">
import type { FormInstance } from 'element-plus'
import feedback from '@/utils/feedback'
import { noticeDetail, setNoticeConfig } from '@/api/message'
import useMultipleTabs from '@/hooks/useMultipleTabs'
const route = useRoute()
const router = useRouter()
@@ -95,7 +96,7 @@ const rules = {
}
]
}
const { removeTab } = useMultipleTabs()
const formRef = shallowRef<FormInstance>()
const getDetails = async () => {
@@ -114,6 +115,7 @@ const handleSave = async () => {
await formRef.value?.validate()
await setNoticeConfig(formData)
feedback.msgSuccess('操作成功')
removeTab()
router.back()
}

View File

@@ -47,7 +47,7 @@
</el-card>
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="notice">
import { noticeLists } from '@/api/message'
import { getRoutePath } from '@/router'
@@ -87,5 +87,9 @@ const getLists = async () => {
}
}
onActivated(() => {
getLists()
})
getLists()
</script>

View File

@@ -26,7 +26,7 @@
<edit-popup ref="editRef" @success="getLists" />
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="shortLetter">
import { smsLists } from '@/api/message'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()

View File

@@ -71,7 +71,7 @@ const formData = reactive({
})
const checkMobile = (rule: any, value: any, callback: any) => {
if (!value) {
return callback(new Error('手机号不能为空'))
return callback()
} else {
const reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
console.log(reg.test(value))

View File

@@ -91,7 +91,7 @@
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="department">
import type { ElTable, FormInstance } from 'element-plus'
import EditPopup from './edit.vue'
import { deptDelete, deptLists } from '@/api/org/department'

View File

@@ -27,6 +27,8 @@
placeholder="请输入备注"
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
maxlength="200"
show-word-limit
/>
</el-form-item>
<el-form-item label="岗位状态" prop="isStop">

View File

@@ -51,7 +51,7 @@
show-overflow-tooltip
/>
<el-table-column label="添加时间" prop="createTime" min-width="180" />
<el-table-column label="部门状态" prop="isStop" min-width="100">
<el-table-column label="岗位状态" prop="isStop" min-width="100">
<template #default="{ row }">
<el-tag class="ml-2" :type="row.isStop ? 'danger' : ''">
{{ row.isStop ? '停用' : '正常' }}
@@ -86,7 +86,7 @@
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="post">
import { postDelete, postLists } from '@/api/org/post'
import { usePaging } from '@/hooks/usePaging'
import feedback from '@/utils/feedback'

View File

@@ -100,7 +100,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="admin">
import { adminLists, adminDelete, adminStatus } from '@/api/perms/admin'
import { roleAll } from '@/api/perms/role'
import { useDictOptions } from '@/hooks/useDictOptions'

View File

@@ -73,7 +73,11 @@
</div>
</div>
</el-form-item>
<el-form-item label="选中菜单" prop="p" v-if="formData.menuType == MenuEnum.MENU">
<el-form-item
label="选中菜单"
prop="selected"
v-if="formData.menuType == MenuEnum.MENU"
>
<div class="flex-1">
<el-input
v-model="formData.selected"
@@ -116,20 +120,20 @@
</div>
</div>
</el-form-item>
<!-- <el-form-item
v-if="formData.menuType == MenuEnum.MENU"
label="是否缓存"
prop="isCache"
required
>
<div>
<el-radio-group v-model="formData.isCache">
<el-radio :label="1">缓存</el-radio>
<el-radio :label="0">不缓存</el-radio>
</el-radio-group>
<div class="form-tips">选择缓存则会被`keep-alive`缓存</div>
</div>
</el-form-item> -->
<el-form-item
v-if="formData.menuType == MenuEnum.MENU"
label="是否缓存"
prop="isCache"
required
>
<div>
<el-radio-group v-model="formData.isCache">
<el-radio :label="1">缓存</el-radio>
<el-radio :label="0">不缓存</el-radio>
</el-radio-group>
<div class="form-tips">选择缓存则会被`keep-alive`缓存</div>
</div>
</el-form-item>
<el-form-item
v-if="formData.menuType != MenuEnum.BUTTON"
label="是否显示"
@@ -220,7 +224,7 @@ const formData = reactive({
//路由参数
params: '',
//是否缓存 0=否, 1=是
isCache: 0,
isCache: 1,
//是否显示 0=否, 1=是
isShow: 1,
//是否禁用 0=否, 1=是
@@ -259,15 +263,12 @@ const formRules = {
}
const menuOptions = ref<any[]>([])
const pageOptions = ref<any[]>([])
const getMenu = async () => {
const data: any = await menuLists()
const menu = { id: 0, menuName: '顶级', children: [] }
pageOptions.value = arrayToTree(
const menu: any = { id: 0, menuName: '顶级', children: [] }
menu.children = arrayToTree(
treeToArray(data).filter((item) => item.menuType != MenuEnum.BUTTON)
)
menu.children = data
menuOptions.value.push(menu)
}

View File

@@ -90,7 +90,7 @@
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="menu">
import { menuDelete, menuLists } from '@/api/perms/menu'
import type { ElTable } from 'element-plus'
import { MenuEnum } from '@/enums/appEnums'

View File

@@ -27,8 +27,10 @@
<el-input
v-model="formData.remark"
type="textarea"
:rows="4"
:autosize="{ minRows: 4, maxRows: 6 }"
placeholder="请输入备注"
maxlength="200"
show-word-limit
/>
</el-form-item>
<el-form-item label="排序" prop="sort">

View File

@@ -63,7 +63,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="role">
import { roleLists, roleDelete } from '@/api/perms/role'
import { usePaging } from '@/hooks/usePaging'
import feedback from '@/utils/feedback'

View File

@@ -31,7 +31,7 @@
</el-form-item>
<el-form-item label="排序" prop="sort">
<div>
<el-input-number v-model="formData.sort" />
<el-input-number v-model="formData.sort" :min="0" />
<div class="form-tips">数值越大越排前</div>
</div>
</el-form-item>
@@ -42,7 +42,14 @@
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" rows="4" clearable />
<el-input
v-model="formData.remark"
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
clearable
maxlength="200"
show-word-limit
/>
</el-form-item>
</el-form>
</popup>

View File

@@ -71,7 +71,12 @@
<el-tag v-else type="danger">停用</el-tag>
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" min-width="120" />
<el-table-column
label="备注"
prop="remark"
min-width="120"
show-tooltip-when-overflow
/>
<el-table-column label="排序" prop="sort" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
@@ -104,7 +109,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="dictData">
import { dictDataDelete, dictDataLists, dictTypeAll } from '@/api/setting/dict'
import { useDictOptions } from '@/hooks/useDictOptions'
import { usePaging } from '@/hooks/usePaging'

View File

@@ -28,7 +28,14 @@
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="dictRemark">
<el-input v-model="formData.dictRemark" type="textarea" rows="4" clearable />
<el-input
v-model="formData.dictRemark"
type="textarea"
:autosize="{ minRows: 4, maxRows: 6 }"
clearable
maxlength="200"
show-word-limit
/>
</el-form-item>
</el-form>
</popup>

View File

@@ -68,7 +68,11 @@
<el-tag v-else type="danger">停用</el-tag>
</template>
</el-table-column>
<el-table-column label="备注" prop="dictRemark" />
<el-table-column
label="备注"
prop="dictRemark"
show-tooltip-when-overflow
/>
<el-table-column label="创建时间" prop="createTime" min-width="180" />
<el-table-column label="操作" width="190" fixed="right">
<template #default="{ row }">
@@ -80,20 +84,17 @@
>
编辑
</el-button>
<el-button
v-perms="['setting:dict:data:list']"
type="primary"
link
@click="
$router.push({
<el-button v-perms="['setting:dict:data:list']" type="primary" link>
<router-link
:to="{
path: getRoutePath('setting:dict:data:list'),
query: {
type: row.dictType
}
})
"
>
数据管理
}"
>
数据管理
</router-link>
</el-button>
<el-button
v-perms="['setting:dict:type:del']"
@@ -116,7 +117,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="dictType">
import { dictTypeDelete, dictTypeLists } from '@/api/setting/dict'
import { usePaging } from '@/hooks/usePaging'
import { getRoutePath } from '@/router'

View File

@@ -16,23 +16,23 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div class="flex">
<div class="flex-1 w-3/5">
<el-button type="primary" class="mb-4" @click="handleAdd">添加</el-button>
<div class="lg:flex">
<div class="flex-1 min-w-0">
<el-button type="primary" class="mb-4" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
添加
</el-button>
<el-table size="large" :data="formData.list">
<el-table-column label="ID" prop="id" width="120">
<template #default="{ $index }">
{{ $index }}
<el-table-column label="关键词" prop="describe" min-width="200">
<template #default="{ row }">
<el-input v-model="row.name" clearable maxlength="30" />
</template>
</el-table-column>
<el-table-column label="关键词" prop="describe" min-width="160">
<el-table-column label="排序" prop="describe" min-width="80">
<template #default="{ row }">
<el-input v-model="row.name" clearable />
</template>
</el-table-column>
<el-table-column label="排序" prop="describe" min-width="160">
<template #default="{ row }">
<el-input v-model="row.sort" type="number" />
<el-input v-model="row.sort" type="number" clearable />
</template>
</el-table-column>
<el-table-column label="操作" min-width="80" fixed="right">
@@ -50,8 +50,8 @@
</el-table>
</div>
<div class="w-2/5 hot-search-phone">
<span class="mb-4">- 热搜预览图 -</span>
<div class="flex-none hot-search-phone mt-4 lg:mt-0 lg:ml-4">
<div class="mb-4 text-center">- 热搜预览图 -</div>
<div class="hot-search-phone-content">
<!-- 搜索框 -->
<div class="search-com">
@@ -63,7 +63,12 @@
<!-- 热门搜索 -->
<div class="hot-search-title">热门搜索</div>
<div class="hot-search-text">
<span v-for="(text, index) in list" :key="index">{{ text.name }}</span>
<span
class="truncate max-w-full"
v-for="(text, index) in list"
:key="index"
>{{ text.name }}</span
>
</div>
</div>
</div>
@@ -76,7 +81,7 @@
</div>
</template>
<script setup lang="ts">
<script setup lang="ts" name="search">
import { getSearch, setSearch } from '@/api/setting/search'
import type { Search } from '@/api/setting/search'
import feedback from '@/utils/feedback'
@@ -130,12 +135,10 @@ getData()
<style lang="scss" scoped>
.hot-search {
.hot-search-phone {
margin-left: 20px;
@apply flex flex-col items-center;
width: 300px;
&-content {
width: 280px;
height: 494px;
width: 100%;
height: 530px;
padding: 12px 12px;
border-radius: 10px;
border: 1px solid #e6e6e6;

View File

@@ -35,7 +35,7 @@
<edit-popup ref="editRef" @success="getLists" />
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="storage">
import { storageLists } from '@/api/setting/storage'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()

View File

@@ -136,7 +136,7 @@
</div>
</template>
<script setup lang="ts">
<script setup lang="ts" name="cache">
import { systemCache } from '@/api/setting/system'
import vCharts from 'vue-echarts'
import { reactive } from 'vue'

View File

@@ -113,7 +113,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="environment">
import { systemInfo } from '@/api/setting/system'
const loading = ref(false)
const info = ref({

View File

@@ -4,7 +4,13 @@
<el-card class="!border-none" shadow="never">
<el-form class="ls-form" :model="formData" inline>
<el-form-item label="管理员">
<el-input class="w-56" placeholder="请输入" v-model="formData.username" />
<el-input
class="w-56"
placeholder="请输入"
v-model="formData.username"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="访问方式">
@@ -14,12 +20,18 @@
:key="index"
:label="item.label"
:value="item.value"
></el-option>
/>
</el-select>
</el-form-item>
<el-form-item label="来源IP">
<el-input class="w-56" placeholder="请输入" v-model="formData.ip" />
<el-input
class="w-56"
placeholder="请输入"
v-model="formData.ip"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item label="访问时间">
@@ -30,7 +42,13 @@
</el-form-item>
<el-form-item label="访问链接">
<el-input class="w-56" placeholder="请输入" v-model="formData.url" />
<el-input
class="w-56"
placeholder="请输入"
v-model="formData.url"
clearable
@keyup.enter="resetPage"
/>
</el-form-item>
<el-form-item>
@@ -61,7 +79,7 @@
</div>
</template>
<script setup lang="ts">
<script setup lang="ts" name="journal">
import { systemLogLists } from '@/api/setting/system'
import { usePaging } from '@/hooks/usePaging'

View File

@@ -98,7 +98,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="loginRegister">
import type { LoginSetup } from '@/api/setting/user'
import { getLogin, setLogin } from '@/api/setting/user'
import feedback from '@/utils/feedback'

View File

@@ -25,7 +25,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="userSetup">
import { getUserSetup, setUserSetup } from '@/api/setting/user'
import feedback from '@/utils/feedback'
// import type { FormInstance } from 'element-plus'

View File

@@ -50,7 +50,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="webFilling">
import { getCopyright, setCopyright } from '@/api/setting/website'
import feedback from '@/utils/feedback'
// 表单数据

View File

@@ -59,7 +59,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="webInformation">
import { getWebsite, setWebsite } from '@/api/setting/website'
import useAppStore from '@/stores/modules/app'
import feedback from '@/utils/feedback'

View File

@@ -30,7 +30,7 @@
</footer-btns>
</template>
<script setup lang="ts">
<script setup lang="ts" naem="webProtocol">
import { getProtocol, setProtocol } from '@/api/setting/website'
import feedback from '@/utils/feedback'

View File

@@ -65,7 +65,7 @@
</div>
</template>
<script setup lang="ts">
<script setup lang="ts" name="userSetting">
import { setUserInfo } from '@/api/user'
import useUserStore from '@/stores/modules/user'
import feedback from '@/utils/feedback'

View File

@@ -130,7 +130,7 @@
</div>
</template>
<script lang="ts" setup>
<script lang="ts" setup name="workbench">
import { getWorkbench } from '@/api/app'
import vCharts from 'vue-echarts'
import menu_admin from './image/menu_admin.png'

View File

@@ -9,5 +9,6 @@ declare module 'vue-router' {
hidden?: boolean
activeMenu?: string
hideTab?: boolean
keepAlive?: boolean
}
}

View File

@@ -8,7 +8,7 @@ import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import { createStyleImportPlugin, ElementPlusResolve } from 'vite-plugin-style-import'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
// https://vitejs.dev/config/
export default defineConfig({
// base: '/admin/',
@@ -36,7 +36,8 @@ export default defineConfig({
// 配置路劲在你的src里的svg存放文件
iconDirs: [fileURLToPath(new URL('./src/assets/icons', import.meta.url))],
symbolId: 'local-icon-[dir]-[name]'
})
}),
vueSetupExtend()
],
resolve: {
alias: {

View File

@@ -692,6 +692,16 @@
estree-walker "^2.0.2"
source-map "^0.6.1"
"@vue/compiler-core@3.2.39":
version "3.2.39"
resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.39.tgz#0d77e635f4bdb918326669155a2dc977c053943e"
integrity sha512-mf/36OWXqWn0wsC40nwRRGheR/qoID+lZXbIuLnr4/AngM0ov8Xvv8GHunC0rKRIkh60bTqydlqTeBo49rlbqw==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/shared" "3.2.39"
estree-walker "^2.0.2"
source-map "^0.6.1"
"@vue/compiler-dom@3.2.37", "@vue/compiler-dom@^3.2.37":
version "3.2.37"
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz#10d2427a789e7c707c872da9d678c82a0c6582b5"
@@ -700,6 +710,14 @@
"@vue/compiler-core" "3.2.37"
"@vue/shared" "3.2.37"
"@vue/compiler-dom@3.2.39":
version "3.2.39"
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.39.tgz#bd69d35c1a48fe2cea4ab9e96d2a3a735d146fdf"
integrity sha512-HMFI25Be1C8vLEEv1hgEO1dWwG9QQ8LTTPmCkblVJY/O3OvWx6r1+zsox5mKPMGvqYEZa6l8j+xgOfUspgo7hw==
dependencies:
"@vue/compiler-core" "3.2.39"
"@vue/shared" "3.2.39"
"@vue/compiler-sfc@3.2.37", "@vue/compiler-sfc@^3.2.37":
version "3.2.37"
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz#3103af3da2f40286edcd85ea495dcb35bc7f5ff4"
@@ -716,6 +734,22 @@
postcss "^8.1.10"
source-map "^0.6.1"
"@vue/compiler-sfc@^3.2.29":
version "3.2.39"
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.39.tgz#8fe29990f672805b7c5a2ecfa5b05e681c862ea2"
integrity sha512-fqAQgFs1/BxTUZkd0Vakn3teKUt//J3c420BgnYgEOoVdTwYpBTSXCMJ88GOBCylmUBbtquGPli9tVs7LzsWIA==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.39"
"@vue/compiler-dom" "3.2.39"
"@vue/compiler-ssr" "3.2.39"
"@vue/reactivity-transform" "3.2.39"
"@vue/shared" "3.2.39"
estree-walker "^2.0.2"
magic-string "^0.25.7"
postcss "^8.1.10"
source-map "^0.6.1"
"@vue/compiler-ssr@3.2.37":
version "3.2.37"
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz#4899d19f3a5fafd61524a9d1aee8eb0505313cff"
@@ -724,6 +758,14 @@
"@vue/compiler-dom" "3.2.37"
"@vue/shared" "3.2.37"
"@vue/compiler-ssr@3.2.39":
version "3.2.39"
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.39.tgz#4f3bfb535cb98b764bee45e078700e03ccc60633"
integrity sha512-EoGCJ6lincKOZGW+0Ky4WOKsSmqL7hp1ZYgen8M7u/mlvvEQUaO9tKKOy7K43M9U2aA3tPv0TuYYQFrEbK2eFQ==
dependencies:
"@vue/compiler-dom" "3.2.39"
"@vue/shared" "3.2.39"
"@vue/devtools-api@^6.1.4", "@vue/devtools-api@^6.2.1":
version "6.2.1"
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092"
@@ -757,6 +799,17 @@
estree-walker "^2.0.2"
magic-string "^0.25.7"
"@vue/reactivity-transform@3.2.39":
version "3.2.39"
resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.39.tgz#da6ae6c8fd77791b9ae21976720d116591e1c4aa"
integrity sha512-HGuWu864zStiWs9wBC6JYOP1E00UjMdDWIG5W+FpUx28hV3uz9ODOKVNm/vdOy/Pvzg8+OcANxAVC85WFBbl3A==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.39"
"@vue/shared" "3.2.39"
estree-walker "^2.0.2"
magic-string "^0.25.7"
"@vue/reactivity@3.2.37", "@vue/reactivity@^3.2.37":
version "3.2.37"
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz#5bc3847ac58828e2b78526e08219e0a1089f8848"
@@ -794,6 +847,11 @@
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz#8e6adc3f2759af52f0e85863dfb0b711ecc5c702"
integrity sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==
"@vue/shared@3.2.39":
version "3.2.39"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.39.tgz#302df167559a1a5156da162d8cc6760cef67f8e3"
integrity sha512-D3dl2ZB9qE6mTuWPk9RlhDeP1dgNRUKC3NJxji74A4yL8M2MwlhLKUC/49WHjrNzSPug58fWx/yFbaTzGAQSBw==
"@vue/tsconfig@^0.1.3":
version "0.1.3"
resolved "https://registry.npmmirror.com/@vue/tsconfig/-/tsconfig-0.1.3.tgz#4a61dbd29783d01ddab504276dcf0c2b6988654f"
@@ -4159,6 +4217,14 @@ vite-plugin-svg-icons@^2.0.1:
svg-baker "1.7.0"
svgo "^2.8.0"
vite-plugin-vue-setup-extend@^0.4.0:
version "0.4.0"
resolved "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz#ebbbe265320039b8c6a3b9fcae3b8d152ecf4a13"
integrity sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==
dependencies:
"@vue/compiler-sfc" "^3.2.29"
magic-string "^0.25.7"
vite@^3.0.0:
version "3.0.8"
resolved "https://registry.npmmirror.com/vite/-/vite-3.0.8.tgz#aa095ad8e3e5da46d9ec7e878f262678965d6531"

View File

@@ -1,17 +1,18 @@
<template>
<view class="user-info flex px-[50rpx] justify-between py-[50rpx]">
<navigator
<view
v-if="isLogin"
class="flex items-center"
hover-class="none"
url="/pages/user_data/user_data"
@click="navigateTo('/pages/user_data/user_data')"
>
<u-avatar :src="user.avatar" :size="120"></u-avatar>
<view class="text-white ml-[20rpx]">
<view class="text-2xl">{{ user.nickname }}</view>
<view class="text-xs mt-[18rpx]">账号{{ user.username }}</view>
<view class="text-xs mt-[18rpx]" @click.stop="copy(user.username)">
账号{{ user.username }}
</view>
</view>
</navigator>
</view>
<navigator v-else class="flex items-center" hover-class="none" url="/pages/login/login">
<u-avatar src="/static/images/user/default_avatar.png" :size="120"></u-avatar>
<view class="text-white text-3xl ml-[20rpx]">未登录</view>
@@ -22,6 +23,8 @@
</view>
</template>
<script lang="ts" setup>
import { useCopy } from '@/hooks/useCopy'
const props = defineProps({
content: {
type: Object,
@@ -39,6 +42,12 @@ const props = defineProps({
type: Boolean
}
})
const { copy } = useCopy()
const navigateTo = (url: string) => {
uni.navigateTo({
url
})
}
</script>
<style lang="scss" scoped>

10
app/src/hooks/useCopy.ts Normal file
View File

@@ -0,0 +1,10 @@
export function useCopy() {
const copy = (text: string) => {
uni.setClipboardData({
data: String(text)
})
}
return {
copy
}
}

View File

@@ -50,6 +50,7 @@ const handleCollect = async (index: number): Promise<void> => {
try {
const articleId: number = collectData.value[index].articleId
await cancelCollect({ articleId })
uni.$u.toast('已取消收藏')
paging.value.reload()
} catch (err) {
//TODO handle the exception

View File

@@ -30,7 +30,9 @@
@change="codeChange"
change-text="x秒"
/>
{{ codeTips }}
<text :class="formData.mobile ? 'text-primary' : 'text-muted'">
{{ codeTips }}
</text>
</view>
</u-form-item>
<u-form-item label="新密码" borderBottom>
@@ -79,7 +81,7 @@ const codeChange = (text: string) => {
}
const sendSms = async () => {
if (!formData.mobile) return uni.$u.toast('请输入手机号码')
if (!formData.mobile) return
if (uCodeRef.value?.canGetCode) {
await smsSend({
scene: SMSEnum.FIND_PASSWORD,

View File

@@ -67,7 +67,7 @@
:border="false"
/>
<view
class="border-l border-solid border-0 border-light pl-3 text-muted leading-4 ml-3 w-[180rpx]"
class="border-l border-solid border-0 border-light pl-3 leading-4 ml-3 w-[180rpx]"
@click="sendSms"
>
<u-verification-code
@@ -76,7 +76,9 @@
@change="codeChange"
change-text="x秒"
/>
{{ codeTips }}
<text :class="formData.mobile ? 'text-primary' : 'text-muted'">
{{ codeTips }}
</text>
</view>
</u-form-item>
</template>
@@ -208,7 +210,7 @@ const codeChange = (text: string) => {
}
const sendSms = async () => {
if (!formData.mobile) return uni.$u.toast('请输入手机号码')
if (!formData.mobile) return
if (uCodeRef.value?.canGetCode) {
await smsSend({
scene: SMSEnum.LOGIN,

View File

@@ -31,8 +31,8 @@
<view class="panel-btn flex items-center px-[34rpx]" @click="handleAddCollect(newsData.id)">
<u-icon
:name="newsData.collect ? 'star-fill' : 'star'"
size="34"
:color="newsData.collect ? '#4173ff' : '#333'"
size="40"
:color="newsData.collect ? '#F7BA47' : '#333'"
></u-icon>
<text class="ml-[10rpx]">收藏</text>
</view>
@@ -55,7 +55,7 @@ const handleAddCollect = async (articleId: number) => {
try {
if (newsData.value.collect) {
await cancelCollect({ articleId })
uni.$u.toast('取消收藏成功')
uni.$u.toast('取消收藏')
} else {
await addCollect({ articleId })
uni.$u.toast('收藏成功')

View File

@@ -2,11 +2,15 @@
<view class="suggest bg-white">
<!-- 热门搜索 -->
<view class="hot" v-if="hot_search.length">
<view class="text-base font-medium pl-[24rpx] pt-[26rpx] pb-[6rpx]">热门搜索</view>
<view class="font-medium pl-[24rpx] pt-[26rpx] pb-[6rpx] text-lg">热门搜索</view>
<view class="w-full pl-[24rpx] pr-[8rpx]">
<block v-for="hotItem in hot_search">
<view class="keyword" @click="handleHistoreSearch(hotItem)">{{ hotItem }}</view>
<view class="w-full px-[24rpx]">
<block v-for="(hotItem, index) in hot_search" :key="index">
<view
class="keyword truncate max-w-full"
@click="handleHistoreSearch(hotItem)"
>{{ hotItem }}</view
>
</block>
</view>
</view>
@@ -18,14 +22,16 @@
<!-- 历史搜索 -->
<view class="history" v-if="his_search.length">
<view class="flex justify-between px-[24rpx] pb-[6rpx]">
<view class="text-base font-medium">历史搜索</view>
<view class="flex justify-between px-[24rpx] pb-[6rpx] pt-[26rpx]">
<view class="text-lg font-medium">历史搜索</view>
<view class="text-xs text-muted" @click="() => emit('clear')">清空</view>
</view>
<view class="w-full pl-[24rpx] pr-[8rpx]">
<block v-for="hisItem in his_search">
<view class="keyword" @click="handleHistoreSearch(hisItem)">{{ hisItem }}</view>
<view class="w-full px-[24rpx]">
<block v-for="(hisItem, index) in his_search" :key="index">
<view class="keyword truncate" @click="handleHistoreSearch(hisItem)">{{
hisItem
}}</view>
</block>
</view>
</view>

View File

@@ -245,9 +245,9 @@ export default {
if(pagePath == this.pageUrl || pagePath == "/" + this.pageUrl) return
// 发出事件和修改v-model绑定的值
this.$emit("change", index);
uni.switchTab({
url: pagePath
});
// uni.switchTab({
// url: pagePath
// });
} else {
// 如果配置了papgePath属性将不会双向绑定v-model传入的value值
// 因为这个模式下不再需要v-model绑定的value值了而是通过getCurrentPages()适配

View File

@@ -1,5 +1,5 @@
export async function saveImageToPhotosAlbum(url: string) {
if (!url) return uni.$u.$toast('图片不存在')
if (!url) return uni.$u.toast('图片不存在')
//#ifdef H5
uni.$u.$toast('长按图片保存')
//#endif
@@ -13,9 +13,6 @@ export async function saveImageToPhotosAlbum(url: string) {
icon: 'success'
})
} catch (error: any) {
uni.showToast({
title: error.errMsg || '保存失败',
icon: 'none'
})
uni.$u.toast(error.errMsg || '保存失败')
}
}

View File

@@ -88,7 +88,6 @@ export function objectToQuery(params: Record<string, any>): string {
}
}
} else {
console.log(part + encodeURIComponent(value), '####')
query += part + encodeURIComponent(value) + '&'
}
}

View File

@@ -1 +1 @@
import o from"./error.1294af0d.js";import{d as r,o as t,c as m,V as p}from"./@vue.cab01781.js";import"./element-plus.374f5afd.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.66650ce1.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:"403",setup(u){return(e,s)=>(t(),m("div",i,[p(o,{code:"403",title:"\u60A8\u7684\u8D26\u53F7\u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650\uFF01","show-btn":!1})]))}});export{L as default};
import o from"./error.a2aa9f80.js";import{d as r,o as t,c as m,V as p}from"./@vue.cab01781.js";import"./element-plus.151049e5.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.7d89aa28.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:"403",setup(u){return(e,s)=>(t(),m("div",i,[p(o,{code:"403",title:"\u60A8\u7684\u8D26\u53F7\u6743\u9650\u4E0D\u8DB3\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650\uFF01","show-btn":!1})]))}});export{L as default};

View File

@@ -1 +1 @@
import o from"./error.1294af0d.js";import{d as r,o as t,c as m,V as p}from"./@vue.cab01781.js";import"./element-plus.374f5afd.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.66650ce1.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};
import o from"./error.a2aa9f80.js";import{d as r,o as t,c as m,V as p}from"./@vue.cab01781.js";import"./element-plus.151049e5.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.7d89aa28.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 +1 @@
import"./add-nav.vue_vue_type_script_setup_true_lang.70d03ce8.js";import{_ as R}from"./add-nav.vue_vue_type_script_setup_true_lang.70d03ce8.js";import"./element-plus.374f5afd.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.43820743.js";import"./index.66650ce1.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.f006aa63.js";import"./index.48f7fb70.js";import"./picker.69d8af88.js";import"./index.3369bc1b.js";import"./usePaging.bfe23d97.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{R as default};
import"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import{_ as R}from"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import"./element-plus.151049e5.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.b51e30da.js";import"./index.7d89aa28.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.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.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 +1 @@
import{B as F,w as b}from"./element-plus.374f5afd.js";import{_ as v}from"./index.43820743.js";import{_ as B}from"./picker.f006aa63.js";import{_ as A}from"./picker.69d8af88.js";import{f as _,b as y}from"./index.66650ce1.js";import{d as D,o as u,c as r,a as e,W as E,a8 as C,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=D({__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=A,V=F,h=B,g=v,k=b;return u(),r("div",null,[e("div",null,[(u(!0),r(E,null,C(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 _};
import{C as F,w as b}from"./element-plus.151049e5.js";import{_ as v}from"./index.b51e30da.js";import{_ as A}from"./picker.39386e69.js";import{_ as B}from"./picker.b90a9731.js";import{f as _,b as y}from"./index.7d89aa28.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 +1 @@
import{r as e}from"./index.66650ce1.js";function a(t){return e.get({url:"/article/cate/list",params:t})}function l(t){return e.get({url:"/article/cate/all",params:t})}function i(t){return e.post({url:"/article/cate/add",params:t})}function c(t){return e.post({url:"/article/cate/edit",params:t})}function u(t){return e.post({url:"/article/cate/del",params:t})}function n(t){return e.get({url:"/article/cate/detail",params:t})}function s(t){return e.post({url:"/article/cate/change",params:t})}function o(t){return e.get({url:"/article/list",params:t})}function d(t){return e.post({url:"/article/add",params:t})}function f(t){return e.post({url:"/article/edit",params:t})}function p(t){return e.post({url:"/article/del",params:t})}function g(t){return e.get({url:"/article/detail",params:t})}function C(t){return e.post({url:"/article/change",params:t})}export{c as a,i as b,n as c,u as d,s as e,a as f,g,l as h,f as i,d as j,C as k,p as l,o as m};
import{r as e}from"./index.7d89aa28.js";function a(t){return e.get({url:"/article/cate/list",params:t})}function l(t){return e.get({url:"/article/cate/all",params:t})}function i(t){return e.post({url:"/article/cate/add",params:t})}function c(t){return e.post({url:"/article/cate/edit",params:t})}function u(t){return e.post({url:"/article/cate/del",params:t})}function n(t){return e.get({url:"/article/cate/detail",params:t})}function s(t){return e.post({url:"/article/cate/change",params:t})}function o(t){return e.get({url:"/article/list",params:t})}function d(t){return e.post({url:"/article/add",params:t})}function f(t){return e.post({url:"/article/edit",params:t})}function p(t){return e.post({url:"/article/del",params:t})}function g(t){return e.get({url:"/article/detail",params:t})}function C(t){return e.post({url:"/article/change",params:t})}export{c as a,i as b,n as c,u as d,s as e,a as f,g,l as h,f as i,d as j,C as k,p as l,o as m};

View File

@@ -1 +0,0 @@
import"./attr-setting.vue_vue_type_script_setup_true_lang.e2ec5101.js";import{_ as em}from"./attr-setting.vue_vue_type_script_setup_true_lang.e2ec5101.js";import"./index.22f954e7.js";import"./attr.vue_vue_type_script_setup_true_lang.6fade7a2.js";import"./element-plus.374f5afd.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.43820743.js";import"./index.66650ce1.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.f006aa63.js";import"./index.48f7fb70.js";import"./picker.69d8af88.js";import"./index.3369bc1b.js";import"./usePaging.bfe23d97.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.19e8b204.js";import"./decoration-img.408cc614.js";import"./attr.vue_vue_type_script_setup_true_lang.813de30c.js";import"./content.ae4e83bb.js";import"./attr.vue_vue_type_script_setup_true_lang.9f826c96.js";import"./add-nav.vue_vue_type_script_setup_true_lang.70d03ce8.js";import"./content.149b5e3a.js";import"./attr.vue_vue_type_script_setup_true_lang.b9715116.js";import"./content.vue_vue_type_script_setup_true_lang.65f9983c.js";import"./attr.vue_vue_type_script_setup_true_lang.06a2fa18.js";import"./content.edf66e1e.js";import"./decoration.46adad8f.js";import"./attr.vue_vue_type_script_setup_true_lang.0b87e513.js";import"./content.6b6901ee.js";import"./attr.vue_vue_type_script_setup_true_lang.a36dcde8.js";import"./content.vue_vue_type_script_setup_true_lang.4d93935e.js";import"./attr.vue_vue_type_script_setup_true_lang.0583d8bc.js";import"./content.f4970cf1.js";export{em as default};

View File

@@ -0,0 +1 @@
import"./attr-setting.vue_vue_type_script_setup_true_lang.3af67c2b.js";import{_ as em}from"./attr-setting.vue_vue_type_script_setup_true_lang.3af67c2b.js";import"./index.7cc15db9.js";import"./attr.vue_vue_type_script_setup_true_lang.5b4262fd.js";import"./element-plus.151049e5.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.b51e30da.js";import"./index.7d89aa28.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.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.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.2830c18e.js";import"./decoration-img.527288ec.js";import"./attr.vue_vue_type_script_setup_true_lang.498c5b98.js";import"./content.ec0ba8dd.js";import"./attr.vue_vue_type_script_setup_true_lang.99e0fc33.js";import"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import"./content.16f556e9.js";import"./attr.vue_vue_type_script_setup_true_lang.3055eec3.js";import"./content.vue_vue_type_script_setup_true_lang.42326ab2.js";import"./attr.vue_vue_type_script_setup_true_lang.06a2fa18.js";import"./content.9754d616.js";import"./decoration.ce4f52a1.js";import"./attr.vue_vue_type_script_setup_true_lang.0b87e513.js";import"./content.31dcc26b.js";import"./attr.vue_vue_type_script_setup_true_lang.7e350cdd.js";import"./content.vue_vue_type_script_setup_true_lang.52b49f99.js";import"./attr.vue_vue_type_script_setup_true_lang.0583d8bc.js";import"./content.9e8cc13e.js";export{em as default};

View File

@@ -1 +1 @@
import{w as i}from"./index.22f954e7.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 _};
import{w as i}from"./index.7cc15db9.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 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.9f826c96.js";import{_ as S}from"./attr.vue_vue_type_script_setup_true_lang.9f826c96.js";import"./element-plus.374f5afd.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.70d03ce8.js";import"./index.43820743.js";import"./index.66650ce1.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.f006aa63.js";import"./index.48f7fb70.js";import"./picker.69d8af88.js";import"./index.3369bc1b.js";import"./usePaging.bfe23d97.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{S as default};
import"./attr.vue_vue_type_script_setup_true_lang.3055eec3.js";import{_ as S}from"./attr.vue_vue_type_script_setup_true_lang.3055eec3.js";import"./element-plus.151049e5.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.1804d4d1.js";import"./index.b51e30da.js";import"./index.7d89aa28.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.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.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 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.a36dcde8.js";import{_ as R}from"./attr.vue_vue_type_script_setup_true_lang.a36dcde8.js";import"./element-plus.374f5afd.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.43820743.js";import"./index.66650ce1.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.f006aa63.js";import"./index.48f7fb70.js";import"./picker.69d8af88.js";import"./index.3369bc1b.js";import"./usePaging.bfe23d97.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{R as default};
import"./attr.vue_vue_type_script_setup_true_lang.5b4262fd.js";import{_ as R}from"./attr.vue_vue_type_script_setup_true_lang.5b4262fd.js";import"./element-plus.151049e5.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.b51e30da.js";import"./index.7d89aa28.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.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.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 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.b9715116.js";import{_ as S}from"./attr.vue_vue_type_script_setup_true_lang.b9715116.js";import"./element-plus.374f5afd.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.70d03ce8.js";import"./index.43820743.js";import"./index.66650ce1.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.f006aa63.js";import"./index.48f7fb70.js";import"./picker.69d8af88.js";import"./index.3369bc1b.js";import"./usePaging.bfe23d97.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{S as default};
import"./attr.vue_vue_type_script_setup_true_lang.99e0fc33.js";import{_ as S}from"./attr.vue_vue_type_script_setup_true_lang.99e0fc33.js";import"./element-plus.151049e5.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.1804d4d1.js";import"./index.b51e30da.js";import"./index.7d89aa28.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.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.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 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.6fade7a2.js";import{_ as R}from"./attr.vue_vue_type_script_setup_true_lang.6fade7a2.js";import"./element-plus.374f5afd.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.43820743.js";import"./index.66650ce1.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.f006aa63.js";import"./index.48f7fb70.js";import"./picker.69d8af88.js";import"./index.3369bc1b.js";import"./usePaging.bfe23d97.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{R as default};
import"./attr.vue_vue_type_script_setup_true_lang.7e350cdd.js";import{_ as R}from"./attr.vue_vue_type_script_setup_true_lang.7e350cdd.js";import"./element-plus.151049e5.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.b51e30da.js";import"./index.7d89aa28.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.39386e69.js";import"./index.c62639de.js";import"./picker.b90a9731.js";import"./index.878ae11f.js";import"./usePaging.1512f046.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 +1 @@
import"./attr.vue_vue_type_script_setup_true_lang.813de30c.js";import{_ as Q}from"./attr.vue_vue_type_script_setup_true_lang.813de30c.js";import"./element-plus.374f5afd.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.69d8af88.js";import"./index.48f7fb70.js";import"./index.66650ce1.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.3369bc1b.js";import"./usePaging.bfe23d97.js";import"./index.43820743.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{Q as default};
import"./attr.vue_vue_type_script_setup_true_lang.498c5b98.js";import{_ as Q}from"./attr.vue_vue_type_script_setup_true_lang.498c5b98.js";import"./element-plus.151049e5.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.b90a9731.js";import"./index.c62639de.js";import"./index.7d89aa28.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.878ae11f.js";import"./usePaging.1512f046.js";import"./index.b51e30da.js";import"./vue3-video-play.05975c53.js";import"./vuedraggable.a5db575d.js";import"./vue.de4be77f.js";import"./sortablejs.cd7e2c7e.js";export{Q as default};

View File

@@ -1 +1 @@
import{O as c,P as r,C as i,D as f}from"./element-plus.374f5afd.js";import{_ as p}from"./add-nav.vue_vue_type_script_setup_true_lang.70d03ce8.js";import{d as F,o as E,c as b,V as e,M as t,a as d,T as s}from"./@vue.cab01781.js";const V=s("\u5F00\u542F"),x=s("\u505C\u7528"),B={class:"flex-1"},A=d("div",{class:"form-tips mb-4"},"\u6700\u591A\u53EF\u6DFB\u52A010\u4E2A\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A100px*100px",-1),D=F({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(o){return(C,a)=>{const u=c,m=r,n=i,_=f;return E(),b("div",null,[e(_,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(m,{modelValue:o.content.enabled,"onUpdate:modelValue":a[0]||(a[0]=l=>o.content.enabled=l)},{default:t(()=>[e(u,{label:1},{default:t(()=>[V]),_:1}),e(u,{label:0},{default:t(()=>[x]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[d("div",B,[A,e(p,{modelValue:o.content.data,"onUpdate:modelValue":a[1]||(a[1]=l=>o.content.data=l)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{D as _};
import{O as c,P as r,D as i,F as f}from"./element-plus.151049e5.js";import{_ as p}from"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import{d as F,o as E,c as b,V as e,M as t,a as d,T as s}from"./@vue.cab01781.js";const V=s("\u5F00\u542F"),x=s("\u505C\u7528"),B={class:"flex-1"},A=d("div",{class:"form-tips mb-4"},"\u6700\u591A\u53EF\u6DFB\u52A010\u4E2A\uFF0C\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A100px*100px",-1),D=F({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(o){return(C,a)=>{const u=c,m=r,n=i,_=f;return E(),b("div",null,[e(_,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u662F\u5426\u542F\u7528"},{default:t(()=>[e(m,{modelValue:o.content.enabled,"onUpdate:modelValue":a[0]||(a[0]=l=>o.content.enabled=l)},{default:t(()=>[e(u,{label:1},{default:t(()=>[V]),_:1}),e(u,{label:0},{default:t(()=>[x]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[d("div",B,[A,e(p,{modelValue:o.content.data,"onUpdate:modelValue":a[1]||(a[1]=l=>o.content.data=l)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{D as _};

View File

@@ -0,0 +1 @@
import{C as c,D as i,F}from"./element-plus.151049e5.js";import{_ as p}from"./picker.b90a9731.js";import{d as r,o as f,c as V,V as e,M as o,a as m}from"./@vue.cab01781.js";const B=m("div",{class:"form-tips"},"\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A200*200\u50CF\u7D20\uFF1B\u56FE\u7247\u683C\u5F0F\uFF1Ajpg\u3001png\u3001jpeg",-1),A=r({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){return(E,l)=>{const a=c,n=i,d=p,s=F;return f(),V("div",null,[e(s,{"label-width":"90px"},{default:o(()=>[e(n,{label:"\u5BA2\u670D\u6807\u9898"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.title,"onUpdate:modelValue":l[0]||(l[0]=u=>t.content.title=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u670D\u52A1\u65F6\u95F4"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.time,"onUpdate:modelValue":l[1]||(l[1]=u=>t.content.time=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u8054\u7CFB\u7535\u8BDD"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.mobile,"onUpdate:modelValue":l[2]||(l[2]=u=>t.content.mobile=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u5BA2\u670D\u4E8C\u7EF4\u7801"},{default:o(()=>[m("div",null,[e(d,{modelValue:t.content.qrcode,"onUpdate:modelValue":l[3]||(l[3]=u=>t.content.qrcode=u),"exclude-domain":""},null,8,["modelValue"]),B])]),_:1})]),_:1})])}}});export{A as _};

View File

@@ -0,0 +1 @@
import{O as y,P as U,D as v,C as w,w as N,F as O}from"./element-plus.151049e5.js";import{_ as $}from"./index.b51e30da.js";import{_ as j}from"./picker.39386e69.js";import{_ as I}from"./picker.b90a9731.js";import{f}from"./index.7d89aa28.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,C as v,B as w,w as N,D as O}from"./element-plus.374f5afd.js";import{_ as $}from"./index.43820743.js";import{_ as j}from"./picker.f006aa63.js";import{_ as I}from"./picker.69d8af88.js";import{f as F}from"./index.66650ce1.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,B=I,k=w,x=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(B,{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(k,{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(x,{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

@@ -0,0 +1 @@
import{O as y,P as U,D as v,C as w,w as N,F as O}from"./element-plus.151049e5.js";import{_ as $}from"./index.b51e30da.js";import{_ as j}from"./picker.39386e69.js";import{_ as I}from"./picker.b90a9731.js";import{f}from"./index.7d89aa28.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{B as c,C as i,D as F}from"./element-plus.374f5afd.js";import{_ as p}from"./picker.69d8af88.js";import{d as r,o as f,c as V,V as e,M as o,a as m}from"./@vue.cab01781.js";const B=m("div",{class:"form-tips"},"\u5EFA\u8BAE\u56FE\u7247\u5C3A\u5BF8\uFF1A200*200\u50CF\u7D20\uFF1B\u56FE\u7247\u683C\u5F0F\uFF1Ajpg\u3001png\u3001jpeg",-1),A=r({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){return(E,l)=>{const a=c,n=i,d=p,s=F;return f(),V("div",null,[e(s,{"label-width":"90px"},{default:o(()=>[e(n,{label:"\u5BA2\u670D\u6807\u9898"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.title,"onUpdate:modelValue":l[0]||(l[0]=u=>t.content.title=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u670D\u52A1\u65F6\u95F4"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.time,"onUpdate:modelValue":l[1]||(l[1]=u=>t.content.time=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u8054\u7CFB\u7535\u8BDD"},{default:o(()=>[e(a,{class:"w-[400px]",modelValue:t.content.mobile,"onUpdate:modelValue":l[2]||(l[2]=u=>t.content.mobile=u)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u5BA2\u670D\u4E8C\u7EF4\u7801"},{default:o(()=>[m("div",null,[e(d,{modelValue:t.content.qrcode,"onUpdate:modelValue":l[3]||(l[3]=u=>t.content.qrcode=u),"exclude-domain":""},null,8,["modelValue"]),B])]),_:1})]),_:1})])}}});export{A as _};

View File

@@ -1 +1 @@
import{O as _,P as i,C as r,B as f,D as p}from"./element-plus.374f5afd.js";import{_ as V}from"./add-nav.vue_vue_type_script_setup_true_lang.70d03ce8.js";import{d as b,o as E,c as x,V as e,M as t,a as B,T as d}from"./@vue.cab01781.js";const F=d("\u6A2A\u6392"),y=d("\u7AD6\u6392"),C={class:"flex-1"},O=b({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(l){return(D,o)=>{const u=_,s=i,n=r,m=f,c=p;return E(),x("div",null,[e(c,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u6392\u7248\u6837\u5F0F"},{default:t(()=>[e(s,{modelValue:l.content.style,"onUpdate:modelValue":o[0]||(o[0]=a=>l.content.style=a)},{default:t(()=>[e(u,{label:1},{default:t(()=>[F]),_:1}),e(u,{label:2},{default:t(()=>[y]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u6807\u9898\u540D\u79F0"},{default:t(()=>[e(m,{class:"w-[400px]",modelValue:l.content.title,"onUpdate:modelValue":o[1]||(o[1]=a=>l.content.title=a)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[B("div",C,[e(V,{modelValue:l.content.data,"onUpdate:modelValue":o[2]||(o[2]=a=>l.content.data=a)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{O as _};
import{O as _,P as i,D as r,C as f,F as p}from"./element-plus.151049e5.js";import{_ as V}from"./add-nav.vue_vue_type_script_setup_true_lang.1804d4d1.js";import{d as b,o as E,c as x,V as e,M as t,a as F,T as d}from"./@vue.cab01781.js";const y=d("\u6A2A\u6392"),B=d("\u7AD6\u6392"),C={class:"flex-1"},O=b({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(l){return(D,o)=>{const u=_,s=i,n=r,m=f,c=p;return E(),x("div",null,[e(c,{"label-width":"70px"},{default:t(()=>[e(n,{label:"\u6392\u7248\u6837\u5F0F"},{default:t(()=>[e(s,{modelValue:l.content.style,"onUpdate:modelValue":o[0]||(o[0]=a=>l.content.style=a)},{default:t(()=>[e(u,{label:1},{default:t(()=>[y]),_:1}),e(u,{label:2},{default:t(()=>[B]),_:1})]),_:1},8,["modelValue"])]),_:1}),e(n,{label:"\u6807\u9898\u540D\u79F0"},{default:t(()=>[e(m,{class:"w-[400px]",modelValue:l.content.title,"onUpdate:modelValue":o[1]||(o[1]=a=>l.content.title=a)},null,8,["modelValue"])]),_:1}),e(n,{label:"\u83DC\u5355\u8BBE\u7F6E"},{default:t(()=>[F("div",C,[e(V,{modelValue:l.content.data,"onUpdate:modelValue":o[2]||(o[2]=a=>l.content.data=a)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{O as _};

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