feat/武汉管廊

This commit is contained in:
季万俊 2025-11-24 08:40:57 +08:00
parent 1889d6f538
commit 38b91a2c00
639 changed files with 49854 additions and 0 deletions

177
CANVAS_DRIVER_GUIDE.md Normal file
View File

@ -0,0 +1,177 @@
# Canvas 场景下使用 Driver.js 的指南
## 概述
Driver.js 可以用于 Canvas 场景,但有一些限制和特殊处理方式。
## Driver.js 在 Canvas 中的限制
1. **无法直接高亮 Canvas 内部元素**Driver.js 只能高亮 DOM 元素,而 Canvas 内部绘制的内容(如设备图标、点标记等)不是 DOM 元素,无法直接高亮。
2. **可以高亮 Canvas 元素本身**:可以高亮整个 `<canvas>` 标签,但无法精确定位到 Canvas 内部的某个绘制内容。
## 解决方案
### 方案 1高亮整个 Canvas最简单
直接高亮 Canvas 元素本身,适用于引导用户了解 Canvas 区域的功能。
```javascript
{
element: '.main-canvas', // 或 '.canvas-wrapper'
popover: {
title: '平面图区域',
description: '这是平面图显示区域,您可以在这里查看设备位置和状态。',
side: 'top',
align: 'center'
}
}
```
### 方案 2使用占位元素推荐用于精确引导
如果需要在 Canvas 内部某个特定位置进行引导,可以创建一个临时的占位 DOM 元素:
```javascript
// 创建占位元素
const createPlaceholder = (x, y, width, height) => {
const placeholder = document.createElement('div');
placeholder.className = 'canvas-placeholder';
placeholder.style.position = 'absolute';
placeholder.style.left = `${x}px`;
placeholder.style.top = `${y}px`;
placeholder.style.width = `${width}px`;
placeholder.style.height = `${height}px`;
placeholder.style.pointerEvents = 'none'; // 不阻挡 Canvas 交互
placeholder.style.zIndex = '1000';
document.body.appendChild(placeholder);
return placeholder;
};
// 在引导步骤中使用
{
element: '.canvas-placeholder',
popover: {
title: '设备图标',
description: '这是设备图标的位置,在编辑模式下可以拖拽移动。',
side: 'top',
align: 'center'
}
}
```
### 方案 3使用自定义高亮高级
结合 Canvas 坐标计算和自定义高亮层:
```javascript
// 计算 Canvas 内部元素的屏幕坐标
const getCanvasElementScreenPos = (canvasElement, canvasX, canvasY, scale, offsetX, offsetY) => {
const rect = canvasElement.getBoundingClientRect();
const screenX = rect.left + (canvasX * scale + offsetX);
const screenY = rect.top + (canvasY * scale + offsetY);
return { screenX, screenY };
};
// 创建自定义高亮层
const createCustomHighlight = (x, y, width, height) => {
const highlight = document.createElement('div');
highlight.className = 'custom-canvas-highlight';
highlight.style.position = 'fixed';
highlight.style.left = `${x}px`;
highlight.style.top = `${y}px`;
highlight.style.width = `${width}px`;
highlight.style.height = `${height}px`;
highlight.style.border = '3px solid #4dabf7';
highlight.style.borderRadius = '8px';
highlight.style.boxShadow = '0 0 20px rgba(77, 171, 247, 0.5)';
highlight.style.pointerEvents = 'none';
highlight.style.zIndex = '9999';
document.body.appendChild(highlight);
return highlight;
};
```
## 实际应用示例
### 示例 1引导 Canvas 区域
```javascript
{
element: '.canvas-wrapper',
popover: {
title: '平面图区域',
description: '这是主要的平面图显示区域,所有设备都会在这里显示。',
side: 'top',
align: 'center'
}
}
```
### 示例 2引导 Canvas 中的特定设备(需要坐标计算)
```javascript
// 假设要引导一个设备,其 Canvas 坐标为 (pointX, pointY)
const guideDevice = (pointX, pointY) => {
nextTick(() => {
if (!canvasRef.value) return;
// 计算设备在屏幕上的位置
const rect = canvasRef.value.getBoundingClientRect();
const screenX = rect.left + (pointX * BL.value * scale.value + offsetX.value);
const screenY = rect.top + (pointY * BL.value * scale.value + offsetY.value);
// 创建占位元素
const placeholder = document.createElement('div');
placeholder.className = 'device-placeholder';
placeholder.style.position = 'fixed';
placeholder.style.left = `${screenX - 20}px`;
placeholder.style.top = `${screenY - 20}px`;
placeholder.style.width = '40px';
placeholder.style.height = '40px';
placeholder.style.pointerEvents = 'none';
placeholder.style.zIndex = '9999';
document.body.appendChild(placeholder);
// 使用 driver.js 高亮占位元素
driverObj.highlight({
element: '.device-placeholder',
popover: {
title: '设备图标',
description: '这是设备图标,在编辑模式下可以拖拽移动。',
side: 'bottom',
align: 'center'
}
});
// 引导结束后移除占位元素
setTimeout(() => {
placeholder.remove();
}, 5000);
});
};
```
## 当前项目中的最佳实践
在当前项目中,由于主要功能按钮(筛选、分区、编辑)都是 DOM 元素Driver.js 可以正常工作。对于 Canvas 内部的引导,建议:
1. **引导 Canvas 容器**:高亮整个 Canvas 区域,说明整体功能
2. **引导相关操作按钮**:通过引导操作按钮(如编辑按钮)来间接引导 Canvas 功能
3. **结合文字说明**:在引导提示中详细说明 Canvas 的操作方式
## 注意事项
1. **坐标转换**Canvas 内部坐标需要转换为屏幕坐标才能创建占位元素
2. **缩放和偏移**:需要考虑 Canvas 的缩放scale和偏移offsetX, offsetY
3. **动态更新**:如果 Canvas 内容会移动或变化,占位元素的位置也需要动态更新
4. **性能考虑**:占位元素应该及时清理,避免内存泄漏
## 总结
Driver.js **可以**用于 Canvas 场景,但需要根据具体需求选择合适的方案:
- 简单场景:直接高亮 Canvas 元素
- 精确引导:使用占位元素或自定义高亮
- 当前项目:已有 DOM 按钮的引导已经足够,无需额外处理 Canvas 内部元素

20
LICENSE Normal file
View File

@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2018 RuoYi
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

108
README.md Normal file
View File

@ -0,0 +1,108 @@
<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.9.0</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.9.0-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://gitcode.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;
## 前端运行
```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) [![加入QQ群](https://img.shields.io/badge/已满-224622315-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=F58bgRa-Dp-rsQJThiJqIYv8t4-lWfXh&authKey=UmUs4CVG5OPA1whvsa4uSespOvyd8%2FAr9olEGaWAfdLmfKQk%2FVBp2YU3u2xXXt76&noverify=0&group_code=224622315) [![加入QQ群](https://img.shields.io/badge/已满-287842588-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Nxb2EQ5qozWa218Wbs7zgBnjLSNk_tVT&authKey=obBKXj6SBKgrFTJZx0AqQnIYbNOvBB2kmgwWvGhzxR67RoRr84%2Bus5OadzMcdJl5&noverify=0&group_code=287842588) [![加入QQ群](https://img.shields.io/badge/已满-187944233-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=numtK1M_I4eVd2Gvg8qtbuL8JgX42qNh&authKey=giV9XWMaFZTY%2FqPlmWbkB9g3fi0Ev5CwEtT9Tgei0oUlFFCQLDp4ozWRiVIzubIm&noverify=0&group_code=187944233) [![加入QQ群](https://img.shields.io/badge/已满-228578329-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G6r5KGCaa3pqdbUSXNIgYloyb8e0_L0D&authKey=4w8tF1eGW7%2FedWn%2FHAypQksdrML%2BDHolQSx7094Agm7Luakj9EbfPnSTxSi2T1LQ&noverify=0&group_code=228578329) [![加入QQ群](https://img.shields.io/badge/191164766-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=GsOo-OLz53J8y_9TPoO6XXSGNRTgbFxA&authKey=R7Uy%2Feq%2BZsoKNqHvRKhiXpypW7DAogoWapOawUGHokJSBIBIre2%2FoiAZeZBSLuBc&noverify=0&group_code=191164766) 点击按钮入群。

12
bin/build.bat Normal file
View File

@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 打包Web工程生成dist文件。
echo.
%~d0
cd %~dp0
cd ..
yarn build:prod
pause

12
bin/package.bat Normal file
View File

@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 安装Web工程生成node_modules文件。
echo.
%~d0
cd %~dp0
cd ..
yarn --registry=https://registry.npmmirror.com
pause

12
bin/run-web.bat Normal file
View File

@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 使用 Vite 命令运行 Web 工程。
echo.
%~d0
cd %~dp0
cd ..
yarn dev
pause

46
html/ie.html Normal file

File diff suppressed because one or more lines are too long

216
index.html Normal file
View File

@ -0,0 +1,216 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="/favicon.ico">
<title> 武汉礼河路管廊综合管理平台</title>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
<style>
html,
body,
#app {
height: 100%;
margin: 0px;
padding: 0px;
}
.chromeframe {
margin: 0.2em 0;
background: #ccc;
color: #000;
padding: 0.2em 0;
}
#loader-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999999;
}
#loader {
display: block;
position: relative;
left: 50%;
top: 50%;
width: 150px;
height: 150px;
margin: -75px 0 0 -75px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 2s linear infinite;
-ms-animation: spin 2s linear infinite;
-moz-animation: spin 2s linear infinite;
-o-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
z-index: 1001;
}
#loader:before {
content: "";
position: absolute;
top: 5px;
left: 5px;
right: 5px;
bottom: 5px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 3s linear infinite;
-moz-animation: spin 3s linear infinite;
-o-animation: spin 3s linear infinite;
-ms-animation: spin 3s linear infinite;
animation: spin 3s linear infinite;
}
#loader:after {
content: "";
position: absolute;
top: 15px;
left: 15px;
right: 15px;
bottom: 15px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-moz-animation: spin 1.5s linear infinite;
-o-animation: spin 1.5s linear infinite;
-ms-animation: spin 1.5s linear infinite;
-webkit-animation: spin 1.5s linear infinite;
animation: spin 1.5s linear infinite;
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
}
#loader-wrapper .loader-section {
position: fixed;
top: 0;
width: 51%;
height: 100%;
background: #7171C6;
z-index: 1000;
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
#loader-wrapper .loader-section.section-left {
left: 0;
}
#loader-wrapper .loader-section.section-right {
right: 0;
}
.loaded #loader-wrapper .loader-section.section-left {
-webkit-transform: translateX(-100%);
-ms-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader-wrapper .loader-section.section-right {
-webkit-transform: translateX(100%);
-ms-transform: translateX(100%);
transform: translateX(100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader {
opacity: 0;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.loaded #loader-wrapper {
visibility: hidden;
-webkit-transform: translateY(-100%);
-ms-transform: translateY(-100%);
transform: translateY(-100%);
-webkit-transition: all 0.3s 1s ease-out;
transition: all 0.3s 1s ease-out;
}
.no-js #loader-wrapper {
display: none;
}
.no-js h1 {
color: #222222;
}
#loader-wrapper .load_title {
font-family: 'Open Sans';
color: #FFF;
font-size: 19px;
width: 100%;
text-align: center;
z-index: 9999999999999;
position: absolute;
top: 60%;
opacity: 1;
line-height: 30px;
}
#loader-wrapper .load_title span {
font-weight: normal;
font-style: italic;
font-size: 13px;
color: #FFF;
opacity: 0.5;
}
</style>
</head>
<body>
<div id="app">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
<div class="load_title">正在加载系统资源,请耐心等待</div>
</div>
</div>
<script src="config.js"></script>
<script type="module" src="/src/main.js"></script>
</body>
</html>

14
public/config.js Normal file
View File

@ -0,0 +1,14 @@
/*
* @Author: 季万俊
* @Date: 2025-09-26 16:33:30
* @Description:
*/
window.customConfigUrl = {
// baseURL: 'http://172.16.1.254:13020', //常用接口地址
baseURL: 'http://forex.zicp.net', //常用接口地址
refreshTime: 3000000, //详情窗口数据轮询间隔时间
deviceDataReqTime: 3000000, //平面图页面状态轮询间隔
faultColor: '#FF9912', //故障 报警 颜色
openColor: '#00C957', //运行中 颜色
closeColor: '#FF0000' //非运行中 颜色
};

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

15
src/App.vue Normal file
View File

@ -0,0 +1,15 @@
<template>
<router-view />
</template>
<script setup>
import { useSettingsStore } from '@/store/modules/settings'
import { handleThemeStyle } from '@/utils/theme'
onMounted(() => {
nextTick(() => {
//
handleThemeStyle(useSettingsStore().theme)
})
})
</script>

98
src/api/alarm/index.js Normal file
View File

@ -0,0 +1,98 @@
import request from "@/utils/request";
//级别列表查询
export function getLevelList(query) {
return request({
url: "/sysConfig/level/list",
method: "get",
params: query,
});
}
// 单条级别查询
export function getLevelDetail(query) {
return request({
url: "/sysConfig/level/" + query.id,
method: "get",
});
}
// 新增级别数据
export function addLevel(data) {
return request({
url: "/sysConfig/level/add",
method: "post",
data
});
}
// 修改级别数据
export function updateLevel(data) {
return request({
url: "/sysConfig/level/update",
method: "post",
data
});
}
// 删除级别数据
export function delLevel(query) {
return request({
url: "/sysConfig/level/remove/" + query.id,
method: "get",
});
}
// 查询人员列表
export function getUser(query) {
return request({
url: "/sysConfig/level/getUser",
method: "get",
params:query
});
}
//查询报警列表
export function getAlarmList(query) {
return request({
url: "/sysConfig/warningConfig/list",
method: "get",
params:query
});
}
// 查看报警详情
export function getAlarmDetail(query) {
return request({
url: "/sysConfig/warningConfig/"+query.id,
method: "get",
// params:query
});
}
// 修改报警
export function updateAlarm(data) {
return request({
url: "/sysConfig/warningConfig/update",
method: "post",
data
});
}
// 查看报警详情
export function delAlarm(query) {
return request({
url: "/sysConfig/warningConfig/remove/"+query.id,
method: "get",
// params:query
});
}
// 新增报警
export function addAlarm(data) {
return request({
url: "/sysConfig/warningConfig/add",
method: "post",
data
});
}
// 根据类型查询参数
export function getStatus(query) {
return request({
url: "/sysConfig/warningConfig/getStatus/"+query.id,
method: "get",
// params:query
});
}

41
src/api/area.js Normal file
View File

@ -0,0 +1,41 @@
/*
* @Author: 季万俊
* @Date: 2025-09-26 11:23:42
* @Description:
*/
import request from '@/utils/request'
// 获取区域列表
export function getArea(params) {
return request({
url: '/v1/areas',
method: 'get',
params: params
})
}
// 创建区域
export function createArea(data) {
return request({
url: '/v1/areas',
method: 'post',
data: data
})
}
// 删除区域
export function deleteArea(id) {
return request({
url: '/v1/areas/' + id,
method: 'delete',
})
}
// 修改区域
export function updateArea(id, data) {
return request({
url: '/v1/areas/' + id,
method: 'put',
data
})
}

View File

@ -0,0 +1,80 @@
import request from "@/utils/request";
export function waterMeterMonitor(data) {
return request({
url: "/energyConsumptionManagement/waterMeterMonitor",
method: "post",
data,
});
}
export function electricityMeterMonitor(data) {
return request({
url: `/energyConsumptionManagement/electricityMeterMonitor`,
method: "post",
data,
});
}
export function controlAllList(data) {
return request({
url: `/device/control/allList`,
method: "post",
data,
});
}
export function conditionalDeviceAndControlArea(query) {
return request({
url: `/energyConsumptionManagement/conditionalDeviceAndControlArea`,
method: "get",
params: query,
});
}
export function saveDeviceRule(data) {
return request({
url: `/energyConsumptionManagement/saveDeviceRule`,
method: "post",
data,
});
}
export function pageListDeviceRule(query) {
return request({
url: `/energyConsumptionManagement/pageListDeviceRule`,
method: "get",
params: query,
});
}
export function detailDeviceRule(ruleId, typeId) {
return request({
url: `/energyConsumptionManagement/detailDeviceRule?deviceRuleId=${ruleId}&deviceTypeId=${typeId}`,
method: "get",
});
}
export function deleteDeviceRuleById(id) {
return request({
url: `/energyConsumptionManagement/deleteDeviceRuleById?deviceRuleId=${id}`,
method: "get",
});
}
export function getElectricityUsageDetails(date, type) {
return request({
url: `/energyConsumptionManagement/getElectricityUsageDetails?searchDate=${date}&searchType=${type}`,
method: "get",
});
}
export function getWaterUsageDetails(date, type) {
return request({
url: `/energyConsumptionManagement/getWaterUsageDetails?searchDate=${date}&searchType=${type}`,
method: "get",
});
}
export function getEnergyConsumptionData(query = {}) {
return request({
url: `/energyConsumptionManagement/getEnergyConsumptionData`,
method: "get",
params: query,
});
}
export function getPowerLadderDetail(date) {
return request({
url: `/energyConsumptionManagement/getPowerLadderDetail?date=${date}`,
method: "get",
});
}

62
src/api/environmental.js Normal file
View File

@ -0,0 +1,62 @@
/*
* @Author: 季万俊
* @Date: 2025-09-26 11:23:42
* @Description:
*/
import request from "@/utils/request";
export function deviceControlList(data) {
return request({
url: "/device/control/list",
method: "post",
data,
});
}
export function deviceControlListOther(data) {
return request({
url: "/device/control/listOther",
method: "post",
data,
});
}
export function controlDevice(data) {
return request({
url: `/ControlDevice`,
method: "post",
data,
baseUrl: process.env.VITE_VUE_APP_CONTROL_BASE_API,
});
}
// 新增巡更管理接口
export function addPatrol(data) {
return request({
url: `/sysConfig/management/add`,
method: "post",
data,
});
}
// 查询巡更管理接口
export function getPatrolList(query) {
return request({
url: `/sysConfig/management/list`,
method: "get",
params: query,
});
}
// 修改巡更管理接口
export function updatePatrol(data) {
return request({
url: `/sysConfig/management/update`,
method: "post",
data,
});
}
// 删除
export function delPatrol(query) {
return request({
url: `/sysConfig/management/remove/${query.id}`,
method: "get",
});
}

350
src/api/equipment.js Normal file
View File

@ -0,0 +1,350 @@
import request from "@/utils/request";
export function deviceList(query) {
return request({
url: "/device/device/list",
method: "get",
params: query,
});
}
export function deviceTypeList(query) {
return request({
url: "/device/device/deviceTypeList",
method: "get",
params: query,
});
}
export function addDevice(data) {
return request({
url: "/device/device/add",
method: "post",
data,
});
}
export function editDevice(data) {
return request({
url: "/device/device/edit",
method: "post",
data,
});
}
export function deleteDevice(query) {
return request({
url: `/device/device/remove/${query}`,
method: "get",
// params: query,
});
}
export function instructionList(query = {}) {
return request({
url: `/device/instruction/list`,
method: "get",
params: query,
});
}
export function addInstruction(data) {
return request({
url: `/device/instruction/add`,
method: "post",
data,
});
}
export function editInstruction(data) {
return request({
url: `/device/instruction/edit`,
method: "post",
data,
});
}
export function deleteInstruction(query) {
return request({
url: `/device/instruction/remove/${query}`,
method: "get",
});
}
export function deviceTypeModel(query) {
return request({
url: `/device/typeModel/${query}`,
method: "get",
});
}
export function deviceTypeModelList(query) {
return request({
url: `/device/typeModel/list`,
method: "get",
params: query,
});
}
export function deviceTypeModelAdd(data) {
return request({
url: `/device/typeModel/add`,
method: "post",
data,
});
}
export function deviceTypeModelEdit(data) {
return request({
url: `/device/typeModel/edit`,
method: "post",
data,
});
}
export function deviceTypeModelDelete(id) {
return request({
url: `/device/typeModel/remove/${id}`,
method: "get",
});
}
export function monitorList(query = {}) {
return request({
url: `/device/management/list`,
method: "get",
params: query,
});
}
// http协议外层编辑
export function protocolHttpEdit(data) {
return request({
url: `/device/protocolHttp/edit`,
method: "post",
data,
});
}
// 其他协议外层编辑
export function protocolOtherEdit(data) {
return request({
url: `/device/protocolOther/edit`,
method: "post",
data,
});
}
// http协议表格增删改查
export function protocolHttpValueList(query) {
return request({
url: `/device/protocolHttpValue/list`,
method: "get",
params: query,
});
}
export function protocolHttpValueAdd(data) {
return request({
url: `/device/protocolHttpValue/add`,
method: "post",
data,
});
}
export function protocolHttpValueEdit(data) {
return request({
url: `/device/protocolHttpValue/edit`,
method: "post",
data,
});
}
export function protocolHttpValueDelete(id) {
return request({
url: `/device/protocolHttpValue/remove/${id}`,
method: "get",
});
}
// 其他协议表格增删改查
export function protocolOtherValueList(query) {
return request({
url: `/device/protocolOtherValue/list`,
method: "get",
params: query,
});
}
export function protocolOtherValueAdd(data) {
return request({
url: `/device/protocolOtherValue/add`,
method: "post",
data,
});
}
export function protocolOtherValueEdit(data) {
return request({
url: `/device/protocolOtherValue/edit`,
method: "post",
data,
});
}
export function protocolOtherValueDelete(id) {
return request({
url: `/device/protocolOtherValue/remove/${id}`,
method: "get",
});
}
export function minitorAdd(data) {
return request({
url: "/device/management/add",
method: "post",
data,
});
}
export function minitorEdit(data) {
return request({
url: "/device/management/edit",
method: "post",
data,
});
}
export function minitorDelete(id) {
return request({
url: `/device/management/remove/${id}`,
method: "get",
});
}
export function ruleAdd(data) {
return request({
url: "/management/rule/add",
method: "post",
data,
});
}
export function ruleList(query) {
return request({
url: `/management/rule/list`,
method: "get",
params: query,
});
}
export function ruleDel(data) {
return request({
url: "/management/rule/remove/"+data,
method: "get",
});
}
export function rulegroupAdd(data) {
return request({
url: "/management/rulegroup/add",
method: "post",
data,
});
}
export function rulegroupList(query) {
return request({
url: `/management/rulegroup/list`,
method: "get",
params: query,
});
}
export function rulegroupDel(data) {
return request({
url: "/management/rulegroup/remove/"+data,
method: "get",
});
}
export function rulegroupUpdate(data) {
return request({
url: "/management/rulegroup/update",
method: "post",
data,
});
}
export function ruleQuerybyId(data) {
return request({
url: "/management/rule/"+data,
method: "get",
});
}
export function rulegroupQuerybyId(data) {
return request({
url: "/management/rulegroup/"+data,
method: "get",
});
}
export function ruleUpdate(data) {
return request({
url: "/management/rule/update",
method: "post",
data,
});
}
export function getServerData(query) {
return request({
url: `/GetData/`,
method: "get",
params: query,
baseUrl: process.env.VITE_VUE_APP_SERVER_BASE_API,
});
}
export function setServerData(query) {
return request({
url: `/ControlServer/`,
method: "get",
params: query,
baseUrl: process.env.VITE_VUE_APP_SERVER_BASE_API,
});
}
export function getSysConfig(query) {
return request({
url: `/sysConfig/config/1`,
method: "get",
params: query,
});
}
export function sysConfigUpdate(data) {
return request({
url: "/sysConfig/config/update",
method: "post",
data,
});
}
export function deviceAdd(data) {
return request({
url: "/device/day/add",
method: "post",
data,
});
}
export function devicedayList(query) {
return request({
url: `/device/day/list`,
method: "get",
params: query,
});
}
export function deviceDayDel(data) {
return request({
url: "/device/day/remove/"+data,
method: "get",
});
}
export function deviceDayUpdate(data) {
return request({
url: "/device/day/update",
method: "post",
data,
});
}
export function deviceGetYear(query) {
return request({
url: `/device/day/getYear`,
method: "get",
params: query,
});
}
export function getVacationDayByYear(query) {
return request({
url: `/device/day/getVacationDayByYear`,
method: "get",
params: query,
});
}

15
src/api/index.js Normal file
View File

@ -0,0 +1,15 @@
import request from "@/utils/request";
export function deviceTypeListCount(query) {
return request({
url: "/device/device/deviceTypeListCount",
method: "get",
params: query,
});
}
export function getEnergyUseTrend(query = {}) {
return request({
url: "/energyConsumptionManagement/getEnergyUseTrend",
method: "get",
params: query,
});
}

View File

@ -0,0 +1,52 @@
import request from "@/utils/request";
//知识库内容新增
export function knowledgeAdd(query) {
return request({
url: "/device/knowledge/add",
method: "post",
data: query,
});
}
//知识库查询
export function knowledgeList(query) {
return request({
url: "/device/knowledge/list",
method: "get",
params: query,
});
}
//知识库修改
export function knowledgeUpdate(query) {
return request({
url: "/device/knowledge/update",
method: "post",
data: query,
});
}
//知识库删除
export function knowledgeRemove(query) {
return request({
url: "/device/knowledge/remove/" + query,
method: "get",
params: query,
});
}
//知识库单条查询
export function knowledgeById(query) {
return request({
url: "/device/knowledge/" + query,
method: "get",
});
}
//知识库类型查询
export function knowledgeTypeList(query) {
return request({
url: "/device/knowledgeType/list",
method: "get",
params: query,
});
}

36
src/api/knowledge/type.js Normal file
View File

@ -0,0 +1,36 @@
import request from "@/utils/request";
//知识库类型新增
export function knowledgeTypeAdd(query) {
return request({
url: "/device/knowledgeType/add",
method: "post",
data: query,
});
}
//知识库类型查询
export function knowledgeTypeList(query) {
return request({
url: "/device/knowledgeType/list",
method: "get",
params: query,
});
}
//知识库类型修改
export function knowledgeTypeUpdate(query) {
return request({
url: "/device/knowledgeType/update",
method: "post",
data: query,
});
}
//知识库类型删除
export function knowledgeTypeRemove(query) {
return request({
url: "/device/knowledgeType/remove/" + query,
method: "get",
params: query,
});
}

65
src/api/login.js Normal file
View File

@ -0,0 +1,65 @@
/*
* @Author: 季万俊
* @Date: 2025-09-26 11:23:42
* @Description:
*/
import request from '@/utils/request'
// 登录方法
export function login(username, password, code, uuid) {
const data = {
username,
password,
code,
uuid
}
return request({
url: '/v1/auth/login',
headers: {
isToken: false,
repeatSubmit: false
},
method: 'post',
data: data
})
}
// 退出方法
export function logout() {
return request({
url: '/v1/auth/logout',
method: 'post'
})
}
// 注册方法
export function register(data) {
return request({
url: '/register',
headers: {
isToken: false
},
method: 'post',
data: data
})
}
// 获取用户详细信息
export function getInfo() {
return request({
url: '/getInfo',
method: 'get'
})
}
// 获取验证码
export function getCodeImg() {
return request({
url: '/captchaImage',
headers: {
isToken: false
},
method: 'get',
timeout: 20000
})
}

9
src/api/menu.js Normal file
View File

@ -0,0 +1,9 @@
import request from '@/utils/request'
// 获取路由
export const getRouters = () => {
return request({
url: '/getRouters',
method: 'get'
})
}

57
src/api/monitor/cache.js Normal file
View File

@ -0,0 +1,57 @@
import request from '@/utils/request'
// 查询缓存详细
export function getCache() {
return request({
url: '/monitor/cache',
method: 'get'
})
}
// 查询缓存名称列表
export function listCacheName() {
return request({
url: '/monitor/cache/getNames',
method: 'get'
})
}
// 查询缓存键名列表
export function listCacheKey(cacheName) {
return request({
url: '/monitor/cache/getKeys/' + cacheName,
method: 'get'
})
}
// 查询缓存内容
export function getCacheValue(cacheName, cacheKey) {
return request({
url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey,
method: 'get'
})
}
// 清理指定名称缓存
export function clearCacheName(cacheName) {
return request({
url: '/monitor/cache/clearCacheName/' + cacheName,
method: 'delete'
})
}
// 清理指定键名缓存
export function clearCacheKey(cacheKey) {
return request({
url: '/monitor/cache/clearCacheKey/' + cacheKey,
method: 'delete'
})
}
// 清理全部缓存
export function clearCacheAll() {
return request({
url: '/monitor/cache/clearCacheAll',
method: 'delete'
})
}

71
src/api/monitor/job.js Normal file
View File

@ -0,0 +1,71 @@
import request from '@/utils/request'
// 查询定时任务调度列表
export function listJob(query) {
return request({
url: '/monitor/job/list',
method: 'get',
params: query
})
}
// 查询定时任务调度详细
export function getJob(jobId) {
return request({
url: '/monitor/job/' + jobId,
method: 'get'
})
}
// 新增定时任务调度
export function addJob(data) {
return request({
url: '/monitor/job',
method: 'post',
data: data
})
}
// 修改定时任务调度
export function updateJob(data) {
return request({
url: '/monitor/job',
method: 'put',
data: data
})
}
// 删除定时任务调度
export function delJob(jobId) {
return request({
url: '/monitor/job/' + jobId,
method: 'delete'
})
}
// 任务状态修改
export function changeJobStatus(jobId, status) {
const data = {
jobId,
status
}
return request({
url: '/monitor/job/changeStatus',
method: 'put',
data: data
})
}
// 定时任务立即执行一次
export function runJob(jobId, jobGroup) {
const data = {
jobId,
jobGroup
}
return request({
url: '/monitor/job/run',
method: 'put',
data: data
})
}

26
src/api/monitor/jobLog.js Normal file
View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 查询调度日志列表
export function listJobLog(query) {
return request({
url: '/monitor/jobLog/list',
method: 'get',
params: query
})
}
// 删除调度日志
export function delJobLog(jobLogId) {
return request({
url: '/monitor/jobLog/' + jobLogId,
method: 'delete'
})
}
// 清空调度日志
export function cleanJobLog() {
return request({
url: '/monitor/jobLog/clean',
method: 'delete'
})
}

View File

@ -0,0 +1,34 @@
import request from '@/utils/request'
// 查询登录日志列表
export function list(query) {
return request({
url: '/monitor/logininfor/list',
method: 'get',
params: query
})
}
// 删除登录日志
export function delLogininfor(infoId) {
return request({
url: '/monitor/logininfor/' + infoId,
method: 'delete'
})
}
// 解锁用户登录状态
export function unlockLogininfor(userName) {
return request({
url: '/monitor/logininfor/unlock/' + userName,
method: 'get'
})
}
// 清空登录日志
export function cleanLogininfor() {
return request({
url: '/monitor/logininfor/clean',
method: 'delete'
})
}

18
src/api/monitor/online.js Normal file
View File

@ -0,0 +1,18 @@
import request from '@/utils/request'
// 查询在线用户列表
export function list(query) {
return request({
url: '/monitor/online/list',
method: 'get',
params: query
})
}
// 强退用户
export function forceLogout(tokenId) {
return request({
url: '/monitor/online/' + tokenId,
method: 'delete'
})
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 查询操作日志列表
export function list(query) {
return request({
url: '/monitor/operlog/list',
method: 'get',
params: query
})
}
// 删除操作日志
export function delOperlog(operId) {
return request({
url: '/monitor/operlog/' + operId,
method: 'delete'
})
}
// 清空操作日志
export function cleanOperlog() {
return request({
url: '/monitor/operlog/clean',
method: 'delete'
})
}

View File

@ -0,0 +1,9 @@
import request from '@/utils/request'
// 获取服务信息
export function getServer() {
return request({
url: '/monitor/server',
method: 'get'
})
}

36
src/api/system/area.js Normal file
View File

@ -0,0 +1,36 @@
import request from "@/utils/request";
export function managementList(query) {
return request({
url: "/management/management/list",
method: "get",
params: query,
});
}
export function managementListAll(query) {
return request({
url: "/management/management/listAll",
method: "get",
params: query,
});
}
export function managementAdd(data) {
return request({
url: "/management/management/add",
method: "post",
data: data,
});
}
export function managementDelete(query) {
return request({
url: `/management/management/remove/${query}`,
method: "get",
// params: query,
});
}
export function managementEdit(data) {
return request({
url: `/management/management/edit`,
method: "post",
data,
});
}

60
src/api/system/config.js Normal file
View File

@ -0,0 +1,60 @@
import request from '@/utils/request'
// 查询参数列表
export function listConfig(query) {
return request({
url: '/system/config/list',
method: 'get',
params: query
})
}
// 查询参数详细
export function getConfig(configId) {
return request({
url: '/system/config/' + configId,
method: 'get'
})
}
// 根据参数键名查询参数值
export function getConfigKey(configKey) {
return request({
url: '/system/config/configKey/' + configKey,
method: 'get'
})
}
// 新增参数配置
export function addConfig(data) {
return request({
url: '/system/config',
method: 'post',
data: data
})
}
// 修改参数配置
export function updateConfig(data) {
return request({
url: '/system/config',
method: 'put',
data: data
})
}
// 删除参数配置
export function delConfig(configId) {
return request({
url: '/system/config/' + configId,
method: 'delete'
})
}
// 刷新参数缓存
export function refreshCache() {
return request({
url: '/system/config/refreshCache',
method: 'delete'
})
}

52
src/api/system/dept.js Normal file
View File

@ -0,0 +1,52 @@
import request from '@/utils/request'
// 查询部门列表
export function listDept(query) {
return request({
url: '/system/dept/list',
method: 'get',
params: query
})
}
// 查询部门列表(排除节点)
export function listDeptExcludeChild(deptId) {
return request({
url: '/system/dept/list/exclude/' + deptId,
method: 'get'
})
}
// 查询部门详细
export function getDept(deptId) {
return request({
url: '/system/dept/' + deptId,
method: 'get'
})
}
// 新增部门
export function addDept(data) {
return request({
url: '/system/dept',
method: 'post',
data: data
})
}
// 修改部门
export function updateDept(data) {
return request({
url: '/system/dept',
method: 'put',
data: data
})
}
// 删除部门
export function delDept(deptId) {
return request({
url: '/system/dept/' + deptId,
method: 'delete'
})
}

View File

@ -0,0 +1,52 @@
import request from '@/utils/request'
// 查询字典数据列表
export function listData(query) {
return request({
url: '/system/dict/data/list',
method: 'get',
params: query
})
}
// 查询字典数据详细
export function getData(dictCode) {
return request({
url: '/system/dict/data/' + dictCode,
method: 'get'
})
}
// 根据字典类型查询字典数据信息
export function getDicts(dictType) {
return request({
url: '/system/dict/data/type/' + dictType,
method: 'get'
})
}
// 新增字典数据
export function addData(data) {
return request({
url: '/system/dict/data',
method: 'post',
data: data
})
}
// 修改字典数据
export function updateData(data) {
return request({
url: '/system/dict/data',
method: 'put',
data: data
})
}
// 删除字典数据
export function delData(dictCode) {
return request({
url: '/system/dict/data/' + dictCode,
method: 'delete'
})
}

View File

@ -0,0 +1,60 @@
import request from '@/utils/request'
// 查询字典类型列表
export function listType(query) {
return request({
url: '/system/dict/type/list',
method: 'get',
params: query
})
}
// 查询字典类型详细
export function getType(dictId) {
return request({
url: '/system/dict/type/' + dictId,
method: 'get'
})
}
// 新增字典类型
export function addType(data) {
return request({
url: '/system/dict/type',
method: 'post',
data: data
})
}
// 修改字典类型
export function updateType(data) {
return request({
url: '/system/dict/type',
method: 'put',
data: data
})
}
// 删除字典类型
export function delType(dictId) {
return request({
url: '/system/dict/type/' + dictId,
method: 'delete'
})
}
// 刷新字典缓存
export function refreshCache() {
return request({
url: '/system/dict/type/refreshCache',
method: 'delete'
})
}
// 获取字典选择框列表
export function optionselect() {
return request({
url: '/system/dict/type/optionselect',
method: 'get'
})
}

31
src/api/system/manual.js Normal file
View File

@ -0,0 +1,31 @@
import request from '@/utils/request'
// 获取操作手册
export function getManual() {
return request({
url: '/system/manual',
method: 'get'
})
}
// 上传操作手册
export function uploadManual(data) {
return request({
url: '/system/manual/upload',
method: 'post',
data: data,
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
// 删除操作手册
export function deleteManual(id) {
return request({
url: '/system/manual/' + id,
method: 'delete'
})
}

60
src/api/system/menu.js Normal file
View File

@ -0,0 +1,60 @@
import request from '@/utils/request'
// 查询菜单列表
export function listMenu(query) {
return request({
url: '/system/menu/list',
method: 'get',
params: query
})
}
// 查询菜单详细
export function getMenu(menuId) {
return request({
url: '/system/menu/' + menuId,
method: 'get'
})
}
// 查询菜单下拉树结构
export function treeselect() {
return request({
url: '/system/menu/treeselect',
method: 'get'
})
}
// 根据角色ID查询菜单下拉树结构
export function roleMenuTreeselect(roleId) {
return request({
url: '/system/menu/roleMenuTreeselect/' + roleId,
method: 'get'
})
}
// 新增菜单
export function addMenu(data) {
return request({
url: '/system/menu',
method: 'post',
data: data
})
}
// 修改菜单
export function updateMenu(data) {
return request({
url: '/system/menu',
method: 'put',
data: data
})
}
// 删除菜单
export function delMenu(menuId) {
return request({
url: '/system/menu/' + menuId,
method: 'delete'
})
}

44
src/api/system/notice.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询公告列表
export function listNotice(query) {
return request({
url: '/system/notice/list',
method: 'get',
params: query
})
}
// 查询公告详细
export function getNotice(noticeId) {
return request({
url: '/system/notice/' + noticeId,
method: 'get'
})
}
// 新增公告
export function addNotice(data) {
return request({
url: '/system/notice',
method: 'post',
data: data
})
}
// 修改公告
export function updateNotice(data) {
return request({
url: '/system/notice',
method: 'put',
data: data
})
}
// 删除公告
export function delNotice(noticeId) {
return request({
url: '/system/notice/' + noticeId,
method: 'delete'
})
}

44
src/api/system/post.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询岗位列表
export function listPost(query) {
return request({
url: '/system/post/list',
method: 'get',
params: query
})
}
// 查询岗位详细
export function getPost(postId) {
return request({
url: '/system/post/' + postId,
method: 'get'
})
}
// 新增岗位
export function addPost(data) {
return request({
url: '/system/post',
method: 'post',
data: data
})
}
// 修改岗位
export function updatePost(data) {
return request({
url: '/system/post',
method: 'put',
data: data
})
}
// 删除岗位
export function delPost(postId) {
return request({
url: '/system/post/' + postId,
method: 'delete'
})
}

119
src/api/system/role.js Normal file
View File

@ -0,0 +1,119 @@
import request from '@/utils/request'
// 查询角色列表
export function listRole(query) {
return request({
url: '/system/role/list',
method: 'get',
params: query
})
}
// 查询角色详细
export function getRole(roleId) {
return request({
url: '/system/role/' + roleId,
method: 'get'
})
}
// 新增角色
export function addRole(data) {
return request({
url: '/system/role',
method: 'post',
data: data
})
}
// 修改角色
export function updateRole(data) {
return request({
url: '/system/role',
method: 'put',
data: data
})
}
// 角色数据权限
export function dataScope(data) {
return request({
url: '/system/role/dataScope',
method: 'put',
data: data
})
}
// 角色状态修改
export function changeRoleStatus(roleId, status) {
const data = {
roleId,
status
}
return request({
url: '/system/role/changeStatus',
method: 'put',
data: data
})
}
// 删除角色
export function delRole(roleId) {
return request({
url: '/system/role/' + roleId,
method: 'delete'
})
}
// 查询角色已授权用户列表
export function allocatedUserList(query) {
return request({
url: '/system/role/authUser/allocatedList',
method: 'get',
params: query
})
}
// 查询角色未授权用户列表
export function unallocatedUserList(query) {
return request({
url: '/system/role/authUser/unallocatedList',
method: 'get',
params: query
})
}
// 取消用户授权角色
export function authUserCancel(data) {
return request({
url: '/system/role/authUser/cancel',
method: 'put',
data: data
})
}
// 批量取消用户授权角色
export function authUserCancelAll(data) {
return request({
url: '/system/role/authUser/cancelAll',
method: 'put',
params: data
})
}
// 授权用户选择
export function authUserSelectAll(data) {
return request({
url: '/system/role/authUser/selectAll',
method: 'put',
params: data
})
}
// 根据角色ID查询部门树结构
export function deptTreeSelect(roleId) {
return request({
url: '/system/role/deptTree/' + roleId,
method: 'get'
})
}

139
src/api/system/user.js Normal file
View File

@ -0,0 +1,139 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
// 查询用户列表
export function listUser(query) {
return request({
url: '/v1/users',
method: 'get',
params: query
})
}
// 查询用户详细
export function getUser(userId) {
return request({
url: '/system/user/' + parseStrEmpty(userId),
method: 'get'
})
}
// 新增用户
export function addUser(data) {
return request({
url: '/v1/users',
method: 'post',
data: data
})
}
// 修改用户
export function updateUser(userId, data) {
console.log(userId, data);
return request({
url: '/v1/users/' + userId,
method: 'put',
data: data
})
}
// 删除用户
export function delUser(userId) {
return request({
url: '/v1/users/' + userId,
method: 'delete'
})
}
// 用户密码重置
export function resetUserPwd(username, old_password, new_password) {
const data = {
username,
old_password,
new_password
}
return request({
url: '/v1/users/change-password',
method: 'put',
data: data
})
}
// 用户状态修改
export function changeUserStatus(userId, status) {
const data = {
userId,
status
}
return request({
url: '/system/user/changeStatus',
method: 'put',
data: data
})
}
// 查询用户个人信息
export function getUserProfile() {
return request({
url: '/system/user/profile',
method: 'get'
})
}
// 修改用户个人信息
export function updateUserProfile(data) {
return request({
url: '/system/user/profile',
method: 'put',
data: data
})
}
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
return request({
url: '/system/user/profile/updatePwd',
method: 'put',
params: data
})
}
// 用户头像上传
export function uploadAvatar(data) {
return request({
url: '/system/user/profile/avatar',
method: 'post',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: data
})
}
// 查询授权角色
export function getAuthRole(userId) {
return request({
url: '/system/user/authRole/' + userId,
method: 'get'
})
}
// 保存授权角色
export function updateAuthRole(data) {
return request({
url: '/system/user/authRole',
method: 'put',
params: data
})
}
// 查询部门下拉树结构
export function deptTreeSelect() {
return request({
url: '/system/user/deptTree',
method: 'get'
})
}

85
src/api/tool/gen.js Normal file
View File

@ -0,0 +1,85 @@
import request from '@/utils/request'
// 查询生成表数据
export function listTable(query) {
return request({
url: '/tool/gen/list',
method: 'get',
params: query
})
}
// 查询db数据库列表
export function listDbTable(query) {
return request({
url: '/tool/gen/db/list',
method: 'get',
params: query
})
}
// 查询表详细信息
export function getGenTable(tableId) {
return request({
url: '/tool/gen/' + tableId,
method: 'get'
})
}
// 修改代码生成信息
export function updateGenTable(data) {
return request({
url: '/tool/gen',
method: 'put',
data: data
})
}
// 导入表
export function importTable(data) {
return request({
url: '/tool/gen/importTable',
method: 'post',
params: data
})
}
// 创建表
export function createTable(data) {
return request({
url: '/tool/gen/createTable',
method: 'post',
params: data
})
}
// 预览生成代码
export function previewTable(tableId) {
return request({
url: '/tool/gen/preview/' + tableId,
method: 'get'
})
}
// 删除表数据
export function delTable(tableId) {
return request({
url: '/tool/gen/' + tableId,
method: 'delete'
})
}
// 生成代码(自定义路径)
export function genCode(tableName) {
return request({
url: '/tool/gen/genCode/' + tableName,
method: 'get'
})
}
// 同步数据库
export function synchDb(tableName) {
return request({
url: '/tool/gen/synchDb/' + tableName,
method: 'get'
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
src/assets/beij/COPa.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
src/assets/beij/COPa1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
src/assets/beij/COPa4.7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
src/assets/beij/COPa422.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

BIN
src/assets/beij/VRV.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
src/assets/beij/VRV1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
src/assets/beij/baoj.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
src/assets/beij/baojh1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/assets/beij/bjTit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
src/assets/beij/bjTit1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
src/assets/beij/box.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
src/assets/beij/close.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
src/assets/beij/dangri.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
src/assets/beij/dangyue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
src/assets/beij/day-h.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 684 B

BIN
src/assets/beij/day.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

BIN
src/assets/beij/dayno.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 881 B

BIN
src/assets/beij/dayxz.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
src/assets/beij/dlItem.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
src/assets/beij/dnhb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
src/assets/beij/dnhb1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
src/assets/beij/dnhbnrk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
src/assets/beij/fdtjfx.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
src/assets/beij/gf-bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 MiB

BIN
src/assets/beij/gf-bg1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 KiB

BIN
src/assets/beij/gltjfx.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
src/assets/beij/goSys.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
src/assets/beij/gonglv1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
src/assets/beij/gonglv2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/assets/beij/hjjcsj.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/assets/beij/jiank1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
src/assets/beij/left.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
src/assets/beij/left1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
src/assets/beij/left11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
src/assets/beij/left12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
src/assets/beij/left2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
src/assets/beij/left3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
src/assets/beij/leftdis.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 B

BIN
src/assets/beij/ljcl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/assets/beij/ljll.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/assets/beij/ljnl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
src/assets/beij/ljnl4.7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
src/assets/beij/ljnl422.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
src/assets/beij/ljrn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/assets/beij/ljyd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
src/assets/beij/ljyd111.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
src/assets/beij/ljydl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
src/assets/beij/ljydl2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

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