626 Commits

Author SHA1 Message Date
sjl
cf77572f41 设备类型报告模版只在楼下厂家展示 2025-05-06 10:08:57 +08:00
GGJ
fe6524404c 微调 2025-04-29 10:47:25 +08:00
caozehui
ccda7218f4 检测计划数据源字段调整、绑定设备样式调整 2025-04-28 09:18:52 +08:00
caozehui
ddd0e6a22b (间)谐波含有率可以为小数 2025-04-27 16:11:48 +08:00
caozehui
ed85453de1 误差体系切换时-生成报告 2025-04-25 14:32:17 +08:00
caozehui
04939606fc 间谐波电流、间谐波电流复制bug,tooltip位置调整 2025-04-24 16:16:04 +08:00
caozehui
2df455b667 暂态设定幅值最大为180% 2025-04-24 10:18:27 +08:00
caozehui
8fb214d7a7 微调 2025-04-23 15:28:35 +08:00
caozehui
4f2c8a8016 微调 2025-04-23 10:45:46 +08:00
caozehui
c2974dbe0d 微调 2025-04-22 15:52:03 +08:00
caozehui
3891e5459a 误差体系修改 2025-04-22 14:21:24 +08:00
caozehui
9ed47ac5bc 检测结果数据显示问题 2025-04-22 14:12:07 +08:00
caozehui
114fcd140d 微调 2025-04-22 13:49:59 +08:00
caozehui
19a30894f8 微调 2025-04-21 09:11:31 +08:00
caozehui
2134fea518 微调 2025-04-21 09:10:24 +08:00
caozehui
82f495ce3b 调整窗口大小 2025-04-18 13:42:48 +08:00
caozehui
f2ecff54a3 微调 2025-04-18 11:07:04 +08:00
caozehui
f56004ac15 微调 2025-04-17 14:47:32 +08:00
caozehui
5303c47248 微调 2025-04-17 10:21:38 +08:00
GGJ
37731592f7 微调 2025-04-16 10:17:37 +08:00
caozehui
c9e41e0c82 日志导出csv、报告模板编辑框样式调整 2025-04-15 09:45:00 +08:00
caozehui
4a80a88e6e 微调 2025-04-14 19:51:06 +08:00
caozehui
30b219e14d 微调 2025-04-14 14:43:29 +08:00
caozehui
ecec9adeea icd校验 2025-04-14 13:22:46 +08:00
caozehui
1853152138 日志分页查询及展示 2025-04-11 14:34:56 +08:00
GGJ
5619413f37 修改点击使能默认够选通道使能,修改暂态使能持续时间保持一致 2025-04-10 11:11:23 +08:00
caozehui
5b736bc475 微调 2025-04-10 10:50:53 +08:00
caozehui
2aa37c3fe3 微调 2025-04-09 20:42:17 +08:00
caozehui
4e0cb72f32 微调 2025-04-09 20:06:08 +08:00
caozehui
ce74ec4db7 bug修复 2025-04-09 19:30:00 +08:00
caozehui
9938306884 微调 2025-04-09 14:30:00 +08:00
caozehui
ef63fcf807 bug修复 2025-04-08 09:51:35 +08:00
caozehui
08cffa4256 bug修复 2025-04-08 09:43:12 +08:00
caozehui
e1a740f8bf 文件大小提示 2025-03-31 18:54:13 +08:00
caozehui
56d035253b 微调 2025-03-31 13:22:57 +08:00
caozehui
e7348107d0 解决forge库在桌面端无法使用的问题 2025-03-28 09:38:59 +08:00
caozehui
ea38b4eb21 微调 2025-03-28 09:31:46 +08:00
GGJ
67ef976739 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-03-27 18:34:51 +08:00
GGJ
60145ec4f7 修改参考设定值添加单位 2025-03-27 18:34:40 +08:00
caozehui
81600ddc69 引入获取是否自动生成报告接口 2025-03-27 16:20:16 +08:00
caozehui
e0941d628b 引入获取是否自动生成报告接口 2025-03-27 15:54:27 +08:00
caozehui
760dcbf723 微调 2025-03-27 14:59:01 +08:00
caozehui
b75ecb8c66 微调 2025-03-26 15:42:40 +08:00
caozehui
39f4cfa670 微调 2025-03-25 15:49:32 +08:00
caozehui
862251b83c 微调 2025-03-25 15:08:25 +08:00
caozehui
312490ce59 微调 2025-03-24 19:56:11 +08:00
caozehui
d7df999cf2 登录接口加密传输登录信息 2025-03-24 19:22:56 +08:00
caozehui
e0b1b5907b 微调 2025-03-24 15:41:53 +08:00
sjl
f06ca03881 微调 2025-03-24 14:59:45 +08:00
caozehui
a9b80ed33c 微调 2025-03-24 10:46:16 +08:00
sjl
834230b26a 报告模版 2025-03-24 08:56:08 +08:00
caozehui
403ddbfb6e 微调 2025-03-20 19:42:46 +08:00
caozehui
ffb44ea909 微调 2025-03-20 16:31:15 +08:00
sjl
b729e4efa1 微调 2025-03-19 13:30:11 +08:00
sjl
962c286fd5 主题切换 2025-03-19 10:26:41 +08:00
caozehui
c215f51554 微调 2025-03-18 19:38:27 +08:00
GGJ
859c85b427 检测脚本添加 额定电压 额定电流字段 2025-03-18 16:28:22 +08:00
sjl
5fe637e84f 微调 2025-03-17 16:03:53 +08:00
sjl
5f68071c77 微调颜色 2025-03-17 15:55:30 +08:00
caozehui
1675a5af31 微调 2025-03-17 14:33:19 +08:00
caozehui
ec1d09dbd0 微调 2025-03-17 13:30:00 +08:00
caozehui
eda7b516f6 微调 2025-03-17 13:24:35 +08:00
sjl
630eb48d28 微调 2025-03-17 13:17:12 +08:00
caozehui
0d2f8a7788 微调 2025-03-14 16:30:45 +08:00
GGJ
230c68f454 修改他不删除后编辑检测监本还存在问题 2025-03-14 16:23:27 +08:00
GGJ
68934060e6 修改参考设定值0不显示 2025-03-14 16:10:00 +08:00
GGJ
846e7514b7 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-03-14 15:03:45 +08:00
GGJ
410cfb0f7a 检测脚本添加额定电压、额定电流 修改bug 2025-03-14 15:03:36 +08:00
caozehui
c892410b07 微调 2025-03-14 14:45:39 +08:00
sjl
7caa4a5303 微调 2025-03-14 12:27:04 +08:00
sjl
c17efbf9f6 微调 2025-03-14 12:13:34 +08:00
c46abeecf5 websocket代码提交 2025-03-14 11:35:55 +08:00
caozehui
0947097932 微调 2025-03-14 11:23:49 +08:00
caozehui
50fc02d4eb 微调 2025-03-13 14:40:33 +08:00
caozehui
a122e9e1b3 微调 2025-03-12 15:01:58 +08:00
sjl
d7cfcc7855 微调 2025-03-12 11:17:12 +08:00
sjl
05948aebf5 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-03-12 09:53:01 +08:00
sjl
cca214aaf7 程控源 2025-03-12 09:52:52 +08:00
caozehui
0111954c5e 微调 2025-03-11 19:07:47 +08:00
sjl
ce31499964 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-03-11 18:58:39 +08:00
sjl
059864d193 微调 2025-03-11 18:58:26 +08:00
caozehui
6d2fb4dde8 微调 2025-03-11 18:29:09 +08:00
caozehui
49059d9c59 微调 2025-03-11 18:19:18 +08:00
caozehui
d2f7041988 微调 2025-03-11 18:10:10 +08:00
caozehui
f94372d20b 微调 2025-03-11 16:13:03 +08:00
sjl
9af98b034f 微调 2025-03-11 14:16:21 +08:00
sjl
341b8df5a9 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-03-11 11:31:02 +08:00
sjl
7470f697bd 微调 2025-03-11 11:30:52 +08:00
caozehui
c058b99a0d 微调 2025-03-11 11:30:10 +08:00
caozehui
d5eed13f38 测试项为1条时也展示出来 2025-03-11 11:04:02 +08:00
caozehui
c27ee88182 微调 2025-03-10 20:14:35 +08:00
sjl
e2559ffa65 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-03-10 20:00:03 +08:00
sjl
a0bd32453c 微调 2025-03-10 19:59:55 +08:00
sjl
54e7a91841 微调 2025-03-10 19:58:53 +08:00
caozehui
042f6eef51 脚本切换 2025-03-10 19:53:52 +08:00
GGJ
c9857326c6 修改 检测脚本参考值 2025-03-10 16:11:08 +08:00
GGJ
9c4e0094f9 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-03-10 16:00:15 +08:00
GGJ
781b27af51 修改间谐波值 2025-03-10 16:00:07 +08:00
caozehui
37e257afc8 Loading加载效果 2025-03-10 11:39:10 +08:00
GGJ
4d4fdd6190 修改测试bug 2025-03-10 11:18:32 +08:00
caozehui
0fd2d8252d 微调 2025-03-10 10:50:53 +08:00
caozehui
3cf5019880 源程控-时间展示 2025-03-10 10:10:32 +08:00
caozehui
258d3d692f 源参数默认展开 2025-03-10 10:09:15 +08:00
caozehui
667ed3bcc0 微调 2025-03-08 18:27:10 +08:00
caozehui
a882189022 微调 2025-03-08 18:13:16 +08:00
caozehui
686e009243 微调 2025-03-08 18:07:47 +08:00
caozehui
30d5f3390c Merge branch 'release' 2025-03-08 18:06:50 +08:00
caozehui
3398b414ca 微调 2025-03-08 16:56:57 +08:00
caozehui
b6a2c42feb Merge remote-tracking branch 'origin/release' into release
# Conflicts:
#	frontend/src/views/machine/controlSource/index.vue
2025-03-08 16:05:56 +08:00
caozehui
cb5a9050f2 微调 2025-03-08 16:04:43 +08:00
caozehui
661b27abd0 微调 2025-03-08 16:04:08 +08:00
caozehui
59a24c9ea2 Merge branch 'release' 2025-03-08 16:02:09 +08:00
caozehui
6cf5da5d48 微调 2025-03-08 16:01:41 +08:00
caozehui
537f5e2f4c Merge branch 'release'
# Conflicts:
#	frontend/src/views/machine/controlSource/index.vue
2025-03-08 14:39:20 +08:00
caozehui
70531a0729 微调 2025-03-08 14:36:48 +08:00
caozehui
ded15e5c8b 微调 2025-03-08 10:50:39 +08:00
caozehui
3021f7e4d3 微调 2025-03-08 10:49:42 +08:00
caozehui
876d9cfa00 微调 2025-03-08 10:48:25 +08:00
caozehui
8f28825162 微调 2025-03-08 10:47:19 +08:00
caozehui
0e6612f6bd 微调 2025-03-08 10:15:11 +08:00
caozehui
39183fde5d 微调 2025-03-07 16:26:14 +08:00
caozehui
b967419cb1 微调 2025-03-07 15:43:36 +08:00
sjl
0712698638 微调 2025-03-07 14:44:12 +08:00
sjl
d3a74e830f 微调 2025-03-07 14:00:20 +08:00
sjl
f68da773ab 微调 2025-03-07 13:17:11 +08:00
sjl
8db814dba4 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-03-07 10:17:14 +08:00
sjl
7dcff99de5 微调 2025-03-07 10:17:06 +08:00
caozehui
97100dfa63 复制-二次弹窗确认 2025-03-07 09:02:19 +08:00
caozehui
d41707fcf9 微调 2025-03-06 15:50:45 +08:00
sjl
2377916f29 微调 2025-03-05 11:19:16 +08:00
caozehui
be2f40715a 微调 2025-03-05 10:42:25 +08:00
sjl
489c0882ac 微调 2025-03-05 09:32:13 +08:00
sjl
492db88b45 检测脚本查看隐藏显示 2025-03-04 16:01:34 +08:00
caozehui
3b198eb4ed 微调 2025-03-04 14:12:50 +08:00
caozehui
5efc27d4b6 微调 2025-03-04 10:28:09 +08:00
sjl
ec9f270d04 检测脚本详情查看 2025-03-04 09:35:41 +08:00
caozehui
afd2d467f3 微调 2025-03-03 13:33:17 +08:00
caozehui
ff0798450d 微调 2025-03-03 13:29:48 +08:00
caozehui
fbefc70368 微调 2025-03-03 13:25:19 +08:00
caozehui
faa0bc54a6 不合格项复检 2025-03-03 11:35:12 +08:00
caozehui
bf5f4eab77 Merge branch 'master' into dev 2025-02-28 15:38:08 +08:00
GGJ
188456c970 添加查看页面 2025-02-28 13:58:15 +08:00
caozehui
c06334e96f Merge branch 'master' into dev
# Conflicts:
#	frontend/src/views/home/components/dataCheckSingleChannelSingleTestPopup.vue
2025-02-28 09:03:05 +08:00
GGJ
82e8bf2e0b 优化检测脚本样式 2025-02-28 09:00:15 +08:00
GGJ
30382fb34d 添加一键重算功能 2025-02-27 16:24:13 +08:00
GGJ
c7e5ee0862 优化检测脚本页面 2025-02-27 15:09:09 +08:00
caozehui
d6ac63586b 合并master分支 2025-02-27 14:45:22 +08:00
caozehui
e0fd42199f 微调 2025-02-27 14:34:47 +08:00
caozehui
d9e3168484 Merge branch 'master' into dev
# Conflicts:
#	frontend/src/views/home/components/test.vue
#	frontend/src/views/home/components/testPopup.vue
2025-02-27 13:52:17 +08:00
caozehui
dc7e91ca66 微调 2025-02-27 10:07:41 +08:00
caozehui
692358d278 微调 2025-02-27 08:48:13 +08:00
GGJ
3750031d6b Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-02-27 08:42:37 +08:00
GGJ
0bae200241 优化检测脚本页面
录入检测脚本
2025-02-27 08:41:33 +08:00
sjl
61bd1a0d6a 微调 2025-02-26 19:49:23 +08:00
sjl
37cf3dfdd7 测试 2025-02-26 19:44:27 +08:00
caozehui
8be96ca64e 微调 2025-02-26 19:31:34 +08:00
sjl
d225391248 日志测试 2025-02-26 19:20:02 +08:00
sjl
f2fd0b078e 日志测试 2025-02-26 19:05:56 +08:00
caozehui
f71963ea3b 微调 2025-02-26 19:02:43 +08:00
sjl
6a635246bb 日志测试 2025-02-26 19:00:37 +08:00
caozehui
d338ca6b25 微调 2025-02-26 18:55:50 +08:00
caozehui
193c3b963c 微调 2025-02-26 18:07:57 +08:00
sjl
cad4965b1b 微调 2025-02-26 16:23:27 +08:00
caozehui
79306d846f 微调 2025-02-26 15:58:16 +08:00
caozehui
f4ea510c5d 测试1 2025-02-26 15:56:03 +08:00
sjl
07cc26fa8d 微调 2025-02-26 13:58:56 +08:00
sjl
f87e268242 微调 2025-02-26 13:57:42 +08:00
caozehui
1aeceffe0b 测试1 2025-02-26 13:57:07 +08:00
caozehui
fc97087767 测试1 2025-02-26 13:22:01 +08:00
sjl
61be97b04b Merge branch 'dev' of http://192.168.1.22:3000/frontend/pqs-9100_client into dev 2025-02-26 11:40:41 +08:00
sjl
934162875c 微调 2025-02-26 11:40:31 +08:00
caozehui
4b3991099a 微调 2025-02-26 11:25:20 +08:00
caozehui
b14a961c1a 微调 2025-02-26 11:13:28 +08:00
sjl
cbe41d80ce 合并frontend/src/views/home/components/testPopup.vue 2025-02-26 10:54:43 +08:00
sjl
28203f2621 微调 2025-02-26 10:52:39 +08:00
caozehui
b8492dfbe6 微调 2025-02-26 10:42:01 +08:00
caozehui
15faac8079 正式检测-移除重新检测按钮 2025-02-26 10:05:43 +08:00
caozehui
ad850ca4ee 微调 2025-02-26 10:00:44 +08:00
caozehui
6c05c6e06e 微调 2025-02-26 09:14:27 +08:00
caozehui
8b2cda80b1 微调 2025-02-25 16:37:59 +08:00
caozehui
3f7756b417 微调 2025-02-25 16:18:22 +08:00
caozehui
5004e319b6 微调 2025-02-25 15:11:23 +08:00
caozehui
19035f2dc9 微调 2025-02-25 15:03:45 +08:00
caozehui
9d8a5c76b2 微调 2025-02-25 14:52:06 +08:00
caozehui
6300eb2f43 微调 2025-02-25 14:13:59 +08:00
sjl
da58ffb621 微调 2025-02-25 14:01:07 +08:00
sjl
1500fafb92 微调 2025-02-25 14:00:40 +08:00
sjl
df53eea432 微调 2025-02-25 13:53:47 +08:00
sjl
cc1771c208 微调 2025-02-25 13:52:57 +08:00
caozehui
5e881c0804 微调 2025-02-25 13:48:44 +08:00
caozehui
5666e01ae0 微调 2025-02-25 13:47:33 +08:00
caozehui
4acec8a2d6 微调 2025-02-25 13:46:01 +08:00
sjl
426a511099 微调 2025-02-25 11:20:19 +08:00
caozehui
89303b44ae 微调 2025-02-25 11:00:04 +08:00
caozehui
ffb82066bb 正式检测设备连接超时,停止检测 2025-02-25 10:46:12 +08:00
caozehui
f46b8c0a56 微调 2025-02-25 10:29:29 +08:00
caozehui
280289af37 手动检测功能修改、一键检测功能修改(均未完成) 2025-02-25 10:17:33 +08:00
GGJ
a0c7f79302 修改检测脚本闪变编辑逻辑 2025-02-25 08:58:03 +08:00
GGJ
bd1eecc106 优化检测脚本页面 2025-02-24 16:45:39 +08:00
sjl
1a23bcb510 检测计划未检下拉框不可编辑 2025-02-24 16:30:52 +08:00
sjl
942c28d3bd 微调 2025-02-24 08:54:22 +08:00
GGJ
034b31ba47 联调检测脚本 2025-02-24 08:38:54 +08:00
sjl
7a76c2da8a 微调 2025-02-21 14:57:52 +08:00
caozehui
1a9d8e8606 检测通道数量微调 2025-02-21 09:05:06 +08:00
GGJ
14583d919d 联调检测脚本修改功能 2025-02-20 16:39:15 +08:00
caozehui
629fd174e4 微调 2025-02-20 15:01:15 +08:00
sjl
9080fe06a4 角标对齐 2025-02-20 10:21:36 +08:00
sjl
0e183bb5c1 检测源删除 2025-02-20 10:10:28 +08:00
GGJ
8caf856d2d 联调检测脚本页面 2025-02-19 16:54:54 +08:00
caozehui
d28669e6b0 正式检测-时间显示调整 2025-02-19 13:17:19 +08:00
700884d01a websocket代码提交 2025-02-19 11:28:52 +08:00
c06bd9fa24 websocket代码提交 2025-02-19 11:00:09 +08:00
GGJ
ce92a1d645 联调 新增检测脚本 2025-02-18 16:36:54 +08:00
caozehui
4f622da52c 调整检测计划导入、导出功能适应二楼装备 2025-02-18 15:58:38 +08:00
7d3e86a5fc websocket代码提交 2025-02-18 14:59:13 +08:00
sjl
c66d181b98 检测计划取消勾选 2025-02-18 09:00:23 +08:00
GGJ
f860630bfb 修改检测脚本新增页面路由权限 2025-02-18 08:51:20 +08:00
caozehui
6db4d79839 调整 2025-02-18 08:48:59 +08:00
GGJ
e2924d5e57 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client
# Conflicts:
#	frontend/src/views/machine/testScript/components/testScriptPopup.vue
#	frontend/src/views/machine/testScript/index.vue
2025-02-17 16:46:20 +08:00
GGJ
92b9a82f21 修改检测脚本页面 2025-02-17 16:44:02 +08:00
sjl
c3f89ca1f8 微调 2025-02-17 16:32:02 +08:00
sjl
8c435c91dd Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-02-17 16:29:06 +08:00
sjl
6e6cfa5be0 微调 2025-02-17 16:28:59 +08:00
caozehui
ea203d0ccc 调整统计分析功能 2025-02-17 16:26:23 +08:00
caozehui
370cd52774 调整静态路由 2025-02-17 13:37:27 +08:00
caozehui
942bae3045 微调 2025-02-17 11:30:56 +08:00
caozehui
356548c8fb 显示时间 2025-02-17 10:16:48 +08:00
GGJ
5c012c2bc9 修改 检测脚本新增页面 2025-02-17 09:00:27 +08:00
GGJ
9c9b8015a0 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-02-17 08:40:19 +08:00
GGJ
bba0ced7f9 修改 测试脚本页面 2025-02-17 08:39:18 +08:00
caozehui
e8de7b56d9 微调 2025-02-14 16:22:45 +08:00
caozehui
95022f62a8 数据分析 2025-02-14 13:30:50 +08:00
sjl
1d918f3335 微调 2025-02-14 11:44:19 +08:00
caozehui
f992637ad2 微调 2025-02-14 10:59:21 +08:00
caozehui
40f18bbdf8 微调 2025-02-14 10:39:00 +08:00
caozehui
3bb9cec08a 微调 2025-02-14 10:31:16 +08:00
caozehui
6842260f59 微调 2025-02-14 09:57:26 +08:00
sjl
305c30d725 微调 2025-02-14 09:16:07 +08:00
caozehui
e799dd2f08 移除headers中的Refresh-Token,添加Is-Refresh-Token 2025-02-13 21:02:34 +08:00
GGJ
1e83172e9a 修改检测脚本页面 2025-02-13 16:15:26 +08:00
sjl
475d236b7e 微调 2025-02-13 15:40:13 +08:00
sjl
ddeb84fcfe 微调 2025-02-11 14:25:12 +08:00
sjl
b3aeebb7c7 icd管理 2025-02-11 11:26:50 +08:00
sjl
b11f4839f4 微调 2025-02-11 10:59:41 +08:00
sjl
4adc28a055 设备类型 2025-02-11 10:40:34 +08:00
sjl
e46e9e1d3a 设备类型CRUD 2025-02-11 10:32:09 +08:00
sjl
4fcb26bbde Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-02-11 10:31:57 +08:00
caozehui
6bd0e891fa 改为12通道 2025-02-11 09:10:50 +08:00
sjl
15f1308557 设备类型 2025-02-10 16:35:14 +08:00
caozehui
9689197db9 微调 2025-02-10 15:41:59 +08:00
caozehui
4ad490657f 微调 2025-02-10 15:16:13 +08:00
caozehui
9f8f8244e3 微调 2025-02-08 15:36:56 +08:00
sjl
9206be2562 登录失效 2025-02-07 14:28:15 +08:00
caozehui
6065fd1f67 双token(未做完) 2025-02-07 10:39:30 +08:00
sjl
c16560a0ca 微调 2025-01-23 10:05:47 +08:00
caozehui
440cfe1ac5 源未开启外联机错误弹窗出现2次 2025-01-23 09:33:00 +08:00
sjl
1ad1a0198e 微调 2025-01-22 16:28:09 +08:00
caozehui
b603ac9bdb 源未开启外联机错误 2025-01-22 14:31:53 +08:00
caozehui
68aa4c409b 三项不平衡原始数据表头修改 2025-01-22 14:03:50 +08:00
sjl
f22b4e7fb8 微调 2025-01-22 12:09:32 +08:00
caozehui
400328d5fa 引入导出原始数据接口 2025-01-21 14:52:44 +08:00
caozehui
cce3e6861a 查看结果弹窗-通道下拉框 2025-01-21 11:06:22 +08:00
sjl
55368ce9b8 微调 2025-01-21 09:05:35 +08:00
caozehui
c6ef54f7d3 正式检测-预检测阶段错误码处理、频率、三项电压不平衡表头修改 2025-01-20 15:24:29 +08:00
GGJ
6f97c48226 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-17 15:06:58 +08:00
GGJ
5f45bc98fb 修改 WebSocket 关闭浏览器心跳问题 2025-01-17 15:06:44 +08:00
sjl
5738594be2 微调 2025-01-17 14:57:17 +08:00
sjl
ce47831992 socket连接不上处理 2025-01-17 09:59:23 +08:00
634c2d84fc Merge remote-tracking branch 'origin/master' 2025-01-17 09:35:58 +08:00
70855c5a21 websocket代码提交 2025-01-17 09:35:44 +08:00
sjl
b1e5e70411 微调 2025-01-17 09:25:52 +08:00
sjl
bf2e3219fc Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-17 09:15:58 +08:00
sjl
2f5aeb9ffc 微调 2025-01-17 09:15:52 +08:00
9e8ed310fc websocket代码提交 2025-01-17 09:14:19 +08:00
07a5e32579 批量导入被检设备 2025-01-16 19:45:48 +08:00
sjl
fe1bb04922 微调 2025-01-16 16:32:06 +08:00
a75e964adc 正式检测代码提交 2025-01-16 15:57:29 +08:00
sjl
87d22032e6 微调 2025-01-16 15:43:58 +08:00
sjl
55ae64b3e1 微调 2025-01-16 14:24:55 +08:00
caozehui
891c6d8e93 检测结果查看,相角类的放在最后展示 2025-01-16 10:00:49 +08:00
caozehui
ba7747dfe9 暂停时间过长页面效果 2025-01-16 08:51:47 +08:00
b148c04059 正式检测代码提交 2025-01-15 21:08:07 +08:00
sjl
4e179d61b5 微调 2025-01-15 20:37:58 +08:00
sjl
b23ee84543 微调 2025-01-15 20:32:14 +08:00
sjl
d02f85cea5 微调 2025-01-15 20:23:05 +08:00
ab02f8f1b3 正式检测代码提交 2025-01-15 19:27:33 +08:00
8fc1d1ffc9 微调报告 2025-01-15 18:01:12 +08:00
caozehui
44b1da94c1 二楼使用设备导入导出 2025-01-15 16:02:04 +08:00
sjl
c2b63a7a3f 微调 2025-01-15 13:46:11 +08:00
sjl
56619c9140 微调 2025-01-15 13:26:05 +08:00
caozehui
99bbb5434d 切换通道左侧树问题、点击左侧树测试项类别清空、点击左侧树赋值ScriptType 2025-01-15 10:49:28 +08:00
GGJ
40c9c5fdad 修改打包后svg无法显示问题 2025-01-15 10:29:19 +08:00
caozehui
3ea2c93e43 T相显示为检测名称 2025-01-15 10:14:33 +08:00
sjl
6369c8ee63 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-15 09:36:12 +08:00
sjl
da4bbf1e2c 微调 2025-01-15 09:36:04 +08:00
sjl
14e5535fd8 微调 2025-01-15 09:35:36 +08:00
caozehui
4e53bb3b27 10552错误重新检测、相序校验25003错误 2025-01-15 09:33:07 +08:00
GGJ
e793fdbe42 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-15 09:07:23 +08:00
GGJ
0e41a5b9f1 修改tab刷新位置问题 2025-01-15 09:07:12 +08:00
caozehui
ac9dfd1669 测试小项日志展示 2025-01-15 08:59:47 +08:00
caozehui
72eb3e189b 暂停页面效果调整 2025-01-15 08:53:45 +08:00
GGJ
0cace11975 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-15 08:42:59 +08:00
GGJ
b8e502b168 修改页面缓存 2025-01-15 08:42:41 +08:00
caozehui
15502d0107 暂停页面效果调整 2025-01-14 21:07:52 +08:00
GGJ
cb4e4646bd Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-14 19:26:29 +08:00
GGJ
93ce1b4994 修改登录页样式 2025-01-14 19:26:22 +08:00
sjl
1c452b5574 微调 2025-01-14 19:05:08 +08:00
caozehui
876c06ef54 暂停页面效果调整 2025-01-14 18:58:13 +08:00
sjl
37d65a944d 微调 2025-01-14 16:24:29 +08:00
caozehui
7bc9321c86 Merge remote-tracking branch 'origin/master' 2025-01-14 16:22:05 +08:00
caozehui
ee564dccb6 暂停正式检测 2025-01-14 16:21:50 +08:00
GGJ
cdbb386c7c Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-14 16:19:51 +08:00
GGJ
325ade7cdc 修改样式 2025-01-14 16:19:15 +08:00
caozehui
fcd8c1a0dd 修复数据查询弹窗,左侧切换,检测项目切换时,数据错误 2025-01-14 16:16:30 +08:00
sjl
fa1cb02a51 微调 2025-01-14 16:03:37 +08:00
caozehui
40fe12cd96 相别名称修改,数据查询弹窗,数据为空时处理 2025-01-14 15:34:35 +08:00
sjl
d83c04dc8b Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-14 15:14:44 +08:00
sjl
23b2974597 微调 2025-01-14 15:14:37 +08:00
caozehui
f5e78316ef 被检测设备-模式字段隐藏 2025-01-14 14:40:35 +08:00
caozehui
cc2020f3d6 暂停调整 2025-01-14 14:17:05 +08:00
sjl
26cda335c5 微调 2025-01-14 11:43:35 +08:00
caozehui
171533cef0 调整优先级 2025-01-14 10:36:42 +08:00
sjl
69de6dd7a3 设备名称 2025-01-14 10:03:44 +08:00
sjl
9039ed4bdc Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-13 23:17:31 +08:00
sjl
131d3b7018 微调 2025-01-13 23:17:24 +08:00
caozehui
454aabdc97 右上角错误提示 2025-01-13 22:59:03 +08:00
caozehui
089c97d859 微调 2025-01-13 22:53:38 +08:00
caozehui
9ff5423368 完善归档接口 2025-01-13 22:50:55 +08:00
sjl
f29d6e8d88 归档 2025-01-13 22:47:15 +08:00
sjl
5199ee2db0 微调 2025-01-13 22:42:14 +08:00
caozehui
6de9e22b4c 谐波次数切换时,原始数据显示为T项NaN问题 2025-01-13 22:05:46 +08:00
caozehui
52968d9aaa 调整检测结果,可筛选测试项 2025-01-13 21:50:24 +08:00
sjl
b584142f5e 微调 2025-01-13 21:38:52 +08:00
sjl
edea30a406 刷新 2025-01-13 21:26:12 +08:00
sjl
1f3024eb91 刷新饼图 2025-01-13 21:06:24 +08:00
8b9abba74b 微调 2025-01-13 20:19:04 +08:00
sjl
4dec1392f7 设备类型接口 2025-01-13 19:28:51 +08:00
sjl
e54cbfbc0a 设备icd 2025-01-13 18:32:42 +08:00
caozehui
505cd93446 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	frontend/src/api/device/device/index.ts
2025-01-13 18:21:24 +08:00
caozehui
f3ee11ebab 引入归档接口 2025-01-13 18:20:35 +08:00
sjl
45295ef898 微调 2025-01-13 18:13:55 +08:00
sjl
0635dda6a0 微调 2025-01-13 18:12:36 +08:00
caozehui
f58f7b97e5 展示单位调整 2025-01-13 15:03:24 +08:00
caozehui
7556f0e5bc 原始数据导出按钮、返回左侧树形列表接口调整 2025-01-13 14:22:54 +08:00
caozehui
17fe29cb1b 谐波次数、弹窗位置 2025-01-13 13:57:24 +08:00
caozehui
4bb4eb80d9 报告生成 2025-01-13 09:59:05 +08:00
ae1507e775 添加下载 2025-01-13 09:35:41 +08:00
sjl
85d8a57bf7 微调 2025-01-13 08:56:13 +08:00
caozehui
42cf23a516 微调 2025-01-10 14:19:29 +08:00
caozehui
858cf75b46 处理右侧原始数据表格行数错误问题 2025-01-10 14:15:07 +08:00
caozehui
de8a392d2c 处理源未知异常、检测结果最大误差回显 2025-01-10 13:49:09 +08:00
caozehui
b614767b2d 处理装置配置异常 2025-01-10 11:03:29 +08:00
caozehui
5ebb8549bf 调整优先级 2025-01-10 10:47:08 +08:00
caozehui
ead1feb379 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	frontend/src/views/home/components/test.vue
2025-01-10 09:36:00 +08:00
caozehui
1474c15bd9 放开数据异常按钮弹窗 2025-01-10 09:34:22 +08:00
caozehui
f24f87dcc8 放开数据异常按钮弹窗 2025-01-10 09:20:32 +08:00
caozehui
d416f46b3a 微调 2025-01-10 09:15:59 +08:00
352df35205 正式检测代码提交 2025-01-09 20:02:34 +08:00
caozehui
e5f201515e 引入暂停、继续检测接口 2025-01-09 16:27:05 +08:00
caozehui
40520a7d30 修改正式检测结果展示错误 2025-01-09 15:49:32 +08:00
caozehui
cffbfe1380 预检测失败处理、正式检测-只检测某一个大项,日志bug 2025-01-09 14:45:43 +08:00
caozehui
839777ea4d 微调 2025-01-09 14:18:50 +08:00
sjl
5be1d22115 微调 2025-01-09 13:56:56 +08:00
caozehui
80d1912fd5 微调 2025-01-09 11:13:34 +08:00
caozehui
b94e0323d9 微调 2025-01-08 21:02:36 +08:00
caozehui
90f4e53e9f 微调 2025-01-08 20:57:11 +08:00
caozehui
7ebad7d6b9 微调 2025-01-08 19:11:34 +08:00
caozehui
34534a1dbf 微调 2025-01-08 18:52:17 +08:00
645fac0681 正式检测代码提交 2025-01-08 15:15:49 +08:00
0a23700403 正式检测代码提交 2025-01-08 15:15:25 +08:00
caozehui
c00f8843c0 微调 2025-01-08 14:48:19 +08:00
caozehui
8869974471 Merge remote-tracking branch 'origin/master' 2025-01-08 14:34:52 +08:00
caozehui
8125d60105 微调 2025-01-08 14:33:47 +08:00
sjl
5a32d5b7a8 系数校准多装置按行展示 2025-01-08 11:40:12 +08:00
caozehui
a1d113562b 微调 2025-01-08 11:02:16 +08:00
caozehui
4a7535e4f5 微调 2025-01-08 10:01:56 +08:00
caozehui
de5548bbbd 微调 2025-01-08 09:46:47 +08:00
caozehui
87c46e8477 微调 2025-01-07 20:24:44 +08:00
caozehui
edda224847 微调 2025-01-07 19:47:38 +08:00
caozehui
5ac6bbf04b 微调 2025-01-07 19:03:00 +08:00
caozehui
b0a5329937 微调 2025-01-07 17:44:25 +08:00
caozehui
7a0626413d 微调 2025-01-07 17:34:15 +08:00
fe04ad1573 正式检测代码提交 2025-01-07 16:27:51 +08:00
caozehui
689cc39bbc 返回结果 2025-01-07 14:54:44 +08:00
caozehui
ba0c577514 修改检测结果弹窗框 2025-01-07 11:19:33 +08:00
caozehui
a629907196 微调 2025-01-07 09:46:35 +08:00
caozehui
bf60bcfe12 微调 2025-01-07 09:01:10 +08:00
caozehui
27eb9a7d93 右侧表格1 2025-01-06 19:20:36 +08:00
caozehui
336ee843cc 微调 2025-01-06 14:50:36 +08:00
sjl
9eac101794 系数校准不合格提示 2025-01-06 14:27:57 +08:00
sjl
085fcc62aa Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-06 14:07:28 +08:00
sjl
99e6abbcfd 微调 2025-01-06 14:07:21 +08:00
a4b96066e0 样式调整 2025-01-06 14:02:22 +08:00
sjl
c4e2da8d67 主界面,系数校准界面调整 2025-01-06 09:21:24 +08:00
caozehui
1be15ee849 修改右侧表格结构 2025-01-06 08:51:14 +08:00
caozehui
99bc54349b 微调 2025-01-05 14:52:37 +08:00
caozehui
bf823ddff0 微调 2025-01-04 16:33:23 +08:00
caozehui
23e72f38a6 微调 2025-01-04 14:09:01 +08:00
caozehui
2d993b2f73 存在已经初始化步骤,重新检测 2025-01-04 10:49:05 +08:00
9703d35a3a 正式检测代码提交 2025-01-04 09:58:39 +08:00
caozehui
d10a7a4884 微调 2025-01-03 18:57:35 +08:00
caozehui
938b9054d3 微调 2025-01-03 11:27:36 +08:00
caozehui
8a5bcca901 微调 2025-01-02 20:27:36 +08:00
caozehui
410cd53e51 正式检测-预检测提示及日志功能 2025-01-02 18:00:58 +08:00
sjl
4031724fa9 tab页面自动切换 2025-01-02 14:17:41 +08:00
sjl
e95552e6b9 微调 2025-01-02 13:12:13 +08:00
sjl
012f7e3346 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2025-01-02 09:02:54 +08:00
sjl
cbe6c4a98d 微调 2025-01-02 09:02:46 +08:00
caozehui
aa52778e99 微调 2024-12-31 19:54:27 +08:00
caozehui
5e8dda0b75 微调 2024-12-31 19:03:52 +08:00
caozehui
081aeacff7 微调 2024-12-31 14:27:36 +08:00
caozehui
65e54ee2b5 正式检测-左侧检测大项动态获取 2024-12-30 20:55:11 +08:00
sjl
0fd6ebf810 系数校准调整 2024-12-30 19:59:15 +08:00
sjl
fa4b5d26e5 系数校准 2024-12-30 19:17:39 +08:00
sjl
23f45b38cb Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-30 14:43:20 +08:00
sjl
d76b055730 系数校准 2024-12-30 14:43:13 +08:00
caozehui
c334c07b39 微调 2024-12-30 14:41:34 +08:00
caozehui
45a5dcb068 微调 2024-12-28 16:50:32 +08:00
caozehui
3d9ba8b1cb 微调 2024-12-27 14:29:21 +08:00
caozehui
c6836cad06 微调 2024-12-27 13:36:20 +08:00
caozehui
e70d1cb3f2 处理正式检测bug 2024-12-27 10:31:15 +08:00
caozehui
af454e1a56 修改正式检测样式 2024-12-26 10:49:55 +08:00
sjl
6ce58e86ad 微调 2024-12-26 09:28:19 +08:00
2e17531c52 预见测代码 2024-12-25 20:29:27 +08:00
caozehui
6b76d89507 微调 2024-12-25 18:04:16 +08:00
caozehui
e4025e39cb 微调 2024-12-25 13:22:54 +08:00
sjl
af12dc8d0a frontend/src/views/machine/errorSystem/components/errorSystemDetailTable.vue 2024-12-24 20:25:10 +08:00
sjl
f0edeaee85 误差体系禁用 2024-12-24 20:22:36 +08:00
caozehui
5cbdadecc4 微调 2024-12-24 19:21:43 +08:00
caozehui
30c1f90513 微调 2024-12-24 11:29:31 +08:00
c241d8b819 预见测代码 2024-12-24 08:55:04 +08:00
24f12a3590 预见测代码 2024-12-23 21:02:00 +08:00
sjl
f17f5c9925 误差体系 2024-12-23 16:12:46 +08:00
sjl
99877b1c98 系数校准动态通道数 2024-12-23 15:08:14 +08:00
sjl
fdf91965d9 微调 2024-12-23 14:05:53 +08:00
caozehui
fd21d32f4a 微调 2024-12-23 13:23:28 +08:00
caozehui
0a4385f29b 微调 2024-12-21 12:41:06 +08:00
caozehui
63c6693d04 微调 2024-12-20 20:34:39 +08:00
caozehui
ff7084a332 微调 2024-12-20 20:20:08 +08:00
caozehui
b63e8897f5 微调 2024-12-20 20:14:52 +08:00
caozehui
dc3976f525 微调 2024-12-20 19:14:07 +08:00
caozehui
9b8765f001 引入store存放检测设备的相关信息 2024-12-20 18:19:18 +08:00
bbe23e1b14 预见测代码 2024-12-20 16:32:03 +08:00
sjl
5f0b36b3bb Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-20 10:43:58 +08:00
sjl
f0b75eae2f frontend/src/views/home/components/test.vue
frontend/src/views/home/components/timeTest.vue
2024-12-20 10:43:43 +08:00
caozehui
45e62b2750 微调 2024-12-20 10:43:17 +08:00
sjl
d11e4822ed 系数校准 2024-12-20 10:21:36 +08:00
caozehui
93b67fe845 修改正式检测,使其能按照通道进行页面展示 2024-12-20 10:19:58 +08:00
caozehui
ebc2ac1a41 微调 2024-12-18 20:26:18 +08:00
caozehui
4fd2f10ec6 正式检测页面修改 2024-12-18 18:53:55 +08:00
caozehui
2715871017 正式检测页面修改 2024-12-18 15:56:59 +08:00
sjl
4cfca89895 样式调整 2024-12-18 15:49:29 +08:00
53ead0e62f 下拉框添加模糊匹配 2024-12-18 14:55:14 +08:00
caozehui
b00967159a Merge remote-tracking branch 'origin/master' 2024-12-17 14:08:35 +08:00
caozehui
1b37684e3c 微调 2024-12-17 14:08:13 +08:00
sjl
48f393be25 主页模式切换 2024-12-17 14:08:01 +08:00
sjl
645fb83bce 微调 2024-12-17 13:57:45 +08:00
caozehui
fe8bc407d3 饼图数据默认,饼图数据计算方式调整 2024-12-17 13:57:18 +08:00
sjl
d20cab57be 微调 2024-12-17 13:38:59 +08:00
sjl
68df3d5e23 # frontend/src/views/home/components/table.vue
#	frontend/src/views/home/tabs/dashboard.vue
2024-12-17 11:36:02 +08:00
sjl
8984bc577e 微调 2024-12-17 11:34:54 +08:00
caozehui
07d02307e2 默认选中第一条检测计划 2024-12-17 11:12:21 +08:00
sjl
a027dc75c3 左侧树点击刷新饼图和表格 2024-12-16 16:33:18 +08:00
sjl
5da07d8631 微调 2024-12-16 15:25:30 +08:00
sjl
d061fc9b32 检测计划列表 2024-12-16 14:09:21 +08:00
caozehui
ae47d429ba 微调 2024-12-16 11:34:12 +08:00
caozehui
396d6a7336 微调 2024-12-16 10:54:40 +08:00
sjl
fdf826d5f8 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-13 16:35:55 +08:00
sjl
0db5fa650f 微调 2024-12-13 16:35:27 +08:00
GYYM
53b4616a87 微调 2024-12-13 08:56:42 +08:00
GYYM
b923b7c35d 饼图样式调整 2024-12-12 13:23:09 +08:00
sjl
8bd5351d29 检测计划表格误差体系,检测源跳转 2024-12-12 11:38:42 +08:00
GYYM
726f7841e8 日志显示内容微调 2024-12-11 19:12:04 +08:00
sjl
47883ce426 微调 2024-12-11 20:24:00 +08:00
GYYM
2459fc1848 正式检测日志修改 2024-12-11 18:48:54 +08:00
sjl
cbc11f636a Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-11 19:39:16 +08:00
sjl
5dbd6eb8be 检测计划 2024-12-11 19:39:09 +08:00
GYYM
167716e61b 首页、守时检测页样式调整 2024-12-11 17:46:59 +08:00
GYYM
6d7f045bce 归档页调整 2024-12-09 16:17:04 +08:00
GYYM
a73417ea02 修改未检状态的描述 2024-12-06 15:06:38 +08:00
GYYM
9c3850db98 文字修改 2024-12-06 09:21:55 +08:00
393ad5fa0b 单元格样式调整 2024-12-06 09:18:13 +08:00
sjl
9e8fe2c91f Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-06 09:11:55 +08:00
sjl
b57a7edf28 微调弹出框 2024-12-06 09:11:44 +08:00
GYYM
85cc5ebb27 修改不合格项表头的提示方式 2024-12-06 09:10:39 +08:00
GGJ
0cd32fbb5f 修改表格样式 2024-12-06 09:07:16 +08:00
GYYM
2833e65f57 修改正式检测首列的显示样式 2024-12-05 22:15:12 +08:00
GYYM
5a29403636 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-05 21:34:10 +08:00
GYYM
9c0b9a7c93 样式调整 2024-12-05 21:33:52 +08:00
sjl
69a4cbbbc2 微调 2024-12-05 20:29:28 +08:00
sjl
e2b2382cc4 误差体系 2024-12-05 20:11:26 +08:00
sjl
f8a4d05f57 误差体系 2024-12-05 20:06:59 +08:00
caozehui
d996c43f9f Merge remote-tracking branch 'origin/master' 2024-12-05 19:31:56 +08:00
caozehui
c195a58eb4 微调 2024-12-05 19:31:43 +08:00
GGJ
b1c9375873 修改样式 2024-12-05 18:14:43 +08:00
GYYM
6010cbf20a 微调 2024-12-05 17:30:25 +08:00
sjl
11c32ed360 3列弹出框 2024-12-05 16:23:20 +08:00
GYYM
0494822ff4 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-05 15:26:06 +08:00
GYYM
2611f43d1f 微调 2024-12-05 15:25:49 +08:00
GGJ
ea4edfadd0 修改样式 2024-12-05 15:22:46 +08:00
caozehui
8e2a22cf61 微调 2024-12-05 14:37:50 +08:00
sjl
3a1cfe0f31 微调 2024-12-05 13:59:15 +08:00
sjl
5bdc44b301 微调 2024-12-05 13:51:47 +08:00
GYYM
92a1736667 守时微调 2024-12-05 13:46:53 +08:00
caozehui
57f9238033 Merge remote-tracking branch 'origin/master' 2024-12-05 13:43:19 +08:00
caozehui
1b171d4b8d 微调 2024-12-05 13:43:05 +08:00
GYYM
c5acb84d97 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-05 11:21:28 +08:00
GYYM
63a1e9ec56 微调 2024-12-05 11:21:10 +08:00
sjl
f06a8d6b15 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-05 11:07:57 +08:00
GGJ
92df927453 修改样式问题 2024-12-05 11:07:54 +08:00
sjl
2878dce69d 模式切换 2024-12-05 11:07:45 +08:00
caozehui
7d5d128b54 微调 2024-12-05 09:55:35 +08:00
GYYM
6e9e3db358 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-04 21:37:25 +08:00
GYYM
a415ffa12a 样式调整 2024-12-04 21:36:12 +08:00
sjl
9e8cdaead6 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-12-04 20:00:15 +08:00
sjl
e5d4aae846 微调 2024-12-04 20:00:04 +08:00
caozehui
d6af35828d 样式调整 2024-12-04 19:54:56 +08:00
GYYM
aa86c5e662 微调 2024-12-04 10:20:55 +08:00
GYYM
f99aa94b8f 数据内容微调 2024-12-04 09:44:26 +08:00
sjl
f5c226ba28 微调通用配置 2024-12-04 09:08:48 +08:00
sjl
741020fe79 微调 2024-12-04 08:49:42 +08:00
GYYM
33004e081d 样式调整 2024-12-03 17:13:47 +08:00
sjl
a91367a16e 微调 2024-12-03 09:50:15 +08:00
caozehui
c086a4d161 微调 2024-12-03 09:49:07 +08:00
GYYM
45363987fd 样式调整 2024-12-02 14:11:09 +08:00
caozehui
da78b9c98a 源参数 2024-12-02 08:50:21 +08:00
caozehui
13992ffa58 Merge remote-tracking branch 'origin/master' 2024-11-29 16:29:43 +08:00
caozehui
a249e5e185 微调 2024-11-29 16:29:26 +08:00
GYYM
9eaa94a523 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client
# Conflicts:
#	frontend/src/views/machine/errorSystem/components/errorStandardPopup.vue
2024-11-29 13:51:26 +08:00
GYYM
b39c076879 样式调整 2024-11-29 13:45:48 +08:00
sjl
6d34bcfde7 检测源 2024-11-28 14:30:49 +08:00
sjl
3c56eb2ba0 误差体系 2024-11-26 15:41:20 +08:00
GYYM
a1d3485ba7 样式调整 2024-11-25 21:11:10 +08:00
GYYM
428c74047b 微调 2024-11-22 13:27:41 +08:00
GYYM
b77ad54309 不同电脑的样式微调 2024-11-22 11:45:33 +08:00
GYYM
6137ac18b7 样式微调 2024-11-22 10:46:10 +08:00
GYYM
44f8d43775 样式调整 2024-11-21 23:02:43 +08:00
sjl
eedf3f00c1 比对式才显示值类型下拉框 2024-11-21 15:51:53 +08:00
sjl
e7f868d319 微调 2024-11-21 15:30:42 +08:00
sjl
0d063e887c 微调 2024-11-21 14:42:26 +08:00
sjl
4de59336b2 微调 2024-11-21 10:05:44 +08:00
GYYM
b992b2653a 检测流程样式调整 2024-11-20 21:30:05 +08:00
GYYM
d673fc8685 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-11-20 21:29:28 +08:00
sjl
55383cf501 检测脚本 2024-11-20 15:13:50 +08:00
caozehui
c46a55e9c4 微调 2024-11-20 13:53:31 +08:00
GYYM
f51fe8433b Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-11-20 11:23:55 +08:00
GYYM
fdc7639887 使用真登录功能前拉取报错,提交代码 2024-11-20 11:22:05 +08:00
caozehui
efb6b2598a Merge remote-tracking branch 'origin/master' 2024-11-20 11:04:27 +08:00
sjl
f6595f784a 微调 2024-11-20 11:02:50 +08:00
GYYM
963c0f5713 数据查询、报告生成流程界面框架绘制 2024-11-19 19:34:00 +08:00
sjl
543662a2ac 通用配置 2024-11-19 16:30:03 +08:00
caozehui
17b68cbc95 微调 2024-11-19 16:01:35 +08:00
GYYM
dd527a4994 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-11-18 22:05:18 +08:00
GYYM
977a998767 检测过程流程展示页面框架绘制 2024-11-18 22:04:59 +08:00
sjl
a57ebbcc62 菜单管理 2024-11-18 16:02:19 +08:00
sjl
5cdbee88b4 微调 2024-11-18 09:02:57 +08:00
sjl
a8eaccc53e 微调 2024-11-15 16:31:48 +08:00
sjl
413c14083b Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-11-15 16:31:38 +08:00
a86e6d4009 微调 2024-11-15 13:47:07 +08:00
sjl
d4b2ac1f01 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-11-15 09:38:53 +08:00
sjl
43b67f2e1a 微调 2024-11-15 09:38:25 +08:00
GYYM
563285eb77 树控件样式微调 2024-11-15 09:34:43 +08:00
GYYM
815d34f817 进度条微调 2024-11-15 09:13:23 +08:00
GYYM
36b03efd0a 样式微调 2024-11-14 21:03:51 +08:00
sjl
fddbb8c9dc 解决冲突 2024-11-14 20:49:21 +08:00
sjl
4f6c6cf943 # frontend/src/views/machine/device/components/devicePopup.vue
#	frontend/src/views/machine/device/index.vue
2024-11-14 20:37:54 +08:00
sjl
5fd97ebe72 微调 2024-11-14 20:36:54 +08:00
91eea8cc8a 微调 2024-11-14 19:33:33 +08:00
sjl
534cc0ab76 微调 2024-11-14 19:24:36 +08:00
GYYM
7efaa253a2 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client
# Conflicts:
#	frontend/src/views/plan/autoTest/components/tree.vue
2024-11-14 18:47:15 +08:00
GYYM
a3051c0ea4 微调 2024-11-14 18:40:58 +08:00
7033c3cdc6 微调 2024-11-14 18:39:13 +08:00
sjl
1ee1b05fca 微调 2024-11-14 18:36:00 +08:00
sjl
702d1bb699 # frontend/src/views/home/components/table.vue
#	frontend/src/views/home/tabs/dashboard.vue
#	frontend/src/views/system/dictionary/dictTree/index.vue
2024-11-14 18:30:53 +08:00
sjl
87fe66da3e 微调 2024-11-14 18:26:34 +08:00
12201e065f 微调 2024-11-14 18:13:28 +08:00
95f54fb674 review代码调整代码 2024-11-14 11:47:42 +08:00
GYYM
8f89252d8b 调整检测首页布局;根据不同的功能,实现不同的表格展示 2024-11-14 11:45:25 +08:00
sjl
65cb7826d3 解决冲突 frontend/src/api/index.ts 2024-11-14 11:36:25 +08:00
sjl
39cbe0ff35 角色管理 2024-11-14 11:34:25 +08:00
fc248a5ed2 review代码调整代码 2024-11-14 11:17:22 +08:00
GYYM
abc6db7f18 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client
# Conflicts:
#	frontend/src/views/plan/planList/index.vue
2024-11-13 19:04:30 +08:00
GYYM
86e7705985 检测首页、主页、数据展示界面样式修改 2024-11-13 18:58:53 +08:00
21441a64ad 检测计划列表操作按钮调整,超过3个按钮时,调整为更多下拉 2024-11-13 15:24:42 +08:00
GYYM
328696eb55 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client
# Conflicts:
#	frontend/src/views/home/components/tree.vue
2024-11-12 20:39:16 +08:00
GYYM
6a5c783419 修改检测入口、预检测、正式检测页面 2024-11-12 20:35:12 +08:00
sjl
44e7598b68 用户管理 2024-11-12 18:56:33 +08:00
sjl
4b5498ad49 frontend/src/views/authority/role/components/permissionUnit.vue 2024-11-11 15:41:28 +08:00
sjl
0797ea046f 微调 2024-11-11 15:40:49 +08:00
caozehui
bf8c6a1d00 微调 2024-11-11 15:38:40 +08:00
sjl
f05369556c frontend/src/views/authority/role/components/permissionUnit.vue 2024-11-11 11:10:26 +08:00
sjl
3526432052 微调 2024-11-11 11:09:20 +08:00
GYYM
74c03a2358 字段调整 2024-11-08 13:09:06 +08:00
GYYM
50bebf451d 计划设备列表列宽微调 2024-11-08 09:30:41 +08:00
GYYM
6a1fa6458e 二级弹出框尺寸调整 2024-11-08 09:21:18 +08:00
760eb7c993 微调样子 2024-11-07 21:05:59 +08:00
ecb8404383 微调 2024-11-07 20:57:11 +08:00
f20cc42583 微调 2024-11-07 20:57:00 +08:00
GYYM
b28bcaaab7 测试 2024-11-07 20:55:11 +08:00
GYYM
9804baf8a3 检测首页增加不同入口的默认选择状态和禁止选择状态 2024-11-07 20:41:32 +08:00
sjl
4695a82b38 微调时间控件 2024-11-07 19:40:01 +08:00
sjl
9929ea74b4 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-11-07 19:25:57 +08:00
sjl
f72b5300be 微调 2024-11-07 19:25:45 +08:00
caozehui
e4b1f05037 被检设备批量导入功能、ImportExcel组件微调 2024-11-07 19:24:29 +08:00
sjl
4b32e1f215 微调 2024-11-07 16:17:33 +08:00
sjl
53d616ee49 Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client 2024-11-07 15:54:38 +08:00
caozehui
17c9330f32 微调 2024-11-07 15:54:01 +08:00
sjl
88e3ffe33b Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client
# Conflicts:
#	frontend/src/views/machine/device/index.vue
2024-11-07 15:14:50 +08:00
sjl
0ca2baa44a 微调 2024-11-07 15:13:53 +08:00
caozehui
f08f45fb9c 微调 2024-11-07 15:12:44 +08:00
GYYM
1ec486a42d 增加检测计划功能 2024-11-07 13:22:51 +08:00
sjl
4fc0781e05 TimeControl微调 2024-11-07 11:29:28 +08:00
sjl
9de2c874f0 时间控件 2024-11-07 10:24:33 +08:00
dc7e9d40e7 微调 2024-11-06 21:15:49 +08:00
sjl
07ccde9f59 微调 2024-11-06 21:07:44 +08:00
sjl
6abac988c7 被检设备 2024-11-06 20:31:07 +08:00
caozehui
ea254245c7 微调 2024-11-06 10:35:54 +08:00
d7518e41e4 微调 2024-11-06 09:46:54 +08:00
sjl
51f408ce7a 电能质量字典界面 2024-11-06 08:45:51 +08:00
caozehui
29bc14d3e1 Merge remote-tracking branch 'origin/master' 2024-11-05 15:38:56 +08:00
caozehui
c4c10ab9b4 微调 2024-11-05 15:38:34 +08:00
sjl
1f22234b45 指标字典 2024-11-05 14:15:56 +08:00
64ae879aee 微调 2024-11-05 11:43:27 +08:00
sjl
7f8aeebb1e 微调 2024-11-05 11:23:38 +08:00
sjl
c0fcba6a25 指标字典 2024-11-04 18:43:24 +08:00
sjl
9a9807230d 更新代码 2024-11-04 09:58:00 +08:00
247 changed files with 31916 additions and 6259 deletions

14
.vscode/settings.json vendored
View File

@@ -1,16 +1,28 @@
{ {
"cSpell.words": [ "cSpell.words": [
"Analyse",
"CHNFACTOR",
"CHNPACTOR",
"Chns", "Chns",
"Combox",
"Datasource",
"daterange", "daterange",
"devicedata", "devicedata",
"errordata", "errordata",
"errordetail", "errordetail",
"Interharmonic",
"IRMS",
"logdata", "logdata",
"MSQI",
"Pids", "Pids",
"plandata", "plandata",
"PQDIF",
"Preinvestment",
"resourcedata", "resourcedata",
"resourcename", "resourcename",
"rmark", "rmark",
"showtest" "showtest",
"UNBAN",
"VRMS"
] ]
} }

View File

@@ -25,10 +25,10 @@ module.exports = (appInfo) => {
*/ */
config.windowsOption = { config.windowsOption = {
title: '自动检测平台', title: '自动检测平台',
width: 1280, width: 1600,
height: 850, height: 950,
minWidth: 1280, minWidth: 1600,
minHeight: 850, minHeight: 950,
webPreferences: { webPreferences: {
//webSecurity: false, //webSecurity: false,
contextIsolation: false, // false -> 可在渲染进程中使用electron的apitrue->需要bridge.js(contextBridge) contextIsolation: false, // false -> 可在渲染进程中使用electron的apitrue->需要bridge.js(contextBridge)

View File

@@ -19,7 +19,7 @@ VITE_API_URL=/api
# 开发环境跨域代理,支持配置多个 # 开发环境跨域代理,支持配置多个
# VITE_PROXY=[["/api","http://192.168.1.122:18092/"]] #VITE_PROXY=[["/api","http://127.0.0.1:18092/"]]
VITE_PROXY=[["/api","http://192.168.1.125:18092/"]]洪圣文 VITE_PROXY=[["/api","http://192.168.1.124:18092/"]]
#VITE_PROXY=[["/api","http://192.168.1.125:18092/"]]
# VITE_PROXY=[["/api","http://192.168.1.138:8080/"]]张文 # VITE_PROXY=[["/api","http://192.168.1.138:8080/"]]张文

View File

@@ -22,4 +22,5 @@ VITE_DROP_CONSOLE=true
VITE_PWA=true VITE_PWA=true
# 线上环境接口地址 # 线上环境接口地址
#VITE_API_URL="/api" # 打包时用
VITE_API_URL="http://192.168.1.125:18092/" VITE_API_URL="http://192.168.1.125:18092/"

11
frontend/.prettierrc Normal file
View File

@@ -0,0 +1,11 @@
{
"singleQuote": true,
"trailingComma": "none",
"tabWidth": 4,
"printWidth": 120,
"useTabs": false,
"semi": false,
"arrowParens": "avoid",
"endOfLine": "lf",
"htmlWhitespaceSensitivity": "ignore"
}

View File

@@ -22,9 +22,11 @@
"echarts": "^5.4.3", "echarts": "^5.4.3",
"echarts-liquidfill": "^3.1.0", "echarts-liquidfill": "^3.1.0",
"element-plus": "^2.7.8", "element-plus": "^2.7.8",
"html2canvas": "^1.4.1",
"md5": "^2.3.0", "md5": "^2.3.0",
"mitt": "^3.0.1", "mitt": "^3.0.1",
"mkdirp": "^3.0.1", "mkdirp": "^3.0.1",
"node-forge": "^1.3.1",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^2.2.1", "pinia": "^2.2.1",
"pinia-plugin-persistedstate": "^3.2.1", "pinia-plugin-persistedstate": "^3.2.1",
@@ -41,11 +43,14 @@
"devDependencies": { "devDependencies": {
"@rushstack/eslint-patch": "^1.8.0", "@rushstack/eslint-patch": "^1.8.0",
"@tsconfig/node20": "^20.1.4", "@tsconfig/node20": "^20.1.4",
"@types/html2canvas": "^1.0.0",
"@types/md5": "^2.3.2", "@types/md5": "^2.3.2",
"@types/node": "^20.14.14", "@types/node": "^20.14.14",
"@types/node-forge": "^1.3.11",
"@types/nprogress": "^0.2.0", "@types/nprogress": "^0.2.0",
"@types/qs": "^6.9.8", "@types/qs": "^6.9.8",
"@types/sortablejs": "^1.15.2", "@types/sortablejs": "^1.15.2",
"@types/xlsx": "^0.0.36",
"@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/eslint-plugin": "^6.7.0",
"@typescript-eslint/parser": "^6.7.0", "@typescript-eslint/parser": "^6.7.0",
"@vitejs/plugin-vue": "^5.0.5", "@vitejs/plugin-vue": "^5.0.5",
@@ -71,7 +76,7 @@
"vite-plugin-compression": "^0.5.1", "vite-plugin-compression": "^0.5.1",
"vite-plugin-eslint": "^1.8.1", "vite-plugin-eslint": "^1.8.1",
"vite-plugin-html": "^3.2.0", "vite-plugin-html": "^3.2.0",
"vite-plugin-node-polyfills": "^0.22.0", "vite-plugin-node-polyfills": "^0.23.0",
"vite-plugin-pwa": "^0.16.5", "vite-plugin-pwa": "^0.16.5",
"vite-plugin-svg-icons": "^2.0.1", "vite-plugin-svg-icons": "^2.0.1",
"vue-tsc": "^2.0.21" "vue-tsc": "^2.0.21"

View File

@@ -5,7 +5,7 @@
:size='assemblySize' :size='assemblySize'
:button='buttonConfig' :button='buttonConfig'
> >
<router-view :key='$route.fullPath' /> <router-view />
</el-config-provider> </el-config-provider>
</template> </template>

View File

@@ -0,0 +1,204 @@
export namespace CheckData {
export interface DataCheck {
scriptName: string,
errorSysId: string,
dataRule: string,
deviceName: string,
chnNum: string,
}
export interface PhaseCheckResult {
// 检测源定值-标准值
resultData: number,
// 装置原始数据-被检值
data: number,
// 误差值
errorData: number,
// 第几次谐波
num?: number,
//符合、不符合
isData?: number,
//最大误差值
radius?: string,
unit?: string,
}
/**
* 用于定义 查看(设备)通道检测结果响应数据 类型
*/
export interface ResCheckResult {
dataA?: PhaseCheckResult | null,
dataB?: PhaseCheckResult | null,
dataC?: PhaseCheckResult | null,
dataT?: PhaseCheckResult | null,
// 第几次谐波
//num: number | null,
//符合、不符合
isData?: number,
//最大误差值
radius?: string,
//单位
unit?: string,
}
/**
* 用于定义 查看(设备)通道检测结果表格展示数据 类型
*/
export interface CheckResult {
stdA?: string,
dataA?: string,
errorA?: string,
maxErrorA?: string,
isDataA?: number,
unitA?: string,
stdB?: string,
dataB?: string,
errorB?: string,
maxErrorB?: string,
isDataB?: number,
unitB?: string,
stdC?: string,
dataC?: string,
errorC?: string,
maxErrorC?: string,
isDataC?: number,
unitC?: string,
stdT?: string,
dataT?: string,
errorT?: string,
maxErrorT?: string,
isDataT?: number,
unitT?: string,
//最大误差值
maxError?: string,
unit?: string,
//符合、不符合
result?: number,
}
/**
* 用于定义 具体通道的原始数据类型
*/
export interface RawDataItem {
time?: string,
harmNum?: number | null,
dataA?: string,
dataB?: string,
dataC?: string,
dataT?: string,
unit?: string | null
}
export interface Device {
deviceId: string; //装置序号Id
deviceName: string; //设备名称
chnNum: number; //设备通道数
planId: string; //计划Id
devType: string; //设备类型
devVolt: number; //设备电压
devCurr: number; //设备电流
factorFlag: number; //是否支持系数校准
}
// 用来描述检测脚本类型
export interface ScriptItem {
id: string,
code: string,
scriptName: string,
}
// 用来描述 检测数据-左侧树结构
export interface TreeItem {
id: string | null,
scriptTypeName: string | null,
sourceDesc: string | null,
harmNum: number | null,
index: number | null,
fly: number | null,
children: TreeItem[] | null,
}
// 用来描述 通道检测结果
export enum ChnCheckResultEnum {
UNKNOWN = -1,
LOADING = 0,
SUCCESS = 1,
FAIL = 2,
TIMEOUT = 3,
ERRORDATA = 4,
NOT_PART_IN_ERROR = 5
}
export interface DeviceCheckResult {
deviceId: string,
deviceName: string,
chnResult: ChnCheckResultEnum[] //通道检测结果
}
//用来描述 某个脚本测试项对所有通道的检测结果
export interface ScriptChnItem {
scriptType: string
scriptName?: string //可以不要该属性,有点多余
// 设备
devices: Array<DeviceCheckResult>
}
export enum ButtonColorEnum {
INFO = '#909399',
LOADING = 'var(--el-color-primary)',
SUCCESS = '#91cc75',
WARNING = '#e6a23c',
DANGER = '#f56c6c',
}
/**
* 用于描述 (设备)通道检测结果展示的按钮类型
*/
export interface ButtonResult {
color: ButtonColorEnum
icon: 'More' | 'Loading' | 'Close' | 'CircleCheckFilled' | 'Link' | 'WarnTriangleFilled' | 'Minus'
}
/**
* 用于描述 脚本检测结果展示的按钮类型
*/
export interface ScriptChnViewItem {
scriptType: string,
scriptName?: string //脚本项名称,可以不要该属性,有点多余
// 设备
devices: Array<{
deviceId: string,
deviceName: string,
chnResult: ButtonResult[],
}>
}
/**
* 定义检测日志类型
*/
export interface LogItem {
type: 'info' | 'warning' | 'error'
log: string
}
/**
* 定义手动检测时,勾选的测试项
*/
export interface SelectTestItem {
preTest: boolean,
timeTest: boolean,
channelsTest: boolean,
test: boolean
}
}

View File

@@ -0,0 +1,99 @@
import http from "@/api";
import {CheckData} from "@/api/check/interface";
export const getBigTestItem = (params: {
reCheckType: number,
planId: string,
devId: string,
}) => {
return http.post(`/adPlan/getBigTestItem`, params, {loading: false});
}
/**
* 获取弹出框表单数据
* @param params 当为scriptType为null时表示查询所有脚本类型否则只查询指定脚本类型。当为chnNum为-1时表示查询所有通道否则只查询指定通道。
*/
export const getFormData = (params: {
planId: string,
deviceId: string,
chnNum: string,
scriptType: string | null
}) => {
return http.post("/result/formContent/", params, {loading: false});
}
/**
* 获取树形结构数据
* @param params
*/
export const getTreeData = (params: {
scriptId?: string,
devId?: string,
devNum?: string,
scriptType?: string | null,
code?: string,
}) => {
return http.post<CheckData.TreeItem[]>("/result/treeData/", params, {loading: false});
}
/**
* 获取检查数据
* @param params
*/
export const getTableData = (params: {
scriptType: string | null,
scriptId: string,
devId: string,
devNum: string,
code: string,
index: number,
}) => {
return http.post("/result/resultData/", params, {loading: false});
}
export const exportRawData = (params: {
scriptType: string | null,
scriptId: string,
devId: string,
devNum: string,
code: string,
index: number,
}) => {
return http.download("/result/exportRawData", params, {loading: false});
}
/**
* 重新计算
* @param params
*/
export const reCalculate = (params: {
planId: string,
scriptId: string,
errorSysId: string,
deviceId: string,
code: string
}) => {
return http.post("/result/reCalculate", params, {loading: true});
}
/**
* 更换误差体系
* @param params
*/
export const changeErrorSystem = (params: {
planId: string,
scriptId: string,
errorSysId: string,
deviceId: string,
code: string
}) => {
return http.post("/result/changeErrorSystem", params, {loading: true});
}
/**
* 删除(误差体系切换时产生的)临时表
* @param code
*/
export const deleteTempTable = (code: string) => {
return http.get(`/result/deleteTempTable?code=${code}`, null, {loading: false})
}

View File

@@ -0,0 +1,24 @@
import type { controlSource } from '@/api/device/interface/controlSource'
import http from '@/api'
/**
* @name 程控源管理模块
*/
//通讯校验
export const checkSimulate = (params: controlSource.ResControl) => {
return http.post(`/prepare/ytxCheckSimulate`,params)
}
//启动
export const startSimulateTest = (params: controlSource.ResControl) => {
return http.post(`prepare/startSimulateTest`,params,{loading:false})
}
//停止
export const closeSimulateTest = (params: controlSource.ResControl) => {
return http.post(`/prepare/closeSimulateTest`,params,{loading:false})
}

View File

@@ -0,0 +1,29 @@
import type { DevType } from '@/api/device/interface/devType'
import http from '@/api'
/**
* @name 设备类型管理模块
*/
//获取设备类型
export const getDevTypeList = (params: DevType.ReqPqDevTypeParams) => {
return http.post(`/devType/list`, params)
}
//添加设备类型
export const addDevType = (params: DevType.ResPqDevType) => {
return http.post(`/devType/add`, params)
}
//编辑设备类型
export const updateDevType = (params: DevType.ResPqDevType) => {
return http.post(`/devType/update`, params)
}
//删除设备类型
export const deleteDevType = (params: string[]) => {
return http.post(`/devType/delete`, params)
}

View File

@@ -1,18 +0,0 @@
import { ResPage } from '@/api/interface'
import { Device } from './interface'
import { ADMIN as rePrefix } from '@/api/config/serviceName'
import http from '@/api'
/**
* @name 被检设备管理模块
*/
// 获取检测脚本列表
export const getDeviceList = (params: Device.ReqDeviceParams) => {
return http.post<ResPage<Device.ResDeviceList>>(`/RoleList_Post`, params)
// return http.post<ResPage<Role.ResRoleList>>(`${rePrefix}/device/list`, params)
}
export const getPlan_DeviceList = (params: Device.DeviceList) => {
//return http.post<ResPage<Device.ResDeviceList>>(`/RoleList_Post`, params)
// return http.post<ResPage<Role.ResRoleList>>(`${rePrefix}/device/list`, params)
}

View File

@@ -0,0 +1,437 @@
const data = [
{
id: 'device1',
deviceName:"模拟装置1",
deviceType:"PQS882B4电能质量监测装置",
deviceChannels:"4",
planName: "沧州220kV留古等4座变电站电能质量检测",
deviceUn: "57.74",
deviceIn: "5",
deviceCompany: "南京灿能电力自动化股份有限公司",
deviceModel: "模拟式",
},
{
id: 'device2',
deviceName:"模拟装置2",
deviceType:"PQS882A电能质量监测装置",
deviceChannels:"1",
planName: "邯郸220kV团城站等4座站电能质量检测",
deviceUn: "57.74",
deviceIn: "5",
deviceCompany: "南京灿能电力自动化股份有限公司",
deviceModel: "模拟式",
},
{
id: 'device3',
deviceName:"模拟装置3",
deviceType:"PQS882A电能质量监测装置",
deviceChannels:"1",
planName: "衡水冀州光伏电站配套出口工程",
deviceUn: "57.74",
deviceIn: "1",
deviceCompany: "南京灿能电力自动化股份有限公司",
deviceModel: "模拟式",
},
{
id: 'device4',
deviceName:"模拟装置4",
deviceType:"PMC-680M-22-22-00-115ANBC电能质量监测装置",
deviceChannels:"4",
planName: "深圳市中电软件有限公司委托送检",
deviceUn: "57.74",
deviceIn: "5",
deviceCompany: "深圳中电电力技术股份有限公司",
deviceModel: "模拟式",
},
]
const plan_devicedata = [
{
id: '1', //装置序号ID
name: '240001', //设备名称
dev_Type: 'PQS-882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '2', //装置序号ID
name: '240002', //设备名称
dev_Type: 'PQS-882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '3', //装置序号ID
name: '240003', //设备名称
dev_Type: 'PQS-882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '4', //装置序号ID
name: '240004', //设备名称
dev_Type: 'PQS-882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '5', //装置序号ID
name: '240005', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '不符合', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'检测完成',//检测状态
reCheck_Num: 1, //复检次数
},
{
id: '6', //装置序号ID
name: '240006', //设备名称
dev_Type: 'PQS-882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '不符合', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'检测完成',//检测状态
reCheck_Num: 1, //复检次数
},
{
id: '7', //装置序号ID
name: '240007', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '符合', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'检测完成',//检测状态
reCheck_Num: 1, //复检次数
},
{
id: '8', //装置序号ID
name: '240008', //设备名称
dev_Type: 'PQS-882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '符合', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'检测完成',//检测状态
reCheck_Num: 1, //复检次数
},
{
id: '9', //装置序号ID
name: '240009', //设备名称
dev_Type: 'PQS-882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '不符合', //检测结果
report_State: '已生成', //报告状态
document_State: '未归档', //归档状态
check_State:'检测完成',//检测状态
reCheck_Num: 1, //复检次数
},
{
id: '10', //装置序号ID
name: '240010', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '符合', //检测结果
report_State: '已生成', //报告状态
document_State: '未归档', //归档状态
check_State:'检测完成',//检测状态
reCheck_Num: 2, //复检次数
},
{
id: '11', //装置序号ID
name: '240011', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '符合', //检测结果
report_State: '已生成', //报告状态
document_State: '已归档', //归档状态
check_State:'检测完成',//检测状态
reCheck_Num: 1, //复检次数
},
{
id: '12', //装置序号ID
name: '240012', //设备名称
dev_Type: 'PQS-882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '符合', //检测结果
report_State: '已生成', //报告状态
document_State: '已归档', //归档状态
check_State:'检测完成',//检测状态
reCheck_Num: 2, //复检次数
},
{
id: '13', //装置序号ID
name: '240013', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '14', //装置序号ID
name: '240014', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '15', //装置序号ID
name: '240015', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '16', //装置序号ID
name: '240016', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '17', //装置序号ID
name: '240017', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '18', //装置序号ID
name: '240018', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '19', //装置序号ID
name: '240019', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '20', //装置序号ID
name: '240020', //设备名称
dev_Type: 'PQS-882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '未检', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
]
// const plan_devicedata = [
// {
// id: '1', //装置序号ID
// name: '模拟装置1', //设备名称
// dev_Type: 'PQS882A',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 0, //复检次数
// },
// {
// id: '2', //装置序号ID
// name: '模拟装置2', //设备名称
// dev_Type: 'PQS882B4',//设备类型
// dev_Chns: 4, //设备通道数
// check_Result: '/', //检测结果
// report_State: '未生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'未检',//检测状态
// reCheck_Num: 0, //复检次数
// },
// {
// id: '3', //装置序号ID
// name: '模拟装置3', //设备名称
// dev_Type: 'PQS882B4',//设备类型
// dev_Chns: 4, //设备通道数
// check_Result: '/', //检测结果
// report_State: '未生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测中',//检测状态
// reCheck_Num: 0, //复检次数
// },
// {
// id: '4', //装置序号ID
// name: '模拟装置4', //设备名称
// dev_Type: 'PQS882B4',//设备类型
// dev_Chns: 4, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '未生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 1, //复检次数
// },
// {
// id: '5', //装置序号ID
// name: '中电测试装置', //设备名称
// dev_Type: 'PMC-680M-22-22-00-115ANBC',//设备类型
// dev_Chns: 4, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '未生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 1, //复检次数
// },
// {
// id: '6', //装置序号ID
// name: '易司拓测试装置1', //设备名称
// dev_Type: 'E703A',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 1, //复检次数
// },
// {
// id: '7', //装置序号ID
// name: '易司拓测试装置2', //设备名称
// dev_Type: 'E703A',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 1, //复检次数
// },
// {
// id: '8', //装置序号ID
// name: '山大电力测试装置1', //设备名称
// dev_Type: 'SDL-3002C',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 1, //复检次数
// },
// {
// id: '9', //装置序号ID
// name: '山大电力测试装置2', //设备名称
// dev_Type: 'SDL-3002C',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 2, //复检次数
// },
// {
// id: '10', //装置序号ID
// name: '山大电力测试装置2', //设备名称
// dev_Type: 'SDL-3002C',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 2, //复检次数
// },
// {
// id: '11', //装置序号ID
// name: '山大电力测试装置2', //设备名称
// dev_Type: 'SDL-3002C',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 2, //复检次数
// },
// {
// id: '12', //装置序号ID
// name: '山大电力测试装置2', //设备名称
// dev_Type: 'SDL-3002C',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 2, //复检次数
// },
// {
// id: '13', //装置序号ID
// name: '山大电力测试装置2', //设备名称
// dev_Type: 'SDL-3002C',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 2, //复检次数
// },
// {
// id: '14', //装置序号ID
// name: '山大电力测试装置3', //设备名称
// dev_Type: 'SDL-3002C',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 2, //复检次数
// },
// {
// id: '15', //装置序号ID
// name: '山大电力测试装置4', //设备名称
// dev_Type: 'SDL-3002C',//设备类型
// dev_Chns: 1, //设备通道数
// check_Result: '不合格', //检测结果
// report_State: '已生成', //报告状态
// document_State: '未归档', //归档状态
// check_State:'检测完成',//检测状态
// reCheck_Num: 2, //复检次数
// },
// ]
export default {data,plan_devicedata}

View File

@@ -0,0 +1,71 @@
import type {Device} from '@/api/device/interface/device'
import http from '@/api'
/**
* @name 被检设备管理模块
*/
//获取被检设备
export const getPqDevList = (params: Device.ReqPqDevParams) => {
return http.post(`/pqDev/list`, params)
}
//添加被检设备
export const addPqDev = (params: Device.ResPqDev) => {
return http.post(`/pqDev/add`, params)
}
//编辑被检设备
export const updatePqDev = (params: Device.ResPqDev) => {
return http.post(`/pqDev/update`, params)
}
//删除被检设备
export const deletePqDev = (params: string[]) => {
return http.post(`/pqDev/delete`, params)
}
//导出被检设备
export const exportPqDev = (params: Device.ReqPqDevParams) => {
return http.download(`/pqDev/export`, params)
}
// 下载导入文件模板
export const downloadTemplate = () => {
return http.download(`/pqDev/downloadTemplate`)
}
//导入被检设备
export const importPqDev = (params: Device.ReqPqDevParams) => {
return http.uploadExcel(`/pqDev/import`, params)
}
//导入比对式被检设备
export const importContrastPqDev = (params: Device.ReqPqDevParams) => {
return http.upload(`/pqDev/importContrast`, params)
}
// //导出灿能二楼设备
// export const exportCNDev = (params: Device.ReqPqDevParams) => {
// return http.download(`/pqDev/exportCNDev`, params)
// }
//
// // 下载灿能二楼设备导入文件模板
// export const downloadCNDevTemplate = () => {
// return http.download(`/pqDev/downloadCNDevTemplate`)
// }
//
// //导入灿能二楼设备
// export const importCNDev = (params: Device.ReqPqDevParams) => {
// return http.uploadExcel(`/pqDev/importCNDev`, params)
// }
//根据设备类型决定电源、icd、模板、通道数、额定电压、额定电流
export const getPqDev = () => {
return http.get(`/devType/listAll`)
}
//被检设备归档
export const documentedPqDev = (ids: string[]) => {
return http.post(`/pqDev/documented`, ids)
}

View File

@@ -1,95 +0,0 @@
const data = [
{
id: 'device1',
devicename:"模拟装置1",
deviceType:"PQS882B4电能质量监测装置",
deviceChannels:"4",
Planname: "沧州220kV留古等4座变电站电能质量检测",
deviceUn: "57.74",
deviceIn: "5",
deviceCompany: "南京灿能电力自动化股份有限公司",
deviceModel: "模拟式",
},
{
id: 'device2',
devicename:"模拟装置2",
deviceType:"PQS882A电能质量监测装置",
deviceChannels:"1",
Planname: "邯郸220kV团城站等4座站电能质量检测",
deviceUn: "57.74",
deviceIn: "5",
deviceCompany: "南京灿能电力自动化股份有限公司",
deviceModel: "模拟式",
},
{
id: 'device3',
devicename:"模拟装置3",
deviceType:"PQS882A电能质量监测装置",
deviceChannels:"1",
Planname: "衡水冀州光伏电站配套出口工程",
deviceUn: "57.74",
deviceIn: "1",
deviceCompany: "南京灿能电力自动化股份有限公司",
deviceModel: "模拟式",
},
{
id: 'device4',
devicename:"模拟装置4",
deviceType:"PMC-680M-22-22-00-115ANBC电能质量监测装置",
deviceChannels:"4",
Planname: "深圳市中电软件有限公司委托送检",
deviceUn: "57.74",
deviceIn: "5",
deviceCompany: "深圳中电电力技术股份有限公司",
deviceModel: "模拟式",
},
]
const plan_devicedata = [
{
id: '1', //装置序号ID
name: '设备1', //设备名称
dev_Type: 'PQS882A',//设备类型
dev_Chns: 1, //设备通道数
check_Result: '合格', //检测结果
report_State: '已生成', //报告状态
document_State: '归档', //归档状态
check_State:'检测完成',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '2', //装置序号ID
name: '设备2', //设备名称
dev_Type: 'PQS882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '/', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'未检',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '3', //装置序号ID
name: '设备3', //设备名称
dev_Type: 'PQS882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '/', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'检测中',//检测状态
reCheck_Num: 0, //复检次数
},
{
id: '4', //装置序号ID
name: '设备4', //设备名称
dev_Type: 'PQS882B4',//设备类型
dev_Chns: 4, //设备通道数
check_Result: '不合格', //检测结果
report_State: '未生成', //报告状态
document_State: '未归档', //归档状态
check_State:'检测完成',//检测状态
reCheck_Num: 1, //复检次数
},
]
export default {data,plan_devicedata}

View File

@@ -0,0 +1,423 @@
import type {ErrorSystem} from "@/api/device/interface/error"
const errordata = ref<ErrorSystem.ErrorSystemList[]>([
{
id: '1',
name: 'Q/GDW 1650.2-2016-A',
standard_Name:'Q/GDW 1650.2-2016',
standard_Time:'2016',
dev_Level:'A级',
enable:1,
state:1,
},
{
id: '2',
name: 'Q/GDW 1650.2-2021-A',
standard_Name:'Q/GDW 1650.2-2021',
standard_Time:'2021',
dev_Level:'A级',
enable:1,
state:1,
},
{
id: '3',
name: 'GBT 19862-2016-A',
standard_Name:'GBT 19862-2016',
standard_Time:'2016',
dev_Level:'A级',
enable:1,
state:1,
},
])
const errorADetail = ref<ErrorSystem.Error_detail[]>([
{
col1: '电压偏差',
col2: '',
deviceLevel: 'A',
measurementType:'电压',
condition: '10%~150%标称电压',
maxErrorValue: '±0.1%Un'
},
{
col1:'频率偏差',
col2: '',
deviceLevel: 'A',
measurementType:'频率',
condition: '42.5~57.5 Hz',
maxErrorValue: '±0.01Hz'
},
{
col1:'三相不平衡度',
col2: '',
deviceLevel: 'A',
measurementType:'电压',
condition: '0.5%~5%',
maxErrorValue: '±0.15%'
},
{
col1:'三相不平衡度',
col2: '',
deviceLevel: 'A',
measurementType:'电压',
condition: '5%(不包含)~ 40%',
maxErrorValue: '±0.3%'
},
{
col1:'三相不平衡度',
col2: '',
deviceLevel: 'A',
measurementType:'电流',
condition: '',
maxErrorValue: '±1%'
},
{
col1:'电压波动',
col2: '电压幅值',
deviceLevel: 'A',
measurementType:'电压',
condition: '',
maxErrorValue: '±0.2%Un'
},
{
col1:'电压波动',
col2: '持续时间',
deviceLevel: 'A',
measurementType:'时间',
condition: '',
maxErrorValue: '±1周波'
},
{
col1:'闪变',
col2: '',
deviceLevel: 'A',
measurementType:'短时间闪变',
condition: 'Pst0.2~10',
maxErrorValue: '±5%'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'A',
measurementType:'电压',
condition: 'Uh≥1%Un',
maxErrorValue: '±5%Uh'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'A',
measurementType:'电压',
condition: 'Uh1%Un',
maxErrorValue: '±0.05%Un'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'A',
measurementType:'电流',
condition: 'In≥3%In',
maxErrorValue: '±5%Ih'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'A',
measurementType:'电流',
condition: 'In3%In',
maxErrorValue: '±0.15%In'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'A',
measurementType:'相角',
condition: '',
maxErrorValue: 'h≤5,±1°*h'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'A',
measurementType:'相角',
condition: '',
maxErrorValue: 'h>5,±5°'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'A',
measurementType:'功率',
condition: 'Ph≥150W',
maxErrorValue: '±1%Ph'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'A',
measurementType:'功率',
condition: 'Ph150W',
maxErrorValue: '±1.5W'
},
{
col1:'高频次谐波',
col2: '',
deviceLevel: 'A',
measurementType:'电压',
condition: 'Uh≥1%Un',
maxErrorValue: '±5%Uh'
},
{
col1:'高频次谐波',
col2: '',
deviceLevel: 'A',
measurementType:'电压',
condition: 'Uh1%Un',
maxErrorValue: '±0.05%Un'
},
{
col1:'高频次谐波',
col2: '',
deviceLevel: 'A',
measurementType:'电流',
condition: 'In≥3%In',
maxErrorValue: '±5%Ih'
},
{
col1:'高频次谐波',
col2: '',
deviceLevel: 'A',
measurementType:'电流',
condition: 'In3%In',
maxErrorValue: '±0.15%In'
},
{
col1:'功率',
col2: '',
deviceLevel: 'A',
measurementType:'功率',
condition: '',
maxErrorValue: '±0.5%'
},
{
col1:'电流',
col2: '',
deviceLevel: 'A',
measurementType:'电流',
condition: 'I≥0.05In',
maxErrorValue: '±0.5%'
},
{
col1:'电流',
col2: '',
deviceLevel: 'A',
measurementType:'电流',
condition: '0.01In≤I0.05In',
maxErrorValue: '±1%'
},
{
col1: '电压暂降、电压暂升和短时中断',
col2: '电压幅值',
deviceLevel: 'A',
measurementType:'电压',
condition: '',
maxErrorValue: '±0.2%Un'
},
{
col1: '电压暂降、电压暂升和短时中断',
col2: '持续时间',
deviceLevel: 'A',
measurementType:'时间',
condition: '',
maxErrorValue: '±1周波'
},
])
const errorSDetail = ref<ErrorSystem.Error_detail[]>([
{
col1: '电压偏差',
col2: '',
deviceLevel: 'S',
measurementType:'电压',
condition: '20%~120%标称电压',
maxErrorValue: '±0.5%'
},
{
col1:'频率偏差',
col2: '',
deviceLevel: 'S',
measurementType:'频率',
condition: '42.5~57.5 Hz',
maxErrorValue: '±0.05Hz'
},
{
col1:'三相不平衡度',
col2: '',
deviceLevel: 'S',
measurementType:'电压',
condition: '1%~5%',
maxErrorValue: '±0.2%'
},
{
col1:'三相不平衡度',
col2: '',
deviceLevel: 'S',
measurementType:'电压',
condition: '5%(不包含)~ 40%',
maxErrorValue: '±0.6%'
},
{
col1:'三相不平衡度',
col2: '',
deviceLevel: 'S',
measurementType:'电流',
condition: '',
maxErrorValue: '±1%'
},
{
col1:'电压波动',
col2: '电压幅值',
deviceLevel: 'S',
measurementType:'电压',
condition: '',
maxErrorValue: '±1.0%Un'
},
{
col1:'电压波动',
col2: '持续时间',
deviceLevel: 'S',
measurementType:'时间',
condition: '使用半波刷新方均根值',
maxErrorValue: '±1周波'
},
{
col1:'电压波动',
col2: '持续时间',
deviceLevel: 'S',
measurementType:'时间',
condition: '使用全波刷新方均根值',
maxErrorValue: '±2周波'
},
{
col1:'闪变',
col2: '',
deviceLevel: 'S',
measurementType:'短时间闪变',
condition: 'Pst0.4~4',
maxErrorValue: '±10%'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'S',
measurementType:'电压',
condition: 'Uh≥3%Un',
maxErrorValue: '±5%Uh'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'S',
measurementType:'电压',
condition: 'Uh3%Un',
maxErrorValue: '±0.15%Un'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'S',
measurementType:'电流',
condition: 'In≥10%In',
maxErrorValue: '±5%Ih'
},
{
col1:'谐波和间谐波',
col2: '',
deviceLevel: 'S',
measurementType:'电流',
condition: 'In10%In',
maxErrorValue: '±0.5%In'
},
{
col1:'高频次谐波',
col2: '',
deviceLevel: 'S',
measurementType:'电压',
condition: 'Uh≥3%Un',
maxErrorValue: '±5%Uh'
},
{
col1:'高频次谐波',
col2: '',
deviceLevel: 'S',
measurementType:'电压',
condition: 'Uh3%Un',
maxErrorValue: '±0.15%Un'
},
{
col1:'高频次谐波',
col2: '',
deviceLevel: 'S',
measurementType:'电流',
condition: 'In≥10%In',
maxErrorValue: '±5%Ih'
},
{
col1:'高频次谐波',
col2: '',
deviceLevel: 'S',
measurementType:'电流',
condition: 'In10%In',
maxErrorValue: '±0.5%In'
},
{
col1:'功率',
col2: '',
deviceLevel: 'S',
measurementType:'功率',
condition: '',
maxErrorValue: '±0.5%'
},
{
col1:'电流',
col2: '',
deviceLevel: 'S',
measurementType:'电流',
condition: 'I≥0.05In',
maxErrorValue: '±0.5%'
},
{
col1:'电流',
col2: '',
deviceLevel: 'S',
measurementType:'电流',
condition: '0.01In≤I0.05In',
maxErrorValue: '±1%'
},
{
col1: '电压暂降、电压暂升和短时中断',
col2: '电压幅值',
deviceLevel: 'S',
measurementType:'电压',
condition: '',
maxErrorValue: '±1.0%Un'
},
{
col1: '电压暂降、电压暂升和短时中断',
col2: '持续时间',
deviceLevel: 'S',
measurementType:'时间',
condition: '使用半波刷新方均根值',
maxErrorValue: '±1周波'
},
{
col1: '电压暂降、电压暂升和短时中断',
col2: '持续时间',
deviceLevel: 'S',
measurementType:'时间',
condition: '使用全波刷新方均根值',
maxErrorValue: '±2周波'
},
])
export default {errordata,errorADetail,errorSDetail}

View File

@@ -0,0 +1,36 @@
import type { ErrorSystem } from '@/api/device/interface/error'
import http from '@/api'
/**
* @name 误差体系管理模块
*/
//获取误差体系
export const getPqErrSysList = (params: ErrorSystem.ErrorSystemList) => {
return http.post(`/pqErrSys/list`, params)
}
//根据id查询误差体系
export const getPqErrSysListById = (params: ErrorSystem.ErrorSystemList) => {
return http.get(`/pqErrSys/getById?id=${params.id}`)
}
//添加误差体系
export const addPqErrSys = (params: ErrorSystem.ErrorSystemList) => {
return http.post(`/pqErrSys/add`, params)
}
//编辑误差体系
export const updatePqErrSys = (params: ErrorSystem.ErrorSystemList) => {
return http.post(`/pqErrSys/update`, params)
}
//删除误差体系
export const deletePqErrSys = (params: string[]) => {
return http.post(`/pqErrSys/delete`, params)
}
//复制误差体系
export const copyPqErrSys = (params: ErrorSystem.ErrorSystemList) => {
return http.get(`/pqErrSys/copy?id=${params.id}`)
}

View File

@@ -0,0 +1,38 @@
import type { ICD } from '@/api/device/interface/icd'
import http from '@/api'
import { pa } from 'element-plus/es/locale/index.mjs'
/**
* @name ICD管理模块
*/
//获取ICD分页
export const getICDList = (params: ICD.ReqICDParams) => {
return http.post(`/icd/list`,params)
}
//获取ICD
export const getICDAllList = (params: ICD.ResICD) => {
return http.get(`/icd/listAll`,params)
}
//添加ICD
export const addICD = (params: ICD.ResICD) => {
return http.post(`/icd/add`, params)
}
//编辑ICD
export const updateICD = (params: ICD.ResICD) => {
return http.post(`/icd/update`, params)
}
//删除ICD
export const deleteICD = (params: string[]) => {
return http.post(`/icd/delete`, params)
}

View File

@@ -0,0 +1,15 @@
import type { ReqPage,ResPage } from '@/api/interface'
// 被检设备模块
export namespace controlSource {
/**
* 被检设备新增、修改、根据id查询返回的对象
*/
export interface ResControl {
userPageId: string;
scriptId: string;
scriptIndex: number;
sourceId: string;
}
}

View File

@@ -0,0 +1,40 @@
import type { ReqPage, ResPage } from '@/api/interface'
// 设备类型模块
export namespace DevType {
/**
* 设备类型数据表格分页查询参数
*/
export interface ReqPqDevTypeParams extends ReqPage {
id: string; // 装置序号id 必填
devType?: string; // 设备名称
createTime?: string; //创建时间
}
/**
* 设备类型新增、修改、根据id查询返回的对象
*/
export interface ResPqDevType {
id: string; //设备类型ID
name: string;//设备类型名称
icd: string| null;//设备关联的ICD
power: string| null;//工作电源
devVolt: number; //额定电压V
devCurr: number; //额定电流A
devChns: number; //设备通道数
reportName: string| null;//报告模版名称
state: number;
createBy?: string| null; //创建用户
createTime?: string| null; //创建时间
updateBy?: string| null; //更新用户
updateTime?: string| null; //更新时间
}
/**
* 设备类型表格查询分页返回的对象;
*/
export interface ResPqDevTypePage extends ResPage<ResPqDevType> {
}
}

View File

@@ -0,0 +1,93 @@
import type {ReqPage, ResPage} from '@/api/interface'
// 被检设备模块
export namespace Device {
/**
* 被检设备表格分页查询参数
*/
export interface ReqPqDevParams extends ReqPage {
id: string; // 装置序号id 必填
name: string; //设备名称
devType?: string; // 设备名称
createTime?: string; //创建时间
pattern: string;
}
/**
* 被检设备表格分页查询参数
*/
export interface ReqDevReportParams extends ReqPage {
planId?: string; // 计划id
devId?: string; // 装置id
scriptId?: string; // 脚本id
planCode?: string;
devIdList?: string[]; // 装置id列表
}
/**
* 被检设备新增、修改、根据id查询返回的对象
*/
export interface ResPqDev {
id: string; //装置序号ID
name: string; //设备名称
pattern: string; //设备模式 模拟 数字 比对
devType: string;//设备类型
devChns: number; //设备通道数
devVolt: number; //额定电压V
devCurr: number; //额定电流A
manufacturer?: string | null;//生产厂家
createDate: string; //生产日期
createId: string; //出厂编号
hardwareVersion: string; //固件版本
softwareVersion: string; //软件版本
protocol: string; //通讯协议
ip: string; //IP地址
port: number; //端口号
encryptionFlag: number; //装置是否为加密版本
series?: string | null; //装置识别码3ds加密
devKey?: string | null; //装置秘钥3ds加密
sampleId?: string | null; //样品编号
arrivedDate?: string; //送样日期
cityName?: string | null; //所属地市名称
gDName?: string | null; //所属供电公司名称
subName?: string | null; //所属电站名称
checkState?: number | null; //检测状态
checkResult?: number | null; //检测结果
reportState?: number | null; //报告状态
reportPath?: string | null; //报告路径
qRCode?: string | null; //设备关键信息二维码
reCheckNum: number; //复检次数
planId?: string;//检测计划Id
timeCheckResult?: number;//守时检测结果(0:不符合1:符合)
factorFlag?: number;//是否支持系数校准(0:不支持,1:支持)
factorCheckResult?: number;//系数校准结果(0:不合格1:合格2/表示没有做系数校准)
state: number; //状态
createBy?: string | null; //创建用户
createTime?: string | null; //创建时间
updateBy?: string | null; //更新用户
updateTime?: string | null; //更新时间
icdId: string | null;
power: string | null;//工作电源
preinvestmentPlan: string | null;
}
export interface ResDev {
id: string;
name: string,
icd: string,
power: string,
devVolt: number,
devCurr: number,
devChns: number,
}
/**
* 被检设备表格查询分页返回的对象;
*/
export interface ResPqDevPage extends ResPage<ResPqDev> {
}
}

View File

@@ -0,0 +1,50 @@
import type { ReqPage } from "@/api/interface";
// 误差体系模块
export namespace ErrorSystem {
// 误差体系列表
export interface ErrorSystemList {
id: string;//误差体系表Id
name: string;//误差体系名称
standardName:string;//参照标准名称
standardTime:string;//标准推行时间
devLevel:string;//使用设备等级
enable:number;//状态0-不启用 1-启用
state:number;//0-删除 1-正常
createBy?:string;//创建用户
createTime?:string;//创建时间
updateBy?:string;//修改用户
updateTime?:string;//修改时间
pqErrSysDtlsList?: ErrorSystemDetail[];//误差体系子表列表
}
// 查看详细误差体系
export interface ErrorSystemDetail {
sort: number;
id:string;//误差体系子表ID
errorSysId:string;//所属误差体系ID
errorType: string;//误差类型,树形字典表(没有树形表则需要拆分字段)
scriptType: string;//脚本类型
startValue?:number | null;//误差判断起始值(误差范围)
startFlag?:number;//是否包含起始值
endValue?:number | null;//;误差判断结束值(误差范围)
endFlag?:number;//是否包含结束值
conditionType?:string;//判断条件值类型(包括值类型,绝对值、相对值)
maxErrorValue:number;//误差最大值
errorValueType:any;//误差值类型0标称值、1标准值、2值类型
valueType:number;//值类型1绝对值、2相对值
errorUnit:string;//误差单位
}
//查看详细误差体系
export interface Error_detail {
col1: string;
col2: string;
deviceLevel: string;
measurementType:string;
condition: string;
maxErrorValue: string;
}
}

View File

@@ -0,0 +1,35 @@
import type { ReqPage, ResPage } from '@/api/interface'
// ICD模块
export namespace ICD {
/**
* ICD表格分页查询参数
*/
export interface ReqICDParams extends ReqPage {
id: string; // 装置序号id 必填
devType?: string; // 设备名称
createTime?: string; //创建时间
}
/**
* ICD新增、修改、根据id查询返回的对象
*/
export interface ResICD {
id: string; //icdID
name: string;//icd名称
path: string;//icd存储地址
state: number;
createBy?: string| null; //创建用户
createTime?: string| null; //创建时间
updateBy?: string| null; //更新用户
updateTime?: string| null; //更新时间
}
/**
* ICD表格查询分页返回的对象
*/
export interface ResICDPage extends ResPage<ResICD> {
}
}

View File

@@ -1,68 +0,0 @@
import type { ReqPage } from '@/api/interface'
// 被检设备模块
export namespace Device {
// 被检设备列表
export interface ResDeviceList {
id: string; //被检设备ID
deviceName: string; //检测设备名称
deviceType: string; //检测设备类型
deviceChannels: string;//设备通道数
PlanName: string; //所属计划名称
deviceUn: string; //设备额定电压
deviceIn: string; //设备额定电流
deviceCompany: string;//设备厂家
deviceModel: string; //设备模式 模拟 数字 比对
}
// 被检设备参数
export interface ReqDeviceParams extends ReqPage {
id: string; //被检设备ID
deviceName: string; //检测设备名称
deviceType: string; //检测设备类型
deviceChannels: string;//设备通道数
PlanName: string; //所属计划名称
deviceUn: string; //设备额定电压
deviceIn: string; //设备额定电流
deviceCompany: string;//设备厂家
deviceModel: string; //设备模式 模拟 数字 比对
}
// 被检设备列表
export interface DeviceList {
id: string; //装置序号ID
name: string; //设备名称
pattern?: string; //设备模式 模拟 数字 比对
dev_Type: string;//设备类型
dev_Chns: number; //设备通道数
dev_Volt?: number; //额定电压V
dev_Curr?: number; //额定电流A
manufacturer?: string;//生产厂家
createDate?: string; //生产日期
createId?: string; //出厂编号
hardware_Version?: string; //固件版本
software_Version?: string; //软件版本
iP?: string; //IP地址
port?: number; //端口号
isEncryption?: string; //装置是否为加密版本
series?: string; //装置识别码3ds加密
dev_Key?: string; //装置秘钥3ds加密
sampleID?: string; //样品编号
arrived_Date?: string; //送样日期
city_Name?: string; //所属地市名称
gD_Name?: string; //所属供电公司名称
sub_Name?: string; //所属电站名称
check_State: string; //检测状态
check_Result: string; //检测结果
report_State: string; //报告状态
document_State: string; //归档状态
reCheck_Num: number; //复检次数
state?: number; //状态
create_By?: string; //创建用户
create_Time?: string; //创建时间
update_By?: string; //更新用户
update_Time?: string; //更新时间
}
}

View File

@@ -0,0 +1,35 @@
import type { ReqPage, ResPage } from '@/api/interface'
// 被检设备模块
export namespace Monitor {
/**
* 电能质量指标字典数据表格分页查询参数
*/
export interface ReqPqMonParams extends ReqPage {
id: string; // 装置序号id 必填
devType?: string; // 设备名称
createTime?: string; //创建时间
}
/**
* 被检设备新增、修改、根据id查询返回的对象
*/
export interface ResPqMon {
id: string; //监测点ID
code: string; //默认与谐波系统监测点ID相同
devId: string; //所属设备ID
name: string; //所属母线
num: number; //监测点序号
pt: number; //PT变比
ct: number; //CT变比
ptType: string; //接线方式,字典表
}
/**
* 被检设备表格查询分页返回的对象;
*/
export interface ResPqMonPage extends ResPage<ResPqMon> {
}
}

View File

@@ -0,0 +1,39 @@
import type { ReqPage, ResPage } from '@/api/interface'
import type { UploadFile } from 'element-plus';
// 报告模版接口
export namespace PqReport {
/**
* 报告模版表格分页查询参数
*/
export interface ReqReportParams extends ReqPage {
id: string; // 装置序号id 必填
name?: string; // 设备名称
createTime?: string; //创建时间
}
/**
* 报告模版新增、修改、根据id查询返回的对象
*/
export interface ResReport {
id: string; //报告模板id
name: string;//报告模板名称
version:string;//版本号
baseFile?:string;//基础模板文件路径
detailFile?:string;//检测项模版文件路径
description:string;//描述信息
state:number;//状态:8-删除 1-正常
createBy?: string| null; //创建用户
createTime?: string| null; //创建时间
updateBy?: string| null; //更新用户
updateTime?: string| null; //更新时间
}
/**
* 报告模版表格查询分页返回的对象;
*/
export interface ResReportPage extends ResPage<ResReport> {
}
}

View File

@@ -0,0 +1,38 @@
import type { ReqPage, ResPage } from '@/api/interface'
// 检测脚本模块
export namespace TestScript {
/**
* 检测脚本表格分页查询参数
*/
export interface ReqTestScriptParams extends ReqPage {
id: string // 装置序号id 必填
name: string
type: string
pattern: string
}
// 检测脚本接口
export interface ResTestScript {
id?: string //检测脚本ID
name: string //检测脚本名称
type: string //设定0为脚本1为模板
pattern: string //检测脚本模式(字典表Code字段数字、模拟、比对)
valueType?: string //脚本值类型(字典表Code字段相对值脚本、绝对值脚本、无)
standardName: string //参照标准名称
standardTime: string //标准推行时间
state?: number //
createBy?: string
createTime?: string
updateBy?: string
updateTime?: string
selectedValue?: string
ratedCurr?: number
ratedVolt?: number
}
/**
* 检测脚本查询分页返回的对象;
*/
export interface ResTestScriptPage extends ResPage<ResTestScript> {}
}

View File

@@ -0,0 +1,44 @@
import type { ReqPage, ResPage } from '@/api/interface'
// 检测源模块
export namespace TestSource {
/**
* 检测脚本表格分页查询参数
*/
export interface ReqTestSourceParams extends ReqPage{
id: string; // 装置序号id 必填
name: string;
pattern: string;
}
// 检测源接口
export interface ResTestSource {
id: string; //检测源ID
name?: string; //检测源名称(检测源类型 + 设备类型 + 数字自动生成)
pattern: string;//检测源模式(字典表Code字段数字、模拟、比对)
type: string; //检测源类型(字典表Code字段标准源、高精度设备)
devType: string;//检测源设备类型(字典表Code字段)
parameter?: string;//源参数JSON字符串
state:number;//
createBy?: string;
createTime?: string;
updateBy?: string;
updateTime?: string;
}
/* 检测脚本查询分页返回的对象;
*/
export interface ResTestSourcePage extends ResPage<ResTestSource> {
}
export interface ParameterType{
id:string;
type:string;
desc:string;
value:string|null;
sort:number;
pId:string;
children?:ParameterType[];
}
}

View File

@@ -0,0 +1,28 @@
import type { Monitor } from '@/api/device/interface/monitor'
import http from '@/api'
/**
* @name 监测点管理模块
*/
//获取监测点
export const getPqMonList = (params: Monitor.ReqPqMonParams) => {
//return http.post(`/pqMon/list`, params)
}
//添加监测点
export const addPqMon = (params: Monitor.ResPqMon) => {
//return http.post(`/pqMon/add`, params)
}
//编辑监测点
export const updatePqMon = (params: Monitor.ResPqMon) => {
//return http.post(`/pqMon/update`, params)
}
//删除监测点
export const deletePqMon = (params: string[]) => {
//return http.post(`/pqMon/delete`, params)
}

View File

@@ -0,0 +1,42 @@
import type {PqReport} from '@/api/device/interface/report'
import http from '@/api'
/**
* @name 报告模版模块
*/
//获取报告模版
export const getPqReportList = (params: PqReport.ReqReportParams) => {
return http.post(`/report/list`, params)
}
//新增报告模版
export const addPqReport = (params: PqReport.ResReport) => {
return http.upload(`/report/add`, params)
}
//删除报告模版
export const deletePqReport = (params: string[]) => {
return http.post(`/report/delete`, params)
}
//查询报告模板详情
export const getPqReportById = (params: PqReport.ResReport) => {
return http.get(`/report/getById?id=${params.id}`)
}
//修改报告模板
export const updatePqReport = (params: PqReport.ResReport) => {
return http.upload(`/report/update`, params)
}
//查询所有报告模板名称
export const getPqReportAllName = () => {
return http.get(`/report/listAllName`)
}
//根据名称查询指定报告模板的所有版本
export const getPqReportAllVersion = (params:any) => {
return http.get(`/report/listAllVersion?name=${params.name}`)
}

View File

@@ -0,0 +1,53 @@
import type { TestScript } from '@/api/device/interface/testScript'
import http from '@/api'
import { Loading } from '@element-plus/icons-vue'
/**
* @name 检测脚本管理模块
*/
// 新增脚本
export const pqScriptAdd = (params: TestScript.ResTestScript) => {
return http.post(`/pqScript/add`, params)
}
// 修改脚本
export const pqScriptUpdate = (params: TestScript.ResTestScript) => {
return http.post(`/pqScript/update`, params)
}
// 获取检测脚本列表
export const getPqScriptList = (params: TestScript.ReqTestScriptParams) => {
return http.post(`/pqScript/list`, params)
}
//升级为模版
export const updatePqScript = (params: TestScript.ResTestScript) => {
return http.get(`/pqScript/upgradeToTemplate?id=${params.id}`)
}
//删除检测脚本
export const deletePqScript = (params: string[]) => {
return http.post(`/pqScript/delete`, params)
}
//添加检测脚本
export const addScriptDtls = (params: any) => {
return http.post(`/pqScript/addScriptDtls`, params)
}
//根据脚本id查询检测脚本详情
export const dlsDetails = (params: any) => {
return http.post(`/pqScript/dlsDetails`, params)
}
// 删除脚本
export const deleteDtls = (params: any) => {
return http.post(`/pqScript/deleteDtls`, params)
}
// 启用关闭脚本
export const updateDtls = (params: any) => {
return http.post(`/pqScript/updateDtls`, params)
}
// 根据通讯参数生成装置下发原始数据公式
export const scriptDtlsCheckDataList = (params: any) => {
return http.post(`/pqScript/scriptDtlsCheckDataList`, params,{loading: false})
}
// 通讯脚本回显
export const checkDataList = (params: any) => {
return http.post(`/pqScript/checkDataList`, params, { loading: true })
}

View File

@@ -0,0 +1,31 @@
import type { ResPage } from '@/api/interface'
import type { TestSource } from '@/api/device/interface/testSource'
import http from '@/api'
/**
* @name 检测源管理模块
*/
// 获取检测源列表
export const getTestSourceList = (params: TestSource.ReqTestSourceParams) => {
return http.post(`/pqSource/list`, params)
}
//根据id查询检测源
export const getTestSourceById = (params: TestSource.ResTestSource) => {
return http.get(`/pqSource/getById?id=${params.id}`)
}
//添加检测源
export const addTestSource = (params: TestSource.ResTestSource) => {
return http.post(`/pqSource/add`, params)
}
//编辑检测源
export const updateTestSource = (params: TestSource.ResTestSource) => {
return http.post(`/pqSource/update`, params)
}
//删除检测源
export const deleteTestSource = (params: string[]) => {
return http.post(`/pqSource/delete`, params)
}

View File

@@ -1,212 +0,0 @@
import type {ErrorSystem} from "./interface"
const errordata = ref<ErrorSystem.ErrorSystemList[]>([
{
id: '1',
name: 'Q/GDW 1650.2-2016-A',
standard_Name:'Q/GDW 1650.2-2016',
standard_Time:'2016',
dev_Level:'A级',
enable:1,
state:1,
},
{
id: '2',
name: 'Q/GDW 1650.2-2021-A',
standard_Name:'Q/GDW 1650.2-2021',
standard_Time:'2021',
dev_Level:'A级',
enable:1,
state:1,
},
{
id: '3',
name: 'GBT 19862-2016-A',
standard_Name:'GBT 19862-2016',
standard_Time:'2016',
dev_Level:'A级',
enable:1,
state:1,
},
])
const errordetail = ref<ErrorSystem.Error_detail[]>([
{
measured: '电压偏差',
deviceLevel: 'A',
measurementType:'电压',
condition: '10%~150%标称电压',
maxErrorValue: '±0.1%Un'
},
{
measured: '频率偏差',
deviceLevel: 'A',
measurementType:'频率',
condition: '42.5~57.5 Hz',
maxErrorValue: '±0.01Hz'
},
{
measured: '三相不平衡度',
deviceLevel: 'A',
measurementType:'电压',
condition: '0.5%~5%',
maxErrorValue: '±0.15%'
},
{
measured: '三相不平衡度',
deviceLevel: 'A',
measurementType:'电压',
condition: '5%(不包含)~ 40%',
maxErrorValue: '±0.3%'
},
{
measured: '三相不平衡度',
deviceLevel: 'A',
measurementType:'电流',
condition: '',
maxErrorValue: '±1%'
},
{
measured: '电压波动幅值',
deviceLevel: 'A',
measurementType:'电压',
condition: '',
maxErrorValue: '±0.2%Un'
},
{
measured: '电压波动持续时间',
deviceLevel: 'A',
measurementType:'时间',
condition: '',
maxErrorValue: '±1周波'
},
{
measured: '闪变',
deviceLevel: 'A',
measurementType:'短时间闪变',
condition: 'Pst0.2~10',
maxErrorValue: '±5%'
},
{
measured: '谐波和间谐波',
deviceLevel: 'A',
measurementType:'电压',
condition: 'Uh≥1%Un',
maxErrorValue: '±5%Uh'
},
{
measured: '谐波和间谐波',
deviceLevel: 'A',
measurementType:'电压',
condition: 'Uh1%Un',
maxErrorValue: '±0.05%Un'
},
{
measured: '谐波和间谐波',
deviceLevel: 'A',
measurementType:'电流',
condition: 'In≥3%In',
maxErrorValue: '±5%Ih'
},
{
measured: '谐波和间谐波',
deviceLevel: 'A',
measurementType:'电流',
condition: 'In3%In',
maxErrorValue: '±0.15%In'
},
{
measured: '谐波和间谐波',
deviceLevel: 'A',
measurementType:'相角',
condition: '',
maxErrorValue: 'h≤5,±1°*h'
},
{
measured: '谐波和间谐波',
deviceLevel: 'A',
measurementType:'相角',
condition: '',
maxErrorValue: 'h>5,±5°'
},
{
measured: '谐波和间谐波',
deviceLevel: 'A',
measurementType:'功率',
condition: 'Ph≥150W',
maxErrorValue: '±1%Ph'
},
{
measured: '谐波和间谐波',
deviceLevel: 'A',
measurementType:'功率',
condition: 'Ph150W',
maxErrorValue: '±1.5W'
},
{
measured: '高频次谐波',
deviceLevel: 'A',
measurementType:'电压',
condition: 'Uh≥1%Un',
maxErrorValue: '±5%Uh'
},
{
measured: '高频次谐波',
deviceLevel: 'A',
measurementType:'电压',
condition: 'Uh1%Un',
maxErrorValue: '±0.05%Un'
},
{
measured: '高频次谐波',
deviceLevel: 'A',
measurementType:'电流',
condition: 'In≥3%In',
maxErrorValue: '±5%Ih'
},
{
measured: '高频次谐波',
deviceLevel: 'A',
measurementType:'电流',
condition: 'In3%In',
maxErrorValue: '±0.15%In'
},
{
measured: '功率',
deviceLevel: 'A',
measurementType:'功率',
condition: '',
maxErrorValue: '±0.5%'
},
{
measured: '电流',
deviceLevel: 'A',
measurementType:'电流',
condition: 'I≥0.05In',
maxErrorValue: '±0.5%'
},
{
measured: '电流',
deviceLevel: 'A',
measurementType:'电流',
condition: '0.01In≤I0.05In',
maxErrorValue: '±1%'
},
{
measured: '暂态电压幅值',
deviceLevel: 'A',
measurementType:'电压',
condition: '',
maxErrorValue: '±0.2%Un'
},
{
measured: '暂态持续时间',
deviceLevel: 'A',
measurementType:'时间',
condition: '',
maxErrorValue: '±1周波'
},
])
export default {errordata,errordetail}

View File

@@ -1,41 +0,0 @@
// 误差体系模块
export namespace ErrorSystem {
// 误差体系列表
export interface ErrorSystemList {
id: string;//误差体系表Id
name: string;//误差体系名称
standard_Name:string;//参照标准名称
standard_Time:string;//标准推行时间
dev_Level:string;//使用设备等级
enable?:number;//状态0-不启用 1-启用
state:number;//0-删除 1-正常
create_By?:string;//创建用户
create_Time?:string;//创建时间
update_By?:string;//修改用户
update_Time?:string;//修改时间
}
// 查看详细误差体系
export interface ErrorSystemDetail {
id:string;//误差体系子表ID
error_Sys_Id:string;//所属误差体系ID
type: string;//检测脚本类型,树形字典表(没有树形表则需要拆分字段)
JudgeConditionStart?:number;//误差判断起始值(误差范围)
IsContainStart?:number;//是否包含起始值
JudgeConditionEnd?:number;//误差判断结束值(误差范围)
IsContainEnd?:number;//是否包含结束值
JudgeConditionType?:string;//判断条件值类型(包括值类型,绝对值、相对值)
MaxErrorValue:number;//误差最大值
ErrorValueType:string;//误差值类型包括值类型绝对值、相对值1、相对值2
}
// 查看详细误差体系
export interface Error_detail {
measured: string;
deviceLevel: string;
measurementType:string;
condition: string;
maxErrorValue: string;
}
}

View File

@@ -1,265 +0,0 @@
import type { Function } from "./interface"
export const functionList : Function.ResFunction[] = [
{
'id': '1',
'pid':'0',
'pids':'',
'name': '检测计划',
'code':'route',
'path':'/plan/planList/index',
'icon':'',
'sort':100,
'type':0,
'remark': '检测计划描述',
'state':1,
},
{
id: '2',
pid:'0',
pids:'',
name: '台账管理',
code:'route',
path:'/machine',
icon:'',
sort:100,
type:0,
remark: '台账管理描述',
state:1,
children:[{
id: '21',
pid:'11',
pids:'',
name: '检测脚本',
code:'route',
path:'/machine/testScript/index',
icon:'',
sort:100,
type:1,
remark: '检测脚本描述',
state:1,
},
{
id: '22',
pid:'22',
pids:'',
name: '被检设备',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:1,
remark: '被检设备描述',
state:1,
},
{
id: '23',
pid:'23',
pids:'',
name: '误差体系',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:1,
remark: '误差体系描述',
state:1,
},
{
id: '24',
pid:'24',
pids:'',
name: '检测源',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:1,
remark: '检测源描述',
state:1,
}]
},
{
id: '3',
pid:'0',
pids:'',
name: '权限管理',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '权限管理描述',
state:1,
children:[{
id: '31',
pid:'1',
pids:'',
name: '用户管理',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '用户管理描述',
state:1,
},
{
id: '32',
pid:'2',
pids:'',
name: '角色管理',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '角色管理描述',
state:1,
},
{
id: '33',
pid:'3',
pids:'',
name: '菜单管理',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '菜单管理描述',
state:1,
}]
},
{
id: '4',
pid:'0',
pids:'',
name: '系统配置',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '系统配置描述',
state:1,
children:[{
id: '41',
pid:'1',
pids:'',
name: '通用配置',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '通用配置描述',
state:1,
},
{
id: '42',
pid:'2',
pids:'',
name: '数据字典',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '数据字典描述',
state:1,
},
{
id: '43',
pid:'3',
pids:'',
name: '报告模版',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '报告模版描述',
state:1,
},
{
id: '44',
pid:'4',
pids:'',
name: '版本注册',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '版本注册描述',
state:1,
},]
},
{
id: '5',
pid:'0',
pids:'',
name: '日志管理',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '日志管理描述',
state:1,
},
{
id: '6',
pid:'0',
pids:'',
name: '统计分析',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '统计分析描述',
state:1,
},
{
id: '7',
pid:'0',
pids:'',
name: '示例',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '示例描述',
state:0,
children:[{
id: '71',
pid:'1',
pids:'',
name: '普通表格',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '普通表格描述',
state:0,
},
{
id: '71',
pid:'1',
pids:'',
name: '表格树',
code:'route',
path:'/plan/planList/index',
icon:'',
sort:100,
type:0,
remark: '表格树描述',
state:0,
}]
},
]

View File

@@ -1,26 +0,0 @@
import http from "@/api";
import { ADMIN as rePrefix } from "@/api/config/serviceName";
import type { Function } from "@/api/function/interface";
//获取菜单列表
export const getFunctionList = (params: Function.ReqFunctionParams) => {
return http.post(`${rePrefix}/function/list`, params);
};
//添加菜单列表
export const addFunction = (params: Function.ReqFunctionParams) => {
return http.post(`${rePrefix}/function/add`,params);
};
//删除菜单列表
export const deleteFunction = (params: { id: string[] }) => {
return http.post(`${rePrefix}/function/delete`, { data: params });
};
//编辑菜单列表
export const updateFunction = (params: Function.ReqFunctionParams) => {
return http.post(`${rePrefix}/function/update`, params);
};

View File

@@ -10,9 +10,9 @@ export const checkStatus = (status: number) => {
case 400: case 400:
ElMessage.error("请求失败!请您稍后重试"); ElMessage.error("请求失败!请您稍后重试");
break; break;
case 401: // case 401:
ElMessage.error("登录失效!请您重新登录"); // ElMessage.error("登录失效!请您重新登录");
break; // break;
case 403: case 403:
ElMessage.error("当前账号无权限访问!"); ElMessage.error("当前账号无权限访问!");
break; break;

View File

@@ -0,0 +1,6 @@
import http from "@/api";
//系数校准发送基本信息
export const getCoefficientCheck = (params: any) => {
return http.post(`/prepare/coefficientCheck`, params,{loading: false})
}

View File

@@ -0,0 +1,31 @@
// 系数校准模块
export namespace ChannelsTest {
// 系数校准列表
export interface CoefficientVO {
devName?: string;//设备名称
type?:string;//区分大小电压
monitorNum: string;//监测点序号
desc: string;//描述
aVuData:string;//电压通道A数据
aVuXi:string;//电压通道A系数
bVuData:string;//电压通道B数据
bVuXi:string;//电压通道B系数
cVuData:string;//电压通道C数据
cVuXi:string;//电压通道C系数
aIeData:string;//电流通道A数据
aIeXi:string;//电流通道A系数
bIeData:string;//电流通道B数据
bIeXi:string;//电流通道B系数
cIeData:string;//电流通道C数据
cIeXi:string;//电流通道C系数
loading: boolean;
aV:string;
bV:string;
cV:string;
aI:string;
bI:string;
cI:string;
}
}

View File

@@ -1,12 +1,14 @@
import axios, { AxiosInstance, AxiosError, AxiosRequestConfig, InternalAxiosRequestConfig, AxiosResponse } from "axios"; import { ElMessage, ElTreeSelect } from 'element-plus';
import { showFullScreenLoading, tryHideFullScreenLoading } from "@/components/Loading/fullScreen"; import axios, { AxiosInstance, AxiosError, AxiosRequestConfig, InternalAxiosRequestConfig, AxiosResponse } from 'axios'
import { LOGIN_URL } from "@/config"; import { showFullScreenLoading, tryHideFullScreenLoading } from '@/components/Loading/fullScreen'
import { ElMessage } from "element-plus"; import { LOGIN_URL } from '@/config'
import { ResultData } from "@/api/interface"; import { ElMessage } from 'element-plus'
import { ResultEnum } from "@/enums/httpEnum"; import { ResultData } from '@/api/interface'
import { checkStatus } from "./helper/checkStatus"; import { ResultEnum } from '@/enums/httpEnum'
import { useUserStore } from "@/stores/modules/user"; import { checkStatus } from './helper/checkStatus'
import router from "@/routers"; import { useUserStore } from '@/stores/modules/user'
import router from '@/routers'
import {refreshToken} from '@/api/user/login'
export interface CustomAxiosRequestConfig extends InternalAxiosRequestConfig { export interface CustomAxiosRequestConfig extends InternalAxiosRequestConfig {
loading?: boolean; loading?: boolean;
@@ -20,14 +22,15 @@ const config = {
// 跨域时候允许携带凭证 // 跨域时候允许携带凭证
withCredentials: true, withCredentials: true,
// post请求指定数据类型以及编码 // post请求指定数据类型以及编码
headers: { 'Content-Type': 'application/json;charset=utf-8' } headers: { 'Content-Type': 'application/json;charset=utf-8' },
}; }
class RequestHttp { class RequestHttp {
service: AxiosInstance; service: AxiosInstance
public constructor(config: AxiosRequestConfig) { public constructor(config: AxiosRequestConfig) {
// 创建实例 // 创建实例
this.service = axios.create(config); this.service = axios.create(config)
/** /**
* @description 请求拦截器 * @description 请求拦截器
@@ -36,77 +39,152 @@ class RequestHttp {
*/ */
this.service.interceptors.request.use( this.service.interceptors.request.use(
(config: CustomAxiosRequestConfig) => { (config: CustomAxiosRequestConfig) => {
const userStore = useUserStore(); isFirst = true
const userStore = useUserStore()
// 当前请求不需要显示 loading在 api 服务中通过指定的第三个参数: { loading: false } 来控制 // 当前请求不需要显示 loading在 api 服务中通过指定的第三个参数: { loading: false } 来控制
config.loading ?? (config.loading = true); config.loading ?? (config.loading = true)
config.loading && showFullScreenLoading(); config.loading && showFullScreenLoading()
if (config.headers && typeof config.headers.set === "function") { if (config.headers && typeof config.headers.set === 'function') {
config.headers.set("x-access-token", userStore.token); config.headers.set('Authorization', 'Bearer ' + userStore.accessToken)
config.headers.set('Is-Refresh-Token', userStore.isRefreshToken+"")
} }
return config; return config
}, },
(error: AxiosError) => { (error: AxiosError) => {
return Promise.reject(error); return Promise.reject(error)
} },
); )
let isFirst = true
/** /**
* @description 响应拦截器 * @description 响应拦截器
* 服务器换返回信息 -> [拦截统一处理] -> 客户端JS获取到信息 * 服务器换返回信息 -> [拦截统一处理] -> 客户端JS获取到信息
*/ */
this.service.interceptors.response.use( this.service.interceptors.response.use(
(response: AxiosResponse) => { async (response: AxiosResponse) => {
const { data } = response; const { data } = response
const userStore = useUserStore(); const userStore = useUserStore()
tryHideFullScreenLoading(); tryHideFullScreenLoading()
if(data.code === ResultEnum.ACCESSTOKEN_EXPIRED){
// 用长token去换短token
userStore.setAccessToken(userStore.refreshToken)
userStore.setIsRefreshToken(true)
const result = await refreshToken()
if (result) { //获取新token成功的话
// 有新的token后重新请求
userStore.setAccessToken(result.data.accessToken)
userStore.setRefreshToken(result.data.refreshToken)
userStore.setIsRefreshToken(false)
userStore.setExp(1000 * 60 * 60 * 24 * 30)
response.config.headers.Authorization = `Bearer ${result.data.accessToken}`//重新请求前需要将更新后的新token更换掉之前无效的token,不然会死循环
const resp = await this.service.request(response.config)
return resp
} else {
// 刷新失效,跳转登录页
}
}
// 登陆失效 // 登陆失效
if (data.code == ResultEnum.OVERDUE) { if (data.code === ResultEnum.OVERDUE) {
userStore.setToken(""); console.log("登陆失效")
router.replace(LOGIN_URL); userStore.setAccessToken('')
ElMessage.error(data.message); userStore.setRefreshToken('')
return Promise.reject(data); userStore.setIsRefreshToken(false)
userStore.setUserInfo({ id:'',name: '' })
userStore.setExp(0)
await router.replace(LOGIN_URL)
if(isFirst){//临时处理token失效弹窗多次
ElMessage.error(data.message)
isFirst = false
}
return Promise.reject(data)
} }
// 全局错误信息拦截(防止下载文件的时候返回数据流,没有 code 直接报错) // 全局错误信息拦截(防止下载文件的时候返回数据流,没有 code 直接报错)
if (data.code && data.code !== ResultEnum.SUCCESS) { if (data.code && data.code !== ResultEnum.SUCCESS) {
ElMessage.error(data.message); if(data.message.includes('&')){
return Promise.reject(data); let formattedMessage = data.message.split('&').join('<br>');
if (data.message.includes(':')) {
formattedMessage = formattedMessage.replace(':', '')
}
ElMessage.error({ message: formattedMessage, dangerouslyUseHTMLString: true });
return Promise.reject(data)
}
ElMessage.error(data.message)
return Promise.reject(data)
} }
// 成功请求(在页面上除非特殊情况,否则不用处理失败逻辑) // 成功请求(在页面上除非特殊情况,否则不用处理失败逻辑)
return data;
if (userStore.exp <= Date.now() && userStore.exp !== 0) {
userStore.setAccessToken('')
userStore.setRefreshToken('')
userStore.setIsRefreshToken(false)
userStore.setUserInfo({ id:'',name: '' })
userStore.setExp(0)
ElMessage.error('登录已过期,请重新登录!')
await router.replace(LOGIN_URL)
return Promise.reject(data)
}
return data
}, },
async (error: AxiosError) => { async (error: AxiosError) => {
const { response } = error; const { response } = error
tryHideFullScreenLoading(); tryHideFullScreenLoading()
console.log('error', error.message)
// 请求超时 && 网络错误单独判断,没有 response // 请求超时 && 网络错误单独判断,没有 response
if (error.message.indexOf("timeout") !== -1) ElMessage.error("请求超时!请您稍后重试"); if (error.message.indexOf('timeout') !== -1) ElMessage.error('请求超时!请您稍后重试')
if (error.message.indexOf("Network Error") !== -1) ElMessage.error("网络错误!请您稍后重试"); if (error.message.indexOf('Network Error') !== -1) ElMessage.error('网络错误!请您稍后重试')
// 根据服务器响应的错误状态码,做不同的处理 // 根据服务器响应的错误状态码,做不同的处理
if (response) checkStatus(response.status); if (response) checkStatus(response.status)
// 服务器结果都没有返回(可能服务器错误可能客户端断网),断网处理:可以跳转到断网页面 // 服务器结果都没有返回(可能服务器错误可能客户端断网),断网处理:可以跳转到断网页面
if (!window.navigator.onLine) router.replace("/500"); if (!window.navigator.onLine) router.replace('/500')
return Promise.reject(error); return Promise.reject(error)
} },
); )
} }
/** /**
* @description 常用请求方法封装 * @description 常用请求方法封装
*/ */
get<T>(url: string, params?: object, _object = {}): Promise<ResultData<T>> { get<T>(url: string, params?: object, _object = {}): Promise<ResultData<T>> {
return this.service.get(url, { params, ..._object }); return this.service.get(url, { params, ..._object })
} }
post<T>(url: string, params?: object | string, _object = {}): Promise<ResultData<T>> { post<T>(url: string, params?: object | string, _object = {}): Promise<ResultData<T>> {
return this.service.post(url, params, _object); return this.service.post(url, params, _object)
} }
put<T>(url: string, params?: object, _object = {}): Promise<ResultData<T>> { put<T>(url: string, params?: object, _object = {}): Promise<ResultData<T>> {
return this.service.put(url, params, _object); return this.service.put(url, params, _object)
} }
delete<T>(url: string, params?: any, _object = {}): Promise<ResultData<T>> { delete<T>(url: string, params?: any, _object = {}): Promise<ResultData<T>> {
return this.service.delete(url, { params, ..._object }); return this.service.delete(url, { params, ..._object })
} }
download(url: string, params?: object, _object = {}): Promise<BlobPart> { download(url: string, params?: object, _object = {}): Promise<BlobPart> {
return this.service.post(url, params, { ..._object, responseType: "blob" }); return this.service.post(url, params, { ..._object, responseType: 'blob' })
} }
upload(url: string, params?: object, _object = {}): Promise<BlobPart> {
return this.service.post(url, params, {
..._object,
headers: { 'Content-Type': 'multipart/form-data' }
})
}
/**
* 针对excel的上传默认返回的是blob类型Excel没问题时返回json特殊处理
*/
uploadExcel(url: string, params?: object, _object = {}): Promise<BlobPart> {
return this.service.post(url, params, {
..._object,
headers: { 'Content-Type': 'multipart/form-data' },
responseType: 'blob',
})
}
} }
export default new RequestHttp(config); export default new RequestHttp(config)

View File

@@ -1,3 +1,4 @@
import { storeToRefs } from 'pinia';
/** /**
* 该接口声明文件用来声明通用的接口定义,比如 请求参数Base、响应Base、分页等 * 该接口声明文件用来声明通用的接口定义,比如 请求参数Base、响应Base、分页等
*/ */
@@ -44,8 +45,11 @@ export interface ResPage<T> {
*/ */
export interface Dict { export interface Dict {
id: string; id: string;
label: string; name: string;
code: string; code: string;
value?: string;
sort?:number;
algoDescribe?: string;
children?: Dict[]; children?: Dict[];
} }

View File

@@ -1,15 +0,0 @@
// 审计日志管理模块
export namespace Sys_Log_Audit {
// 日志列表
export interface Audit_LogList {
id: string;//日志表Id
operate_Type:string;//日志类型
ip:string;//操作IP
result: string;//事件结果
remark: string;//事件描述
warn:number;//告警标志
create_By:string;//创建用户
create_Time:string;//创建时间
}
}

View File

@@ -1,192 +1,194 @@
{ {
"code": "A0000", "code": "A0000",
"data": [ "data": [
{
"id": "1",
"pid": "0",
"name": "频率准确度检测",
"children": [
{ {
"id": 0, "id": "1-1",
"name": "频率准备度检测", "pid": "1",
"children": [ "name": "额定工作条件下的检测",
{ "children": [
"pid": 0, {
"id": "0-1", "id": "1-1-1",
"name": "额定工作条件下的检测", "pid": "1-1",
"children": [ "name": "输入:频率 42.5Hz..."
{ },
"pid": "0-1", {
"id": "0-1-1", "id": "1-1-2",
"name": "输入:频率 42.5Hz..." "pid": "1-1",
}, "name": "输入:频率 50.0Hz..."
{ },
"pid": "0-1", {
"id": "0-1-2", "id": "1-1-3",
"name": "输入:频率 50.0Hz..." "pid": "1-1",
}, "name": "输入:频率 50.05Hz...."
{ }
"pid": "0-1", ]
"id": "0-1-3",
"name": "输入:频率 50.05Hz..."
}
]
},
{
"pid": 0,
"id": "0-2",
"name": "电压对频率测量的影响",
"children": [
{
"pid": "0-2",
"id": "0-2-1",
"name": "输入:频率 50.05Hz Ua =10%Un..."
},
{
"pid": "0-2",
"id": "0-2-1",
"name": "输入:频率 51.05Hz Ua =10%Un..."
},
{
"pid": "0-2",
"id": "0-2-2",
"name": "输入:频率 52.05Hz Ua =10%Un..."
}
]
},
{
"pid": 0,
"id": "0-3",
"name": "谐波对频率测量的影响",
"children": [
{
"pid": "0-3",
"id": "0-3-1",
"name": "输入:频率 50.05Hz Ua =100%Un..."
}
]
}
]
}, },
{ {
"id": 1, "id": "1-2",
"name": "电压准确度检测", "pid": "1",
"children": [ "name": "电压对频率测量的影响",
{ "children": [
"pid": 1, {
"id": "1-1", "id": "1-2-1",
"name": "额定工作条件下的检测", "pid": "1-2",
"children": [ "name": "输入:频率 50.05Hz Ua =10%Un..."
{ },
"pid": "1-1", {
"id": "1-1-1", "id": "1-2-1",
"name": "输入:频率 42.5Hz..." "pid": "1-2",
}, "name": "输入:频率 51.05Hz Ua =10%Un..."
{ },
"pid": "1-1", {
"id": "1-1-2", "id": "1-2-2",
"name": "输入:频率 50.0Hz..." "pid": "1-2",
}, "name": "输入:频率 52.05Hz Ua =10%Un..."
{ }
"pid": "1-1", ]
"id": "1-1-3",
"name": "输入:频率 50.05Hz..."
}
]
},
{
"pid": 0,
"id": "1-2",
"name": "电压对频率测量的影响",
"children": [
{
"pid": "1-2",
"id": "1-2-1",
"name": "输入:频率 50.05Hz Ua =10%Un..."
},
{
"pid": "1-2",
"id": "1-2-1",
"name": "输入:频率 51.05Hz Ua =10%Un..."
},
{
"pid": "1-2",
"id": "1-2-2",
"name": "输入:频率 52.05Hz Ua =10%Un..."
}
]
},
{
"pid": 0,
"id": "0-3",
"name": "谐波对频率测量的影响",
"children": [
{
"pid": "0-3",
"id": "0-3-1",
"name": "输入:频率 50.05Hz Ua =100%Un..."
}
]
}
]
}, },
{ {
"id": 2, "id": "1-3",
"name": "谐波准确度检测", "pid": "1",
"children": [ "name": "谐波对频率测量的影响",
{ "children": [
"pid": 2, {
"id": "2-1", "id": "1-3-1",
"name": "额定工作条件下的检测", "pid": "1-3",
"children": [ "name": "输入:频率 50.05Hz Ua =100%Un..."
{ }
"pid": "2-1", ]
"id": "2-1-1",
"name": "输入:频率 42.5Hz..."
},
{
"pid": "2-1",
"id": "2-1-2",
"name": "输入:频率 50.0Hz..."
},
{
"pid": "2-1",
"id": "2-1-3",
"name": "输入:频率 50.05Hz..."
}
]
},
{
"pid": 2,
"id": "2-2",
"name": "电压对频率测量的影响",
"children": [
{
"pid": "2-2",
"id": "2-2-1",
"name": "输入:频率 50.05Hz Ua =10%Un..."
},
{
"pid": "2-2",
"id": "2-2-1",
"name": "输入:频率 51.05Hz Ua =10%Un..."
},
{
"pid": "2-2",
"id": "2-2-2",
"name": "输入:频率 52.05Hz Ua =10%Un..."
}
]
},
{
"pid": 2,
"id": "2-3",
"name": "谐波对频率测量的影响",
"children": [
{
"pid": "2-3",
"id": "2-3-1",
"name": "输入:频率 50.05Hz Ua =100%Un..."
}
]
}
]
} }
] ]
},
{
"id": "2",
"pid": "0",
"name": "电压准确度检测",
"children": [
{
"pid": "2",
"id": "2-1",
"name": "额定工作条件下的检测",
"children": [
{
"id": "2-1-1",
"pid": "2-1",
"name": "输入:频率 42.5Hz..."
},
{
"id": "2-1-2",
"pid": "2-1",
"name": "输入:频率 50.0Hz..."
},
{
"id": "2-1-3",
"pid": "2-1",
"name": "输入:频率 50.05Hz..."
}
]
},
{
"pid": "2",
"id": "2-2",
"name": "电压对频率测量的影响",
"children": [
{
"id": "2-2-1",
"pid": "2-2",
"name": "输入:频率 50.05Hz Ua =10%Un..."
},
{
"id": "2-2-1",
"pid": "2-2",
"name": "输入:频率 51.05Hz Ua =10%Un..."
},
{
"id": "2-2-2",
"pid": "2-2",
"name": "输入:频率 52.05Hz Ua =10%Un..."
}
]
},
{
"pid": "2",
"id": "2-3",
"name": "谐波对频率测量的影响",
"children": [
{
"id": "2-3-1",
"pid": "2-3",
"name": "输入:频率 50.05Hz Ua =100%Un..."
}
]
}
]
},
{
"id": "3",
"pid": "0",
"name": "谐波准确度检测",
"children": [
{
"id": "3-1",
"pid": "3",
"name": "额定工作条件下的检测",
"children": [
{
"id": "3-1-1",
"pid": "3-1",
"name": "输入:频率 42.5Hz..."
},
{
"id": "3-1-2",
"pid": "3-1",
"name": "输入:频率 50.0Hz..."
},
{
"id": "3-1-3",
"pid": "3-1",
"name": "输入:频率 50.05Hz..."
}
]
},
{
"id": "3-2",
"pid": "3",
"name": "电压对频率测量的影响",
"children": [
{
"id": "3-2-1",
"pid": "3-2",
"name": "输入:频率 50.05Hz Ua =10%Un..."
},
{
"id": "3-2-1",
"pid": "3-2",
"name": "输入:频率 51.05Hz Ua =10%Un..."
},
{
"id": "3-2-2",
"pid": "3-2",
"name": "输入:频率 52.05Hz Ua =10%Un..."
}
]
},
{
"id": "3-3",
"pid": "3",
"name": "谐波对频率测量的影响",
"children": [
{
"id": "3-3-1",
"pid": "3-3",
"name": "输入:频率 50.05Hz Ua =100%Un..."
}
]
}
]
}
]
} }

View File

@@ -1,44 +1,48 @@
import type { ReqPage } from '@/api/interface' import type { ReqPage } from '@/api/interface'
import type { DatetimeFormatProps } from 'vue-i18n';
// 检测计划模块 // 检测计划模块
export namespace Plan { export namespace Plan {
// 检测计划列表 // 检测计划接口
export interface PlanList { export interface ResPlan {
id: string; //检测计划ID id: string; //检测计划ID
name: string; //检测计划名称 name: string; //检测计划名称
pattern: string; //模式,字典表(数字、模拟、比对) pattern?: string; //模式,字典表(数字、模拟、比对)
father_Plan_Id: string; //父计划ID fatherPlanId?: string; //父计划ID
dataSource_Id: string; //数据源ID dataSourceId: string; //数据源ID
script_Id: string; //检测脚本ID scriptId: string; //检测脚本ID
error_Sys_Id: string;//误差体系ID errorSysId: string;//误差体系ID
test_State: string; //检测状态 timeCheck:number;//守时检测:0否1。是
report_State: string; //报告生成状态 testState: number; //检测状态:0:未检、1检测中、2检测完成,默认为 0
result: string;//检测结果 reportState: number; //报告生成状态:0:未生成、1部分生成、2全部生成,默认为 0
state: number; //状态 result: number;//检测结果:0:不符合、1:符合、2/,默认为 2
create_By?: string; //创建用户 code:number; //自动生成,用于生成数据表后缀
create_Time?: string;//创建时间 state: number;//;状态0-删除 1-正常
update_By?: string; //更新用户 createBy?:string; //创建用户
update_Time?: string; //更新时间 createTime?:string; //创建时间
updateBy?:string; //更新用户
updateTime?:string; //更新时间
associateReport:number;//是否关联报告模板 0否 1是
reportTemplateName:string;
reportTemplateVersion:string
} }
// 被检设备参数 // 检测计划 + 分页
export interface ReqPlanParams extends ReqPage { export interface ReqPlanParams extends ReqPage,ResPlan {
id: string; //检测计划ID
name: string; //检测计划名称
pattern: string; //模式,字典表(数字、模拟、比对)
father_Plan_Id: string; //父计划ID
dataSource_Id: string; //数据源ID
script_Id: string; //检测脚本ID
error_Sys_Id: string;//误差体系ID
test_State: string; //检测状态
report_State: string; //报告生成状态
result: string;//检测结果
state: number; //状态
create_By?: string; //创建用户
create_Time?: string;//创建时间
update_By?: string; //更新用户
update_Time?: string; //更新时间
} }
export interface ReqPlan extends ResPlan {
datasourceIds:string;
sourceIds: string;
planId:string;
scriptName: string ;
errorSysName: string;
sourceName: string ;
devIds: string[];
}
} }

View File

@@ -0,0 +1,92 @@
import type { Plan } from './interface'
import http from '@/api'
import type { ErrorSystem } from '../device/interface/error'
import type { Device } from '../device/interface/device'
import { ReqDevReportParams } from '@/api/device/interface/device'
/**
* @name 检测计划管理模块
*/
// 获取检测计划列表
export const getPlanList = (params: Plan.ReqPlanParams) => {
return http.post(`/adPlan/list`, params)
}
// 新增检测计划
export const addPlan = (params: any) => {
return http.post(`/adPlan/add`, params)
}
// 编辑检测计划
export const updatePlan = (params: any) => {
return http.post(`/adPlan/update`, params)
}
// 删除检测计划
export const deletePlan = (params: { id: string[] }) => {
return http.post(`/adPlan/delete`, params)
}
// 获取指定模式下所有检测源
export const getTestSourceList = (params: Plan.ReqPlan) => {
return http.get(`/pqSource/getAll?patternId=${params.pattern}`)
}
// 获取指定模式下所有检测脚本
export const getPqScriptList = (params: Plan.ReqPlan) => {
return http.get(`/pqScript/getAll?patternId=${params.pattern}`)
}
//获取所有误差体系
export const getPqErrSysList = () => {
return http.get<ErrorSystem.ErrorSystemList>(`/pqErrSys/getAll`)
}
//获取指定模式下所有未绑定的设备
export const getUnboundPqDevList = (params: Plan.ReqPlan) => {
return http.get(`/pqDev/listUnbound?pattern=${params.pattern}`)
}
//根据检测计划id查询出所有已绑定的设备
export const getBoundPqDevList = (params: any) => {
return http.post(`/pqDev/listByPlanId`, params)
}
//检测计划绑定设备
// export const BindPqDevList = (params: any) => {
// return http.post(`/pqDev/bindDev`,params)
// }
// 按照模式查询检测计划(用于首页展示)
export const getPlanListByPattern = (params: Plan.ReqPlan) => {
return http.get(`/adPlan/listByPattern?pattern=${params.pattern}`)
}
// 导出检测计划
export const exportPlan = (params: Device.ReqPqDevParams) => {
return http.download(`/adPlan/export`, params)
}
// 下载模板
export const downloadTemplate = (params: { patternId: string }) => {
return http.download(`/adPlan/downloadTemplate`, params)
}
// 导入检测计划
export const importPlan = (params: Device.ReqPqDevParams) => {
return http.uploadExcel(`/adPlan/import`, params)
}
// 装置检测报告生成
export const generateDevReport = (params: Device.ReqDevReportParams) => {
return http.post(`/report/generateReport`, params)
}
// 装置检测报告下载
export const downloadDevData = (params: Device.ReqDevReportParams) => {
return http.download(`/report/downloadReport`, params)
}
export const staticsAnalyse = (params: { id: string[] }) => {
return http.download('/adPlan/analyse', params)
}

View File

@@ -1,125 +1,489 @@
import type {Plan} from "./interface" import type {Plan} from "./interface"
const plandata = ref<Plan.PlanList[]>([ /**
{ * Dict 字典属性
'id': '1', * id: 唯一标识
'name': '检测计划1', * label: 名称
'pattern':'模拟式', */
'father_Plan_Id':'/', interface Dict {
'dataSource_Id':'分钟统计数据最大值', id: string;
'script_Id':'国网入网检测脚本(单影响量-模拟式)', label: string;
'error_Sys_Id':'Q/GDW 1650.2- 2016', }
'test_State':'未检',
'report_State':'未生成',
'result':'符合',
'state': 1,
'create_By':'',
'create_Time':'',
'update_By':'',
'update_Time':'',
},
{
'id': '2',
'name': '检测子计划1-1',
'pattern':'模拟式',
'father_Plan_Id':'检测计划1',
'dataSource_Id':'分钟统计数据最大值',
'script_Id':'国网入网检测脚本(单影响量-模拟式)',
'error_Sys_Id':'Q/GDW 1650.2- 2016',
'test_State':'未检',
'report_State':'未生成',
'result':'符合',
'state': 1,
'create_By':'',
'create_Time':'',
'update_By':'',
'update_Time':'',
},
{
'id': '3',
'name': '检测子计划1-2',
'pattern':'模拟式',
'father_Plan_Id':'检测计划1',
'dataSource_Id':'分钟统计数据最大值',
'script_Id':'国网入网检测脚本(单影响量-模拟式)',
'error_Sys_Id':'Q/GDW 1650.2- 2016',
'test_State':'未检',
'report_State':'未生成',
'result':'符合',
'state': 1,
'create_By':'',
'create_Time':'',
'update_By':'',
'update_Time':'',
},
{
'id': '4',
'name': '检测计划2',
'pattern':'模拟式',
'father_Plan_Id':'/',
'dataSource_Id':'分钟统计数据最小值',
'script_Id':'国网入网检测脚本(单影响量-模拟式)',
'error_Sys_Id':'Q/GDW 10650.2 - 2021',
'test_State':'检测完成',
'report_State':'部分生成',
'result':'不符合',
'state': 1,
'create_By':'',
'create_Time':'',
'update_By':'',
'update_Time':'',
},
{
'id': '5',
'name': '检测计划3',
'pattern':'模拟式',
'father_Plan_Id':'/',
'dataSource_Id':'分钟统计数据最大值',
'script_Id':'/',
'error_Sys_Id':'/',
'test_State':'未检',
'report_State':'未生成',
'result':'符合',
'state': 1,
'create_By':'',
'create_Time':'',
'update_By':'',
'update_Time':'',
},
{
'id': '6',
'name': '检测子计划4',
'pattern':'模拟式',
'father_Plan_Id':'/',
'dataSource_Id':'分钟统计数据CP95值',
'script_Id':'国网入网检测脚本(单影响量-模拟式)',
'error_Sys_Id':'Q/GDW 1650.2- 2016',
'test_State':'未检',
'report_State':'未生成',
'result':'符合',
'state': 1,
'create_By':'',
'create_Time':'',
'update_By':'',
'update_Time':'',
},
{
'id': '7',
'name': '检测子计划4-1',
'pattern':'模拟式',
'father_Plan_Id':'检测计划4',
'dataSource_Id':'分钟统计数据CP95值',
'script_Id':'国网入网检测脚本(单影响量-模拟式)',
'error_Sys_Id':'Q/GDW 1650.2- 2016',
'test_State':'未检',
'report_State':'未生成',
'result':'符合',
'state': 1,
'create_By':'',
'create_Time':'',
'update_By':'',
'update_Time':'',
},
])
export default plandata const dictPattern: Dict[] = [
{
id: "0",
label: '数字',
},
{
id: "1",
label: '模拟',
},
{
id: "2",
label: '比对',
},
]
const dictTestState: Dict[] = [
{
id: "0",
label: '未检',
},
{
id: "1",
label: '检测中',
},
{
id: "2",
label: '检测完成',
},
]
const dictReportState: Dict[] = [
{
id: "0",
label: '未生成',
},
{
id: "1",
label: '部分生成',
},
{
id: "2",
label: '全部生成',
},
]
const dictResult: Dict[] = [
{
id: "0",
label: '不符合',
},
{
id: "1",
label: '符合',
},
{
id: "2",
label: '/',
},
]
//全部检测计划名称与ID
const testPlanDataList: Dict[] = [
{
id: "1",
label: '模拟检测计划1',
},
{
id: "2",
label: '模拟检测计划2',
},
{
id: "3",
label: '模拟检测计划3',
},
]
//全部数据源名称与ID
const testSoureDataList: Dict[] = [
{
id: "1",
label: '实时数据',
},
{
id: "2",
label: '分钟统计数据最大值',
},
{
id: "3",
label: '分钟统计数据最小值',
},
{
id: "4",
label: '分钟统计数据平均值',
},
{
id: "5",
label: '分钟统计数据CP95值',
},
{
id: "6",
label: '录波数据',
},
]
//全部检测脚本名称与ID
const testScriptDataList: Dict[] = [
{
id: "1",
label: '国网入网检测脚本(单影响量-模拟式)',
},
{
id: "2",
label: '国网入网检测脚本Q/GDW 10650.4 - 2021) 模拟式',
},
{
id: "3",
label: '国网入网检测脚本Q/GDW 1650.4 - 2016) 模拟式',
},
{
id: "4",
label: 'GBT 19862 - 2016 模拟式',
},
{
id: "5",
label: '北京比对检测脚本',
},
]
//全部误差体系名称与ID
const testErrSystDataList: Dict[] = [
{
id: "1",
label: 'Q/GDW 1650.2- 2016',
},
{
id: "2",
label: 'Q/GDW 10650.2 - 2021',
},
{
id: "3",
label: 'GBT 19862 - 2016',
},
]
//父计划ID及名称
const testFatherPlanList: Dict[] = [
{
id: "1",
label: '检测计划1',
},
{
id: "2",
label: '检测子计划2',
},
{
id: "3",
label: '检测子计划1-2',
},
]
//检测源ID及名称
const sourceDataList: Dict[] = [
{
id: "1",
label: '标准源-FLUKE.6100A电能功率标准源-1',
},
{
id: "2",
label: '标准源-ANGLI-FP2高性能数字信号源-1',
},
{
id: "3",
label: '标准源-DKLN-1电能质量测试分析仪智能检定装置-1',
},
{
id: "4",
label: '标准源-PQC600A高精度电能功率标准源-1',
},
{
id: "5",
label: '高精度设备-PQV-520便携式电能质量监测装置-1',
},
{
id: "6",
label: '高精度设备-PQV-520便携式电能质量监测装置-2',
},
{
id: "7",
label: '高精度设备-PQV-520便携式电能质量监测装置-3',
},
{
id: "8",
label: '高精度设备-PQV-520便携式电能质量监测装置-4',
},
]
//被检设备ID及名称
const deviceDataList: Dict[] = [
{
id: "1",
label: '240001',
},
{
id: "2",
label: '240002',
},
{
id: "3",
label: '240003',
},
{
id: "4",
label: '240004',
},
{
id: "5",
label: '240005',
},
{
id: "6",
label: '240006',
},
{
id: "7",
label: '240007',
},
{
id: "8",
label: '240008',
},
]
// const deviceDataList: Dict[] = [
// {
// id: "1",
// label: '模拟装置1',
// },
// {
// id: "2",
// label: '模拟装置2',
// },
// {
// id: "3",
// label: '模拟装置3',
// },
// {
// id: "4",
// label: '模拟装置4',
// },
// {
// id: "5",
// label: '中电送检装置',
// },
// {
// id: "6",
// label: '易司拓测试装置',
// },
// {
// id: "7",
// label: '山大电力测试装置1',
// },
// {
// id: "8",
// label: '山大电力测试装置2',
// },
// ]
const planData = ref<Plan.PlanAndSourceBO[]>([
{
'id': '1',
'name': '沧州110kV东光站装置送检',
'pattern':'1',
"source_Id" : ['1'],
"testSourceName":'标准源-FLUKE.6100A电能功率标准源-1',
'dataSource_Id':['1'],
'dataSource_Ids':'实时数据',
'script_Id':'1',
'error_Sys_Id':'1',
'test_State':'1',
'report_State':'1',
'result':'1',
},
{
'id': '2',
'name': '邯郸2台安徽振兴终端送检',
'pattern':'1',
"source_Id" : ['5','6','7','8'],
"testSourceName":'高精度设备-PQV-520便携式电能质量监测装置-1',
'father_Plan_Id':'1',
'dataSource_Id':['1'],
'dataSource_Ids':'实时数据',
'script_Id':'2',
'error_Sys_Id':'2',
'test_State':'2',
'report_State':'2',
'result':'0',
"testSourceList":[
'高精度设备-PQV-520便携式电能质量监测装置-2','高精度设备-PQV-520便携式电能质量监测装置-3','高精度设备-PQV-520便携式电能质量监测装置-4'
]
},
{
'id': '3',
'name': '浙江分布式光伏电能质量试点',
'pattern':'1',
"source_Id" : ['3'],
"testSourceName":'标准源-DKLN-1电能质量测试分析仪智能检定装置-1',
'father_Plan_Id':'1',
'dataSource_Id':['1'],
'dataSource_Ids':'实时数据',
'script_Id':'4',
'error_Sys_Id':'3',
'test_State':'1',
'report_State':'1',
'result':'1',
},
])
// const planData = ref<Plan.PlanBO[]>([
// {
// 'id': '1',
// 'name': '检测计划1',
// 'pattern':'1',
// 'dataSource_Id':'1',
// 'script_Id':'1',
// 'error_Sys_Id':'1',
// 'test_State':'1',
// 'report_State':'1',
// 'result':'1',
// },
// {
// 'id': '2',
// 'name': '检测子计划2',
// 'pattern':'1',
// 'father_Plan_Id':'1',
// 'dataSource_Id':'2',
// 'script_Id':'2',
// 'error_Sys_Id':'2',
// 'test_State':'2',
// 'report_State':'2',
// 'result':'0',
// },
// {
// 'id': '3',
// 'name': '检测子计划1-2',
// 'pattern':'1',
// 'father_Plan_Id':'1',
// 'dataSource_Id':'3',
// 'script_Id':'3',
// 'error_Sys_Id':'3',
// 'test_State':'1',
// 'report_State':'1',
// 'result':'1',
// },
// ])
// const plandata = ref<Plan.PlanList[]>([
// {
// 'id': '1',
// 'name': '检测计划1',
// 'pattern':'模拟式',
// 'father_Plan_Id':'/',
// 'dataSource_Id':'分钟统计数据最大值',
// 'script_Id':'国网入网检测脚本(单影响量-模拟式)',
// 'error_Sys_Id':'Q/GDW 1650.2- 2016',
// 'test_State':'未检',
// 'report_State':'未生成',
// 'result':'符合',
// 'state': 1,
// 'create_By':'',
// 'create_Time':'',
// 'update_By':'',
// 'update_Time':'',
// },
// {
// 'id': '2',
// 'name': '检测子计划1-1',
// 'pattern':'模拟式',
// 'father_Plan_Id':'检测计划1',
// 'dataSource_Id':'分钟统计数据最大值',
// 'script_Id':'国网入网检测脚本(单影响量-模拟式)',
// 'error_Sys_Id':'Q/GDW 1650.2- 2016',
// 'test_State':'未检',
// 'report_State':'未生成',
// 'result':'符合',
// 'state': 1,
// 'create_By':'',
// 'create_Time':'',
// 'update_By':'',
// 'update_Time':'',
// },
// {
// 'id': '3',
// 'name': '检测子计划1-2',
// 'pattern':'模拟式',
// 'father_Plan_Id':'检测计划1',
// 'dataSource_Id':'分钟统计数据最大值',
// 'script_Id':'国网入网检测脚本(单影响量-模拟式)',
// 'error_Sys_Id':'Q/GDW 1650.2- 2016',
// 'test_State':'未检',
// 'report_State':'未生成',
// 'result':'符合',
// 'state': 1,
// 'create_By':'',
// 'create_Time':'',
// 'update_By':'',
// 'update_Time':'',
// },
// {
// 'id': '4',
// 'name': '检测计划2',
// 'pattern':'模拟式',
// 'father_Plan_Id':'/',
// 'dataSource_Id':'分钟统计数据最小值',
// 'script_Id':'国网入网检测脚本(单影响量-模拟式)',
// 'error_Sys_Id':'Q/GDW 10650.2 - 2021',
// 'test_State':'检测完成',
// 'report_State':'部分生成',
// 'result':'不符合',
// 'state': 1,
// 'create_By':'',
// 'create_Time':'',
// 'update_By':'',
// 'update_Time':'',
// },
// {
// 'id': '5',
// 'name': '检测计划3',
// 'pattern':'模拟式',
// 'father_Plan_Id':'/',
// 'dataSource_Id':'分钟统计数据最大值',
// 'script_Id':'/',
// 'error_Sys_Id':'/',
// 'test_State':'未检',
// 'report_State':'未生成',
// 'result':'符合',
// 'state': 1,
// 'create_By':'',
// 'create_Time':'',
// 'update_By':'',
// 'update_Time':'',
// },
// {
// 'id': '6',
// 'name': '检测子计划4',
// 'pattern':'模拟式',
// 'father_Plan_Id':'/',
// 'dataSource_Id':'分钟统计数据CP95值',
// 'script_Id':'国网入网检测脚本(单影响量-模拟式)',
// 'error_Sys_Id':'Q/GDW 1650.2- 2016',
// 'test_State':'未检',
// 'report_State':'未生成',
// 'result':'符合',
// 'state': 1,
// 'create_By':'',
// 'create_Time':'',
// 'update_By':'',
// 'update_Time':'',
// },
// {
// 'id': '7',
// 'name': '检测子计划4-1',
// 'pattern':'模拟式',
// 'father_Plan_Id':'检测计划4',
// 'dataSource_Id':'分钟统计数据CP95值',
// 'script_Id':'国网入网检测脚本(单影响量-模拟式)',
// 'error_Sys_Id':'Q/GDW 1650.2- 2016',
// 'test_State':'未检',
// 'report_State':'未生成',
// 'result':'符合',
// 'state': 1,
// 'create_By':'',
// 'create_Time':'',
// 'update_By':'',
// 'update_Time':'',
// },
// ])
export {planData,dictPattern,dictTestState,dictReportState,dictResult,testPlanDataList,sourceDataList,deviceDataList,testSoureDataList,testScriptDataList,testErrSystDataList,testFatherPlanList}

View File

@@ -2,6 +2,7 @@ import http from "@/api";
//获取计划列表 //获取计划列表
export const getPlanList = (data: any) => { export const getPlanList = (data: any) => {
return null;
return http.post<Static.planData>( return http.post<Static.planData>(
"http://192.168.1.123:4523/m1/2573730-0-default/plan/planList/list", "http://192.168.1.123:4523/m1/2573730-0-default/plan/planList/list",
data, data,

View File

@@ -2,22 +2,22 @@
"code": "200", "code": "200",
"data": [ "data": [
{ {
"name": "未检", "name": "未检",
"children": [ "children": [
{ {
"id": 4, "id": 4,
"pid": 1, "pid": 1,
"name": "检测计划1" "name": "邯郸220kV团城站电能质量检测"
}, },
{ {
"id": 5, "id": 5,
"pid": 1, "pid": 1,
"name": "检测计划2" "name": "衡水冀州光伏电站配套出口工程"
}, },
{ {
"id": 6, "id": 6,
"pid": 1, "pid": 1,
"name": "检测计划3" "name": "深圳市中电公司委托送检"
} }
], ],
"id": 1 "id": 1
@@ -28,17 +28,17 @@
{ {
"id": 7, "id": 7,
"pid": 2, "pid": 2,
"name": "检测计划4" "name": "沧州220kV留古站电能质量检测"
}, },
{ {
"id": 8, "id": 8,
"pid": 2, "pid": 2,
"name": "检测计划5" "name": "沧州110kV东光站装置送检"
}, },
{ {
"id": 9, "id": 9,
"pid": 2, "pid": 2,
"name": "检测计划6" "name": "浙江分布式光伏电能质量试点"
} }
], ],
"id": 2 "id": 2
@@ -49,12 +49,12 @@
{ {
"id": 10, "id": 10,
"pid": 3, "pid": 3,
"name": "检测计划7" "name": "邯郸2台安徽振兴终端送检"
}, },
{ {
"id": 11, "id": 11,
"pid": 3, "pid": 3,
"name": "检测计划8" "name": "深圳2台中电终端委托送检"
} }
], ],
"id": 3 "id": 3

View File

@@ -1,94 +0,0 @@
import { ResPage } from '@/api/interface'
import { Role } from './interface'
import { ADMIN as rePrefix } from '@/api/config/serviceName'
import http from '@/api'
/**
* @name 角色管理模块
*/
// 获取角色列表
export const getRoleList = (params: Role.ReqRoleParams) => {
return http.post<ResPage<Role.RoleBO>>(`/role/list`, params)
// return http.post<ResPage<Role.ResRoleList>>(`/RoleList_Post`, params)
// return http.post<ResPage<Role.ResRoleList>>(`${rePrefix}/role/list`, params)
}
// 新增角色
export const addRole = (params: Role.RoleBO) => {
return http.post(`/role/add`, params)
}
// 编辑角色
export const editRole = (params: Role.RoleBO) => {
return http.post(`/role/edit`, params)
}
// 删除角色
export const deleteRole = (params: { id: string[] }) => {
return http.post(`/role/del`, params)
}
// 编辑角色资源
export const editRoleAndPermission = (params: Role.ReqRoleAndPermission) => {
return http.post(`/role/edit_RoleAndPermission`, params)
}
// // 获取树形用户列表
// export const getRoleTreeList = (params: Role.ReqRoleParams) => {
// return http.post<ResPage<Role.ResRoleList>>(`${rePrefix}/role/tree/list`, params)
// }
// export const addRole = (params: { id: string ; rolename: string;status: number; describe:string; }) => {
// return http.post(`/RoleList_Add`, params)
// }
// 批量添加角色
// export const BatchAddRole = (params: FormData) => {
// return http.post(`${rePrefix}/role/import`, params)
// }
// // 切换角色状态
// export const changeRoleStatus = (params: { id: string; status: number }) => {
// return http.post(`${rePrefix}/role/change`, params)
// }
// 重置用户密码
// export const resetUserPassWord = (params: { id: string }) => {
// return http.post(`${rePrefix}/role/rest_password`, params)
// }
// 导出角色数据
// export const exportRoleInfo = (params: Role.ReqRoleParams) => {
// return http.download(`${rePrefix}/role/export`, params)
// }
// 获取角色状态字典
// export const getRoleStatus = () => {
// return http.get<Role.ResStatus[]>(`${rePrefix}/role/status`)
// }
// 获取用户性别字典
// export const getUserGender = () => {
// return http.get<User.ResGender[]>(`${rePrefix}/user/gender`)
// }
// 获取角色权限列表
// export const getRoleDepartment = () => {
// return http.get<Role.ResPermissionList[]>(`${rePrefix}/role/permission`)
// }
// 获取用户角色字典
// export const getUserRole = () => {
// return http.get<User.ResRole[]>(`${rePrefix}/user/role`)
// }

View File

@@ -1,70 +0,0 @@
const data = [
{
rolename:"操作员1",
id: 'operator_role',
status:1,
describe:"可以对待检设备的台账进行操作并执行检测功能",
permissionList: [
{
label: "台账管理",
key: "dataManager",
disable: false,
},
{
label: "系统配置",
key: "sysManager",
disable: false,
},
{
label: "设备检测",
key: "devTest",
disable: true,
},
]},
{
rolename:"管理员2",
id: 'manager_role',
status:1,
describe:"可以设置检测脚本、误差体系、新增操作人员",
permissionList: [
{
label: "台账管理",
key: "dataManager",
disable: true,
},
{
label: "系统配置",
key: "sysManager",
disable: false,
},
{
label: "设备检测",
key: "devTest",
disable: true,
},
]},
{
rolename:"超级管理员3",
id: 'superManager_role',
status:0,
describe:"可以修改程序的底层配置,例如检测指标的具体类型",
permissionList: [
{
label: "台账管理",
key: "dataManager",
disable: true,
},
{
label: "系统配置",
key: "sysManager",
disable: true,
},
{
label: "设备检测",
key: "devTest",
disable: true,
},
]},
]
export default data

View File

@@ -0,0 +1,34 @@
import http from '@/api'
export const startPreTest = (params) => {
return http.post(`/prepare/startPreTest`, params, {loading: false})
}
export const closePreTest = (params) => {
return http.post(`/prepare/closePreTest`, params,{ loading: false })
}
/**
* 开始正式检测
* @param params
*/
// export const startTest = (params) => {
// return http.post(`/prepare/startTest`, params, {loading: false})
// }
/**
* 暂停正式检测
* @param params
*/
export const pauseTest = () => {
return http.get(`/prepare/closePreTest`, {loading: false})
}
/**
* 继续正式检测
* @param params
*/
export const resumeTest = (params) => {
return http.post(`/prepare/restartTemTest/`, params, {loading: false})
}

View File

@@ -0,0 +1,17 @@
import http from '@/api'
import {type Base} from '@/api/system/base/interface'
//获取检测配置
export const getTestConfig = () => {
return http.get(`/sysTestConfig/getConfig`)
}
//编辑检测配置
export const updateTestConfig = (params: Base.ResTestConfig) => {
return http.post(`/sysTestConfig/update`, params)
}

View File

@@ -0,0 +1,19 @@
// 检测配置表模块
export namespace Base {
/**
* 检测配置表查询返回的对象
*/
export interface ResTestConfig {
id: string; //系统配置表Id
autoGenerate:number;//检测报告是否自动生成0 否1是
maxTime:number;//最大复检次数默认3次
dataRule:string;//数据处理原则,关联字典所有值、部分值、cp95值、平均值、任意值默认任意值
state: number; //状态
createBy?: string| null; //创建用户
createTime?: string| null; //创建时间
updateBy?: string| null; //更新用户
updateTime?: string| null; //更新时间
}
}

View File

@@ -1,7 +1,11 @@
/** /**
* todo... * todo...
*/ */
import { Dict } from '@/api/interface' /**
* todo...
*/
import type { Dict } from '@/api/interface'
const dictData: Dict[] = [ const dictData: Dict[] = [
{ {
@@ -212,7 +216,7 @@ const dictData: Dict[] = [
children: [ children: [
{ {
id: "0", id: "0",
label: 'FLUKE6100A电能功率标准源', label: 'FLUKE.6100A电能功率标准源',
code: 0, code: 0,
}, },
{ {
@@ -232,7 +236,7 @@ const dictData: Dict[] = [
}, },
{ {
id: "4", id: "4",
label: 'PQV-520电能质量测装置', label: 'PQV-520便携式电能质量测装置',
code: 4, code: 4,
}, },
], ],

View File

@@ -1,6 +1,5 @@
import http from '@/api' import http from '@/api'
import {type Dict} from '@/api/system/dictionary/interface' import {type Dict} from '@/api/system/dictionary/interface'
import type {ResultData} from "@/api/interface";
//获取字典数据 //获取字典数据
export const getDictDataListByTypeId = (params: Dict.ReqDictDataParams) => { export const getDictDataListByTypeId = (params: Dict.ReqDictDataParams) => {
@@ -26,4 +25,9 @@ export const getDicDataById = (params: string) => {
return http.post('/dictData/getDicDataById', params) return http.post('/dictData/getDicDataById', params)
} }
//导出字典数据
export const exportDictData = (params: Dict.ReqDictDataParams) => {
return http.download(`/dictData/export`, params)
}

View File

@@ -0,0 +1,23 @@
import http from '@/api'
import { type Dict } from '@/api/system/dictionary/interface'
//获取字典类型
export const getDictPqList = (params: Dict.ReqDictPqParams) => {
return http.post(`/dictPq/list`, params)
}
//添加字典类型
export const addDictPq = (params: Dict.ResDictPq) => {
return http.post(`/dictPq/add`, params)
}
//编辑字典类型
export const updateDictPq = (params: Dict.ResDictPq) => {
return http.post(`/dictPq/update`, params)
}
//删除字典类型
export const deleteDictPq = (params: string[]) => {
return http.post(`/dictPq/delete`, params)
}

View File

@@ -0,0 +1,29 @@
import http from '@/api'
import { type Dict } from '@/api/system/dictionary/interface'
import { c } from 'vite/dist/node/types.d-aGj9QkWt'
//获取字典类型
export const getDictTreeByCode = (params: Dict.ResDictTree) => {
const code = params.code || ''
return http.get(`/dictTree/getTreeByCode?code=${code}`, { loading: true })
}
export const getDictTreeByName = (params: Dict.ResDictTree) => {
const name = params.name || ''
return http.get(`/dictTree/getTreeByName?name=${name}`)
}
//添加字典类型
export const addDictTree = (params: Dict.ResDictTree) => {
return http.post(`/dictTree/add`, params)
}
//编辑字典类型
export const updateDictTree = (params: Dict.ResDictTree) => {
return http.post(`/dictTree/update`, params)
}
//删除字典类型
export const deleteDictTree = (params: Dict.ResDictTree) => {
return http.post(`/dictTree/delete?id=${params.id}`)
}

View File

@@ -21,4 +21,7 @@ export const deleteDictType = (params: string[]) => {
return http.post(`/dictType/delete`, params) return http.post(`/dictType/delete`, params)
} }
//导出字典类型
export const exportDictType=(params: Dict.ReqDictTypeParams)=>{
return http.download(`/dictType/export`, params)
}

View File

@@ -62,6 +62,7 @@ export namespace Dict {
name: string; // 名称 name: string; // 名称
code: string; // 编码 code: string; // 编码
sort: number; // 排序 sort: number; // 排序
openValue?: number | null;
level?: number | null; // 事件等级0-普通1-中等2-严重 (默认为0) level?: number | null; // 事件等级0-普通1-中等2-严重 (默认为0)
algoDescribe?: number | null; // 与高级算法内部Id描述对应 algoDescribe?: number | null; // 与高级算法内部Id描述对应
value?: string | null; // 字典针对电压等级 value?: string | null; // 字典针对电压等级
@@ -80,4 +81,89 @@ export namespace Dict {
} }
/**
* 电能质量指标字典数据表格分页查询参数
*/
export interface ReqDictPqParams extends ReqPage{
id: string; // 类型id 必填
name?: string; // 名称
phase?: string;//相别
dataType?: string;//数据模型(epd、pqd...)
}
/**
* 电能质量指标字典数据新增、修改、根据id查询返回的对象
*/
export interface ResDictPq {
id: string;//指标字典表Id
name: string;//指标名称
phase: string;//相别
dataType: string;//数据模型(epd、pqd...)
otherName?: string ;//别名默认与Name相同主要是为了适配不同数据库里面字段
showName?:string | null;//显示名称
sort:number;//排序
type?: string | null;//指标数据类型(整型、浮点型、枚举型这些的)
unit?: string | null;//单位
harmStart?:number | null;//起始次数
harmEnd?:number | null;//结束次数
classId: string ;//数据表表名
statMethod?:string;//数据统计类型最大、最小、平均、CP95
systemType?:string | null;//系统类别(区分用能/电能)
tranFlag?:number ;//数据是否上送0:不上送 1:上送)
tranRule?:string | null;//上送规则 变化:“change”周期 :“ period”
eventType?:string | null;//evt的事件类别 "1"、"2"
storeFlag?:string ;//sts、di的是否存储 1:存储 0:不存 储;
curSts?:number | null;//sts、do的当前值
ctlSts?:number;//do的是否可远程控制 1:是 0:否;
maxNum?:number | null;//设置最大值
minNum?: number| null;//设置最小值
setValue?:string | null;//参数为enum可设置的所有值序列
strlen?:number | null;//参数string可设置字符串的长度上 限
defaultValue?:string | null; //参数缺省值、告警code值
resourcesId?:string ; //报表数据来源(统计表表名)
limitName?:string | null; //限值字段名称
limitTable?:string | null;//限值表名
formula?:string ;//超标判断方式
primaryFormula?:string | null;//二次值转一次值公式
state:number;//状态0-删除 1-正常
createBy?:string | null;//创建用户
createTime?:string | null;//创建时间
updateBy?:string | null;//更新用户
updateTime?:string | null;//更新时间
}
/**
* 电能质量指标字典数据表格查询分页返回的对象;
*/
export interface ResDictPqPage extends ResPage<ResDictPq> {
}
/**
* 树形字典数据新增、修改、根据id查询返回的对象
*/
export interface ResDictTree {
id: string;//指标字典表Id
pid: string;//
pids: string;//
name:string;//
code:string;//
sort:number;//
remark?:string;//
state?:number;//'状态(字典 0正常 1停用 2删除)
createBy?:string | null;//
createTime?:string | null;//
updateBy?:string | null;//
updateTime?:string | null;//
level?:number | null;//
extend?:string | null;//对应type不同类型可自定义配置
type?:number | null;//用于区分多种类型的字典树 0.台账对象类型 1.自定义报表指标类型
children?: ResDictTree[];
}
} }

View File

@@ -0,0 +1,16 @@
import type {AuditLog } from '@/api/system/log/interface/log.ts'
import http from '@/api'
/**
* @name 审计日志管理模块
*/
//获取审计日志
export const getAuditLog = (params: AuditLog.ReqAuditLogParams) => {
return http.post(`/sysLog/list`, params)
}
export const exportCsv = (params: AuditLog.ReqAuditLogParams) => {
return http.download(`/sysLog/exportCSV`, params)
}

View File

@@ -0,0 +1,36 @@
import type { ReqPage, ResPage } from '@/api/interface'
// 审计日志管理模块
export namespace AuditLog {
/**
* 设备类型数据表格分页查询参数
*/
export interface ReqAuditLogParams extends ReqPage {
id: string; //审计日志Id 必填
createTime?: string; //创建时间
}
/**
* 设备类型新增、修改、根据id查询返回的对象
*/
export interface ResAuditLog {
id: string;//审计日志Id
operate_Type:string;//操作类型
ip:string;//操作IP
result: string;//事件结果
remark: string;//事件描述
level:number;//告警等级
warn:number;//告警标志
create_By:string;//创建用户
create_Time:string;//创建时间
sort:number;//排序
}
/**
* 设备类型表格查询分页返回的对象;
*/
export interface ResAuditLogPage extends ResPage<ResAuditLog> {
}
}

View File

@@ -1,4 +1,4 @@
import type {Sys_Log_Audit} from "./interface" import type {Sys_Log_Audit} from "./interface/log"
const logdata = ref<Sys_Log_Audit.Audit_LogList[]>([ const logdata = ref<Sys_Log_Audit.Audit_LogList[]>([
{ {

View File

@@ -0,0 +1,13 @@
import http from '@/api'
import {type VersionRegister} from '@/api/system/versionRegister/interface'
//获取有效数据配置
export const getRegRes = (params: VersionRegister.ResSys_Reg_Res) => {
return http.get(`/sysRegRes/getRegResByType?id=${params.type}`)
}
//编辑有效数据配置
export const updateRegRes = (params: VersionRegister.Sys_Reg_Res) => {
return http.post(`/sysRegRes/update`, params)
}

View File

@@ -0,0 +1,31 @@
// 检测配置表模块
export namespace VersionRegister {
/**
* 检测配置表查询返回的对象
*/
export interface ResSys_Reg_Res {
id: string; //版本注册表Id
type: string; //版本类型(模拟式、数字式、比对式)
code: string; //注册码
licenseKey: string; //密钥
expireDate: string; //到期时间
waveRecord?: number;
realTime?: number;
statistics?: number;
flicker?: number;
state: number; //状态
createBy?: string| null; //创建用户
createTime?: string| null; //创建时间
updateBy?: string| null; //更新用户
updateTime?: string| null; //更新时间
}
export interface Sys_Reg_Res {
id: string;
waveRecord?: number;
realTime?: number;
statistics?: number;
flicker?: number;
}
}

View File

@@ -1,21 +0,0 @@
import type { ReqPage } from '@/api/interface'
// 检测脚本模块
export namespace TestScript {
// 检测脚本接口
export interface TestScriptBO {
id?: string; //检测脚本ID
name: string; //检测脚本名称
type: string; //检测脚本类型(字典表Code字段脚本还是模板)
pattern: string;//检测脚本模式(字典表Code字段数字、模拟、比对)
valueType: string;//脚本值类型(字典表Code字段相对值脚本、绝对值脚本、无)
standardName: string;//参照标准名称
standardTime: string;//标准推行时间
}
// 检测脚本+分页
export interface ReqTestScriptParams extends ReqPage,TestScriptBO {
}
}

View File

@@ -1,13 +0,0 @@
import { ResPage } from '@/api/interface'
import { TestScript } from './interface'
import { ADMIN as rePrefix } from '@/api/config/serviceName'
import http from '@/api'
/**
* @name 检测脚本管理模块
*/
// 获取检测脚本列表
export const getTestScriptList = (params: TestScript.ReqTestScriptParams) => {
return http.post<ResPage<TestScript.TestScriptBO>>(`/testScript/list`, params)
// return http.post<ResPage<Role.ResRoleList>>(`${rePrefix}/testScript/list`, params)
}

View File

@@ -1,20 +0,0 @@
import type { ReqPage } from '@/api/interface'
// 检测源模块
export namespace TestSource {
// 检测源接口
export interface TestSourceBO {
id?: string; //检测源ID
name: string; //检测源名称
pattern: string;//检测源模式(字典表Code字段数字、模拟、比对)
type: string; //检测源类型(字典表Code字段标准源、高精度设备)
devType: string;//检测源设备类型(字典表Code字段)
parameters: string;//源参数JSON字符串
}
// 检测源+分页
export interface ReqTestSourceParams extends ReqPage,TestSourceBO {
}
}

View File

@@ -1,13 +0,0 @@
import { ResPage } from '@/api/interface'
import { TestSource } from './interface'
import { ADMIN as rePrefix } from '@/api/config/serviceName'
import http from '@/api'
/**
* @name 检测源管理模块
*/
// 获取检测脚本列表
export const getTestSourceList = (params: TestSource.ReqTestSourceParams) => {
return http.post<ResPage<TestSource.TestSourceBO>>(`/testSource/list`, params)
// return http.post<ResPage<Role.ResRoleList>>(`${rePrefix}/testSource/list`, params)
}

View File

@@ -0,0 +1,35 @@
import http from "@/api";
import type { Function } from "@/api/user/interface/function";
// 获取资源
export const getFunctionList = (params:Function.ResFunction) => {
const name = params.name || '';
return http.get<Function.ResFunction>(`/sysFunction/getTree?keyword=${name}`)
}
// 获取资源不包括按钮
export const getFunctionListNoButton = () => {
return http.get<Function.ResFunction>(`/sysFunction/functionTreeNoButton`)
}
//添加菜单列表
export const addFunction = (params: Function.ResFunction) => {
return http.post(`/sysFunction/add`,params);
};
//删除菜单列表
export const deleteFunction = (params: Function.ResFunction) => {
return http.post(`/sysFunction/delete?id=${params.id}`);
};
//编辑菜单列表
export const updateFunction = (params: Function.ResFunction) => {
return http.post(`/sysFunction/update`, params);
};

View File

@@ -21,10 +21,11 @@ export namespace Function {
pids?:string | null;//节点上层所有节点 pids?:string | null;//节点上层所有节点
name: string;//名称 name: string;//名称
code:string;//资源标识 code:string;//资源标识
path:string;//路径 path:string;//路由路
icon?:string | null;//图标 component:string ;//组件地址
icon?:string;//图标
sort:number;//排序 sort:number;//排序
type:number | null;//资源类型0-菜单、1-按钮、2-公共资源、3-服务间调用资源 type:number;//资源类型0-菜单、1-按钮、2-公共资源、3-服务间调用资源
remark?: string | null;//权限资源描述 remark?: string | null;//权限资源描述
state:number;//权限资源状态 state:number;//权限资源状态
create_By?:string | null;//创建人 create_By?:string | null;//创建人

View File

@@ -1,38 +0,0 @@
// 登录模块
import type { ReqPage } from '@/api/interface'
export namespace Login {
export interface ReqLoginForm {
username: string;
password: string;
}
export interface ResLogin {
accessToken: string;
}
export interface ResAuthButtons {
[key: string]: string[];
}
}
// 用户管理模块
export namespace User {
// 用户接口
export interface UserBO {
id?: string; //用户ID作为唯一标识
name: string; //用户名(别名)
loginName: string;//登录名
password: string; //密码
phone?: string; //手机号
email?: string; //邮箱
loginTime?: string;//最后一次登录时间
loginErrorTimes: number;//登录错误次数
lockTime?: string; //用户密码错误锁定时间
}
// 用户+分页
export interface ReqUserParams extends ReqPage,UserBO {
}
}

View File

@@ -1,33 +1,44 @@
import type { ReqPage } from '@/api/interface' import type { ReqPage, ResPage } from '@/api/interface'
// 角色管理模块 // 角色管理模块
export namespace Role { export namespace Role {
//资源接口
export interface Permission{
id: string; //资源ID
name: string; //资源名称
code: string; //资源代码
}
/**
*
*/
export interface ReqRoleParams extends ReqPage{
id: string; // 装置序号用户ID 必填
name?: string; //用户名(别名)
code?: string; //角色代码
}
//角色接口 //角色接口
export interface RoleBO { export interface RoleBO {
id?: string; //角色类型ID id: string; //角色类型ID
name: string; //角色类型名称 name: string; //角色类型名称
code: string; //角色代码 code: string; //角色代码
type: number; //角色类型 type: number; //角色类型
remark:string; //角色描述 remark?:string; //角色描述
state:number;
createBy?:string; //
createTime?: string; // 创建时间
updateBy?: string; //
updateTime?: string; // 更新时间
} }
//角色+资源 //角色接口
export interface ReqRoleAndPermission extends RoleBO{ export interface RoleFunctionId {
permissionList?:Permission[]; //角色权限列表 id: string[]; //菜单id
} }
/**
*
*/
export interface ResRolePage extends ResPage<RoleBO> {
}
// 角色+分页
export interface ReqRoleParams extends ReqPage,RoleBO {
}

View File

@@ -0,0 +1,77 @@
// 登录模块
import type { ReqPage,ResPage } from '@/api/interface'
export namespace Login {
export interface ReqLoginForm {
username: string;
password: string;
checked: boolean;
}
export interface ResLogin {
accessToken: string;
refreshToken: string;
userInfo:{
id: string;
name: string;
}
}
export interface ResAuthButtons {
[key: string]: string[];
}
}
// 用户管理模块
export namespace User {
/**
* 用户数据表格分页查询参数
*/
export interface ReqUserParams extends ReqPage{
id: string; // 装置序号用户ID 必填
name?: string; //用户名(别名)
loginTime?: string;//最后一次登录时间
}
// 用户接口
export interface ResUser {
id: string; //用户ID作为唯一标识
name: string; //用户名(别名)
loginName: string;//登录名
deptId?: number;//部门ID
password: string; //密码
phone?: string; //手机号
email?: string; //邮箱
loginTime?: string;//最后一次登录时间
loginErrorTimes: number;//登录错误次数
lockTime?: string; //用户密码错误锁定时间
state:number;//0-删除;1-正常;2-锁定;3-待审核;4-休眠;5-密码过期
createBy?: string;//创建用户
createTime?: string;//创建时间
updateBy?: string;//更新用户
updateTime?: string;//更新时间
roleIds?: string[]; //
roleNames?:string[]; //
}
// 用户接口
export interface ResPassWordUser {
id: string; //用户ID作为唯一标识
oldPassword: string; //密码
newPassword: string; //新密码
surePassword:string;
}
/**
* 用户表格查询分页返回的对象;
*/
export interface ResUserPage extends ResPage<ResUser> {
}
// // 用户+分页
// export interface ReqUserParams extends ReqPage,UserBO {
// }
}

View File

@@ -1,25 +0,0 @@
import { Login } from './interface'
import { ADMIN as rePrefix } from '@/api/config/serviceName'
import http from '@/api'
/**
* @name 登录模块
*/
// 用户登录
export const loginApi = (params: Login.ReqLoginForm) => {
return http.post<Login.ResLogin>(`${rePrefix}/login`, params, { loading: false })
//return http.post<Login.ResLogin>(`/Register1`, params, { loading: false })
}
// 获取菜单列表
export const getAuthMenuListApi = () => {
return http.get<Menu.MenuOptions[]>(`${rePrefix}/menu/list`, {}, { loading: false })
// return http.post<Menu.MenuOptions[]>(`/Register2`, {}, { loading: false })
}
// 获取按钮权限
export const getAuthButtonListApi = () => {
return http.get<Login.ResAuthButtons>(`${rePrefix}/auth/buttons`, {}, { loading: false })
// return http.post<Login.ResAuthButtons>(`/Register3`, {}, { loading: false })
}
// 用户退出登录
export const logoutApi = () => {
return http.post(`${rePrefix}/logout`)
}

View File

@@ -0,0 +1,59 @@
import type {Login} from '@/api/user/interface/user'
import {ADMIN as rePrefix} from '@/api/system/config/serviceName'
import http from '@/api'
import type {Dict} from '@/api/interface'
/**
* @name 登录模块
*/
// 用户登录
export const loginApi = (params: { username: string; password: string}) => {
return http.post<Login.ResLogin>(`${rePrefix}/login`, params, {loading: false})
// return http.post<Login.ResLogin>(`/Register1`, params, { loading: false })
}
// 获取菜单列表
export const getAuthMenuListApi = () => {
return http.get<Menu.MenuOptions[]>(`/sysFunction/getMenu`, {}, {loading: false})
// return http.post<Menu.MenuOptions[]>(`/Register2`, {}, { loading: false })
}
// 获取按钮权限
export const getAuthButtonListApi = () => {
return http.get<Login.ResAuthButtons>(`/sysFunction/getButton`, {}, {loading: false})
// return http.post<Login.ResAuthButtons>(`/Register3`, {}, { loading: false })
}
// 用户退出登录
export const logoutApi = () => {
return http.post(`${rePrefix}/logout`)
}
//获取下拉框列表
export const getDictList = () => {
return http.get<Dict>('/dictData/dictDataCache')
}
//token刷新
export const refreshToken = () => {
return http.get<Login.ResLogin>(`${rePrefix}/refreshToken`,
{},
{loading: false}
)
}
//获取场景
export const getCurrentScene = () => {
return http.get('/sysTestConfig/getCurrentScene', {}, {loading: false})
}
/**
* 获取RSA公钥
*/
export const getPublicKey = (username: string) => {
return http.get(`/admin/getPublicKey?username=${username}`, {}, {loading: false})
}
/**
* 获取是否在检测中自动生成报告
*/
export const getAutoGenerate = () => {
return http.get('/sysTestConfig/getAutoGenerate', {}, {loading: false})
}

View File

@@ -0,0 +1,46 @@
import type { Role } from '@/api/user/interface/role'
import type { Function } from '@/api/user/interface/function'
import http from '@/api'
/**
* @name 角色管理模块
*/
// 获取角色列表
export const getRoleList = (params: Role.ReqRoleParams) => {
return http.post(`/sysRole/list`, params)
// return http.post<ResPage<Role.ResRoleList>>(`/RoleList_Post`, params)
// return http.post<ResPage<Role.ResRoleList>>(`${rePrefix}/role/list`, params)
}
// 新增角色
export const addRole = (params: Role.RoleBO) => {
return http.post(`/sysRole/add`, params)
}
// 编辑角色
export const editRole = (params: Role.RoleBO) => {
return http.post(`/sysRole/update`, params)
}
// 删除角色
export const deleteRole = (params: { id: string[] }) => {
return http.post(`/sysRole/delete`, params)
}
// 获取资源
export const getFunctionList = () => {
return http.get<Function.ResFunction>(`/sysFunction/getTree?keyword=`)
}
//获取角色id绑定的菜单
export const getRoleFunction = (params:Role.RoleBO) => {
return http.post(`/sysFunction/getFunctionsByRoleId?id=${params.id}`)
}
//角色分配菜单
export const assignFunction = (params:Role.RoleBO,param:Role.RoleFunctionId) => {
return http.post(`/sysFunction/assignFunctionByRoleId`,{ roleId: params.id,functionIds:param.id })
}

View File

@@ -1,57 +0,0 @@
import { ResPage } from '@/api/interface'
import { User } from './interface'
import { ADMIN as rePrefix } from '@/api/config/serviceName'
import http from '@/api'
/**
* @name 用户管理模块
*/
// 获取用户列表
export const getUserList = (params: User.ReqUserParams) => {
return http.post<ResPage<User.UserBO>>(`/user/list`, params)
}
// 获取树形用户列表
// export const getUserTreeList = (params: User.ReqUserParams) => {
// return http.post<ResPage<User.ResUserList>>(`${rePrefix}/user/tree/list`, params)
// }
// 新增用户
export const addUser = (params: User.UserBO) => {
return http.post(`/user/add`, params)
}
// 批量添加用户
export const BatchAddUser = (params: FormData) => {
return http.post(`${rePrefix}/user/import`, params)
}
// 编辑用户
export const editUser = (params: User.UserBO) => {
return http.post(`/user/edit`, params)
}
// 删除用户
export const deleteUser = (params: { id: string[] }) => {
return http.post(`/user/delete`, params)
}
// 切换用户状态
// export const changeUserStatus = (params: { id: string; status: number }) => {
// return http.post(`${rePrefix}/user/change`, params)
// }
// 重置用户密码
// export const resetUserPassWord = (params: { id: string }) => {
// return http.post(`${rePrefix}/user/rest_password`, params)
// }
// 导出用户数据
export const exportUserInfo = (params: User.ReqUserParams) => {
return http.download(`${rePrefix}/user/export`, params)
}
// 获取用户状态字典
// export const getUserStatus = () => {
// return http.get<User.ResStatus[]>(`${rePrefix}/user/status`)
// }

View File

@@ -0,0 +1,39 @@
import type { Role } from '@/api/user/interface/role'
import type { User } from '@/api/user/interface/user'
import http from '@/api'
/**
* @name 用户管理模块
*/
// 获取用户列表
export const getUserList = (params: User.ReqUserParams) => {
return http.post(`/sysUser/list`, params)
}
// 新增用户
export const addUser = (params: User.ResUser) => {
return http.post(`/sysUser/add`, params)
}
// 编辑用户
export const updateUser = (params: User.ResUser) => {
return http.post(`/sysUser/update`, params)
}
// 删除用户
export const deleteUser = (params: string[] ) => {
return http.post(`/sysUser/delete`, params)
}
// 获取角色列表
export const getRoleList = () => {
return http.get<Role.RoleBO>(`/sysRole/simpleList`)
}
//修改密码
export const updatePassWord = (params: User.ResPassWordUser) => {
return http.post(`/sysUser/updatePassword`,params)
}

View File

@@ -1,133 +0,0 @@
const data = [
{
'id': '623689732233728549',
'username': 'admin_A',
'password': '12345678',
'realname': '薛霞',
'status': 0,
'rolename': '管理员',
},
{
'id': '621003764863621316',
'username': 'admin_B',
'password': '12345678',
'realname': '冯敏',
'status': 1,
'rolename': '管理员',
},
// {
// 'id': '652286556713195552',
// 'username': 'operator_A',
// 'password': '12345678',
// 'realname': '潘霞',
// 'status': 1,
// 'rolename': '操作员',
// },
// {
// 'id': '373930342176416776',
// 'username': 'operator_B',
// 'password': '12345678',
// 'realname': '郝秀英',
// 'status': 0,
// 'rolename': '操作员',
// },
// {
// 'id': '429621442453555775',
// 'username': 'operator_C',
// 'password': '12345678',
// 'realname': '吕洋',
// 'status': 1,
// 'rolename': '操作员',
// },
// {
// 'id': '387231964476618937',
// 'username': 'operator_D',
// 'password': '12345678',
// 'realname': '江磊',
// 'status': 0,
// 'rolename': '操作员',
// },
// {
// 'id': '604013348875476647',
// 'username': 'operator_E',
// 'password': '12345678',
// 'realname': '姚静',
// 'status': 0,
// 'rolename': '操作员',
// },
// {
// 'id': '028222596330483467',
// 'username': 'operator_F',
// 'password': '12345678',
// 'realname': '龙艳',
// 'status': 1,
// 'rolename': '操作员',
// },
// {
// 'id': '739427478368274267',
// 'username': 'operator_G',
// 'password': '12345678',
// 'realname': '武涛',
// 'status': 1,
// 'rolename': '操作员',
// },
// {
// 'id': '448686878612127243',
// 'username': 'operator_H',
// 'password': '12345678',
// 'realname': '孙芳',
// 'status': 0,
// 'rolename': '操作员',
// },
// {
// 'id': '448686878612127244',
// 'username': 'operator_I',
// 'password': '12345678',
// 'realname': '孙芳1',
// 'status': 0,
// 'rolename': '操作员',
// },
// {
// 'id': '448686878612127245',
// 'username': 'operator_J',
// 'password': '12345678',
// 'realname': '孙芳2',
// 'status': 1,
// 'rolename': '操作员',
// },
// {
// 'id': '448686878612127245',
// 'username': 'operator_J',
// 'password': '12345678',
// 'realname': '孙芳2',
// 'status': 1,
// 'rolename': '操作员',
// },
// {
// 'id': '448686878612127245',
// 'username': 'operator_J',
// 'password': '12345678',
// 'realname': '孙芳2',
// 'status': 1,
// 'rolename': '操作员',
// },
// {
// 'id': '448686878612127245',
// 'username': 'operator_J',
// 'password': '12345678',
// 'realname': '孙芳2',
// 'status': 1,
// 'rolename': '操作员',
// },
// {
// 'id': '448686878612127245',
// 'username': 'operator_J',
// 'password': '12345678',
// 'realname': '孙芳2',
// 'status': 1,
// 'rolename': '操作员',
// }
]
export default data

View File

@@ -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="1731580516863" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1484" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M469.333333 85.333333m42.666667 0l0 0q42.666667 0 42.666667 42.666667l0 128q0 42.666667-42.666667 42.666667l0 0q-42.666667 0-42.666667-42.666667l0-128q0-42.666667 42.666667-42.666667Z" fill="#f38d0d" opacity=".8" p-id="1485"></path><path d="M469.333333 725.333333m42.666667 0l0 0q42.666667 0 42.666667 42.666667l0 128q0 42.666667-42.666667 42.666667l0 0q-42.666667 0-42.666667-42.666667l0-128q0-42.666667 42.666667-42.666667Z" fill="#f38d0d" opacity=".4" p-id="1486"></path><path d="M938.666667 469.333333m0 42.666667l0 0q0 42.666667-42.666667 42.666667l-128 0q-42.666667 0-42.666667-42.666667l0 0q0-42.666667 42.666667-42.666667l128 0q42.666667 0 42.666667 42.666667Z" fill="#f38d0d" opacity=".2" p-id="1487"></path><path d="M298.666667 469.333333m0 42.666667l0 0q0 42.666667-42.666667 42.666667l-128 0q-42.666667 0-42.666667-42.666667l0 0q0-42.666667 42.666667-42.666667l128 0q42.666667 0 42.666667 42.666667Z" fill="#f38d0d" opacity=".6" p-id="1488"></path><path d="M783.530667 180.138667m30.169889 30.169889l0 0q30.169889 30.169889 0 60.339779l-90.509668 90.509668q-30.169889 30.169889-60.339779 0l0 0q-30.169889-30.169889 0-60.339779l90.509668-90.509668q30.169889-30.169889 60.339779 0Z" fill="#f38d0d" opacity=".1" p-id="1489"></path><path d="M330.965333 632.661333m30.16989 30.16989l0 0q30.169889 30.169889 0 60.339778l-90.509668 90.509668q-30.169889 30.169889-60.339779 0l0 0q-30.169889-30.169889 0-60.339778l90.509668-90.509668q30.169889-30.169889 60.339779 0Z" fill="#f38d0d" opacity=".5" p-id="1490"></path><path d="M843.861333 783.530667m-30.169889 30.169889l0 0q-30.169889 30.169889-60.339779 0l-90.509668-90.509668q-30.169889-30.169889 0-60.339779l0 0q30.169889-30.169889 60.339779 0l90.509668 90.509668q30.169889 30.169889 0 60.339779Z" fill="#f38d0d" opacity=".3" p-id="1491"></path><path d="M391.338667 330.965333m-30.16989 30.16989l0 0q-30.169889 30.169889-60.339778 0l-90.509668-90.509668q-30.169889-30.169889 0-60.339779l0 0q30.169889-30.169889 60.339778 0l90.509668 90.509668q30.169889 30.169889 0 60.339779Z" fill="#f38d0d" opacity=".7" p-id="1492"></path></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -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="1732514869986" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16631" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M365.631638 689.60904H222.155932c-18.512994 0-37.025989 18.512994-37.025988 37.025988s18.512994 37.025989 37.025988 37.025989h143.475706c13.884746 0 23.141243-4.628249 32.397741-18.512994s4.628249-23.141243 0-37.025989-23.141243-18.512994-32.397741-18.512994zM467.453107 527.620339c4.628249-9.256497 4.628249-23.141243 0-37.025989-4.628249-9.256497-18.512994-18.512994-32.39774-18.512994H217.527684c-13.884746 0-23.141243 4.628249-32.39774 18.512994-4.628249 9.256497-4.628249 23.141243 0 37.025989 4.628249 9.256497 18.512994 18.512994 32.39774 18.512994h217.527683c13.884746 0 27.769492-9.256497 32.39774-18.512994z" fill="#bfbfbf" p-id="16632"></path><path d="M620.185311 944.162712H171.245198c-27.769492 0-50.910734-9.256497-69.423729-27.769492-18.512994-18.512994-27.769492-41.654237-27.769492-69.423728V171.245198c0-27.769492 9.256497-50.910734 27.769492-69.423729s41.654237-27.769492 69.423729-27.769492h675.724294c27.769492 0 50.910734 9.256497 69.423728 27.769492 18.512994 18.512994 27.769492 41.654237 27.769492 69.423729v448.940113c0 18.512994 18.512994 37.025989 37.025989 37.025988s37.025989-13.884746 37.025988-37.025988V171.245198c0-46.282486-18.512994-87.936723-50.910734-120.334464C934.906215 18.512994 893.251977 0 846.969492 0H171.245198c-46.282486 0-87.936723 18.512994-120.334464 50.910734C18.512994 83.308475 0 124.962712 0 171.245198v675.724294c0 46.282486 18.512994 87.936723 50.910734 120.334463 32.39774 32.39774 74.051977 50.910734 120.334464 50.910734h448.940113c18.512994 0 37.025989-18.512994 37.025988-37.025988-4.628249-18.512994-18.512994-37.025989-37.025988-37.025989z" fill="#bfbfbf" p-id="16633"></path><path d="M837.712994 291.579661c0-18.512994-18.512994-37.025989-37.025988-37.025989H217.527684c-18.512994 0-37.025989 18.512994-37.025989 37.025989s18.512994 37.025989 37.025989 37.025989h583.159322c18.512994 0 37.025989-18.512994 37.025988-37.025989zM1008.958192 958.047458l-138.847458-138.847458c64.79548-92.564972 50.910734-222.155932-37.025988-291.579661-87.936723-74.051977-212.899435-69.423729-296.20791 13.884746-78.680226 78.680226-87.936723 208.271186-13.884746 296.207909 74.051977 87.936723 199.014689 101.821469 291.579661 37.025989l138.847458 138.847458c13.884746 13.884746 37.025989 13.884746 50.910735 0s18.512994-41.654237 4.628248-55.538983z m-212.899435-161.988701c-27.769492 27.769492-64.79548 41.654237-101.821469 41.654237-69.423729 0-129.59096-50.910734-143.475706-115.706214s23.141243-134.219209 87.936723-161.988701 138.847458-4.628249 175.873446 55.538983c37.025989 50.910734 27.769492 129.59096-18.512994 180.501695z" fill="#bfbfbf" p-id="16634"></path></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -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="1732514910835" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17830" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M960.24 688.95c-18.01-3.5-35.36 8.28-38.83 26.25-20.79 107.56-103.26 189.89-205.21 204.89-18.11 2.66-30.63 19.5-27.97 37.61 2.42 16.47 16.57 28.32 32.74 28.32 1.61 0 3.24-0.11 4.87-0.36 129.77-19.09 234.52-122.71 260.64-257.88 3.48-17.97-8.26-35.35-26.24-38.83z" fill="#666666" p-id="17831"></path><path d="M719.89 875.33c5.11 0 10.31-1.2 15.17-3.7 64.25-33.18 116-89.16 145.74-157.64 7.29-16.79-0.41-36.31-17.21-43.6-16.78-7.27-36.29 0.43-43.6 17.21-23.66 54.5-64.63 98.94-115.33 125.12-16.27 8.4-22.65 28.4-14.25 44.66 5.89 11.41 17.48 17.95 29.48 17.95zM312.62 540.45c-21.23-21.19-55.78-21.21-76.99 0.02L53.07 723.03c-10.29 10.29-15.97 23.96-15.97 38.52 0 14.54 5.66 28.22 15.96 38.51l104.58 104.58c10.61 10.62 24.55 15.91 38.5 15.91 13.94 0 27.88-5.3 38.51-15.91l182.57-182.57c21.23-21.23 21.23-55.77 0-77l-104.6-104.62zM196.13 849.39l-87.83-87.83 165.84-165.84 87.83 87.83-165.84 165.84zM643.92 418.3c10.29 10.29 23.97 15.97 38.53 15.97 14.54 0 28.22-5.68 38.5-15.96l182.57-182.56 0.02-0.01c21.2-21.23 21.2-55.78-0.02-76.99L798.93 54.16c-21.22-21.22-55.76-21.24-77 0L539.34 236.74c-21.2 21.23-21.2 55.78 0.02 76.99L643.92 418.3z m116.51-308.9l87.84 87.84-165.83 165.83-87.84-87.83L760.43 109.4zM596.09 714.69c-20.79-20.8-18.77-56.66 4.51-79.95l28.56-28.56c11.6-11.59 26.54-18.28 42.09-18.83 14.49-0.9 28.11 4.55 37.85 14.32 0.01 0.01 0.02 0.01 0.03 0.02l10.18 10.18c12.95 12.95 33.92 12.95 46.87 0 12.95-12.94 12.95-33.93 0-46.87L756 554.84c-0.01-0.01-0.01-0.02-0.02-0.03-0.02-0.02-0.04-0.03-0.06-0.05L623.06 421.89c-0.01-0.01-0.01-0.02-0.02-0.03-0.02-0.02-0.04-0.03-0.06-0.05l-85.92-85.92c-43.22-43.22-113.54-43.22-156.76 0l-49.99 49.99c-43.22 43.22-43.22 113.54 0 156.76l229.12 229.12a33.037 33.037 0 0 0 23.43 9.71c8.48 0 16.96-3.24 23.43-9.71 12.95-12.94 12.95-33.93 0-46.87l-10.2-10.2z m-13.8-155.39l-28.57 28.56c-15.36 15.36-25.55 33.65-31.65 52.8l-58.92-58.92c-20.79-20.8-18.77-56.66 4.51-79.95l28.56-28.56c11.6-11.59 26.54-18.28 42.09-18.83 14.33-0.82 28.09 4.55 37.85 14.32 0.01 0.01 0.02 0.01 0.03 0.02l58.83 58.83c-19.51 6.26-37.69 16.7-52.73 31.73z m-218.16-95.04c0-11.9 4.64-23.09 13.05-31.51l49.99-49.99c16.85-16.83 46.2-16.83 63.03 0l11.88 11.88c-19.51 6.25-37.69 16.69-52.72 31.73l-28.56 28.56c-15.36 15.36-25.56 33.64-31.66 52.79l-11.95-11.95c-8.43-8.41-13.06-19.61-13.06-31.51z" fill="#666666" p-id="17832"></path><path d="M723.12 632.91c-12.94-12.94-33.93-12.94-46.87 0l-49.11 49.11c-12.94 12.94-12.94 33.93 0 46.87 12.94 12.94 33.93 12.94 46.87 0l49.11-49.11c12.94-12.94 12.94-33.92 0-46.87z" fill="#666666" p-id="17833"></path></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -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="1732514403639" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13633" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M387.018497 210.626092c17.179264 0 31.099299-13.925151 31.099299-31.099299l0-10.366092 186.597839 0 0 10.366092c0 17.175171 13.920034 31.099299 31.099299 31.099299s31.099299-13.925151 31.099299-31.099299L666.914232 96.593965c0-17.175171-13.920034-31.099299-31.099299-31.099299s-31.099299 13.925151-31.099299 31.099299l0 10.366092L418.117796 106.960057l0-10.366092c0-17.175171-13.920034-31.099299-31.099299-31.099299s-31.099299 13.925151-31.099299 31.099299l0 82.932828C355.919199 196.700941 369.83821 210.626092 387.018497 210.626092z" fill="#999999" p-id="13634"></path><path d="M400.416646 314.944995c-17.179264 0-31.099299 13.925151-31.099299 31.099299l0 30.340005c0 17.175171 13.920034 31.099299 31.099299 31.099299s31.099299-13.925151 31.099299-31.099299L431.515944 346.044294C431.516967 328.869123 417.596933 314.944995 400.416646 314.944995z" fill="#999999" p-id="13635"></path><path d="M622.416785 314.944995c-17.179264 0-31.099299 13.925151-31.099299 31.099299l0 30.340005c0 17.175171 13.920034 31.099299 31.099299 31.099299s31.099299-13.925151 31.099299-31.099299L653.516084 346.044294C653.517107 328.869123 639.597073 314.944995 622.416785 314.944995z" fill="#999999" p-id="13636"></path><path d="M511.103584 546.380018c43.773969 0 74.783217-30.18344 86.212524-48.016597 9.182127-14.33038 5.021364-33.210379-9.202593-42.569538-14.213723-9.379625-33.428344-5.385661-42.974767 8.706289-0.132006 0.197498-13.555737 19.680225-34.035164 19.680225-19.903306 0-32.29452-18.039865-33.124422-19.290345-9.151427-14.349823-28.173666-18.72855-42.650379-9.718339-14.588253 9.06547-19.072381 28.245298-10.001795 42.832528C436.493306 515.968381 467.116767 546.380018 511.103584 546.380018z" fill="#999999" p-id="13637"></path><path d="M463.633433 898.665457 266.173199 898.665457c-41.648562 0-75.532277-34.713616-75.532277-77.374228l0-574.913888c0-42.665729 33.883715-77.374228 75.532277-77.374228 17.179264 0 31.099299-13.925151 31.099299-31.099299s-13.920034-31.099299-31.099299-31.099299c-75.946716 0-137.730874 62.61406-137.730874 139.573849l0 574.913888c0 76.959789 61.784158 139.573849 137.730874 139.573849L463.633433 960.866101c17.179264 0 31.099299-13.920034 31.099299-31.099299S480.81372 898.665457 463.633433 898.665457z" fill="#999999" p-id="13638"></path><path d="M756.661256 106.803491c-17.179264 0-31.099299 13.925151-31.099299 31.099299s13.920034 31.099299 31.099299 31.099299c41.648562 0 75.532277 34.7085 75.532277 77.374228L832.193533 551.401382c0 17.175171 13.920034 31.099299 31.099299 31.099299s31.099299-13.925151 31.099299-31.099299L894.39213 246.37734C894.39213 169.417551 832.607972 106.803491 756.661256 106.803491z" fill="#999999" p-id="13639"></path><path d="M840.980663 650.76953 613.392248 885.125069l-110.711498-114.006544c-11.975752-12.325723-31.655977-12.614296-43.976584-0.647753-12.320607 11.966543-12.614296 31.655977-0.647753 43.976584l133.023666 136.981814c0.10847 0.110517 0.23843 0.183172 0.347924 0.291642 0.11154 0.11154 0.186242 0.245593 0.299829 0.356111 0.771573 0.74906 1.644453 1.311879 2.470261 1.963725 0.704035 0.556679 1.363044 1.183965 2.101871 1.671059 1.031493 0.680499 2.131547 1.187035 3.219321 1.731434 0.730641 0.366344 1.426489 0.816598 2.178619 1.121544 1.25048 0.50756 2.548032 0.823761 3.841491 1.162476 0.642636 0.167822 1.26276 0.429789 1.912559 0.555655 1.961678 0.38067 3.949962 0.581238 5.939269 0.581238s3.977591-0.200568 5.939269-0.581238c0.650823-0.12689 1.269923-0.387833 1.912559-0.555655 1.293459-0.338714 2.591011-0.654916 3.841491-1.162476 0.75213-0.304945 1.447978-0.7552 2.178619-1.121544 1.087774-0.544399 2.187829-1.050935 3.219321-1.731434 0.738827-0.487094 1.397836-1.11438 2.101871-1.671059 0.825808-0.651846 1.698688-1.215688 2.470261-1.963725 0.113587-0.110517 0.188288-0.24457 0.299829-0.356111 0.109494-0.10847 0.239454-0.181125 0.347924-0.291642l249.900583-257.331833c11.966543-12.320607 11.672854-32.011064-0.647753-43.976584C872.637664 638.160351 852.956416 638.438691 840.980663 650.76953z" fill="#999999" p-id="13640"></path></svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -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="1732515039802" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21450" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 1024C230.4 1024 0 793.6 0 512S230.4 0 512 0s512 230.4 512 512-230.4 512-512 512z m135.68-320H376.32c-12.8 0-20.48 17.92-20.48 17.92v20.48h314.88v-17.92c0-10.24-10.24-20.48-23.04-20.48zM709.12 281.6H314.88C281.6 281.6 256 307.2 256 335.36v258.56c0 28.16 25.6 53.76 58.88 53.76h135.68v17.92c0 7.68 7.68 17.92 20.48 17.92h76.8c12.8 0 20.48-7.68 20.48-17.92v-17.92h135.68c33.28 0 58.88-25.6 58.88-53.76V335.36C768 307.2 742.4 281.6 709.12 281.6zM314.88 576c-12.8 0-20.48-7.68-20.48-17.92v-222.72c0-7.68 7.68-17.92 20.48-17.92h391.68c12.8 0 20.48 7.68 20.48 17.92v222.72c0 7.68-7.68 17.92-20.48 17.92H314.88z m394.24 56.32c-7.68 0-12.8-5.12-17.92-7.68s-5.12-12.8 0-20.48c5.12-5.12 7.68-7.68 17.92-7.68 7.68 0 12.8 5.12 17.92 7.68 5.12 5.12 5.12 12.8 0 20.48-5.12 5.12-10.24 7.68-17.92 7.68z m-51.2-266.24L588.8 424.96 542.72 384c0-5.12-7.68-5.12-12.8-5.12s-12.8 5.12-12.8 7.68l-58.88 97.28-25.6-53.76c0-7.68-7.68-12.8-12.8-12.8-7.68 0-12.8 0-17.92 5.12l-58.88 53.76c-7.68 7.68-7.68 20.48 0 25.6 7.68 7.68 20.48 7.68 25.6 0l38.4-33.28 30.72 66.56c5.12 7.68 7.68 12.8 17.92 12.8 7.68 0 12.8-5.12 17.92-12.8l64-110.08 43.52 38.4c7.68 7.68 20.48 7.68 30.72 0l76.8-71.68c5.12-5.12 7.68-12.8 5.12-17.92 0-7.68-7.68-12.8-12.8-12.8-15.36-5.12-20.48 0-23.04 5.12z" p-id="21451" fill="#bfbfbf"></path></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -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="1732515166779" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="27890" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M418.95 374.32c-38.78 0-63.02 41.98-43.63 75.57l154.61 267.79c12.5-3.1 23.99-10.99 31.32-23.68l184.57-319.68H418.95z" fill="#cdcdcd" p-id="27891"></path><path d="M803.55 299.32H348.43c-13.81 0-25-11.19-25-25s11.19-25 25-25h455.13c13.81 0 25 11.19 25 25s-11.2 25-25.01 25z" fill="#cdcdcd" p-id="27892"></path><path d="M231.68 274.32m-57.35 0a57.35 57.35 0 1 0 114.7 0 57.35 57.35 0 1 0-114.7 0Z" fill="#cdcdcd" p-id="27893"></path><path d="M231.68 332.17c-31.9 0-57.85-25.95-57.85-57.85s25.95-57.85 57.85-57.85c31.9 0 57.85 25.95 57.85 57.85s-25.95 57.85-57.85 57.85z m0-114.7c-31.35 0-56.85 25.5-56.85 56.85s25.5 56.85 56.85 56.85 56.85-25.5 56.85-56.85-25.5-56.85-56.85-56.85z" fill="#cdcdcd" p-id="27894"></path><path d="M196.5 410.67c-2.49 0-5.03-0.38-7.53-1.17-28.53-9.01-53.09-26.5-71.03-50.6-18.32-24.6-28-53.85-28-84.59 0-78.16 63.59-141.74 141.74-141.74s141.74 63.59 141.74 141.74c0 13.81-11.19 25-25 25s-25-11.19-25-25c0-50.59-41.16-91.74-91.74-91.74s-91.74 41.16-91.74 91.74c0 40.24 25.75 75.41 64.08 87.51 13.17 4.16 20.47 18.2 16.31 31.37-3.36 10.67-13.21 17.48-23.83 17.48z" fill="#cdcdcd" p-id="27895"></path><path d="M459.27 690.78c-8.64 0-17.04-4.48-21.67-12.5L210.03 284.12c-6.9-11.96-2.81-27.25 9.15-34.15 11.96-6.9 27.25-2.81 34.15 9.15L480.9 653.27c6.9 11.96 2.81 27.25-9.15 34.15a24.846 24.846 0 0 1-12.48 3.36z" fill="#cdcdcd" p-id="27896"></path><path d="M517.62 766.88m-57.35 0a57.35 57.35 0 1 0 114.7 0 57.35 57.35 0 1 0-114.7 0Z" fill="#cdcdcd" p-id="27897"></path><path d="M517.71 824.75c-5.03 0-10.08-0.66-15.07-2-14.93-4-27.4-13.57-35.13-26.96-7.73-13.38-9.78-28.97-5.78-43.9 4-14.93 13.57-27.4 26.96-35.13 27.63-15.95 63.08-6.45 79.03 21.18 15.95 27.63 6.45 63.08-21.17 79.03-8.92 5.15-18.81 7.78-28.84 7.78z m-0.19-114.71c-9.64 0-19.4 2.45-28.33 7.61-13.15 7.59-22.56 19.85-26.49 34.52-3.93 14.67-1.91 29.99 5.68 43.14s19.85 22.56 34.52 26.49c14.67 3.93 29.99 1.91 43.14-5.68 27.15-15.67 36.48-50.51 20.81-77.66-10.52-18.23-29.67-28.42-49.33-28.42z" fill="#cdcdcd" p-id="27898"></path><path d="M517.85 908.59c-49.03 0-96.77-25.42-122.99-70.84-39.08-67.69-15.8-154.55 51.88-193.63 11.96-6.9 27.25-2.81 34.15 9.15s2.81 27.25-9.15 34.15c-43.81 25.29-58.87 81.51-33.58 125.32 16.97 29.4 47.88 45.85 79.61 45.85 15.56 0 31.31-3.95 45.72-12.27 34.85-20.12 52.43-60 43.74-99.25-2.98-13.48 5.53-26.83 19.01-29.81 13.48-2.98 26.83 5.53 29.81 19.01 6.46 29.21 3.59 59.23-8.3 86.82-12.14 28.16-32.63 51.17-59.26 66.54-22.26 12.85-46.61 18.96-70.64 18.96z" fill="#cdcdcd" p-id="27899"></path><path d="M517.59 791.88c-4.24 0-8.54-1.08-12.48-3.35-11.96-6.9-16.05-22.19-9.15-34.15l227.56-394.15c6.9-11.96 22.19-16.05 34.15-9.15 11.96 6.9 16.05 22.19 9.15 34.15L539.27 779.38c-4.63 8.02-13.04 12.5-21.68 12.5z" fill="#cdcdcd" p-id="27900"></path><path d="M803.55 271.62m-57.35 0a57.35 57.35 0 1 0 114.7 0 57.35 57.35 0 1 0-114.7 0Z" fill="#cdcdcd" p-id="27901"></path><path d="M803.45 329.46a57.47 57.47 0 0 1-28.83-7.74c-27.63-15.95-37.12-51.4-21.17-79.03 15.95-27.62 51.4-37.13 79.03-21.18 13.38 7.73 22.96 20.2 26.96 35.13s1.95 30.52-5.78 43.9c-10.71 18.55-30.2 28.92-50.21 28.92z m0.2-114.68c-19.66 0-38.81 10.2-49.33 28.42-15.67 27.15-6.34 61.99 20.81 77.66 27.15 15.67 61.99 6.34 77.66-20.81 7.59-13.15 9.61-28.47 5.68-43.14s-13.34-26.93-26.49-34.52a56.46 56.46 0 0 0-28.33-7.61z" fill="#cdcdcd" p-id="27902"></path><path d="M803.31 413.34c-24.03 0-48.37-6.11-70.63-18.96-11.96-6.9-16.05-22.19-9.15-34.15 6.9-11.96 22.19-16.05 34.15-9.15 43.81 25.29 100.03 10.23 125.32-33.58 25.29-43.81 10.23-100.03-33.58-125.32-34.85-20.12-78.18-15.4-107.82 11.74-10.18 9.32-26 8.63-35.32-1.56-9.32-10.18-8.63-26 1.56-35.32 22.06-20.2 49.5-32.72 79.34-36.22 30.46-3.56 60.63 2.68 87.25 18.05 67.69 39.08 90.96 125.94 51.88 193.62-26.23 45.42-73.97 70.85-123 70.85z" fill="#cdcdcd" p-id="27903"></path></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -27,14 +27,13 @@ const dialogVisible = ref<Boolean>(false);
const dialogTitle = ref<string>(""); const dialogTitle = ref<string>("");
const openDialog = (title: string) => { const openDialog = (title: string) => {
dialogTitle.value = title; dialogTitle.value = title;
console.log(dialogVisible.value);
dialogVisible.value = true; dialogVisible.value = true;
}; };
defineExpose({ defineExpose({
openDialog, openDialog,
}); });
onMounted(() => { onMounted(() => {
console.log();
}); });
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

View File

@@ -112,7 +112,7 @@ const findIndex = () => {
}, 0) }, 0)
if (!find) hiddenIndex.value = -1 if (!find) hiddenIndex.value = -1
} catch (e) { } catch (e) {
// console.warn(e);
} }
} }

View File

@@ -1,52 +1,53 @@
<template> <template>
<el-dialog v-model="dialogVisible" :title="`批量添加${parameter.title}`" :destroy-on-close="true" width="580px" draggable> <el-dialog v-model='dialogVisible' :title='`批量添加${parameter.title}`' :destroy-on-close='true' width='580px'
<el-form class="drawer-multiColumn-form" label-width="100px"> draggable>
<el-form-item label="模板下载 :"> <el-form class='drawer-multiColumn-form' label-width='100px'>
<el-button type="primary" :icon="Download" @click="downloadTemp"> 点击下载 </el-button> <el-form-item label='模板下载 :'>
<el-button type='primary' :icon='Download' @click='downloadTemp'> 点击下载</el-button>
</el-form-item> </el-form-item>
<el-form-item label="文件上传 :"> <el-form-item label='文件上传 :'>
<el-upload <el-upload
action="#" action='#'
class="upload" class='upload'
:drag="true" :drag='true'
:limit="excelLimit" :limit='excelLimit'
:multiple="true" :multiple='true'
:show-file-list="true" :show-file-list='true'
:http-request="uploadExcel" :http-request='uploadExcel'
:before-upload="beforeExcelUpload" :before-upload='beforeExcelUpload'
:on-exceed="handleExceed" :on-exceed='handleExceed'
:on-success="excelUploadSuccess"
:on-error="excelUploadError"
:accept="parameter.fileType!.join(',')" :accept="parameter.fileType!.join(',')"
> >
<slot name="empty"> <slot name='empty'>
<el-icon class="el-icon--upload"> <el-icon class='el-icon--upload'>
<upload-filled /> <upload-filled />
</el-icon> </el-icon>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div> <div class='el-upload__text'>将文件拖到此处<em>点击上传</em></div>
</slot> </slot>
<template #tip> <template #tip>
<slot name="tip"> <slot name='tip'>
<div class="el-upload__tip">请上传 .xls , .xlsx 标准格式文件文件最大为 {{ parameter.fileSize }}M</div> <div class='el-upload__tip'>请上传 .xls , .xlsx 标准格式文件文件最大为 {{ parameter.fileSize }}M</div>
</slot> </slot>
</template> </template>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="数据覆盖 :"> <el-form-item v-if='parameter.showCover' label='数据覆盖 :'>
<el-switch v-model="isCover" /> <el-switch v-model='isCover' />
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-dialog> </el-dialog>
</template> </template>
<script setup lang="ts" name="ImportExcel"> <script setup lang='ts' name='ImportExcel'>
import { ref } from "vue"; import { ref } from 'vue'
import { useDownload } from "@/hooks/useDownload"; import { useDownload } from '@/hooks/useDownload'
import { Download } from "@element-plus/icons-vue"; import { Download } from '@element-plus/icons-vue'
import { ElNotification, UploadRequestOptions, UploadRawFile } from "element-plus"; import { ElNotification, UploadRequestOptions, UploadRawFile, ElMessage } from 'element-plus'
export interface ExcelParameterProps { export interface ExcelParameterProps {
title: string; // 标题 title: string; // 标题
showCover?: boolean; // 是否显示”数据覆盖“选项
patternId?: string; // 模式ID
fileSize?: number; // 上传文件的大小 fileSize?: number; // 上传文件的大小
fileType?: File.ExcelMimeType[]; // 上传文件的类型 fileType?: File.ExcelMimeType[]; // 上传文件的类型
tempApi?: (params: any) => Promise<any>; // 下载模板的Api tempApi?: (params: any) => Promise<any>; // 下载模板的Api
@@ -55,95 +56,132 @@ export interface ExcelParameterProps {
} }
// 是否覆盖数据 // 是否覆盖数据
const isCover = ref(false); const isCover = ref(false)
// 最大文件上传数 // 最大文件上传数
const excelLimit = ref(1); const excelLimit = ref(1)
// dialog状态 // dialog状态
const dialogVisible = ref(false); const dialogVisible = ref(false)
// 父组件传过来的参数 // 父组件传过来的参数
const parameter = ref<ExcelParameterProps>({ const parameter = ref<ExcelParameterProps>({
title: "", title: '',
fileSize: 5, fileSize: 5,
fileType: ["application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"] fileType: ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],
}); })
// 接收父组件参数 // 接收父组件参数
const acceptParams = (params: ExcelParameterProps) => { const acceptParams = (params: ExcelParameterProps) => {
parameter.value = { ...parameter.value, ...params }; parameter.value = { ...parameter.value, ...params }
dialogVisible.value = true; dialogVisible.value = true
}; }
// Excel 导入模板下载 // Excel 导入模板下载
const downloadTemp = () => { const downloadTemp = () => {
if (!parameter.value.tempApi) return; if (!parameter.value.tempApi) return
useDownload(parameter.value.tempApi, `${parameter.value.title}模板`); useDownload(parameter.value.tempApi, `${parameter.value.title}模板`, {'patternId':parameter.value.patternId}, false)
}; }
// 文件上传 // 文件上传
const uploadExcel = async (param: UploadRequestOptions) => { const uploadExcel = async (param: UploadRequestOptions) => {
let excelFormData = new FormData(); let excelFormData = new FormData()
excelFormData.append("file", param.file); excelFormData.append('file', param.file)
excelFormData.append("isCover", isCover.value as unknown as Blob); if (parameter.value.patternId) {
await parameter.value.importApi!(excelFormData); excelFormData.append('patternId', parameter.value.patternId)
parameter.value.getTableList && parameter.value.getTableList(); }
dialogVisible.value = false; isCover.value && excelFormData.append('isCover', isCover.value as unknown as Blob)
}; //await parameter.value.importApi!(excelFormData);
await parameter.value.importApi!(excelFormData)
.then(res => handleImportResponse(res))
parameter.value.getTableList && parameter.value.getTableList()
dialogVisible.value = false
}
async function handleImportResponse(res: any) {
console.log(res)
if (res.type === 'application/json') {
const fileReader = new FileReader()
fileReader.onloadend = () => {
try {
const jsonData = JSON.parse(fileReader.result)
if (jsonData.code === 'A0000') {
ElMessage.success('导入成功')
} else {
ElMessage.error(jsonData.message)
}
} catch (err) {
console.log(err)
}
}
fileReader.readAsText(res)
} else {
ElMessage.error('导入失败,请查看下载附件!')
let blob = new Blob([res], { type: 'application/vnd.ms-excel' })
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = '导入失败数据'
document.body.appendChild(link)
link.click()
link.remove()
}
}
/** /**
* @description 文件上传之前判断 * @description 文件上传之前判断
* @param file 上传的文件 * @param file 上传的文件
* */ * */
const beforeExcelUpload = (file: UploadRawFile) => { const beforeExcelUpload = (file: UploadRawFile) => {
const isExcel = parameter.value.fileType!.includes(file.type as File.ExcelMimeType); const isExcel = parameter.value.fileType!.includes(file.type as File.ExcelMimeType)
const fileSize = file.size / 1024 / 1024 < parameter.value.fileSize!; const fileSize = file.size / 1024 / 1024 < parameter.value.fileSize!
if (!isExcel) if (!isExcel)
ElNotification({ ElNotification({
title: "温馨提示", title: '温馨提示',
message: "上传文件只能是 xls / xlsx 格式!", message: '上传文件只能是 xls / xlsx 格式!',
type: "warning" type: 'warning',
}); })
if (!fileSize) if (!fileSize)
setTimeout(() => { setTimeout(() => {
ElNotification({ ElNotification({
title: "温馨提示", title: '温馨提示',
message: `上传文件大小不能超过 ${parameter.value.fileSize}MB`, message: `上传文件大小不能超过 ${parameter.value.fileSize}MB`,
type: "warning" type: 'warning',
}); })
}, 0); }, 0)
return isExcel && fileSize; return isExcel && fileSize
}; }
// 文件数超出提示 // 文件数超出提示
const handleExceed = () => { const handleExceed = () => {
ElNotification({ ElNotification({
title: "温馨提示", title: '温馨提示',
message: "最多只能上传一个文件!", message: '最多只能上传一个文件!',
type: "warning" type: 'warning',
}); })
}; }
// 上传错误提示 // 上传错误提示
const excelUploadError = () => { // const excelUploadError = () => {
ElNotification({ // ElNotification({
title: "温馨提示", // title: '温馨提示',
message: `批量添加${parameter.value.title}失败,请您重新上传!`, // message: `批量添加${parameter.value.title}失败,请您重新上传!`,
type: "error" // type: 'error',
}); // })
}; // }
// 上传成功提示 // 上传成功提示
const excelUploadSuccess = () => { // const excelUploadSuccess = () => {
ElNotification({ // ElNotification({
title: "温馨提示", // title: '温馨提示',
message: `批量添加${parameter.value.title}成功!`, // message: `批量添加${parameter.value.title}成功!`,
type: "success" // type: 'success',
}); // })
}; // }
defineExpose({ defineExpose({
acceptParams acceptParams,
}); })
</script> </script>
<style lang="scss" scoped> <style lang='scss' scoped>
@import "./index.scss"; @import "./index.scss";
</style> </style>

View File

@@ -0,0 +1,363 @@
<template>
<div :class="{ 'disabled': disabled }">
<ul class="ipAdress">
<li v-for="(item, index) in ipAddress" :key="index">
<input :ref="el => getInputRef(el, index)" v-model="item.value" type="text" class="ipInputClass"
:disabled="disabled" @input="checkIpVal(item)" @keyup="$event => turnIpPosition(item, index, $event)"
@blur="handleBlur" @mouseup="handleMouseUp(index)" />
<div></div>
</li>
</ul>
</div>
</template>
<script lang="ts" setup name="routePage">
import { ref, watch } from 'vue'
// 接收来自上层的数据
const props = defineProps(['value', 'disabled'])
// 更新数据
const $emits = defineEmits(['update:value', 'blur'])
// 存储四个ref
const ipInputRefs = ref<HTMLInputElement[]>([]);
// 存储左右标识位
let markFlag = ref([
{
left: false,
right: false
},
{
left: false,
right: false
},
{
left: false,
right: false
},
{
left: false,
right: false
}
])
// 更新标识
let flag = ref(false)
// 鼠标点击
const handleMouseUp = (index: any) => {
let input = ipInputRefs.value[index]
// 全为false
markFlag.value.forEach(item => {
item.left = false
item.right = false
})
// 证明在开始阶段
if (input.selectionStart == 0) {
markFlag.value[index].left = true
} else {
markFlag.value[index].left = false
}
// 证明在结束
if (input.selectionStart == (input.value || '').length) {
markFlag.value[index].right = true
} else {
markFlag.value[index].right = false
}
}
// 获取四个input refs
const getInputRef = (el: any, index: number) => {
if (el) {
ipInputRefs.value[index] = el;
}
};
// 声明IP存储类型
interface IpType {
value: string
}
// 定义要显示的四个ip
let ipAddress = ref<IpType[]>([
{
value: "",
},
{
value: "",
},
{
value: "",
},
{
value: "",
},
])
// 初始化显示数据
const initShowData = () => {
// 判断不合理行为
if (props.value === '') {
ipAddress.value.forEach(item => {
item.value = ''
})
} else {
let ipList = props.value.split('.')
ipAddress.value.forEach((item: IpType, index: number) => {
item.value = ipList[index]
})
}
}
// 检查ip输入
const checkIpVal = (item: any) => {
let val = item.value;
// 处理非数字
val = val.toString().replace(/[^0-9]/g, "");
val = parseInt(val, 10);
if (isNaN(val)) {
val = "";
} else {
val = val < 0 ? 0 : val;
if (val > 255) {
// 判断val是几位数
let num = (val + '').length
if (num > 3) {
val = parseInt((val + '').substring(0, 3))
} else {
val = 255
}
}
}
item.value = val;
}
// 判断光标左右移动位置
const turnIpPosition = (item: IpType, index: number, event: any) => {
let e = event || window.event;
if (e.keyCode === 37) {
// 左箭头向左跳转,左一不做任何措施
if (index == 0) {
return
}
if (e.currentTarget.selectionStart === 0) {
if (markFlag.value[index].left) {
handleFocus(index - 1, 'toLeft')
markFlag.value[index].left = false
markFlag.value[index].right = false
} else {
markFlag.value[index].left = true
}
} else {
markFlag.value[index].right = false
markFlag.value[index].left = false
}
} else if (e.keyCode == 39) {
// 右箭头向右跳转,右一不做任何措施
markFlag.value[index].left = false
let start = e.currentTarget.selectionStart
if (index != 3 && start === item.value.toString().length) {
if (markFlag.value[index].right) {
handleFocus(index + 1, 'toRight')
markFlag.value[index].left = false
markFlag.value[index].right = false
} else {
markFlag.value[index].right = true
}
} else {
markFlag.value[index].right = false
}
} else if (e.keyCode === 8) {
// 删除键把当前数据删除完毕后会跳转到前一个input左一不做任何处理
if (index !== 0 && e.currentTarget.selectionStart === 0) {
if (markFlag.value[index].left) {
ipInputRefs.value[index - 1].focus();
markFlag.value[index].left = false
} else {
markFlag.value[index].left = true
}
}
} else if (e.keyCode === 13 || e.keyCode === 32) {
// 回车键、空格键、冒号均向右跳转,右一不做任何措施
if (index !== 3) {
ipInputRefs.value[index + 1].focus();
}
}
else if (e.keyCode === 110 || e.keyCode === 190) {
// 点 . 向右跳转,右一不做任何措施
if (item.value == '') {
return
}
if (index !== 3) {
ipInputRefs.value[index + 1].select();
}
}
else if (item.value.toString().length === 3) {
// 满3位光标自动向下一个文本框.
if (index !== 3) {
//ipInputRefs.value[index + 1].setSelectionRange(0, 0)
ipInputRefs.value[index + 1].focus();
}
}
}
// 处理聚焦
const handleFocus = (index: number, direction: string) => {
// 设置当前位置为选中状态 toRight:从左边来的
let input = ipInputRefs.value[index]
input.focus()
let value = input.value
// null 左右全部设置为true,可以直接跳转
if ((value || '').length == 0) {
markFlag.value[index].right = true
markFlag.value[index].left = true
} else {
if (direction == 'toRight') {
// 可以直接跳回
markFlag.value[index].left = true
// 设置光标为左边第一个
ipInputRefs.value[index].setSelectionRange(0, 0)
// 设置上一个的右边标识为false
markFlag.value[index - 1] && (markFlag.value[index - 1].right = false)
} else {
// 直接跳回
markFlag.value[index].right = true
// 设置后一个侧边为false
markFlag.value[index + 1] && (markFlag.value[index + 1].left = false)
}
}
}
// 格式化补零方法
const formatter = (val: string) => {
let value = val.toString();
if (value.length === 2) {
value = "0" + value;
} else if (value.length === 1) {
value = "00" + value;
} else if (value.length === 0) {
value = "000";
}
return value;
}
// 监听数据变化,并初始化显示四个数据
watch(() => props.value, () => {
if(flag.value){
}else{
initShowData()
}
}, {
immediate: true
})
// 监听ipAddress数据变化
watch(ipAddress, () => {
let str = "";
for (const i in ipAddress.value) {
str += formatter(ipAddress.value[i].value);
}
if (str === "000000000000") {
str = "";
} else {
str = ipAddress.value.map(item => {
if (item.value !== null) {
return item.value + ''
} else {
return '0'
}
}).join(".")
}
$emits('update:value', str)
flag.value = true
setTimeout(() => {
flag.value = false
}, 100)
}, {
deep: true
})
const handleBlur = () => {
$emits('blur')
}
</script>
<style lang="scss" scoped>
.disabled {
cursor: not-allowed;
background-color: #f5f7fa;
.ipAdress {
li {
.ipInputClass {
color: #c3c4cc;
cursor: not-allowed;
}
}
}
}
.ipAdress {
display: flex;
border: 1px solid #dcdfe6;
border-radius: 4px;
line-height: 40px;
width: 100%;
height: 35px;
padding-inline-start: 0px;
padding-left: 10px;
padding-right: 20px;
padding-top: 0px;
padding-bottom: 0px;;
box-sizing: border-box;
margin: 0;
}
.ipAdress li {
position: relative;
margin: 0;
list-style-type: none;
}
.ipInputClass {
border: none;
width: 50px;
height: 23px;
text-align: center;
color: #606266;
background: transparent;
}
.ipAdress li div {
position: absolute;
bottom: 12px;
right: 0;
border-radius: 50%;
background: #b6b8bc;
width: 2px;
height: 2px;
}
/*只需要3个div*/
.ipAdress li:last-child div {
display: none;
}
/*取消掉默认的input focus状态*/
.ipAdress input:focus {
outline: none;
}
</style>

View File

@@ -1,57 +1,57 @@
<template> <template>
<RenderTableColumn v-bind="column" /> <RenderTableColumn v-bind='column' />
</template> </template>
<script setup lang="tsx" name="TableColumn"> <script setup lang='tsx' name='TableColumn'>
import { ColumnProps, RenderScope, HeaderRenderScope } from "@/components/ProTable/interface"; import { ColumnProps, RenderScope, HeaderRenderScope } from '@/components/ProTable/interface'
import { filterEnum, formatValue, handleProp, handleRowAccordingToProp } from "@/utils"; import { filterEnum, formatValue, handleProp, handleRowAccordingToProp } from '@/utils'
defineProps<{ column: ColumnProps }>(); defineProps<{ column: ColumnProps }>()
const slots = useSlots(); const slots = useSlots()
const enumMap = inject("enumMap", ref(new Map())); const enumMap = inject('enumMap', ref(new Map()))
// 渲染表格数据 // 渲染表格数据
const renderCellData = (item: ColumnProps, scope: RenderScope<any>) => { const renderCellData = (item: ColumnProps, scope: RenderScope<any>) => {
return enumMap.value.get(item.prop) && item.isFilterEnum return enumMap.value.get(item.prop) && item.isFilterEnum
? filterEnum(handleRowAccordingToProp(scope.row, item.prop!), enumMap.value.get(item.prop)!, item.fieldNames) ? filterEnum(handleRowAccordingToProp(scope.row, item.prop!), enumMap.value.get(item.prop)!, item.fieldNames)
: formatValue(handleRowAccordingToProp(scope.row, item.prop!)); : formatValue(handleRowAccordingToProp(scope.row, item.prop!))
}; }
// 获取 tag 类型 // 获取 tag 类型
const getTagType = (item: ColumnProps, scope: RenderScope<any>) => { const getTagType = (item: ColumnProps, scope: RenderScope<any>) => {
return ( return (
filterEnum(handleRowAccordingToProp(scope.row, item.prop!), enumMap.value.get(item.prop), item.fieldNames, "tag") || "primary" filterEnum(handleRowAccordingToProp(scope.row, item.prop!), enumMap.value.get(item.prop), item.fieldNames, 'tag') || 'primary'
); )
}; }
const RenderTableColumn = (item: ColumnProps) => { const RenderTableColumn = (item: ColumnProps) => {
return ( return (
<> <>
{item.isShow && ( {item.isShow && (
<el-table-column <el-table-column
{...item} {...item}
align={item.align ?? "center"} align={item.align ?? 'center'}
showOverflowTooltip={item.showOverflowTooltip ?? item.prop !== "operation"} showOverflowTooltip={item.showOverflowTooltip ?? item.prop !== 'operation'}
> >
{{ {{
default: (scope: RenderScope<any>) => { default: (scope: RenderScope<any>) => {
if (item._children) return item._children.map(child => RenderTableColumn(child)); if (item._children) return item._children.map(child => RenderTableColumn(child))
if (item.render) return item.render(scope); if (item.render) return item.render(scope)
if (item.prop && slots[handleProp(item.prop)]) return slots[handleProp(item.prop)]!(scope); if (item.prop && slots[handleProp(item.prop)]) return slots[handleProp(item.prop)]!(scope)
if (item.tag) return <el-tag type={getTagType(item, scope)}>{renderCellData(item, scope)}</el-tag>; if (item.tag) return <el-tag type={getTagType(item, scope)}>{renderCellData(item, scope)}</el-tag>
return renderCellData(item, scope); return renderCellData(item, scope)
}, },
header: (scope: HeaderRenderScope<any>) => { header: (scope: HeaderRenderScope<any>) => {
if (item.headerRender) return item.headerRender(scope); if (item.headerRender) return item.headerRender(scope)
if (item.prop && slots[`${handleProp(item.prop)}Header`]) return slots[`${handleProp(item.prop)}Header`]!(scope); if (item.prop && slots[`${handleProp(item.prop)}Header`]) return slots[`${handleProp(item.prop)}Header`]!(scope)
return item.label; return item.label
} },
}} }}
</el-table-column> </el-table-column>
)} )}
</> </>
); )
}; }
</script> </script>

View File

@@ -8,9 +8,8 @@
:search-param='searchParam' :search-param='searchParam'
:search-col='searchCol' :search-col='searchCol'
/> />
<!-- 表格主体 --> <!-- 表格主体 -->
<div class='card table-main'> <div class='table-main' :class='{ card: showCard }' >
<!-- 表格头部 操作按钮 --> <!-- 表格头部 操作按钮 -->
<div class='table-header'> <div class='table-header'>
<div class='header-button-lf'> <div class='header-button-lf'>
@@ -43,10 +42,11 @@
> >
<!-- 默认插槽 --> <!-- 默认插槽 -->
<slot /> <slot />
<template v-for='item in tableColumns' :key='item'> <template v-for='item in tableColumns' :key='item'>
<!-- selection || radio || index || expand || sort --> <!-- selection || radio || index || expand || sort -->
<el-table-column <el-table-column
v-if='item.type && columnTypes.includes(item.type)' v-if='item.type && columnTypes.includes(item.type) && item.isShow'
v-bind='item' v-bind='item'
:align="item.align ?? 'center'" :align="item.align ?? 'center'"
:reserve-selection="item.type == 'selection'" :reserve-selection="item.type == 'selection'"
@@ -126,6 +126,7 @@ export interface ProTableProps {
requestError?: (params: any) => void; // 表格 api 请求错误监听 ==> 非必传 requestError?: (params: any) => void; // 表格 api 请求错误监听 ==> 非必传
dataCallback?: (data: any) => any; // 返回数据的回调函数,可以对数据进行处理 ==> 非必传 dataCallback?: (data: any) => any; // 返回数据的回调函数,可以对数据进行处理 ==> 非必传
title?: string; // 表格标题 ==> 非必传 title?: string; // 表格标题 ==> 非必传
showCard?: boolean; // 下个是否需要卡片
pagination?: boolean; // 是否需要分页组件 ==> 非必传默认为true pagination?: boolean; // 是否需要分页组件 ==> 非必传默认为true
initParam?: any; // 初始化请求参数 ==> 非必传(默认为{} initParam?: any; // 初始化请求参数 ==> 非必传(默认为{}
border?: boolean; // 是否带有纵向边框 ==> 非必传默认为true border?: boolean; // 是否带有纵向边框 ==> 非必传默认为true
@@ -141,6 +142,7 @@ const props = withDefaults(defineProps<ProTableProps>(), {
pagination: true, pagination: true,
initParam: {}, initParam: {},
border: true, border: true,
showCard: true,
toolButton: true, toolButton: true,
rowKey: 'id', rowKey: 'id',
searchCol: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }), searchCol: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }),

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class='icon-box'> <div class='icon-box' >
<el-input <el-input
ref='inputRef' ref='inputRef'
v-model='valueIcon' v-model='valueIcon'
@@ -13,7 +13,7 @@
<el-button :icon='customIcons[iconValue]' /> <el-button :icon='customIcons[iconValue]' />
</template> </template>
</el-input> </el-input>
<el-dialog v-model='dialogVisible' :title='placeholder' top='50px' width='66%'> <el-dialog v-model='dialogVisible' :title='placeholder' top='5%' width='30%' >
<el-input v-model='inputValue' placeholder='搜索图标' size='large' :prefix-icon='Icons.Search' /> <el-input v-model='inputValue' placeholder='搜索图标' size='large' :prefix-icon='Icons.Search' />
<el-scrollbar v-if='Object.keys(iconsList).length'> <el-scrollbar v-if='Object.keys(iconsList).length'>
<div class='icon-list'> <div class='icon-list'>
@@ -30,9 +30,10 @@
<script lang='ts' setup name='SelectIcon'> <script lang='ts' setup name='SelectIcon'>
import * as Icons from '@element-plus/icons-vue' import * as Icons from '@element-plus/icons-vue'
import { computed, ref } from 'vue';
interface SelectIconProps { interface SelectIconProps {
iconValue: string; iconValue: string| undefined;
title?: string; title?: string;
clearable?: boolean; clearable?: boolean;
placeholder?: string; placeholder?: string;
@@ -82,6 +83,7 @@ const iconsList = computed((): { [key: string]: any } => {
} }
return result return result
}) })
</script> </script>
<style scoped lang='scss'> <style scoped lang='scss'>

View File

@@ -13,7 +13,7 @@
display: flex; display: flex;
align-items: center; align-items: center;
margin-right: 10px; /* 日期选择器右侧间距 */ margin-right: 10px; /* 日期选择器右侧间距 */
width: 320px; width: 250px;
} }
.date-picker { .date-picker {

View File

@@ -8,10 +8,10 @@
> >
<!-- 采用 v-for 动态渲染 --> <!-- 采用 v-for 动态渲染 -->
<el-option <el-option
v-for="unit in timeUnits" v-for='unit in timeUnits'
:key="unit.value" :key='unit.value'
:label="unit.label" :label='unit.label'
:value="unit.value" :value='unit.value'
></el-option> ></el-option>
</el-select> </el-select>
@@ -22,8 +22,8 @@
v-model='startDate' v-model='startDate'
type='date' type='date'
placeholder='起始时间' placeholder='起始时间'
@change="emitDateChange" @change='emitDateChange'
:disabled-date="disableStartDate" :disabled-date='disableStartDate'
:readonly="timeUnit != '自定义'" :readonly="timeUnit != '自定义'"
></el-date-picker> ></el-date-picker>
<el-text>~</el-text> <el-text>~</el-text>
@@ -32,8 +32,8 @@
v-model='endDate' v-model='endDate'
type='date' type='date'
placeholder='结束时间' placeholder='结束时间'
@change="emitDateChange" @change='emitDateChange'
:disabled-date="disableEndDate" :disabled-date='disableEndDate'
:readonly="timeUnit !== '自定义'" :readonly="timeUnit !== '自定义'"
></el-date-picker> ></el-date-picker>
</div> </div>
@@ -43,12 +43,12 @@
class='triangle-button' class='triangle-button'
type='primary' type='primary'
@click='prevPeriod' @click='prevPeriod'
@change="emitDateChange" @change='emitDateChange'
> >
<div class='left_triangle'></div> <div class='left_triangle'></div>
</el-button> </el-button>
<el-button class='triangle-button' type='primary' @click='goToCurrent' > <el-button class='triangle-button' type='primary' @click='goToCurrent'>
当前 当前
</el-button> </el-button>
<el-button <el-button
style='width: 10px;' style='width: 10px;'
@@ -64,187 +64,251 @@
</template> </template>
<script setup lang='ts'>
import { ref, onMounted, defineProps, defineEmits } from 'vue'
<script setup lang="ts"> // 定义时间单位的类型
import { ref ,onMounted, defineProps, defineEmits } from 'vue';
// 定义时间单位的类型
interface TimeUnit { interface TimeUnit {
label: string; label: string;
value: string; value: string;
} }
// 定义组件的props包含包括和排除的时间单位 // 定义组件的props包含包括和排除的时间单位
const props = defineProps({ const props = defineProps({
include: { include: {
type: Array as () => string[], type: Array as () => string[],
default: () => ['日', '周', '月', '季度', '年', '自定义'], default: () => ['日', '周', '月', '季度', '年', '自定义'],
}, },
exclude: { exclude: {
type: Array as () => string[], type: Array as () => string[],
default: () => [], default: () => [],
}, },
default: { default: {
type: String, type: String,
default: '', default: '',
}, },
}); })
// 定义事件 // 定义事件
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'update-dates', startDate: Date, endDate: Date): void; (e: 'update-dates', startDate: string, endDate: string): void;
}>(); }>()
const timeUnit = ref<string>(props.default); // 默认选择 const timeUnit = ref<string>(props.default) // 默认选择
const startDate = ref<Date>(new Date()); // 起始日期 const startDate = ref<Date>(new Date()) // 起始日期
const endDate = ref<Date>(new Date()); // 结束日期 const endDate = ref<Date>(new Date()) // 结束日期
const isNextDisabled = ref<boolean>(false); // 控制下一周期按钮的禁用状态 const isNextDisabled = ref<boolean>(false) // 控制下一周期按钮的禁用状态
const today = ref<Date>(new Date()); // 当前日期 const today = ref<Date>(new Date()) // 当前日期
// 过滤出可用的时间单位 // 过滤出可用的时间单位
const timeUnits = ref<TimeUnit[]>( const timeUnits = ref<TimeUnit[]>(
props.include.filter(unit => !props.exclude.includes(unit)).map(unit => ({ props.include.filter(unit => !props.exclude.includes(unit)).map(unit => ({
label: unit, label: unit,
value: unit, value: unit,
})) })),
); )
// 发出日期变化事件 // 发出日期变化事件
const emitDateChange = () => { const emitDateChange = () => {
emit('update-dates', startDate.value, endDate.value); emit('update-dates', formatDate(startDate.value), formatDate(endDate.value))
//console.log('emitDateChange', startDate.value, endDate.value);
};
// 在组件挂载时更新日期范围 }
onMounted(() => {
updateDateRange();
});
const handleChange = (unit: string)=> {
// 根据选择的时间单位处理日期变化
if (unit !== '自定义') {
updateDateRange()
} else {
// 自定义选项逻辑
startDate.value = new Date(new Date().setDate(new Date().getDate() - 1))
endDate.value = new Date()
}
timeUnit.value = unit;
emitDateChange(); // 变化时也发出更新事件
updateNextButtonStatus()
}
const updateDateRange = () => {
// 根据选择的时间单位计算起始和结束日期 // 在组件挂载时更新日期范围
if (timeUnit.value === '日') { onMounted(() => {
startDate.value = today.value updateDateRange()
endDate.value = today.value })
} else if (timeUnit.value === '周') { const handleChange = (unit: string) => {
startDate.value = getStartOfWeek(today.value) // 根据选择的时间单位处理日期变化
endDate.value = getEndOfWeek(today.value) if (unit !== '自定义') {
} else if (timeUnit.value === '月') { updateDateRange()
startDate.value = new Date(today.value.getFullYear(), today.value.getMonth(), 1) } else {
endDate.value = new Date(today.value.getFullYear(), today.value.getMonth() + 1, 0) // 自定义选项逻辑
} else if (timeUnit.value === '季度') { startDate.value = new Date(new Date().setDate(new Date().getDate() - 1))
const quarter = Math.floor(today.value.getMonth() / 3) endDate.value = new Date()
startDate.value = new Date(today.value.getFullYear(), quarter * 3, 1) }
endDate.value = new Date(today.value.getFullYear(), quarter * 3 + 3, 0) timeUnit.value = unit
} else if (timeUnit.value === '年') {
startDate.value = new Date(today.value.getFullYear(), 0, 1)
endDate.value = new Date(today.value.getFullYear(), 11, 31)
}
updateNextButtonStatus()
}
const getStartOfWeek =(date:Date)=> {
const startOfWeek = new Date(date)
const day = startOfWeek.getDay()
const diff = day === 0 ? -6 : 1 - day // 星期天的情况
startOfWeek.setDate(startOfWeek.getDate() + diff)
return startOfWeek
}
const getEndOfWeek =(date:Date) =>{
const endOfWeek = new Date(date)
const day = endOfWeek.getDay()
const diff = day === 0 ? 0 : 7 - day // 星期天的情况
endOfWeek.setDate(endOfWeek.getDate() + diff)
return endOfWeek
}
const prevPeriod =()=> {
const prevStartDate = new Date(startDate.value)
const prevEndDate = new Date(endDate.value)
if (timeUnit.value === '日') { // 确保开始时间和结束时间不为空
prevStartDate.setDate(prevStartDate.getDate() - 1) if (!startDate.value) {
prevEndDate.setDate(prevEndDate.getDate() - 1) startDate.value = new Date()
} else if (timeUnit.value === '周') { }
prevStartDate.setDate(prevStartDate.getDate() - 7) if (!endDate.value) {
prevEndDate.setDate(prevEndDate.getDate() - 7) endDate.value = new Date()
} else if (timeUnit.value === '月') { }
prevStartDate.setMonth(prevStartDate.getMonth() - 1)
prevEndDate.setMonth(prevEndDate.getMonth() - 1)
} else if (timeUnit.value === '季度') {
prevStartDate.setMonth(prevStartDate.getMonth() - 3)
prevEndDate.setMonth(prevEndDate.getMonth() - 3)
} else if (timeUnit.value === '年') {
prevStartDate.setFullYear(prevStartDate.getFullYear() - 1)
prevEndDate.setFullYear(prevEndDate.getFullYear() - 1)
}
startDate.value = prevStartDate emitDateChange() // 变化时也发出更新事件
endDate.value = prevEndDate updateNextButtonStatus()
updateNextButtonStatus() }
} const updateDateRange = () => {
const goToCurrent =()=> {
if (timeUnit.value !== '自定义') {
updateDateRange() // 更新为当前选择时间单位的时间范围
}
}
const nextPeriod = ()=> {
const nextStartDate = new Date(startDate.value)
const nextEndDate = new Date(endDate.value)
if (timeUnit.value === '日') { // 根据选择的时间单位计算起始和结束日期
nextStartDate.setDate(nextStartDate.getDate() + 1) if (timeUnit.value === '日') {
nextEndDate.setDate(nextEndDate.getDate() + 1) startDate.value = today.value
} else if (timeUnit.value === '周') { endDate.value = today.value
nextStartDate.setDate(nextStartDate.getDate() + 7) } else if (timeUnit.value === '周') {
nextEndDate.setDate(nextEndDate.getDate() + 7) startDate.value = getStartOfWeek(today.value)
} else if (timeUnit.value === '月') { endDate.value = getEndOfWeek(today.value)
nextStartDate.setMonth(nextStartDate.getMonth() + 1)
nextEndDate.setMonth(nextEndDate.getMonth() + 1)
} else if (timeUnit.value === '季度') {
nextStartDate.setMonth(nextStartDate.getMonth() + 3)
nextEndDate.setMonth(nextStartDate.getMonth() + 3)
} else if (timeUnit.value === '年') {
nextStartDate.setFullYear(nextStartDate.getFullYear() + 1)
nextEndDate.setFullYear(nextEndDate.getFullYear() + 1)
}
startDate.value = nextStartDate } else if (timeUnit.value === '月') {
endDate.value = nextEndDate // 获取本月的开始和结束日期
updateNextButtonStatus() startDate.value = new Date(today.value.getFullYear(), today.value.getMonth(), 1);
} endDate.value = new Date(today.value.getFullYear(), today.value.getMonth() + 1, 0);
const updateNextButtonStatus =()=> {
// 更新下一个按钮的禁用状态
const maxDate = new Date() // 假设最新日期为今天
// 将 maxDate 设置为当天的开始时间
maxDate.setHours(0, 0, 0, 0);
// 将 endDate 设置为当天的开始时间并进行比较
const endDateAdjusted = new Date(endDate.value);
endDateAdjusted.setHours(0, 0, 0, 0);
// 仅比较日期部分
isNextDisabled.value = endDateAdjusted >= maxDate;
emitDateChange(); // 变化时也发出更新事件
}
// 限制开始日期不能选择超过当前日期 // // 确保结束日期不超过今天
const disableStartDate = (date:Date)=> { // if (endDate.value > today.value) {
return date > today.value; // endDate.value = new Date(today.value);
} // endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999
// 限制结束日期不能超过当前日期且必须大于开始日期 // }
const disableEndDate = (date:Date)=> {
if (timeUnit.value !== '自定义') return false; // 如果不是自定义时间单位,则不限制 } else if (timeUnit.value === '季度') {
const start = new Date(startDate.value); const quarter = Math.floor(today.value.getMonth() / 3);
return date > today.value || (start && date <= start); startDate.value = new Date(today.value.getFullYear(), quarter * 3, 1);
} endDate.value = new Date(today.value.getFullYear(), quarter * 3 + 3, 0);
// // 确保结束日期不超过今天
// if (endDate.value > today.value) {
// endDate.value = new Date(today.value);
// endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999
// }
} else if (timeUnit.value === '年') {
startDate.value = new Date(today.value.getFullYear(), 0, 1);
endDate.value = new Date(today.value.getFullYear(), 11, 31);
// // 确保结束日期不超过今天
// if (endDate.value > today.value) {
// endDate.value = new Date(today.value);
// endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999
// }
}
// 确保开始时间和结束时间不为空
if (!startDate.value) {
startDate.value = new Date()
}
if (!endDate.value) {
endDate.value = new Date()
}
updateNextButtonStatus()
}
const getStartOfWeek = (date: Date) => {
const startOfWeek = new Date(date)
const day = startOfWeek.getDay()
const diff = day === 0 ? -6 : 1 - day // 星期天的情况
startOfWeek.setDate(startOfWeek.getDate() + diff)
return startOfWeek
}
const getEndOfWeek = (date: Date) => {
const endOfWeek = new Date(date)
const day = endOfWeek.getDay()
const diff = day === 0 ? 0 : 7 - day // 星期天的情况
endOfWeek.setDate(endOfWeek.getDate() + diff)
// 获取今天的日期
const today = new Date();
today.setHours(23, 59, 59, 999); // 设置今天的结束时间23:59:59.999
// 返回不超过今天的结束时间
//return endOfWeek > today ? today : endOfWeek;
return endOfWeek
}
const prevPeriod = () => {
const prevStartDate = new Date(startDate.value)
const prevEndDate = new Date(endDate.value)
if (timeUnit.value === '日') {
prevStartDate.setDate(prevStartDate.getDate() - 1)
prevEndDate.setDate(prevEndDate.getDate() - 1)
} else if (timeUnit.value === '周') {
prevStartDate.setDate(prevStartDate.getDate() - 7)
prevEndDate.setDate(prevEndDate.getDate() - 7)
} else if (timeUnit.value === '月') {
prevStartDate.setMonth(prevStartDate.getMonth() - 1)
prevEndDate.setMonth(prevEndDate.getMonth() - 1)
} else if (timeUnit.value === '季度') {
prevStartDate.setMonth(prevStartDate.getMonth() - 3)
prevEndDate.setMonth(prevEndDate.getMonth() - 3)
} else if (timeUnit.value === '年') {
prevStartDate.setFullYear(prevStartDate.getFullYear() - 1)
prevEndDate.setFullYear(prevEndDate.getFullYear() - 1)
}
startDate.value = prevStartDate
endDate.value = prevEndDate
updateNextButtonStatus()
}
const goToCurrent = () => {
if (timeUnit.value !== '自定义') {
updateDateRange() // 更新为当前选择时间单位的时间范围
}
}
const nextPeriod = () => {
const nextStartDate = new Date(startDate.value)
const nextEndDate = new Date(endDate.value)
if (timeUnit.value === '日') {
nextStartDate.setDate(nextStartDate.getDate() + 1)
nextEndDate.setDate(nextEndDate.getDate() + 1)
} else if (timeUnit.value === '周') {
nextStartDate.setDate(nextStartDate.getDate() + 7)
nextEndDate.setDate(nextEndDate.getDate() + 7)
} else if (timeUnit.value === '月') {
nextStartDate.setMonth(nextStartDate.getMonth() + 1)
nextEndDate.setMonth(nextEndDate.getMonth() + 1)
} else if (timeUnit.value === '季度') {
nextStartDate.setMonth(nextStartDate.getMonth() + 3)
nextEndDate.setMonth(nextStartDate.getMonth() + 3)
} else if (timeUnit.value === '年') {
nextStartDate.setFullYear(nextStartDate.getFullYear() + 1)
nextEndDate.setFullYear(nextEndDate.getFullYear() + 1)
}
startDate.value = nextStartDate
endDate.value = nextEndDate
updateNextButtonStatus()
}
const updateNextButtonStatus = () => {
// 更新下一个按钮的禁用状态
const maxDate = new Date() // 假设最新日期为今天
// 将 maxDate 设置为当天的开始时间
maxDate.setHours(0, 0, 0, 0)
// 将 endDate 设置为当天的开始时间并进行比较
const endDateAdjusted = new Date(endDate.value)
endDateAdjusted.setHours(0, 0, 0, 0)
// 仅比较日期部分
isNextDisabled.value = endDateAdjusted >= maxDate
emitDateChange() // 变化时也发出更新事件
}
// 限制开始日期不能选择超过当前日期
const disableStartDate = (date: Date) => {
return date > today.value
}
// 限制结束日期不能超过当前日期且必须大于开始日期
const disableEndDate = (date: Date) => {
if (timeUnit.value !== '自定义') return false // 如果不是自定义时间单位,则不限制
const start = new Date(startDate.value)
return date > today.value || (start && date <= start)
}
// 格式化日期yyyy-mm-dd
function formatDate(date: Date | null): string {
if (!date) {
return '';
}
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
</script> </script>

View File

@@ -0,0 +1,282 @@
<template>
<div class="chart">
<div ref="chartRef" class="my-chart" />
</div>
</template>
<script setup lang="ts">
import { onBeforeUnmount, onMounted, ref, defineExpose, watch, nextTick } from 'vue'
// import echarts from './echarts'
import * as echarts from 'echarts' // 全引入
// import 'echarts/lib/component/dataZoom'
const color = [
'var(--el-color-primary)',
'#07CCCA',
'#00BFF5',
'#FFBF00',
'#77DA63',
'#D5FF6B',
'#Ff6600',
'#FF9100',
'#5B6E96',
'#66FFCC',
'#B3B3B3'
]
const chartRef = ref<HTMLDivElement>()
const props = defineProps(['options', 'isInterVal', 'pieInterVal'])
let chart: echarts.ECharts | any = null
const resizeHandler = () => {
// 不在视野中的时候不进行resize
if (!chartRef.value) return
if (chartRef.value.offsetHeight == 0) return
chart.getZr().painter.getViewportRoot().style.display = 'none'
requestAnimationFrame(() => {
chart.resize()
chart.getZr().painter.getViewportRoot().style.display = ''
})
}
const initChart = () => {
if (!props.isInterVal && !props.pieInterVal) {
chart?.dispose()
}
// chart?.dispose()
chart = echarts.init(chartRef.value as HTMLDivElement)
const options = {
title: {
left: 'center',
// textStyle: {
color: '#000',
fontSize: 18,
// },
...(props.options?.title || null)
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
backgroundColor: 'rgba(0,0,0,0.55)',
borderWidth: 0,
confine: true,
...(props.options?.tooltip || null)
},
legend: {
right: 20,
top: 0,
itemGap: 10,
itemStyle: {},
// textStyle: {
fontSize: 12,
padding: [2, 0, 0, 0], //[上、右、下、左]
// },
itemWidth: 15,
itemHeight: 10,
...(props.options?.legend || null)
},
grid: {
top: '60px',
left: '30px',
right: '70px',
bottom: props.options?.options?.dataZoom === null ? '10px' : '40px',
containLabel: true,
...(props.options?.grid || null)
},
xAxis: props.options?.xAxis ? handlerXAxis() : null,
yAxis: props.options?.yAxis ? handlerYAxis() : null,
dataZoom: props.options?.dataZoom || [
{
type: 'inside',
height: 13,
start: 0,
bottom: '20px',
end: 100
},
{
start: 0,
height: 13,
bottom: '20px',
end: 100
}
],
color: props.options?.color || color,
series: props.options?.series,
...props.options?.options
}
// console.log(options.series,"获取x轴");
handlerBar(options)
// 处理柱状图
chart.setOption(options, true)
setTimeout(() => {
chart.resize()
}, 0)
}
const handlerBar = (options: any) => {
if (Array.isArray(options.series)) {
options.series.forEach((item: any) => {
if (item.type === 'bar') {
item.barMinHeight = 10
item.barMaxWidth = 20
item.itemStyle = Object.assign(
{
color: (params: any) => {
if (params.value == 0 || params.value == 3.14159) {
return '#ccc'
} else {
return props.options?.color
? props.options?.color[params.seriesIndex]
: color[params.seriesIndex]
}
}
},
item.itemStyle
)
}
})
}
}
const handlerYAxis = () => {
let temp = {
type: 'value',
nameGap: 15,
nameTextStyle: {
color: '#000'
},
splitNumber: 5,
minInterval: 1,
axisLine: {
show: true,
lineStyle: {
color: '#000'
}
},
axisLabel: {
color: '#000',
fontSize: 14,
formatter: function (value) {
return value.toFixed(0) // 格式化显示为一位小数
}
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
color: ['#ccc'],
type: 'dashed',
opacity: 0.5
}
}
}
// props.options?.xAxis 是数组还是对象
if (Array.isArray(props.options?.yAxis)) {
return props.options?.yAxis.map((item: any) => {
return {
...temp,
...item
}
})
} else {
return {
...temp,
...props.options?.yAxis
}
}
}
const handlerXAxis = () => {
let temp = {
type: 'category',
axisTick: { show: false },
nameTextStyle: {
color: '#000'
},
axisLine: {
// lineStyle: {
color: '#000'
// }
},
axisLabel: {
// textStyle: {
fontFamily: 'dinproRegular',
color: '#000',
fontSize: '12'
// }
}
// boundaryGap: false,
}
// props.options?.xAxis 是数组还是对象
if (Array.isArray(props.options?.xAxis)) {
return props.options?.xAxis.map((item: any) => {
return {
...temp,
...item
}
})
} else {
return {
...temp,
...props.options?.xAxis
}
}
}
let throttle: ReturnType<typeof setTimeout>
// 动态计算table高度
const resizeObserver = new ResizeObserver(entries => {
for (const entry of entries) {
if (throttle) {
clearTimeout(throttle)
}
throttle = setTimeout(() => {
resizeHandler()
}, 100)
}
})
onMounted(() => {
initChart()
resizeObserver.observe(chartRef.value!)
})
defineExpose({ initChart })
onBeforeUnmount(() => {
resizeObserver.unobserve(chartRef.value!)
chart?.dispose()
})
watch(
() => props.options,
(newVal, oldVal) => {
initChart()
}
)
</script>
<style lang="scss" scoped>
.chart {
width: 100%;
height: 100%;
position: relative;
.el-button {
position: absolute;
right: 0px;
top: -60px;
}
.my-chart {
height: 100%;
width: 100%;
}
}
</style>

View File

@@ -4,6 +4,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import * as echarts from "echarts"; import * as echarts from "echarts";
import { ref } from "vue";
const chartsRef = ref(); const chartsRef = ref();
const props = defineProps({ const props = defineProps({
//饼图数据 //饼图数据
@@ -21,26 +22,34 @@ const props = defineProps({
type: Object, type: Object,
default: () => ({}), default: () => ({}),
}, },
}); });
const customData: any = ref({}), const customData: any = ref({}),
legendData: any = ref({}), legendData: any = ref({}),
chart: any = ref(); chart: any = ref();
const labelIsShow = ref(true)//引导线台数和鼠标点击饼图是否弹出提示显示
const init = () => { const init = () => {
customData.value = { customData.value = {
title: "", //标题 title: "", //标题
textAlign: "left", //标题位置可选属性left 可选属性值 left,right,center textAlign: "left", //标题位置可选属性left 可选属性值 left,right,center
ratio: true, //是否显示数值占比,默认不显示 ratio: true, //是否显示数值占比,默认不显示
isRing: false, //是否环形图 isRing: false, //是否环形图
isRadius: false, //是否圆角 isRadius: false, //是否圆角
isSpace: true, //是否显示间隔 isSpace: false, //是否显示间隔
isLabelLine: false, //是否显示引导线 isLabelLine: true, //是否显示引导线
titleFontSize: '14px', //标题字体大小
...props.customData, ...props.customData,
}; };
legendData.value = { legendData.value = {
icon: "roundRect", // 图例项的icon,类型包括 circle(圆形),rect(正方形),//roundRect(圆角正方形),triangle(三角形),diamond(菱形),//pin(大头针行),arrow(箭头形),none(无图例项的icon) icon: "roundRect", // 图例项的icon,类型包括 circle(圆形),rect(正方形),//roundRect(圆角正方形),triangle(三角形),diamond(菱形),//pin(大头针行),arrow(箭头形),none(无图例项的icon)
orient: "vertical", //图例排列方向 orient: "vertical", //图例排列方向
left: "right", //可选属性left,right,top,bottom,可选属性值 left,right,top,bottom,px,百分比,数值, left: "right", //可选属性left,right,top,bottom,可选属性值 left,right,top,bottom,px,百分比,数值,
itemGap: 0, // 设置图例项之间的间隔为20 itemGap: 10, // 设置图例项之间的间隔为20
...props.legendData, ...props.legendData,
}; };
chart.value = chartsRef.value && echarts.init(chartsRef.value); chart.value = chartsRef.value && echarts.init(chartsRef.value);
@@ -48,10 +57,27 @@ const init = () => {
title: { title: {
text: customData.value.title, text: customData.value.title,
left: customData.value.textAlign, left: customData.value.textAlign,
textStyle: {
fontSize: customData.value.titleFontSize, // 使用 titleFontSize 属性
},
}, },
legend: legendData.value, legend:legendData.value,
// legend: {
// icon: legendData.value.icon, // 图例项的icon,类型包括 circle(圆形),rect(正方形),//roundRect(圆角正方形),triangle(三角形),diamond(菱形),//pin(大头针行),arrow(箭头形),none(无图例项的icon)
// orient: "vertical", //图例排列方向
// left: legendData.value.left, //可选属性left,right,top,bottom,可选属性值 left,right,top,bottom,px,百分比,数值,
// itemGap: 1, // 设置图例项之间的间隔为20
// formatter: function (name) {
// const item = props.chartsData.filter(item=>item.name==name)
// console.log(item)
// if(item)
// return item[0].value;
// },
// },
tooltip: { tooltip: {
show: true, show: labelIsShow.value,
trigger: "item", trigger: "item",
formatter: customData.value.ratio ? `{b} : {c} ({d}%)` : "{b} :{c} ", formatter: customData.value.ratio ? `{b} : {c} ({d}%)` : "{b} :{c} ",
borderWidth: 1, borderWidth: 1,
@@ -61,7 +87,13 @@ const init = () => {
type: "pie", type: "pie",
radius: customData.value.isRing ? ["55", "75"] : "80%", radius: customData.value.isRing ? ["55", "75"] : "80%",
data: props.chartsData, data: props.chartsData,
center: ["55%", "50%"], // 设置饼图的中心位置 formatter: function (name: any) {
const item = props.chartsData.filter(item=>item.name==name)
//console.log(item)
if(item)
return item[0].value;
},
center: ["55%", "55%"], // 设置饼图的中心位置
// padAngle: 2, // padAngle: 2,
minAngle: 15, //最小角度 minAngle: 15, //最小角度
startAngle: 270, //起始角度 startAngle: 270, //起始角度
@@ -74,12 +106,15 @@ const init = () => {
}, },
label: { label: {
normal: { normal: {
show: true, show: labelIsShow.value,
position: "inside", position: "outside",
textStyle: { textStyle: {
color: "#fff", //color: "#fff",
fontSize: 12, fontSize: 12,
}, },
formatter: function (data) {
return labelIsShow.value ? data.value + '台' : '';
}
}, },
}, },
itemStyle: { itemStyle: {
@@ -93,13 +128,24 @@ const init = () => {
}, },
], ],
}; };
option && chart.value && chart.value.setOption(option); option && chart.value && chart.value.setOption(option);
setTimeout(() => { setTimeout(() => {
chart.value.resize(); chart.value.resize();
}, 0); }, 0);
}; };
const reSize = (widthValue: number,heightValue: number,silentValue: boolean) => {
if (chart.value) {
chart.value.resize({
width: widthValue,
height: heightValue,
silent: silentValue,
});
}
};
const resizeCharts = () => { const resizeCharts = () => {
console.log(77777); //console.log(chart.value,111111);
if (chart.value) { if (chart.value) {
chart.value.resize(); chart.value.resize();
} }
@@ -118,6 +164,12 @@ watch(
() => props.chartsData, () => props.chartsData,
(val, oldVal) => { (val, oldVal) => {
if (val) { if (val) {
const item = props.chartsData.find(item => item.value === 0);
if(item != undefined){
labelIsShow.value = false;
}else{
labelIsShow.value = true;
}
init(); init();
} }
}, },
@@ -128,7 +180,7 @@ watch(
onMounted(() => { onMounted(() => {
init(); init();
}); });
defineExpose({ init }); defineExpose({ init,reSize });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.pie { .pie {

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