1、开发首页ui及功能

master
chris 1 month ago
parent c725addaa1
commit 36fc52e00b

@ -1,109 +0,0 @@
<p align="center">
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
</p>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.8.8</h1>
<h4 align="center">基于SpringBoot+Vue3前后端分离的Java快速开发框架</h4>
<p align="center">
<a href="https://gitee.com/y_project/RuoYi-Vue/stargazers"><img src="https://gitee.com/y_project/RuoYi-Vue/badge/star.svg?theme=dark"></a>
<a href="https://gitee.com/y_project/RuoYi-Vue"><img src="https://img.shields.io/badge/RuoYi-v3.8.8-brightgreen.svg"></a>
<a href="https://gitee.com/y_project/RuoYi-Vue/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
</p>
## 平台简介
* 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
* 配套后端代码仓库地址[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) 或 [RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast) 版本。
* 前端技术栈([Vue2](https://cn.vuejs.org) + [Element](https://github.com/ElemeFE/element) + [Vue CLI](https://cli.vuejs.org/zh)),请移步[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue/tree/master/ruoyi-ui)。
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)&nbsp;&nbsp;
* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)&nbsp;&nbsp;
## 前端运行
```bash
# 克隆项目
git clone https://github.com/yangzongzhuan/RuoYi-Vue3.git
# 进入项目目录
cd RuoYi-Vue3
# 安装依赖
yarn --registry=https://registry.npmmirror.com
# 启动服务
yarn dev
# 构建测试环境 yarn build:stage
# 构建生产环境 yarn build:prod
# 前端访问地址 http://localhost:80
```
## 内置功能
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
3. 岗位管理:配置系统用户所属担任职务。
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
7. 参数管理:对系统动态配置常用参数。
8. 通知公告:系统通知公告信息发布维护。
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
10. 登录日志:系统登录日志记录查询包含登录异常。
11. 在线用户:当前系统中活跃用户状态监控。
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
13. 代码生成前后端代码的生成java、html、xml、sql支持CRUD下载 。
14. 系统接口根据业务代码自动生成相关的api接口文档。
15. 服务监控监视当前系统CPU、内存、磁盘、堆栈等相关信息。
16. 缓存监控:对系统的缓存信息查询,命令统计等。
17. 在线构建器拖动表单元素生成相应的HTML代码。
18. 连接池监视监视当前系统数据库连接池状态可进行分析SQL找出系统性能瓶颈。
## 在线体验
- admin/admin123
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
演示地址http://vue.ruoyi.vip
文档地址http://doc.ruoyi.vip
## 演示图
<table>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
</tr>
</table>
## 若依前后端分离交流群
QQ群 [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/已满-101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [![加入QQ群](https://img.shields.io/badge/已满-264312783-blue.svg)](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [![加入QQ群](https://img.shields.io/badge/已满-167385320-blue.svg)](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [![加入QQ群](https://img.shields.io/badge/已满-104748341-blue.svg)](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [![加入QQ群](https://img.shields.io/badge/已满-160110482-blue.svg)](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [![加入QQ群](https://img.shields.io/badge/已满-170801498-blue.svg)](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [![加入QQ群](https://img.shields.io/badge/已满-108482800-blue.svg)](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) [![加入QQ群](https://img.shields.io/badge/已满-101046199-blue.svg)](https://jq.qq.com/?_wv=1027&k=SpyH2875) [![加入QQ群](https://img.shields.io/badge/已满-136919097-blue.svg)](https://jq.qq.com/?_wv=1027&k=tKEt51dz) [![加入QQ群](https://img.shields.io/badge/已满-143961921-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0vBbSb0ztbBgVtn3kJS-Q4HUNYwip89G&authKey=8irq5PhutrZmWIvsUsklBxhj57l%2F1nOZqjzigkXZVoZE451GG4JHPOqW7AW6cf0T&noverify=0&group_code=143961921) [![加入QQ群](https://img.shields.io/badge/已满-174951577-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZFAPAbp09S2ltvwrJzp7wGlbopsc0rwi&authKey=HB2cxpxP2yspk%2Bo3WKTBfktRCccVkU26cgi5B16u0KcAYrVu7sBaE7XSEqmMdFQp&noverify=0&group_code=174951577) [![加入QQ群](https://img.shields.io/badge/已满-161281055-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Fn2aF5IHpwsy8j6VlalNJK6qbwFLFHat&authKey=uyIT%2B97x2AXj3odyXpsSpVaPMC%2Bidw0LxG5MAtEqlrcBcWJUA%2FeS43rsF1Tg7IRJ&noverify=0&group_code=161281055) [![加入QQ群](https://img.shields.io/badge/已满-138988063-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063) [![加入QQ群](https://img.shields.io/badge/151450850-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DkugnCg68PevlycJSKSwjhFqfIgrWWwR&authKey=pR1Pa5lPIeGF%2FFtIk6d%2FGB5qFi0EdvyErtpQXULzo03zbhopBHLWcuqdpwY241R%2F&noverify=0&group_code=151450850) 点击按钮入群。

@ -40,7 +40,7 @@
"@iconify-json/carbon": "^1.2.5",
"@iconify/vue": "^4.2.0",
"@vitejs/plugin-vue": "5.0.5",
"sass": "1.77.5",
"sass-embedded": "^1.83.4",
"unplugin-auto-import": "0.17.6",
"unplugin-vue-setup-extend-plus": "1.0.1",
"vite": "5.3.2",

@ -52,7 +52,7 @@ importers:
version: 3.1.5
unocss:
specifier: ^0.65.1
version: 0.65.1(postcss@5.2.18)(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))(vue@3.4.31)
version: 0.65.1(postcss@5.2.18)(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))(vue@3.4.31)
vue:
specifier: 3.4.31
version: 3.4.31
@ -74,10 +74,13 @@ importers:
version: 4.2.0(vue@3.4.31)
'@vitejs/plugin-vue':
specifier: 5.0.5
version: 5.0.5(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))(vue@3.4.31)
version: 5.0.5(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))(vue@3.4.31)
sass:
specifier: 1.77.5
version: 1.77.5
specifier: 1.79.5
version: 1.79.5
sass-embedded:
specifier: ^1.83.4
version: 1.83.4
unplugin-auto-import:
specifier: 0.17.6
version: 0.17.6(@vueuse/core@10.11.0(vue@3.4.31))(rollup@4.28.0)
@ -86,13 +89,13 @@ importers:
version: 1.0.1
vite:
specifier: 5.3.2
version: 5.3.2(@types/node@22.10.1)(sass@1.77.5)
version: 5.3.2(@types/node@22.10.1)(sass@1.79.5)
vite-plugin-compression:
specifier: 0.5.1
version: 0.5.1(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))
version: 0.5.1(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))
vite-plugin-svg-icons:
specifier: 2.0.1
version: 2.0.1(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))
version: 2.0.1(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))
packages:
@ -123,6 +126,9 @@ packages:
resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==}
engines: {node: '>=6.9.0'}
'@bufbuild/protobuf@2.2.3':
resolution: {integrity: sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==}
'@ctrl/tinycolor@3.6.1':
resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
engines: {node: '>=10'}
@ -470,6 +476,94 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, tarball: https://r2.cnpmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz}
engines: {node: '>= 8'}
'@parcel/watcher-android-arm64@2.5.0':
resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [android]
'@parcel/watcher-darwin-arm64@2.5.0':
resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [darwin]
'@parcel/watcher-darwin-x64@2.5.0':
resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [darwin]
'@parcel/watcher-freebsd-x64@2.5.0':
resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [freebsd]
'@parcel/watcher-linux-arm-glibc@2.5.0':
resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
libc: [glibc]
'@parcel/watcher-linux-arm-musl@2.5.0':
resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
libc: [musl]
'@parcel/watcher-linux-arm64-glibc@2.5.0':
resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@parcel/watcher-linux-arm64-musl@2.5.0':
resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
'@parcel/watcher-linux-x64-glibc@2.5.0':
resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
'@parcel/watcher-linux-x64-musl@2.5.0':
resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
'@parcel/watcher-win32-arm64@2.5.0':
resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [win32]
'@parcel/watcher-win32-ia32@2.5.0':
resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==}
engines: {node: '>= 10.0.0'}
cpu: [ia32]
os: [win32]
'@parcel/watcher-win32-x64@2.5.0':
resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [win32]
'@parcel/watcher@2.5.0':
resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==}
engines: {node: '>= 10.0.0'}
'@polka/url@1.0.0-next.28':
resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
@ -875,6 +969,9 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
buffer-builder@0.2.0:
resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==}
bundle-require@5.0.0:
resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@ -905,6 +1002,10 @@ packages:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
chokidar@4.0.3:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
class-utils@0.3.6:
resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==, tarball: https://r2.cnpmjs.org/class-utils/-/class-utils-0.3.6.tgz}
engines: {node: '>=0.10.0'}
@ -927,6 +1028,9 @@ packages:
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
colorjs.io@0.5.2:
resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, tarball: https://r2.cnpmjs.org/combined-stream/-/combined-stream-1.0.8.tgz}
engines: {node: '>= 0.8'}
@ -1045,6 +1149,11 @@ packages:
destr@2.0.3:
resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==}
detect-libc@1.0.3:
resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
engines: {node: '>=0.10'}
hasBin: true
dom-serializer@0.2.2:
resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==, tarball: https://r2.cnpmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz}
@ -1350,6 +1459,9 @@ packages:
immutable@4.3.7:
resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==}
immutable@5.0.3:
resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==}
importx@0.4.4:
resolution: {integrity: sha512-Lo1pukzAREqrBnnHC+tj+lreMTAvyxtkKsMxLY8H15M/bvLl54p3YuoTI70Tz7Il0AsgSlD7Lrk/FaApRcBL7w==}
@ -1381,7 +1493,7 @@ packages:
engines: {node: '>= 0.4'}
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, tarball: https://r2.cnpmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz}
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
is-boolean-object@1.2.0:
@ -1679,11 +1791,14 @@ packages:
resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==, tarball: https://r2.cnpmjs.org/nanomatch/-/nanomatch-1.2.13.tgz}
engines: {node: '>=0.10.0'}
node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
node-fetch-native@1.6.4:
resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==}
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, tarball: https://r2.cnpmjs.org/normalize-path/-/normalize-path-3.0.0.tgz}
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
normalize-wheel-es@1.2.0:
@ -1838,9 +1953,13 @@ packages:
engines: {node: '>= 6'}
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, tarball: https://r2.cnpmjs.org/readdirp/-/readdirp-3.6.0.tgz}
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
readdirp@4.1.1:
resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==}
engines: {node: '>= 14.18.0'}
reflect.getprototypeof@1.0.7:
resolution: {integrity: sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==}
engines: {node: '>= 0.4'}
@ -1884,6 +2003,9 @@ packages:
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, tarball: https://r2.cnpmjs.org/run-parallel/-/run-parallel-1.2.0.tgz}
rxjs@7.8.1:
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
safe-array-concat@1.1.2:
resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
engines: {node: '>=0.4'}
@ -1898,8 +2020,133 @@ packages:
safe-regex@1.1.0:
resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==, tarball: https://r2.cnpmjs.org/safe-regex/-/safe-regex-1.1.0.tgz}
sass@1.77.5:
resolution: {integrity: sha512-oDfX1mukIlxacPdQqNb6mV2tVCrnE+P3nVYioy72V5tlk56CPNcO4TCuFcaCRKKfJ1M3lH95CleRS+dVKL2qMg==}
sass-embedded-android-arm64@1.83.4:
resolution: {integrity: sha512-tgX4FzmbVqnQmD67ZxQDvI+qFNABrboOQgwsG05E5bA/US42zGajW9AxpECJYiMXVOHmg+d81ICbjb0fsVHskw==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [android]
sass-embedded-android-arm@1.83.4:
resolution: {integrity: sha512-9Z4pJAOgEkXa3VDY/o+U6l5XvV0mZTJcSl0l/mSPHihjAHSpLYnOW6+KOWeM8dxqrsqTYcd6COzhanI/a++5Gw==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [android]
sass-embedded-android-ia32@1.83.4:
resolution: {integrity: sha512-RsFOziFqPcfZXdFRULC4Ayzy9aK6R6FwQ411broCjlOBX+b0gurjRadkue3cfUEUR5mmy0KeCbp7zVKPLTK+5Q==}
engines: {node: '>=14.0.0'}
cpu: [ia32]
os: [android]
sass-embedded-android-riscv64@1.83.4:
resolution: {integrity: sha512-EHwh0nmQarBBrMRU928eTZkFGx19k/XW2YwbPR4gBVdWLkbTgCA5aGe8hTE6/1zStyx++3nDGvTZ78+b/VvvLg==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [android]
sass-embedded-android-x64@1.83.4:
resolution: {integrity: sha512-0PgQNuPWYy1jEOEPDVsV89KfqOsMLIp9CSbjBY7jRcwRhyVAcigqrUG6bDeNtojHUYKA1kU+Eh/85WxOHUOgBw==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [android]
sass-embedded-darwin-arm64@1.83.4:
resolution: {integrity: sha512-rp2ywymWc3nymnSnAFG5R/8hvxWCsuhK3wOnD10IDlmNB7o4rzKby1c+2ZfpQGowlYGWsWWTgz8FW2qzmZsQRw==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [darwin]
sass-embedded-darwin-x64@1.83.4:
resolution: {integrity: sha512-kLkN2lXz9PCgGfDS8Ev5YVcl/V2173L6379en/CaFuJJi7WiyPgBymW7hOmfCt4uO4R1y7CP2Uc08DRtZsBlAA==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [darwin]
sass-embedded-linux-arm64@1.83.4:
resolution: {integrity: sha512-E0zjsZX2HgESwyqw31EHtI39DKa7RgK7nvIhIRco1d0QEw227WnoR9pjH3M/ZQy4gQj3GKilOFHM5Krs/omeIA==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
sass-embedded-linux-arm@1.83.4:
resolution: {integrity: sha512-nL90ryxX2lNmFucr9jYUyHHx21AoAgdCL1O5Ltx2rKg2xTdytAGHYo2MT5S0LIeKLa/yKP/hjuSvrbICYNDvtA==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
sass-embedded-linux-ia32@1.83.4:
resolution: {integrity: sha512-ew5HpchSzgAYbQoriRh8QhlWn5Kw2nQ2jHoV9YLwGKe3fwwOWA0KDedssvDv7FWnY/FCqXyymhLd6Bxae4Xquw==}
engines: {node: '>=14.0.0'}
cpu: [ia32]
os: [linux]
sass-embedded-linux-musl-arm64@1.83.4:
resolution: {integrity: sha512-IzMgalf6MZOxgp4AVCgsaWAFDP/IVWOrgVXxkyhw29fyAEoSWBJH4k87wyPhEtxSuzVHLxKNbc8k3UzdWmlBFg==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
sass-embedded-linux-musl-arm@1.83.4:
resolution: {integrity: sha512-0RrJRwMrmm+gG0VOB5b5Cjs7Sd+lhqpQJa6EJNEaZHljJokEfpE5GejZsGMRMIQLxEvVphZnnxl6sonCGFE/QQ==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
sass-embedded-linux-musl-ia32@1.83.4:
resolution: {integrity: sha512-LLb4lYbcxPzX4UaJymYXC+WwokxUlfTJEFUv5VF0OTuSsHAGNRs/rslPtzVBTvMeG9TtlOQDhku1F7G6iaDotA==}
engines: {node: '>=14.0.0'}
cpu: [ia32]
os: [linux]
sass-embedded-linux-musl-riscv64@1.83.4:
resolution: {integrity: sha512-zoKlPzD5Z13HKin1UGR74QkEy+kZEk2AkGX5RelRG494mi+IWwRuWCppXIovor9+BQb9eDWPYPoMVahwN5F7VA==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [linux]
sass-embedded-linux-musl-x64@1.83.4:
resolution: {integrity: sha512-hB8+/PYhfEf2zTIcidO5Bpof9trK6WJjZ4T8g2MrxQh8REVtdPcgIkoxczRynqybf9+fbqbUwzXtiUao2GV+vQ==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
sass-embedded-linux-riscv64@1.83.4:
resolution: {integrity: sha512-83fL4n+oeDJ0Y4KjASmZ9jHS1Vl9ESVQYHMhJE0i4xDi/P3BNarm2rsKljq/QtrwGpbqwn8ujzOu7DsNCMDSHA==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [linux]
sass-embedded-linux-x64@1.83.4:
resolution: {integrity: sha512-NlnGdvCmTD5PK+LKXlK3sAuxOgbRIEoZfnHvxd157imCm/s2SYF/R28D0DAAjEViyI8DovIWghgbcqwuertXsA==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
sass-embedded-win32-arm64@1.83.4:
resolution: {integrity: sha512-J2BFKrEaeSrVazU2qTjyQdAk+MvbzJeTuCET0uAJEXSKtvQ3AzxvzndS7LqkDPbF32eXAHLw8GVpwcBwKbB3Uw==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [win32]
sass-embedded-win32-ia32@1.83.4:
resolution: {integrity: sha512-uPAe9T/5sANFhJS5dcfAOhOJy8/l2TRYG4r+UO3Wp4yhqbN7bggPvY9c7zMYS0OC8tU/bCvfYUDFHYMCl91FgA==}
engines: {node: '>=14.0.0'}
cpu: [ia32]
os: [win32]
sass-embedded-win32-x64@1.83.4:
resolution: {integrity: sha512-C9fkDY0jKITdJFij4UbfPFswxoXN9O/Dr79v17fJnstVwtUojzVJWKHUXvF0Zg2LIR7TCc4ju3adejKFxj7ueA==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [win32]
sass-embedded@1.83.4:
resolution: {integrity: sha512-Hf2burRA/y5PGxsg6jB9UpoK/xZ6g/pgrkOcdl6j+rRg1Zj8XhGKZ1MTysZGtTPUUmiiErqzkP5+Kzp95yv9GQ==}
engines: {node: '>=16.0.0'}
hasBin: true
sass@1.79.5:
resolution: {integrity: sha512-W1h5kp6bdhqFh2tk3DsI771MoEJjvrSY/2ihJRJS4pjIyfJCw0nTsxqhnrUzaLMOJjFchj8rOvraI/YUVjtx5g==}
engines: {node: '>=14.0.0'}
hasBin: true
@ -2014,6 +2261,10 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, tarball: https://r2.cnpmjs.org/supports-color/-/supports-color-7.2.0.tgz}
engines: {node: '>=8'}
supports-color@8.1.1:
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
engines: {node: '>=10'}
svg-baker@1.7.0:
resolution: {integrity: sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==, tarball: https://r2.cnpmjs.org/svg-baker/-/svg-baker-1.7.0.tgz}
@ -2022,6 +2273,14 @@ packages:
engines: {node: '>=10.13.0'}
hasBin: true
sync-child-process@1.0.2:
resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==}
engines: {node: '>=16.0.0'}
sync-message-port@1.1.3:
resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==}
engines: {node: '>=16.0.0'}
tinyexec@0.3.1:
resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
@ -2150,6 +2409,9 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, tarball: https://r2.cnpmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz}
varint@6.0.0:
resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, tarball: https://r2.cnpmjs.org/vary/-/vary-1.1.2.tgz}
engines: {node: '>= 0.8'}
@ -2273,6 +2535,8 @@ snapshots:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
'@bufbuild/protobuf@2.2.3': {}
'@ctrl/tinycolor@3.6.1': {}
'@element-plus/icons-vue@2.3.1(vue@3.4.31)':
@ -2487,6 +2751,66 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1
'@parcel/watcher-android-arm64@2.5.0':
optional: true
'@parcel/watcher-darwin-arm64@2.5.0':
optional: true
'@parcel/watcher-darwin-x64@2.5.0':
optional: true
'@parcel/watcher-freebsd-x64@2.5.0':
optional: true
'@parcel/watcher-linux-arm-glibc@2.5.0':
optional: true
'@parcel/watcher-linux-arm-musl@2.5.0':
optional: true
'@parcel/watcher-linux-arm64-glibc@2.5.0':
optional: true
'@parcel/watcher-linux-arm64-musl@2.5.0':
optional: true
'@parcel/watcher-linux-x64-glibc@2.5.0':
optional: true
'@parcel/watcher-linux-x64-musl@2.5.0':
optional: true
'@parcel/watcher-win32-arm64@2.5.0':
optional: true
'@parcel/watcher-win32-ia32@2.5.0':
optional: true
'@parcel/watcher-win32-x64@2.5.0':
optional: true
'@parcel/watcher@2.5.0':
dependencies:
detect-libc: 1.0.3
is-glob: 4.0.3
micromatch: 4.0.8
node-addon-api: 7.1.1
optionalDependencies:
'@parcel/watcher-android-arm64': 2.5.0
'@parcel/watcher-darwin-arm64': 2.5.0
'@parcel/watcher-darwin-x64': 2.5.0
'@parcel/watcher-freebsd-x64': 2.5.0
'@parcel/watcher-linux-arm-glibc': 2.5.0
'@parcel/watcher-linux-arm-musl': 2.5.0
'@parcel/watcher-linux-arm64-glibc': 2.5.0
'@parcel/watcher-linux-arm64-musl': 2.5.0
'@parcel/watcher-linux-x64-glibc': 2.5.0
'@parcel/watcher-linux-x64-musl': 2.5.0
'@parcel/watcher-win32-arm64': 2.5.0
'@parcel/watcher-win32-ia32': 2.5.0
'@parcel/watcher-win32-x64': 2.5.0
'@polka/url@1.0.0-next.28': {}
'@pureadmin/utils@2.5.0(echarts@5.5.1)(vue@3.4.31)':
@ -2580,13 +2904,13 @@ snapshots:
'@types/web-bluetooth@0.0.20': {}
'@unocss/astro@0.65.1(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))(vue@3.4.31)':
'@unocss/astro@0.65.1(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))(vue@3.4.31)':
dependencies:
'@unocss/core': 0.65.1
'@unocss/reset': 0.65.1
'@unocss/vite': 0.65.1(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))(vue@3.4.31)
'@unocss/vite': 0.65.1(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))(vue@3.4.31)
optionalDependencies:
vite: 5.3.2(@types/node@22.10.1)(sass@1.77.5)
vite: 5.3.2(@types/node@22.10.1)(sass@1.79.5)
transitivePeerDependencies:
- rollup
- supports-color
@ -2715,7 +3039,7 @@ snapshots:
dependencies:
'@unocss/core': 0.65.1
'@unocss/vite@0.65.1(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))(vue@3.4.31)':
'@unocss/vite@0.65.1(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))(vue@3.4.31)':
dependencies:
'@ampproject/remapping': 2.3.0
'@rollup/pluginutils': 5.1.3(rollup@4.28.0)
@ -2725,15 +3049,15 @@ snapshots:
chokidar: 3.6.0
magic-string: 0.30.14
tinyglobby: 0.2.10
vite: 5.3.2(@types/node@22.10.1)(sass@1.77.5)
vite: 5.3.2(@types/node@22.10.1)(sass@1.79.5)
transitivePeerDependencies:
- rollup
- supports-color
- vue
'@vitejs/plugin-vue@5.0.5(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))(vue@3.4.31)':
'@vitejs/plugin-vue@5.0.5(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))(vue@3.4.31)':
dependencies:
vite: 5.3.2(@types/node@22.10.1)(sass@1.77.5)
vite: 5.3.2(@types/node@22.10.1)(sass@1.79.5)
vue: 3.4.31
'@vue/compiler-core@3.4.31':
@ -2970,6 +3294,8 @@ snapshots:
dependencies:
fill-range: 7.1.1
buffer-builder@0.2.0: {}
bundle-require@5.0.0(esbuild@0.21.5):
dependencies:
esbuild: 0.21.5
@ -3022,6 +3348,10 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
chokidar@4.0.3:
dependencies:
readdirp: 4.1.1
class-utils@0.3.6:
dependencies:
arr-union: 3.1.0
@ -3044,6 +3374,8 @@ snapshots:
colorette@2.0.20: {}
colorjs.io@0.5.2: {}
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
@ -3159,6 +3491,8 @@ snapshots:
destr@2.0.3: {}
detect-libc@1.0.3: {}
dom-serializer@0.2.2:
dependencies:
domelementtype: 2.3.0
@ -3577,6 +3911,8 @@ snapshots:
immutable@4.3.7: {}
immutable@5.0.3: {}
importx@0.4.4:
dependencies:
bundle-require: 5.0.0(esbuild@0.21.5)
@ -3906,6 +4242,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
node-addon-api@7.1.1: {}
node-fetch-native@1.6.4: {}
normalize-path@3.0.0: {}
@ -4070,6 +4408,8 @@ snapshots:
dependencies:
picomatch: 2.3.1
readdirp@4.1.1: {}
reflect.getprototypeof@1.0.7:
dependencies:
call-bind: 1.0.7
@ -4132,6 +4472,10 @@ snapshots:
dependencies:
queue-microtask: 1.2.3
rxjs@7.8.1:
dependencies:
tslib: 2.3.0
safe-array-concat@1.1.2:
dependencies:
call-bind: 1.0.7
@ -4151,9 +4495,102 @@ snapshots:
dependencies:
ret: 0.1.15
sass@1.77.5:
sass-embedded-android-arm64@1.83.4:
optional: true
sass-embedded-android-arm@1.83.4:
optional: true
sass-embedded-android-ia32@1.83.4:
optional: true
sass-embedded-android-riscv64@1.83.4:
optional: true
sass-embedded-android-x64@1.83.4:
optional: true
sass-embedded-darwin-arm64@1.83.4:
optional: true
sass-embedded-darwin-x64@1.83.4:
optional: true
sass-embedded-linux-arm64@1.83.4:
optional: true
sass-embedded-linux-arm@1.83.4:
optional: true
sass-embedded-linux-ia32@1.83.4:
optional: true
sass-embedded-linux-musl-arm64@1.83.4:
optional: true
sass-embedded-linux-musl-arm@1.83.4:
optional: true
sass-embedded-linux-musl-ia32@1.83.4:
optional: true
sass-embedded-linux-musl-riscv64@1.83.4:
optional: true
sass-embedded-linux-musl-x64@1.83.4:
optional: true
sass-embedded-linux-riscv64@1.83.4:
optional: true
sass-embedded-linux-x64@1.83.4:
optional: true
sass-embedded-win32-arm64@1.83.4:
optional: true
sass-embedded-win32-ia32@1.83.4:
optional: true
sass-embedded-win32-x64@1.83.4:
optional: true
sass-embedded@1.83.4:
dependencies:
chokidar: 3.6.0
'@bufbuild/protobuf': 2.2.3
buffer-builder: 0.2.0
colorjs.io: 0.5.2
immutable: 5.0.3
rxjs: 7.8.1
supports-color: 8.1.1
sync-child-process: 1.0.2
varint: 6.0.0
optionalDependencies:
sass-embedded-android-arm: 1.83.4
sass-embedded-android-arm64: 1.83.4
sass-embedded-android-ia32: 1.83.4
sass-embedded-android-riscv64: 1.83.4
sass-embedded-android-x64: 1.83.4
sass-embedded-darwin-arm64: 1.83.4
sass-embedded-darwin-x64: 1.83.4
sass-embedded-linux-arm: 1.83.4
sass-embedded-linux-arm64: 1.83.4
sass-embedded-linux-ia32: 1.83.4
sass-embedded-linux-musl-arm: 1.83.4
sass-embedded-linux-musl-arm64: 1.83.4
sass-embedded-linux-musl-ia32: 1.83.4
sass-embedded-linux-musl-riscv64: 1.83.4
sass-embedded-linux-musl-x64: 1.83.4
sass-embedded-linux-riscv64: 1.83.4
sass-embedded-linux-x64: 1.83.4
sass-embedded-win32-arm64: 1.83.4
sass-embedded-win32-ia32: 1.83.4
sass-embedded-win32-x64: 1.83.4
sass@1.79.5:
dependencies:
'@parcel/watcher': 2.5.0
chokidar: 4.0.3
immutable: 4.3.7
source-map-js: 1.2.1
@ -4292,6 +4729,10 @@ snapshots:
dependencies:
has-flag: 4.0.0
supports-color@8.1.1:
dependencies:
has-flag: 4.0.0
svg-baker@1.7.0:
dependencies:
bluebird: 3.7.2
@ -4320,6 +4761,12 @@ snapshots:
picocolors: 1.1.1
stable: 0.1.8
sync-child-process@1.0.2:
dependencies:
sync-message-port: 1.1.3
sync-message-port@1.1.3: {}
tinyexec@0.3.1: {}
tinyglobby@0.2.10:
@ -4453,9 +4900,9 @@ snapshots:
universalify@2.0.1: {}
unocss@0.65.1(postcss@5.2.18)(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))(vue@3.4.31):
unocss@0.65.1(postcss@5.2.18)(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))(vue@3.4.31):
dependencies:
'@unocss/astro': 0.65.1(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))(vue@3.4.31)
'@unocss/astro': 0.65.1(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))(vue@3.4.31)
'@unocss/cli': 0.65.1(rollup@4.28.0)
'@unocss/core': 0.65.1
'@unocss/postcss': 0.65.1(postcss@5.2.18)
@ -4471,9 +4918,9 @@ snapshots:
'@unocss/transformer-compile-class': 0.65.1
'@unocss/transformer-directives': 0.65.1
'@unocss/transformer-variant-group': 0.65.1
'@unocss/vite': 0.65.1(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5))(vue@3.4.31)
'@unocss/vite': 0.65.1(rollup@4.28.0)(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5))(vue@3.4.31)
optionalDependencies:
vite: 5.3.2(@types/node@22.10.1)(sass@1.77.5)
vite: 5.3.2(@types/node@22.10.1)(sass@1.79.5)
transitivePeerDependencies:
- postcss
- rollup
@ -4517,18 +4964,20 @@ snapshots:
util-deprecate@1.0.2: {}
varint@6.0.0: {}
vary@1.1.2: {}
vite-plugin-compression@0.5.1(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5)):
vite-plugin-compression@0.5.1(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5)):
dependencies:
chalk: 4.1.2
debug: 4.3.7
fs-extra: 10.1.0
vite: 5.3.2(@types/node@22.10.1)(sass@1.77.5)
vite: 5.3.2(@types/node@22.10.1)(sass@1.79.5)
transitivePeerDependencies:
- supports-color
vite-plugin-svg-icons@2.0.1(vite@5.3.2(@types/node@22.10.1)(sass@1.77.5)):
vite-plugin-svg-icons@2.0.1(vite@5.3.2(@types/node@22.10.1)(sass@1.79.5)):
dependencies:
'@types/svgo': 2.6.4
cors: 2.8.5
@ -4538,11 +4987,11 @@ snapshots:
pathe: 0.2.0
svg-baker: 1.7.0
svgo: 2.8.0
vite: 5.3.2(@types/node@22.10.1)(sass@1.77.5)
vite: 5.3.2(@types/node@22.10.1)(sass@1.79.5)
transitivePeerDependencies:
- supports-color
vite@5.3.2(@types/node@22.10.1)(sass@1.77.5):
vite@5.3.2(@types/node@22.10.1)(sass@1.79.5):
dependencies:
esbuild: 0.21.5
postcss: 8.4.49
@ -4550,7 +4999,7 @@ snapshots:
optionalDependencies:
'@types/node': 22.10.1
fsevents: 2.3.3
sass: 1.77.5
sass: 1.79.5
vue-cropper@1.1.1: {}

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736840615222" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="37902" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M540.159325 256.00096C377.983528 256.00096 245.759693 388.224795 245.759693 550.400592S377.983528 844.800224 540.159325 844.800224s294.399632-132.223835 294.399632-294.399632S702.335122 256.00096 540.159325 256.00096z m0 477.234603c-100.198275 0-182.834971-81.602458-182.834972-182.834971 0-100.198275 81.602458-182.834971 182.834972-182.834971 100.198275 0 182.834971 81.602458 182.834971 182.834971 0 100.198275-82.636697 182.834971-182.834971 182.834971z" fill="#0CAA5A" p-id="37903"></path><path d="M543.323481 1024c-31.84124 0-57.518008-25.640928-57.518008-57.430968 0-31.79516 25.676768-57.430968 57.518008-57.430968 202.331907 0 365.634103-164.085555 365.634103-365.091384 0-31.79004 25.676768-57.425848 57.518008-57.425848s57.518008 25.635808 57.518008 57.425848c1.023999 264.591029-214.660852 479.95332-480.670119 479.95332z m0-851.198936c-31.84124 0-57.518008-25.635808-57.518008-57.425848V57.944248c0-20.510694 11.299826-39.99739 28.759004-50.252738 17.459178-10.255347 40.05371-10.255347 57.512888 0s28.759004 29.742043 28.759004 50.252738v57.430968c0 31.79516-25.676768 57.430968-57.512888 57.430968zM281.420448 281.513888c-22.599652 22.563812-59.571126 22.563812-82.170777 0l-41.082829-41.021389c-22.594532-22.558692-22.594532-59.478966 0-82.042777 22.599652-22.558692 59.571126-22.558692 82.165658 0l41.087948 41.021389c22.594532 22.563812 22.594532 59.484086 0 82.042777zM172.543784 543.027801c0 31.79516-25.676768 57.430968-57.518008 57.430968H57.518008C25.676768 600.453649 0 574.812721 0 543.022681c0-31.79516 25.676768-57.430968 57.518008-57.430968h57.512888c31.84124 0 57.518008 25.640928 57.518008 57.430968z m108.871544 261.513913c22.594532 22.558692 22.594532 59.478966 0 82.042778l-41.087948 41.021388c-22.594532 22.558692-59.566006 22.558692-82.165658 0-22.594532-22.563812-22.594532-59.484086 0-82.042777l41.082829-41.021389c22.599652-22.563812 59.571126-22.563812 82.170777 0zM805.221393 281.508768c-22.599652-22.558692-22.599652-59.478966 0-82.042777l41.082829-41.021389c22.594532-22.558692 59.571126-22.558692 82.165657 0 22.594532 22.563812 22.594532 59.484086 0 82.042777l-41.082828 41.021389c-22.594532 21.539813-59.571126 21.539813-82.165658 0z" fill="#FFC114" p-id="37904"></path></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736840200885" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="34445" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M1024 512c0 282.752-229.248 512-512 512S0 794.752 0 512 229.248 0 512 0s512 229.248 512 512z" fill="#308CFF" p-id="34446"></path><path d="M861.0816 493.7472c6.8864 36.8128-0.7168 76.9536-23.296 107.008-24.576 32.896-58.1888 51.84-99.8912 51.9168-146.0224 0.3328-292.096 0.128-438.1184 0.128-25.984 0-50.7648-2.6368-74.2144-16.512-86.1696-50.8928-88.5504-185.1392 3.5072-231.9872 2.816-1.408 6.144-4.2496 6.8096-7.0656 1.5616-6.6816 1.2288-13.824 2.5344-20.6592 3.5072-18.9696 4.7616-38.9632 11.7248-56.6528 11.008-27.8528 28.3392-52.6848 51.7888-71.6288 77.696-62.6944 195.4304-55.5008 259.3024 23.9872 4.8128 6.016 8.5504 4.608 14.0288 2.6112 61.7472-22.6816 156.0576-15.8976 190.5408 49.1264 9.2928 17.4848 17.9968 43.6224 18.176 63.616 0.0768 10.752 5.248 14.9504 13.0048 18.6368 35.6096 16.8448 57.1648 50.5088 64.1024 87.4752zM425.9328 810.0352c-2.048-4.6848-5.8112-9.3696-5.9648-14.1312-0.768-16.896-0.9728-33.8688 0.0768-50.688 0.3328-4.736 4.6592-11.3408 8.7552-13.1328 6.528-2.8416 13.824-0.512 17.664 6.8608 1.3312 2.6624 2.56 5.9392 2.4576 8.8576-0.3328 17.152-0.7424 34.2016-1.9712 51.2768-0.3328 3.8144-4.096 7.3728-6.2208 10.9568h-14.7968z m156.0576 0c-2.0992-5.1456-5.8624-10.24-5.888-15.3856-0.1792-17.92 1.0752-35.7632 1.6384-53.632 0.3328-10.8544 8.1408-9.4464 15.1552-9.5488 7.3984-0.1792 9.7536 5.4528 9.9072 10.752 0.5376 19.0976 0.4096 38.1952 0 57.3184-0.0768 3.5072-2.56 6.9888-3.968 10.496h-16.8448z m-240.384-91.5456c0-8.832 0.4608-17.664-0.0768-26.4192-0.5888-8.7552 4.992-13.3376 11.4432-13.1072 5.4016 0.2304 11.2896 4.7872 15.6928 8.7552 2.2528 2.048 2.4064 7.168 2.304 10.8288a1573.4016 1573.4016 0 0 1-1.9712 48.1792c-0.512 8.6528-6.2208 13.0048-14.2336 12.032-7.936-0.9216-14.1568-4.6848-13.2864-14.8736 0.7168-8.448 0.128-16.9472 0.128-25.3952z m156.032-0.0768c0-8.832 0.512-17.6896-0.128-26.5216-0.5632-8.2688 4.7872-12.8256 10.7008-12.8256 5.5552 0 11.8528 4.0192 16.3328 7.936 2.4576 2.0992 2.56 7.7824 2.4576 11.8784a927.8464 927.8464 0 0 1-2.1248 49.3056c-0.5888 7.7824-6.144 12.0064-13.8752 10.6752-7.2192-1.3056-13.5168-4.6592-13.3632-13.9008 0.128-8.8576 0-17.664 0-26.5472z m186.4704-1.28c-1.024 10.752-1.6896 21.2224-3.2 31.488-1.0752 7.0912-5.7856 11.0592-13.184 10.3168-6.4768-0.5888-12.0064-2.688-11.9552-10.9312 0-19.712 0.0768-39.5008-0.1792-59.2384-0.0768-7.5776 5.0688-10.8288 10.3936-9.9328 5.2992 0.896 13.0304 4.5312 14.336 8.704 3.072 9.3696 2.7648 19.84 3.7888 29.568z" fill="#FFFFFF" p-id="34447"></path></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736839475823" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10821" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M512 773.12m-82.944 0a82.944 82.944 0 1 0 165.888 0 82.944 82.944 0 1 0-165.888 0Z" fill="#EFD152" p-id="10822"></path><path d="M512 750.592c-26.624 0-48.128-21.504-48.128-48.128V410.624c0-26.624 21.504-48.128 48.128-48.128s48.128 21.504 48.128 48.128v291.84c0 26.624-21.504 48.128-48.128 48.128z" fill="#EFD152" p-id="10823"></path><path d="M254.976 900.096c-72.704-2.048-132.096-61.44-132.096-135.168V259.072C122.88 184.32 184.32 122.88 259.072 122.88h32.768V31.744h-32.768c-124.928 0-227.328 102.4-227.328 227.328v504.832c0 123.904 99.328 224.256 223.232 226.304v-90.112zM764.928 31.744h-32.768V122.88h32.768C839.68 122.88 901.12 184.32 901.12 259.072v504.832c0 73.728-58.368 133.12-132.096 136.192v91.136c122.88-2.048 223.232-103.424 223.232-226.304V259.072c0-124.928-102.4-227.328-227.328-227.328zM686.08 620.544V198.656c0-96.256-77.824-174.08-174.08-174.08s-174.08 77.824-174.08 174.08v105.472h39.936c8.192 0 14.336 6.144 14.336 14.336 0 8.192-6.144 14.336-14.336 14.336H337.92v53.248h39.936c8.192 0 14.336 6.144 14.336 14.336 0 8.192-6.144 14.336-14.336 14.336H337.92v53.248h39.936c8.192 0 14.336 6.144 14.336 14.336s-6.144 14.336-14.336 14.336H337.92v124.928c-35.84 40.96-55.296 93.184-55.296 148.48 0 125.952 102.4 229.376 228.352 229.376s228.352-102.4 228.352-229.376c1.024-55.296-18.432-107.52-53.248-149.504z m-174.08 286.72c-75.776 0-138.24-61.44-138.24-138.24 0-36.864 14.336-71.68 41.984-98.304l13.312-13.312V198.656c0-46.08 36.864-82.944 82.944-82.944s82.944 36.864 82.944 82.944v458.752l13.312 13.312c26.624 26.624 41.984 61.44 41.984 98.304 0 76.8-62.464 138.24-138.24 138.24z" fill="#009F72" p-id="10824"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736839863714" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21399" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M512 0C229.236364 0 0 229.236364 0 512s229.236364 512 512 512 512-229.236364 512-512S794.763636 0 512 0z m0 985.196606C250.616242 985.196606 38.803394 773.306182 38.803394 512S250.616242 38.803394 512 38.803394 985.196606 250.693818 985.196606 512 773.306182 985.196606 512 985.196606z" fill="#00B661" p-id="21400"></path><path d="M520.983273 90.003394v170.759758c134.733576 4.654545 242.532848 115.432727 242.532848 251.236848 0 76.350061-34.055758 144.802909-87.862303 190.960485l136.905697 105.549576C887.730424 732.253091 934.167273 627.603394 934.167273 512c0-230.136242-184.149333-417.326545-413.199515-421.996606z" fill="#ED5454" p-id="21401"></path><path d="M512 260.499394v-170.666667C278.807273 89.832727 89.832727 278.807273 89.832727 512a420.615758 420.615758 0 0 0 116.224 290.940121l142.27394-99.979636A250.973091 250.973091 0 0 1 260.499394 512c0-138.860606 112.64-251.500606 251.516121-251.500606z" fill="#167DDB" p-id="21402"></path><path d="M418.676364 429.180121c-2.435879 28.470303-17.873455 44.016485-46.452364 46.436849-29.277091-2.420364-45.180121-17.873455-47.600485-46.436849 2.420364-28.470303 18.323394-44.016485 47.616-46.436848 28.470303 2.420364 44.00097 17.873455 46.436849 46.436848z m-24.436364 1.256727c-1.613576-13.824-9.340121-21.566061-23.179636-23.164121-13.824 1.613576-20.743758 9.340121-20.743758 23.164121 0.806788 13.032727 7.726545 19.93697 20.743758 20.759273 14.646303-0.822303 22.372848-7.726545 23.179636-20.759273z m233.270303 67.180607h-69.616485c-3.227152-23.614061-16.694303-35.84-40.339394-36.631273-26.841212 0.806788-40.680727 22.807273-41.487515 65.939394-0.806788 40.680727 13.839515 61.067636 44.016485 61.067636 22.000485 0 34.583273-12.660364 37.903515-37.903515h70.873212c-8.176485 57.840485-44.016485 87.939879-107.52 90.360242-76.536242-2.420364-116.053333-41.146182-118.473697-116.053333 4.033939-74.100364 41.130667-113.63297 111.104-118.473697 68.359758 0.806788 106.278788 31.340606 113.63297 91.61697l-0.093091 0.093091z" fill="#00B661" p-id="21403"></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

@ -0,0 +1,98 @@
export const pestDeviceParamsDict = {
insecticideTem: {
name: "杀虫仓温度",
svg: "temperature",
},
dryingTem: {
name: "干燥仓温度",
svg: "temperature2",
},
rain: {
name: "降雨状态",
svg: "rain",
},
illum: {
name: "光照强度",
svg: "light",
},
mode: {
name: "运行模式",
svg: "",
status: {
0: "手动",
1: "自动",
},
},
attractWorm: {
name: "诱虫灯",
svg: "",
status: {
0: "关闭",
1: "开启",
},
},
rainFlap: {
name: "虫雨挡板",
svg: "",
status: {
0: "关闭",
1: "打开",
},
},
wormFlap: {
name: "杀虫挡板",
svg: "",
status: {
0: "关闭",
1: "打开",
},
},
dryingFlap: {
name: "烘干挡板",
svg: "",
status: {
0: "关闭",
1: "打开",
},
},
moveWorm: {
name: "移虫装置",
svg: "",
status: {
0: "关闭",
1: "打开",
},
},
shake: {
name: "震动装置",
svg: "",
status: {
0: "关闭",
1: "启动",
},
},
fillLight: {
name: "补光灯",
svg: "",
status: {
0: "关闭",
1: "启动",
},
},
insecticide: {
name: "杀虫控制",
svg: "",
status: {
0: "关闭",
1: "启动",
},
},
drying: {
name: "烘干控制",
svg: "",
status: {
0: "关闭",
1: "启动",
},
},
};

@ -1,69 +1,79 @@
import router from './router'
import { ElMessage } from 'element-plus'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken } from '@/utils/auth'
import { isHttp, isPathMatch } from '@/utils/validate'
import { isRelogin } from '@/utils/request'
import useUserStore from '@/store/modules/user'
import useSettingsStore from '@/store/modules/settings'
import usePermissionStore from '@/store/modules/permission'
import router from "./router";
import { ElMessage } from "element-plus";
import NProgress from "nprogress";
import "nprogress/nprogress.css";
import { getToken } from "@/utils/auth";
import { isHttp, isPathMatch } from "@/utils/validate";
import { isRelogin } from "@/utils/request";
import useUserStore from "@/store/modules/user";
import useSettingsStore from "@/store/modules/settings";
import usePermissionStore from "@/store/modules/permission";
NProgress.configure({ showSpinner: false })
NProgress.configure({ showSpinner: false });
const whiteList = ['/login', '/register']
const whiteList = ["/login", "/register"];
const isWhiteList = (path) => {
return whiteList.some(pattern => isPathMatch(pattern, path))
}
return whiteList.some((pattern) => isPathMatch(pattern, path));
};
router.beforeEach((to, from, next) => {
NProgress.start()
// TODO 测试,先跳过
next();
return;
NProgress.start();
if (getToken()) {
to.meta.title && useSettingsStore().setTitle(to.meta.title)
to.meta.title && useSettingsStore().setTitle(to.meta.title);
/* has token*/
if (to.path === '/login') {
next({ path: '/' })
NProgress.done()
if (to.path === "/login") {
next({ path: "/" });
NProgress.done();
} else if (isWhiteList(to.path)) {
next()
next();
} else {
if (useUserStore().roles.length === 0) {
isRelogin.show = true
isRelogin.show = true;
// 判断当前用户是否已拉取完user_info信息
useUserStore().getInfo().then(() => {
isRelogin.show = false
usePermissionStore().generateRoutes().then(accessRoutes => {
// 根据roles权限生成可访问的路由表
accessRoutes.forEach(route => {
if (!isHttp(route.path)) {
router.addRoute(route) // 动态添加可访问路由表
}
})
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
useUserStore()
.getInfo()
.then(() => {
isRelogin.show = false;
usePermissionStore()
.generateRoutes()
.then((accessRoutes) => {
// 根据roles权限生成可访问的路由表
accessRoutes.forEach((route) => {
if (!isHttp(route.path)) {
router.addRoute(route); // 动态添加可访问路由表
}
});
next({ ...to, replace: true }); // hack方法 确保addRoutes已完成
});
})
}).catch(err => {
useUserStore().logOut().then(() => {
ElMessage.error(err)
next({ path: '/' })
})
})
.catch((err) => {
useUserStore()
.logOut()
.then(() => {
ElMessage.error(err);
next({ path: "/" });
});
});
} else {
next()
next();
}
}
} else {
// 没有token
if (isWhiteList(to.path)) {
// 在免登录白名单,直接进入
next()
next();
} else {
next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
NProgress.done()
next(`/login?redirect=${to.fullPath}`); // 否则全部重定向到登录页
NProgress.done();
}
}
})
});
router.afterEach(() => {
NProgress.done()
})
NProgress.done();
});

@ -1,19 +1,7 @@
<template>
<div class="app-container home" :class="{ 'hasTagsView': hasTags }">
<section class="home-top">
<div class="sort-info">
<el-row :gutter="8">
<el-col :span="index == 0 ? 6 : 3" v-for="(item, index) in infoItems" :key="index">
<div class="info-item" :style="`background-color: ${colorList[item.type].color}`">
<Icon :icon="colorList[item.type].icon" class="info-item__icon"/>
<div class="info-msg">
<p class="msg-title">{{ item.title }}</p>
<span class="msg-num">{{ item.num }}</span>
</div>
</div>
</el-col>
</el-row>
</div>
<device-overview />
</section>
<section class="home-content">
<el-row :gutter="12" class="h-100%">
@ -37,8 +25,8 @@
<el-col :span="10">
<el-card class="device-info h-100%">
<template #header>
<span class="card-title">设备信息</span>
</template>
<span class="card-title">设备信息</span>
</template>
</el-card>
</el-col>
</el-row>
@ -46,6 +34,7 @@
<template #header>
<span class="card-title">实时数据</span>
</template>
<live-data />
</el-card>
</el-col>
</el-row>
@ -55,79 +44,12 @@
<script setup name="Index">
import useSettingsStore from '@/store/modules/settings'
import deviceOverview from './indexComponents/deviceOverview.vue'
import deviceList from './indexComponents/deviceList.vue'
import liveData from './indexComponents/liveData.vue'
const settingsStore = useSettingsStore()
const infoItems = reactive([
{
type: 'device',
title: '设备总数',
num: 12
},
{
type: 'pest',
title: '虫情监测设备',
num: 6
},
{
type: 'environment',
title: '环境监测设备',
num: 2
},
{
type: 'soil',
title: '土壤监测设备',
num: 2
},
{
type: 'online',
title: '在线设备',
num: 18
},
{
type: 'offline',
title: '离线设备',
num: 2
},
{
type: 'abnormal',
title: '异常设备',
num: 2
}
])
const colorList = readonly({
device:{
icon: 'carbon:devices',
color: '#329874'
},
pest:{
icon: 'carbon:pest',
color: '#b47a3e'
},
environment:{
icon: 'carbon:radar-weather',
color: '#396a98'
},
soil:{
icon: 'carbon:soil-moisture',
color: '#45969f'
},
online:{
icon: 'carbon:link',
color: '#3aa534'
},
offline:{
icon: 'carbon:unlink',
color: '#808890'
},
abnormal:{
icon: 'carbon:warning',
color: '#c04747'
}
})
const hasTags = computed(() => settingsStore.tagsView);
</script>
@ -148,45 +70,8 @@ const hasTags = computed(() => settingsStore.tagsView);
height: calc(100% - 86px);
}
$infoIconSize: 38px;
.info-item {
@apply flex justify-between items-center;
padding: 12px 15px;
color: #fff;
background-color: #25598a;
border-radius: 8px;
&.device-num {
background-color: red;
}
.info-msg {
@apply text-right;
}
.msg-title {
font-size: 16px;
margin-bottom: 5px;
}
.msg-num {
font-size: 22px;
font-weight: 600;
}
}
.info-item__icon {
width: $infoIconSize;
height: $infoIconSize;
color: #ddd;
}
.device-list {
height: 100%;
}
</style>

@ -0,0 +1,179 @@
<template>
<div class="sort-info" ref="sortInfoRef">
<el-row :gutter="8">
<el-col :span="index == 0 ? 6 : 3" v-for="(item, index) in infoItems" :key="index">
<div class="info-item" data-type="infoItem" :style="`background-color: ${colorList[item.type].color}`" @mouseover.self="handleHoverItem($event, item)" @mouseleave.self="winVisible = false">
<Icon :icon="colorList[item.type].icon" class="info-item__icon"/>
<div class="info-msg">
<p class="msg-title">{{ item.title }}</p>
<span class="msg-num">{{ item.num }}</span>
</div>
</div>
</el-col>
</el-row>
<div class="device-win" ref="deviceWinRef" v-show="winVisible" @mouseover="winVisible = true" @mouseleave="winVisible = false">
测试窗口
<!-- <div class="search-box">
<el-input placeholder="请输入设备名称" class="search-input" v-model="searchValue" />
<el-button type="primary" class="search-btn" @click="searchDevices"></el-button>
</div>
<el-table :data="deviceData" stripe style="width: 100%">
<el-table-column prop="date" label="Date" />
<el-table-column prop="name" label="Name" />
</el-table> -->
</div>
</div>
</template>
<script setup>
const colorList = readonly({
device:{
icon: 'carbon:devices',
color: '#329874'
},
pest:{
icon: 'carbon:pest',
color: '#b47a3e'
},
environment:{
icon: 'carbon:radar-weather',
color: '#396a98'
},
soil:{
icon: 'carbon:soil-moisture',
color: '#45969f'
},
online:{
icon: 'carbon:link',
color: '#3aa534'
},
offline:{
icon: 'carbon:unlink',
color: '#808890'
},
abnormal:{
icon: 'carbon:warning',
color: '#c04747'
}
})
const infoItems = reactive([
{
type: 'device',
title: '设备总数',
num: 12
},
{
type: 'pest',
title: '虫情监测设备',
num: 6
},
{
type: 'environment',
title: '环境监测设备',
num: 2
},
{
type: 'soil',
title: '土壤监测设备',
num: 2
},
{
type: 'online',
title: '在线设备',
num: 18
},
{
type: 'offline',
title: '离线设备',
num: 2
},
{
type: 'abnormal',
title: '异常设备',
num: 2
}
])
const deviceWinRef = ref(null)
const sortInfoRef = ref(null)
const winVisible = ref(false)
const searchValue = ref('')
const deviceData = reactive([])
function searchDevices () {
console.log('searchValue:', searchValue.value)
}
function handleHoverItem (e, item) {
const target = e.target;
const { right } = target.getBoundingClientRect();
const parent = document.body.getBoundingClientRect();
console.log(e, item, target.getBoundingClientRect(), parent)
winVisible.value = true;
nextTick(() => {
deviceWinRef.value.style.transform = `translate(${target.offsetLeft - 2}px`
})
}
</script>
<style lang="scss" scoped>
.sort-info {
position: relative;
}
$infoIconSize: 38px;
.info-item {
@apply flex justify-between items-center;
padding: 12px 15px;
color: #fff;
background-color: #25598a;
border-radius: 8px;
cursor: pointer;
&.device-num {
background-color: red;
}
.info-msg {
@apply text-right;
}
.msg-title {
font-size: 16px;
margin-bottom: 5px;
}
.msg-num {
font-size: 22px;
font-weight: 600;
}
}
.info-item__icon {
width: $infoIconSize;
height: $infoIconSize;
color: #ddd;
}
.info-item__icon,
.info-msg {
pointer-events: none;
}
.device-win {
position: absolute;
top: 76px;
height: 400px;
width: 460px;
z-index: 99;
background-color: var(--el-bg-color);
box-shadow: 0 0 8px #999;
border-radius: 8px;
padding: 10px;
transition: all 0.3s ease-in-out;
}
</style>

@ -0,0 +1,195 @@
<template>
<!-- 适用于虫情设备 -->
<div class="device-data" v-if="deviceType === 1">
<el-row :gutter="10" class="device-data__header">
<el-col :span="headerColNum" class="header-item" v-for="(item, index) in pestData.headerList" :key="index">
<svg-icon :icon-class="item.svg" class="header-item__icon"/>
<span class="header-item__name">{{ item.name }}</span>
<span class="header-item__value">{{ item.value || '--' }}</span>
</el-col>
</el-row>
<el-row :gutter="10" class="device-data--body">
<el-col :span="4" v-for="(item, index) in pestData.bodyList" :key="index">
<div :class="['body-item', {'on': deviceData[item.key] == 1}, { 'mode': item.key === 'mode'}]">
<p>{{ item.name }}</p>
<span>{{ item.value ? item.value : '--' }}</span>
</div>
</el-col>
</el-row>
</div>
<!-- 适用于土壤湿度气象站 -->
<div class="device-data" v-if="deviceType === 2 || deviceType === 3">
<el-row :gutter="10">
<el-col :span="6" v-for="(item, index) in pestData.bodyList" :key="index">
<div class="body-item">
<p>{{ item.name }}</p>
<span>{{ item.value }}</span>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
const defaultDataDict = readonly({
pest: {
mode: '0',
deviceType: 'worm',
insecticideTem: '20℃',
dryingTem: '20℃',
rain: '4mm',
wormFlap: 0,
insecticide: 0,
illum: '10lux',
status: 0,
shake: '0',
dryingFlap: 1,
drying: '1',
rainFlap: 0,
moveWorm: 1,
attractWorm: 0,
fillLight: 0
}
})
</script>
<script setup>
import { pestDeviceParamsDict } from '@/dict'
const deviceTypeDict = readonly({
worm: 1,
soil: 2,
met: 3,
other: 4
})
const props = defineProps({
deviceData: {
type: Object,
required: false,
default: () => defaultDataDict.pest
}
})
const deviceType = computed(() => {
return deviceTypeDict[props.deviceData.deviceType]
})
//
const pestData = computed(() => {
return formatPestDeviceData(props.deviceData)
})
const headerColNum = computed(() => {
return 24 / pestData.value.headerList.length
})
//
function formatPestDeviceData (deviceData) {
const headerList = [];
const bodyList = [];
const headKeys = ['insecticideTem', 'dryingTem', 'rain', 'illum']
Object.keys(deviceData).forEach(key => {
const dictValue = pestDeviceParamsDict[key];
if (!dictValue) return;
if (headKeys.includes(key)) {
headerList.push ({
key: key,
name: dictValue.name,
svg: dictValue.svg,
value: deviceData[key],
})
} else {
bodyList.push({
key: key,
name: dictValue.name,
value: dictValue.status[deviceData[key]]
})
}
})
return {
headerList,
bodyList
}
}
//
function formatOtherDeviceData (deviceData) {
return Object.keys(deviceData).map((key) => {
return {
key: key,
name: deviceParamsDict[key].name,
value: deviceData[key]
}
})
}
</script>
<style lang="scss" scoped>
.device-data__header {
@apply mb-16px;
padding: 16px 10px;
border: 1px solid var(--el-border-color);
border-radius: 6px;
}
.header-item {
$icon-size: 36px;
@apply flex! justify-center items-center;
.header-item__icon {
width: $icon-size;
height: $icon-size;
@apply mr-15px;
}
.header-item__name {
@apply text-18px color-#333 mr-12px;
}
.header-item__value {
color: var(--el-color-primary);
@apply text-22px;
}
}
.body-item {
@apply flex flex-col justify-center items-center p-12px mb-12px;
border: 1px solid var(--el-border-color-light);
background-color: var(--el-border-color-light);
border-radius: 6px;
&.on {
background-color: var(--el-color-primary);
border: 1px solid var(--el-color-primary);
p {
color: #fff;
}
span {
color: var(--el-color-warning);
}
}
&.mode {
background-color: var(--el-color-success);
border: 1px solid var(--el-color-success);
p {
color: #fff;
}
span {
color: #fff;
}
}
p {
@apply text-18px mb-5px;
color: var(--el-text-color-primary);
letter-spacing: 2px;
}
span {
color: var(--el-color-primary);
@apply text-16px font-700;
}
}
</style>

@ -105,6 +105,10 @@ watch(route, (newRoute) => {
}, { immediate: true });
function handleLogin() {
// TODO
router.push({ path: "/" });
return;
proxy.$refs.loginRef.validate(valid => {
if (valid) {
loading.value = true;
@ -161,8 +165,9 @@ function getCookie() {
};
}
getCode();
getCookie();
// TODO:
// getCode();
// getCookie();
</script>
<style lang='scss' scoped>

@ -54,6 +54,12 @@ export default defineConfig(({ mode, command }) => {
},
],
},
preprocessorOptions: {
scss: {
silenceDeprecations: ["legacy-js-api"],
// additionalData: `@use "./node_modules/element-plus/theme-chalk/src/common/var.scss";`,
},
},
},
};
});

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save