2333 Commits

Author SHA1 Message Date
liuye
3f41df22a9 店铺 2024-10-17 14:18:33 +08:00
liuye
f9123942ca AppGridReview 2024-10-11 17:47:02 +08:00
liuye
b67e30ce25 地址 2024-10-11 16:52:20 +08:00
liuye
c43a8992fd 网格动态 2024-10-11 11:23:01 +08:00
liuye
705a252618 网格动态 2024-10-11 11:10:28 +08:00
liuye
0b41291bf1 网格动态 2024-10-10 15:48:07 +08:00
aixianling
f35c272a19 调整积分排名的样式 2024-09-29 14:51:31 +08:00
aixianling
3a5af5777c 调整积分排名的样式 2024-09-29 14:41:14 +08:00
aixianling
2cbddaeb4a 调整积分排名的样式 2024-09-29 14:37:58 +08:00
aixianling
e88658b1be 恢复下大屏开发的配置 2024-09-29 11:07:35 +08:00
aixianling
8e73c39c47 调整局部布局 2024-09-25 12:01:52 +08:00
aixianling
119cd5bad9 调整局部布局 2024-09-25 12:01:24 +08:00
aixianling
ddfdbf161a 变更大屏文件名 2024-09-25 11:09:09 +08:00
aixianling
0940462d70 Merge remote-tracking branch 'origin/build' into build 2024-09-25 10:58:00 +08:00
aixianling
80978d3794 为地图增加颜色 2024-09-25 10:50:28 +08:00
liuye
134b78189d page 2024-09-25 10:17:31 +08:00
liuye
0c9b5d522e 居民群管理,特殊人群 2024-09-20 16:54:12 +08:00
aixianling
c663bd52fc 修复村返回镇时,地图数据的刷新 2024-09-20 16:25:25 +08:00
aixianling
573349f864 大屏接入地图 2024-09-19 18:20:04 +08:00
aixianling
6a1d86b88a 接入地图了 2024-09-19 14:50:31 +08:00
aixianling
c1bca77b3f 修复地图 2024-09-14 15:41:15 +08:00
aixianling
f962d9db1d 修复计算问题 2024-09-14 15:06:41 +08:00
aixianling
78a3842e01 在搞地图了 2024-09-13 18:06:54 +08:00
aixianling
e69b66d2aa 村社区界面完成 2024-09-13 16:41:20 +08:00
aixianling
85c6d365b1 清除开发数据 2024-09-13 09:55:18 +08:00
aixianling
1131f98b27 区镇除地图以外都开发完成 2024-09-12 17:29:32 +08:00
aixianling
0188289e05 提交一部分图标 2024-09-11 18:12:27 +08:00
aixianling
1ae490f744 提交一波 2024-09-09 18:01:13 +08:00
aixianling
c842794d0d 完成两个柱状图 2024-09-09 17:34:02 +08:00
aixianling
f888c81508 基础样式完成 2024-09-06 15:43:07 +08:00
aixianling
6118304302 充电样式完成 2024-09-06 14:41:54 +08:00
aixianling
6b2906fb53 第一排样式完成 2024-09-04 15:22:48 +08:00
aixianling
4e33b3ae02 标题组件完成 2024-09-04 09:47:40 +08:00
aixianling
688834a86e 标题组件完成 2024-09-04 09:34:34 +08:00
aixianling
df49e1f9dc 标题组件正在开发 2024-09-03 18:02:30 +08:00
aixianling
4f36215dad 村/社区布局完成 2024-09-03 16:28:23 +08:00
aixianling
5bc9f859f4 完成布局 2024-09-03 15:49:06 +08:00
aixianling
05d4acf5da Merge remote-tracking branch 'origin/build' into build 2024-09-03 15:40:14 +08:00
aixianling
755719e228 兼容语音消息展示 2024-09-03 15:39:52 +08:00
liuye
41d74a9d57 所属小区 2024-09-03 10:48:57 +08:00
liuye
9ca1b4f161 所属小区 2024-09-02 16:48:09 +08:00
liuye
0a5592594b 所属小区 2024-09-02 16:32:42 +08:00
liuye
2c39458e98 网格员积分 2024-08-30 09:14:28 +08:00
liuye
aefe08d35e 网格员积分 2024-08-29 17:34:25 +08:00
liuye
6de9346d01 网格员积分 2024-08-29 15:48:11 +08:00
liuye
a02e0d575b 网格员积分 2024-08-29 09:11:43 +08:00
liuye
358f77b13b 网格员积分 2024-08-29 08:49:38 +08:00
liuye
494cc25c4d 积分规则 2024-08-28 17:55:36 +08:00
liuye
cd314f3da7 积分规则 2024-08-28 14:59:42 +08:00
liuye
065306e511 积分规则 2024-08-28 14:40:49 +08:00
aixianling
8b724e52b3 增加流式返回的开关 2024-08-27 18:00:04 +08:00
aixianling
155366d92e 定位加上loading和搜索按钮 2024-08-27 09:46:14 +08:00
aixianling
bcba8286cc 更改默认状态 2024-08-26 18:08:29 +08:00
aixianling
f007dc84e7 正常换行 2024-08-26 17:36:27 +08:00
aixianling
cb4c7dd623 流式返回完成 2024-08-26 17:28:14 +08:00
aixianling
10b44698e1 增加上传文件限制和悬浮样式 2024-08-26 10:39:09 +08:00
aixianling
83c782f3e6 修复文件重复上传 2024-08-23 16:26:00 +08:00
aixianling
f8c75eab5b 切换模型是,清理发送消息的缓存 2024-08-23 14:40:54 +08:00
aixianling
d5b1190492 修复文件提示 2024-08-23 14:06:02 +08:00
aixianling
2bac43eeda 调整拖拽位置为标题栏 2024-08-23 11:39:07 +08:00
aixianling
77176e5bf5 增加错误异常弹窗 2024-08-23 11:25:30 +08:00
aixianling
891757c7eb 修改定位弹窗的poi搜索优化 2024-08-23 11:18:18 +08:00
aixianling
47e31b127d 弥补组件对最小宽度的响应式绑定 2024-08-23 10:29:30 +08:00
aixianling
6ad47f207a 文件上传的问题 2024-08-23 09:58:01 +08:00
aixianling
0ff3eaff97 上传文件完成 2024-08-22 18:48:18 +08:00
aixianling
7d4c79ce1a 解决图层问题 2024-08-22 17:52:54 +08:00
aixianling
43e7f044f3 更新UI 2024-08-22 16:52:28 +08:00
aixianling
efd05d3298 更改定位弹窗标题.更新UI 2024-08-22 16:46:59 +08:00
aixianling
e6c143881d 更改定位弹窗标题.更新UI 2024-08-22 16:42:08 +08:00
aixianling
5b2ccae4ae 自动聚焦尝试处理没用 2024-08-22 15:23:07 +08:00
aixianling
de86b003fa 当需要定位的模型,在对话时未获取到位置
则该条对话记录 不应该发送出去
2024-08-22 14:17:12 +08:00
aixianling
70f8685b07 修改BUG1 无法自适应的问题 2024-08-22 11:42:37 +08:00
aixianling
df50f83ee2 增加loading 2024-08-19 17:41:23 +08:00
aixianling
8a2015da4c 更换图标 2024-08-19 15:50:25 +08:00
aixianling
5ee3bfbc41 兼容渲染markdown格式的内容 2024-08-19 15:23:45 +08:00
aixianling
f7c2d03428 定位完成 2024-08-19 14:36:26 +08:00
aixianling
4889f8bc09 Merge remote-tracking branch 'origin/build' into build 2024-08-19 11:07:31 +08:00
aixianling
1ea55c9e13 WEB端的 弹框尺寸可以放大,但不做缩小。 2024-08-19 11:06:00 +08:00
aixianling
438cbaa978 连续点击机器人图标,实现对话窗口展开和最小化 2024-08-19 10:29:25 +08:00
liuye
6a295b67d8 工单 2024-08-15 16:39:18 +08:00
liuye
3f389d2f43 提示文字 2024-08-15 13:42:23 +08:00
liuye
c3f46fcd50 席位管理 2024-08-15 11:10:41 +08:00
liuye
daa79e7b1b 编辑 2024-08-15 10:55:03 +08:00
liuye
074f77fac0 xbot席位管理变更需求 2024-08-15 10:47:14 +08:00
aixianling
1c27e3e574 Merge remote-tracking branch 'origin/build' into build 2024-08-15 10:02:56 +08:00
aixianling
a4f430be3e 兼容异常(张硕提) 2024-08-15 10:02:28 +08:00
liuye
c6672bc712 编辑 2024-08-15 09:58:45 +08:00
aixianling
5897590973 Merge remote-tracking branch 'origin/build' into build 2024-08-14 09:04:34 +08:00
aixianling
846ac803df 允许自定义大屏尺寸 2024-08-14 09:02:53 +08:00
liuye
b066edd428 迁移 2024-08-13 09:07:34 +08:00
liuye
9015cd06c0 工单 2024-08-09 17:48:03 +08:00
liuye
859a8198fe 工单 2024-08-08 10:44:49 +08:00
aixianling
077cb2cad2 Merge remote-tracking branch 'origin/build' into build 2024-08-08 10:26:54 +08:00
aixianling
bc1504cce5 允许积分设置负值@陈锐 2024-08-08 10:26:08 +08:00
liuye
4c01b277d2 工单 2024-08-07 10:23:57 +08:00
liuye
01cd905669 工单管理 2024-08-06 14:02:56 +08:00
aixianling
eac706bfcb 修复二次编辑时,无法提交的问题 2024-07-23 10:46:19 +08:00
aixianling
be9aa08cd9 评分管理-需求变更 2024-07-19 09:44:34 +08:00
aixianling
1cac8ab8e0 取消参数status 2024-07-18 15:01:51 +08:00
liuye
4385ba2354 选人组件去掉status1 2024-07-18 14:47:01 +08:00
aixianling
8707b6d48d Merge remote-tracking branch 'origin/build' into build 2024-07-18 11:59:43 +08:00
aixianling
a10a09c979 调整电机modal不关闭Dialog 2024-07-18 11:59:22 +08:00
liuye
4a563fbc78 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2024-07-18 10:14:23 +08:00
liuye
4e790062c7 消息来源 2024-07-18 10:13:54 +08:00
aixianling
59a998ee70 Merge remote-tracking branch 'origin/build' into build 2024-07-18 10:12:09 +08:00
aixianling
ed809fe9f4 调整常用功能布局样式 2024-07-18 10:11:54 +08:00
liuye
ec9bc40fe0 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2024-07-18 09:43:55 +08:00
liuye
fb3ded6877 html 2024-07-18 09:43:33 +08:00
aixianling
870bc38f1c 增加常用功能高亮 2024-07-18 09:39:04 +08:00
aixianling
2a882cb3ee 调整左边的排版 2024-07-18 09:22:22 +08:00
aixianling
80b6a03999 校正字段传输 2024-07-18 09:01:02 +08:00
aixianling
f1ba9f7409 每次调用完毕刷新会话记录 2024-07-16 17:59:00 +08:00
aixianling
740c6497f1 调整传值为conversationId 2024-07-16 16:27:35 +08:00
aixianling
5cc073cb87 调整传值为conversationId 2024-07-16 16:23:50 +08:00
aixianling
809ef180a9 修复弹窗遮挡 2024-07-16 15:33:54 +08:00
aixianling
3ebed172ac 对控制面板进行跨域遮罩 2024-07-16 15:25:36 +08:00
aixianling
0220dc7f67 异步数据导致渲染过早无法加载监控 2024-07-16 15:04:26 +08:00
aixianling
08cb8b1be8 异步数据导致渲染过早无法加载监控 2024-07-16 14:56:50 +08:00
aixianling
9b7b1283a8 异步数据导致渲染过早无法加载监控 2024-07-16 14:46:04 +08:00
aixianling
a6af330500 copilot处理完成 2024-07-16 12:21:33 +08:00
aixianling
a9224b896b 增加入参判断是否调用接口 2024-07-16 12:11:12 +08:00
aixianling
308c7f8ab0 增加入参判断是否调用接口 2024-07-16 12:04:06 +08:00
aixianling
916fae5c36 增加入参判断是否调用接口 2024-07-16 11:54:49 +08:00
aixianling
42aca4d540 按测试意见调整 2024-07-16 09:08:47 +08:00
aixianling
af5c7fb279 Merge remote-tracking branch 'origin/build' into build 2024-07-15 17:31:26 +08:00
aixianling
01c9853f9e 捡起历史的垃圾 2024-07-15 17:10:00 +08:00
liuye
a52278552c echarts-wordcloud 2024-07-12 17:20:57 +08:00
aixianling
1c9a736274 copilot配置完成 2024-07-12 16:40:20 +08:00
aixianling
dbb986688c 修复异常 2024-07-12 09:19:55 +08:00
aixianling
0fd8a0e1fa 优化滚动 2024-07-10 09:39:27 +08:00
aixianling
60a4d6a1c8 优化样式 2024-07-09 10:22:38 +08:00
aixianling
bad99f9383 表单验证补充完整返回 2024-07-09 10:19:09 +08:00
aixianling
dc1eacdc7f Merge remote-tracking branch 'origin/build' into build 2024-07-04 17:54:54 +08:00
aixianling
9ecde574bc copilot新样式完成 2024-07-04 17:54:30 +08:00
liuye
a6362ee638 cv 2024-07-04 17:49:36 +08:00
liuye
c1e1ac4b8b cv 2024-07-04 17:31:16 +08:00
aixianling
f8a7ffaca9 Merge remote-tracking branch 'origin/build' into build 2024-07-02 15:23:50 +08:00
aixianling
a362764dad 随便改个宽度 2024-07-02 15:23:36 +08:00
wanglei
fc468044c6 fix: 修改文字 2024-07-02 13:52:45 +08:00
wanglei
1e9fd39349 Merge remote-tracking branch 'origin/build' into build 2024-07-02 13:49:51 +08:00
wanglei
dd3e60ee2f fix: 修改弹框标题文字 2024-07-02 13:49:37 +08:00
aixianling
ece1ef06c3 Merge remote-tracking branch 'origin/build' into build 2024-07-02 10:08:37 +08:00
aixianling
6683b51c2f 产品走查调整 2024-07-02 10:08:19 +08:00
wanglei
ff2d0a8315 fix: 非必填字段 2024-07-01 17:12:46 +08:00
wanglei
541d090fa7 fix: 非必填字段 2024-07-01 16:59:21 +08:00
wanglei
1f5b213ddd fix: 字段 2024-07-01 12:01:32 +08:00
wanglei
165ae97634 fix: 修改一些bug 2024-07-01 11:13:31 +08:00
wanglei
f72c34e802 fix: 修改一些bug 2024-06-30 17:41:54 +08:00
wanglei
57db3819bb fix: 修改一些bug 2024-06-29 20:47:37 +08:00
wanglei
d3d8e4f397 fix: 修改传参字段 2024-06-29 14:42:15 +08:00
wanglei
29e4d1ec4b fix: 修改参数 2024-06-29 14:27:03 +08:00
wanglei
388274ace5 fix: 改bug 2024-06-29 14:13:29 +08:00
wanglei
6fc848d164 fix: 修改传参方式和bug 2024-06-29 13:53:59 +08:00
wanglei
01b4f3abb8 feat: 导入导出 2024-06-28 17:24:41 +08:00
wanglei
7c34462adc fix: 445 2024-06-28 17:05:28 +08:00
wanglei
77664107fa fix: 统计 2024-06-28 10:38:07 +08:00
wanglei
9c5f594a58 fix: 445 447 2024-06-28 10:24:40 +08:00
wanglei
8a704eae3e feat: 时间校验 2024-06-28 10:12:04 +08:00
wanglei
09f9795cd8 Merge remote-tracking branch 'origin/build' into build 2024-06-28 09:26:13 +08:00
wanglei
0f1df0b87d fix: 评价类型字典 2024-06-28 09:25:56 +08:00
aixianling
b5a07c699a Merge remote-tracking branch 'origin/build' into build 2024-06-27 17:46:32 +08:00
aixianling
61852f86ec 解决显示问题 2024-06-27 17:43:44 +08:00
wanglei
e2d5d29d0c fix: 441 2024-06-27 17:29:02 +08:00
wanglei
23bfdb7ac5 feat: 门店评价批量删除 2024-06-27 17:23:35 +08:00
wanglei
172213cdc2 feat: 门店详情 2024-06-27 17:02:06 +08:00
wanglei
1e65208a4b fix: 414 2024-06-27 16:38:54 +08:00
wanglei
7aa17bd31c Merge remote-tracking branch 'origin/build' into build 2024-06-27 16:34:33 +08:00
wanglei
205f17b706 fix: 433 2024-06-27 16:33:52 +08:00
aixianling
2164d0f348 解决跳转问题 2024-06-27 15:25:49 +08:00
aixianling
72d69e5c8f 解决跳转问题 2024-06-27 15:24:37 +08:00
aixianling
91fd641845 Merge remote-tracking branch 'origin/build' into build 2024-06-27 15:13:46 +08:00
aixianling
ece292c45a 修复设置参数 2024-06-27 15:13:33 +08:00
wanglei
6b59beba0d fix: 419 2024-06-27 14:17:54 +08:00
wanglei
aba3e33e70 fix: 413 2024-06-27 11:23:15 +08:00
wanglei
5fd3ed4542 Merge remote-tracking branch 'origin/build' into build 2024-06-27 10:47:38 +08:00
wanglei
c707186f48 feat: 统计完成 2024-06-27 10:47:18 +08:00
aixianling
ebc5e3aeef Merge remote-tracking branch 'origin/build' into build 2024-06-27 10:32:06 +08:00
aixianling
52cbc12d20 增加aiEnable进行情况筛选 2024-06-27 10:31:52 +08:00
wanglei
00105f6a7d Merge remote-tracking branch 'origin/build' into build 2024-06-27 09:39:07 +08:00
wanglei
53bf64712e feat: 评分任务 2024-06-27 09:38:47 +08:00
aixianling
5ddb198c0e Merge remote-tracking branch 'origin/build' into build 2024-06-27 09:18:57 +08:00
aixianling
15e9f9d760 增加aiEnable进行情况筛选 2024-06-27 09:18:40 +08:00
wanglei
236404c5ba feat: 门店评价 2024-06-26 16:48:30 +08:00
wanglei
9b8f05e764 feat: 评选任务 2024-06-26 15:58:23 +08:00
wanglei
2dc62004e1 feat: 规则管理 2024-06-26 15:35:16 +08:00
wanglei
a4c5517b09 feat: 规则管理 2024-06-26 15:32:10 +08:00
wanglei
e1b9633ba4 fix: 门店评价 2024-06-26 11:56:47 +08:00
wanglei
e73dd17908 fix: 经营类型字典 2024-06-26 11:23:53 +08:00
wanglei
54880a9562 feat: 门店档案接口 2024-06-26 11:19:28 +08:00
wanglei
2ff20d4fc5 fix: 门店档案接口 2024-06-26 09:30:48 +08:00
wanglei
f719b71628 Merge remote-tracking branch 'origin/build' into build 2024-06-26 09:24:21 +08:00
wanglei
3e3f3349b4 feat: 门店档案接口 2024-06-26 09:24:04 +08:00
aixianling
be8698382a 增加areaId 2024-06-26 09:03:00 +08:00
wanglei
463e545c19 feat: 门店档案新增,详情 2024-06-25 16:36:01 +08:00
wanglei
210e410a26 feat: 门店评价 2024-06-25 15:43:43 +08:00
wanglei
4e051d9bee feat: 片区选择 2024-06-25 14:35:50 +08:00
wanglei
2796506449 feat: 档案批量删除 2024-06-25 11:37:09 +08:00
wanglei
f0f7f75bf3 feat: 档案详情列表生成二维码 2024-06-25 11:28:47 +08:00
wanglei
587b988ade feat: 档案详情字段 2024-06-25 11:24:55 +08:00
wanglei
8279b89ff5 feat: 档案详情 2024-06-25 11:23:15 +08:00
wanglei
2143da5dce feat: 新增档案 2024-06-25 11:13:29 +08:00
wanglei
f095e344f5 feat: 档案表单 2024-06-25 10:25:37 +08:00
wanglei
d59aef8a15 Merge remote-tracking branch 'origin/build' into build 2024-06-25 10:06:56 +08:00
wanglei
ebf726afd5 feat: 档案表单 2024-06-25 10:06:32 +08:00
aixianling
c0667636a5 挂载分屏所需 2024-06-25 09:39:56 +08:00
aixianling
892979ef1a 挂载分屏所需 2024-06-25 09:22:51 +08:00
aixianling
eca9fc8196 取消点击遮罩关闭弹窗的设置 2024-06-25 09:15:29 +08:00
aixianling
8566f8cd70 Merge remote-tracking branch 'origin/build' into build 2024-06-25 09:06:44 +08:00
aixianling
f7976b6022 菜单管理是否显示菜单默认为是 2024-06-25 09:05:38 +08:00
liuye
d17ae463e8 任务管理 2024-06-25 08:43:55 +08:00
wanglei
927a091075 Merge remote-tracking branch 'origin/build' into build 2024-06-25 08:39:56 +08:00
wanglei
b4234e30d8 feat: 规则和评选 2024-06-25 08:39:38 +08:00
aixianling
f2a513bd0e 完成 2024-06-24 19:52:36 +08:00
aixianling
90e89cd60d 日志完成 2024-06-24 19:42:17 +08:00
aixianling
cd4a5621bb 处理部分接口 2024-06-24 18:22:18 +08:00
aixianling
5c29d7ca5d 调整样式 2024-06-24 17:59:21 +08:00
aixianling
18dd1937ce 调整样式 2024-06-24 17:01:50 +08:00
aixianling
c65f06acc0 Merge remote-tracking branch 'origin/build' into build 2024-06-24 16:50:26 +08:00
aixianling
e7991254fa 调整接口 2024-06-24 16:50:05 +08:00
wanglei
46ea63390e feat: 评分管理 2024-06-24 14:27:26 +08:00
wanglei
17990fe640 fix: 字体样式 2024-06-24 10:34:13 +08:00
wanglei
615f83861e feat: 门店统计 2024-06-24 10:31:49 +08:00
wanglei
428eb3319f Merge remote-tracking branch 'origin/build' into build 2024-06-24 09:22:35 +08:00
wanglei
91f3956508 feat: 门店评价 2024-06-24 09:21:06 +08:00
liuye
5fa3d83f3e 任务管理 2024-06-24 09:18:20 +08:00
wanglei
d1c0c4a784 feat: 门店评价 2024-06-23 18:06:40 +08:00
wanglei
316e530943 feat: 门店评价 2024-06-23 18:06:24 +08:00
wanglei
692ffab0d9 feat: 门店档案评分 2024-06-23 17:41:30 +08:00
wanglei
a293259fb9 feat: 门店档案 2024-06-23 17:30:00 +08:00
aixianling
ea0ec60401 界面完成 2024-06-23 14:30:27 +08:00
aixianling
526af7828d Merge remote-tracking branch 'origin/build' into build 2024-06-23 10:35:14 +08:00
aixianling
3c9ac1b3d8 增加oms配置项 2024-06-23 10:34:53 +08:00
liuye
562a875219 注释 2024-06-21 17:59:17 +08:00
liuye
d21a9ba075 调用任务 2024-06-21 17:58:47 +08:00
liuye
777411294c 调用任务 2024-06-21 17:56:29 +08:00
aixianling
4dd5d85607 调整措辞 2024-06-17 16:45:18 +08:00
aixianling
4476215d1c 增加层级 2024-06-17 16:37:09 +08:00
aixianling
fccdcf735f 增加空白判断 2024-06-17 16:35:09 +08:00
aixianling
8c9db36978 copilot助手增加埋点 2024-06-17 16:04:46 +08:00
aixianling
aded396bd1 copilot助手完成 2024-06-17 15:55:26 +08:00
aixianling
fa6553c4f6 修复展开抖动 2024-06-06 18:42:57 +08:00
aixianling
180cc0778d 样式完成 2024-06-06 18:38:05 +08:00
aixianling
840934372e 提交AI聊天样式 2024-06-05 18:13:01 +08:00
aixianling
ec09a998f7 调整展开动画 2024-06-05 16:10:13 +08:00
aixianling
426f081cbc aiCopilot样式提交 2024-06-04 18:16:51 +08:00
liuye
890af51f30 调用任务 2024-05-20 15:35:49 +08:00
liuye
18fa7ac43f 席位管理 2024-05-17 11:41:16 +08:00
liuye
6b54d60ae0 变更需求 2024-05-17 11:34:33 +08:00
liuye
4753245f74 代码生成 2024-04-25 13:50:00 +08:00
liuye
a1c2cef0d9 search 2024-04-25 13:40:43 +08:00
liuye
5423483f1c 代码生成 2024-04-25 12:02:22 +08:00
aixianling
a20fcb413a 调整完毕 2024-04-18 19:17:17 +08:00
aixianling
f3e1580fef 参数调整 2024-04-18 17:36:31 +08:00
liuye
cd708b373c 删除web端巫溪会议代码 2024-04-18 15:30:32 +08:00
liuye
d025673c53 巫溪会议 2024-04-18 13:49:21 +08:00
liuye
a85f7b201c ct 2024-04-17 17:50:59 +08:00
liuye
6dbe6365e8 巫溪 2024-04-17 17:48:42 +08:00
aixianling
f909eae8c0 参数调整 2024-04-17 12:01:04 +08:00
aixianling
674ddb1fd6 修复样式和设置 2024-04-16 18:13:55 +08:00
aixianling
7dfd1c8d6c 布局调整 2024-04-16 17:51:49 +08:00
aixianling
7393eeb858 表格调整完毕 2024-04-16 17:42:57 +08:00
aixianling
8f21db5ca3 地图和图标样式调整 2024-04-16 14:55:21 +08:00
aixianling
7a0538dff0 大概可以看的一版 2024-04-15 15:35:57 +08:00
aixianling
fdfbaad6d8 提交一波,继续处理数据结构 2024-04-15 14:31:13 +08:00
e72f7c5e9f 地图数据颜色 2024-04-15 01:14:33 +08:00
bc50d76366 地图点击事件 2024-04-15 00:27:45 +08:00
fe7c6a5cb8 调整部分设置 2024-04-14 22:09:26 +08:00
aixianling
372f52e655 联动地图完成 2024-04-12 18:19:49 +08:00
aixianling
5d2a66b861 大屏自残术结构重构 2024-04-12 15:03:17 +08:00
aixianling
b5523f5f40 单独构建大屏ui库,避免引入混乱 2024-04-12 10:22:47 +08:00
aixianling
a4d4e3cea5 修复同一系列下,不同item下对应不同颜色的问题 2024-04-10 17:35:07 +08:00
aixianling
f50bd497be 修复黔西南异常 2024-04-02 18:15:49 +08:00
aixianling
de918d48dc 修复黔西南异常 2024-04-02 17:24:55 +08:00
aixianling
d599972b7f 更换corpId 2024-04-02 15:47:23 +08:00
aixianling
dee681d246 更换corpId 2024-04-02 15:16:37 +08:00
aixianling
8990e921ae 增加弹窗关闭 2024-03-27 14:24:54 +08:00
aixianling
67fb697136 修复一下 2024-03-27 14:00:44 +08:00
aixianling
f34d6bf108 大屏完成 2024-03-27 12:31:39 +08:00
aixianling
570476b2aa echarts调整升级 2024-03-26 17:05:24 +08:00
aixianling
0821d9b238 echarts调整升级,地图完成一部分 2024-03-26 16:57:18 +08:00
aixianling
c557433324 样式微调 2024-03-26 09:25:00 +08:00
aixianling
78d2c0ee21 多彩柱状完成 2024-03-25 18:49:59 +08:00
aixianling
03cd857bf3 多彩柱状完成 2024-03-25 18:49:22 +08:00
aixianling
5273f300ea 允许echart在组件内更换图标类型 2024-03-25 17:49:57 +08:00
aixianling
4c220621b5 给echart提供个性化的地方 2024-03-25 15:51:15 +08:00
aixianling
e2c0e919d3 调校列表 2024-03-25 13:48:28 +08:00
aixianling
bffb6d14e0 新增大屏饼图组件 2024-03-22 18:34:38 +08:00
aixianling
10b43594ca 修复双向绑定 2024-03-22 13:59:14 +08:00
aixianling
c7b37d645d 更换json编辑器 2024-03-22 11:52:39 +08:00
aixianling
bc17e11c47 增加统计组件 2024-03-21 15:46:13 +08:00
aixianling
0731de6926 保存下配置 2024-03-21 14:49:23 +08:00
aixianling
9710e0aa00 删除冗余代码 2024-03-20 11:04:16 +08:00
aixianling
59b4151e15 集成环境变量作为选项配置的 2024-03-20 10:41:28 +08:00
liuye
d0a695e874 席位管理 2024-03-14 10:50:41 +08:00
liuye
ec55f48a63 xbot 2024-03-13 17:37:30 +08:00
liuye
f69a6a75c8 xbot私聊放开 2024-03-13 16:54:24 +08:00
liuye
6f688a058c cv 2024-03-13 10:06:33 +08:00
liuye
9ea22ba66b cv 2024-03-13 10:01:22 +08:00
liuye
dbf63a0952 xbot个人微信放开私聊 2024-03-13 09:30:19 +08:00
liuye
2de8bc681b 席位 2024-03-13 09:16:04 +08:00
liuye
1ba2d12376 纠纷类别 2024-03-05 15:28:04 +08:00
liuye
cb24b1560d detail.judgeName 2024-03-05 08:54:16 +08:00
liuye
5656d35d71 事件上报 2024-03-04 17:55:43 +08:00
liuye
80734a0893 .info 2024-03-04 17:23:17 +08:00
liuye
2335d43070 详情 2024-03-04 14:13:34 +08:00
liuye
1a1ed43bd3 转交 2024-03-04 11:38:17 +08:00
liuye
32500deaee girdCode 2024-03-04 10:22:32 +08:00
liuye
5b56f03269 事件上报 2024-03-01 17:46:42 +08:00
liuye
f5dcdd3755 事件上报 2024-03-01 17:01:53 +08:00
liuye
68d4f8ac1b 事件上报 2024-03-01 14:06:55 +08:00
aixianling
4442b2c578 Merge remote-tracking branch 'origin/build' into build 2024-03-01 11:30:18 +08:00
aixianling
66d0f0c8ab 增加标题文字大小控制 2024-03-01 11:29:37 +08:00
liuye
a65bb62369 qujing 2024-03-01 09:46:31 +08:00
liuye
da02013346 事件上报 2024-02-29 17:03:54 +08:00
liuye
c30099b635 事件上报 2024-02-29 11:51:24 +08:00
aixianling
75f3efa38a 禁用v-viewer的日志输出 2024-02-28 15:13:46 +08:00
aixianling
f9e74f8362 清除注释 2024-02-28 15:11:56 +08:00
aixianling
13b779ff3e 修复切换组件时,数据的设置数据不更新的问题 2024-02-28 15:08:09 +08:00
aixianling
8a1fa07e9b 提交先能打包 2024-02-28 09:08:56 +08:00
aixianling
44a486fba6 还原配置 2024-02-27 17:21:58 +08:00
aixianling
99030da813 临时提交 2024-02-27 17:20:10 +08:00
aixianling
592981cdf8 Merge remote-tracking branch 'origin/build' into build 2024-02-27 17:03:46 +08:00
aixianling
ca9e65f0cf 静态数据兼容key和name作为列名项 2024-02-27 17:03:39 +08:00
liuye
e21be6d018 css 2024-02-27 14:02:11 +08:00
liuye
28439149b3 areaId 2024-02-26 10:49:23 +08:00
liuye
e259a3c411 name 2024-02-26 10:39:57 +08:00
liuye
124cb852aa 统计 2024-02-26 10:24:55 +08:00
liuye
d3fc263f4e 统计 2024-02-26 09:56:32 +08:00
liuye
f404055955 时间 2024-02-19 17:21:34 +08:00
aixianling
421d15e27e 大屏样式完成 2024-02-08 11:09:18 +08:00
aixianling
1994faf5b8 大屏样式完成 2024-02-07 17:24:55 +08:00
aixianling
6cca359c2a 兼容更多打静态数据格式 2024-02-07 15:27:16 +08:00
aixianling
304a64f65c 修复一下样式 2024-02-07 14:23:53 +08:00
aixianling
717328223a bigscreen style fixed 2024-02-06 17:23:42 +08:00
aixianling
f1ed3b9b54 bigscreen style fixed 2024-02-06 17:21:49 +08:00
aixianling
7b5cbdf010 bigscreen style fixed 2024-02-06 17:16:31 +08:00
aixianling
f1dd17b8f9 bigscreen style fixed 2024-02-06 17:10:18 +08:00
aixianling
4e145e8435 bigscreen style fixed 2024-02-06 17:08:29 +08:00
aixianling
066feca056 修复style 2024-02-05 17:05:43 +08:00
aixianling
9414658842 Merge remote-tracking branch 'origin/build' into build 2024-02-05 11:59:26 +08:00
aixianling
c494281257 修复大屏弹窗 2024-02-05 11:59:20 +08:00
liuye
0c940de38d AI统计 2024-02-05 10:48:56 +08:00
liuye
eaf7819d22 屏蔽群主 2024-02-05 10:35:40 +08:00
liuye
212413ae5f AI统计 2024-02-05 10:34:56 +08:00
aixianling
0e94cec311 clean exception 2024-02-02 09:11:00 +08:00
aixianling
9946553938 针对中移物联的监控只能使用一次的问题进行功能设置请求URL在使用前一刻抓取 2024-02-01 19:25:50 +08:00
aixianling
06eb7a30bf 喀左大屏改造,追加监控轮播大屏组件 2024-02-01 19:10:03 +08:00
aixianling
f9684bb0c4 fixed the add dvPage bug 2024-02-01 16:38:54 +08:00
aixianling
bafa145712 Merge remote-tracking branch 'origin/build' into build 2024-01-30 14:06:51 +08:00
aixianling
1f884ac990 提供87的运行脚本 2024-01-30 11:49:02 +08:00
aixianling
776539a32b 先占个坑 2024-01-29 10:32:11 +08:00
aixianling
f82d7f58e7 弹窗内容改成在弹窗中设置富文本 2024-01-26 14:06:06 +08:00
aixianling
a42aa166d1 预埋弹窗设置点 2024-01-24 16:34:57 +08:00
aixianling
7232b894f7 规范文件名 2024-01-24 10:45:43 +08:00
aixianling
4f3a5af06d 规范文件名 2024-01-24 10:25:35 +08:00
aixianling
ac3ea74b87 Merge remote-tracking branch 'origin/build' into build 2024-01-24 10:03:30 +08:00
aixianling
d18b879873 静态数据编辑器改造完成 2024-01-24 10:03:09 +08:00
liuye
8d477fd6b5 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2024-01-24 09:11:02 +08:00
liuye
4f446d5a09 AI关键词 2024-01-24 09:10:42 +08:00
aixianling
f77d943ba6 Merge remote-tracking branch 'origin/build' into build 2024-01-23 18:18:48 +08:00
aixianling
23d845f828 静态数据编辑器基本完成 2024-01-23 18:17:48 +08:00
liuye
f0c3ae6cd4 任务管理 2024-01-23 17:45:08 +08:00
liuye
7ec939c54d 任务管理 2024-01-23 17:09:23 +08:00
liuye
619858e595 任务管理 2024-01-23 17:01:34 +08:00
liuye
5e37673dba 统计 2024-01-23 11:09:18 +08:00
liuye
e45d794128 统计 2024-01-23 11:07:10 +08:00
liuye
74f31b61d2 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2024-01-23 10:53:17 +08:00
liuye
30f8f09645 统计 2024-01-23 10:52:52 +08:00
aixianling
40860776a0 接入avue 2024-01-22 18:19:56 +08:00
aixianling
ad0a91750c v-viewer转化成cdn文件,优化包 2024-01-22 17:12:32 +08:00
liuye
1aa2e264d7 任务数 2024-01-19 14:38:23 +08:00
liuye
7792ec186c 会话 2024-01-19 11:37:23 +08:00
liuye
60e9377f2e 快捷键 2024-01-19 11:17:06 +08:00
liuye
2f711f455a 会话存档 2024-01-19 11:11:55 +08:00
liuye
4943c4cd09 bug 2024-01-18 09:28:28 +08:00
liuye
c399e1a522 bug 2024-01-18 09:18:51 +08:00
liuye
6975bf7608 调用统计 2024-01-18 09:09:24 +08:00
liuye
f01445678d 调用明细 2024-01-17 17:08:46 +08:00
liuye
059112abba ai调用统计 2024-01-17 14:13:00 +08:00
liuye
eaba5f7be7 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2024-01-16 12:37:16 +08:00
liuye
ffa8e336b6 1000000 2024-01-16 12:36:50 +08:00
aixianling
10a67de2ba 刷一遍颜色 2024-01-16 09:35:10 +08:00
aixianling
9316a8749e 颜色调整 2024-01-16 09:14:40 +08:00
b6f7aac2cd 调整大屏展示内容 2024-01-16 02:53:07 +08:00
aixianling
194c9e59df 增加新的数据统计样式 2024-01-15 19:56:05 +08:00
aixianling
4fefcb8766 Merge remote-tracking branch 'origin/build' into build 2024-01-15 19:13:01 +08:00
aixianling
ee78546e7a Ai助手完成 2024-01-15 19:11:44 +08:00
liuye
35aedab466 任务管理 2024-01-15 16:34:29 +08:00
liuye
4574738593 调用次数 2024-01-15 14:17:06 +08:00
liuye
7a0577b1c3 任务管理 2024-01-15 12:01:46 +08:00
liuye
94300ec85c 任务管理 2024-01-15 10:25:19 +08:00
liuye
0256669afb Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2024-01-12 16:01:17 +08:00
liuye
42673696b4 任务管理 2024-01-12 16:01:00 +08:00
aixianling
fdb5226b31 大屏开发 2024-01-11 18:18:00 +08:00
aixianling
8f5b0a990e Merge remote-tracking branch 'origin/build' into build 2024-01-11 10:13:17 +08:00
aixianling
2e3671c1fa 调整打包脚本 2024-01-11 10:12:49 +08:00
liuye
1819bdf1b9 席位管理 2024-01-10 14:59:58 +08:00
liuye
37c81cb607 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2024-01-09 16:08:05 +08:00
liuye
d0a7759428 推送任务 2024-01-09 16:07:07 +08:00
aixianling
cf6a8cf71f Merge remote-tracking branch 'origin/build' into build 2024-01-09 15:54:01 +08:00
aixianling
d8efdc369c 调整在jenkins打包异常时,无法继续打包的问题 2024-01-09 15:53:25 +08:00
liuye
d38355ba37 新增禁用 2024-01-09 15:05:04 +08:00
aixianling
2603294bf9 增加最小文本设置 2024-01-09 10:53:29 +08:00
aixianling
b4a8363efe 增加最小文本设置 2024-01-09 10:52:16 +08:00
aixianling
c84e0d288e 先提交一波 2024-01-08 18:00:12 +08:00
aixianling
6168d5d4b2 增加AI助手 2024-01-08 16:36:34 +08:00
liuye
d7e8fa64fd bug 2024-01-05 11:32:25 +08:00
liuye
8f6917b10f 席位管理 2024-01-05 11:15:43 +08:00
liuye
312c17d985 席位 2024-01-05 10:59:54 +08:00
liuye
15f9f4f9d3 席位管理 2024-01-05 09:09:12 +08:00
liuye
94d27be493 bug 2024-01-02 09:46:11 +08:00
liuye
47c74b5d0a bug 2024-01-02 09:33:24 +08:00
liuye
fb0b73be04 bug 2024-01-02 09:07:19 +08:00
liuye
914fb11d48 & 2023-12-29 17:43:54 +08:00
liuye
950dd57d2d clientInfoId 2023-12-29 17:27:17 +08:00
liuye
293737d8ac 群发 2023-12-28 17:15:19 +08:00
liuye
258bf54607 积分统计 2023-12-21 17:13:26 +08:00
liuye
62a38d7d9e 积分统计 2023-12-21 10:25:31 +08:00
aixianling
bcfd770fc2 修复积分统计变更样式 2023-12-21 09:14:36 +08:00
liuye
07cff62073 积分统计 2023-12-20 17:09:04 +08:00
liuye
1312af0d5c 积分统计 2023-12-20 13:57:10 +08:00
liuye
791af1c397 ai 2023-12-19 11:51:36 +08:00
liuye
3be2c18960 百度ai 2023-12-19 11:07:53 +08:00
liuye
aa4cdb88a2 百度AI关键词 2023-12-19 10:56:31 +08:00
liuye
4d45905531 工作任务 2023-12-01 17:25:34 +08:00
liuye
4f4319150b 楼栋管理 2023-11-29 13:55:06 +08:00
liuye
7913e12144 网格员积分 2023-11-21 14:17:37 +08:00
liuye
a0113a6770 群发通知 2023-11-21 13:57:56 +08:00
liuye
088d91bb95 协同宣发 2023-11-21 11:44:11 +08:00
liuye
bdd2e7f5ee 账号管理 2023-11-21 11:16:39 +08:00
liuye
81f9744633 群发通知 2023-11-21 10:06:10 +08:00
liuye
5859210eb3 标品 2023-11-20 17:43:33 +08:00
liuye
a784c2c9b4 迁移 2023-11-20 10:25:54 +08:00
liuye
688437a068 cv 2023-11-17 10:22:53 +08:00
liuye
843476a24b 代码迁移 2023-11-17 10:10:36 +08:00
liuye
df464eae89 标品迁移 2023-11-17 09:34:34 +08:00
liuye
22023aa887 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-11-08 14:10:05 +08:00
liuye
5718b5bfa2 三会一课 2023-11-08 14:09:18 +08:00
liuye
3ac80e3bbb 三会一课 2023-11-08 14:08:30 +08:00
aixianling
ed6b0695f2 Merge remote-tracking branch 'origin/build' into build 2023-11-08 11:56:48 +08:00
aixianling
1370593dd0 调整平昌的党组织选择 2023-11-08 11:56:32 +08:00
liuye
acb6393f7d 巡查上报设置 2023-11-08 11:48:40 +08:00
liuye
0aaa71aa29 巡查上报 2023-11-08 11:33:28 +08:00
liuye
0c3dab491f 巡查上报设置 2023-11-08 11:20:40 +08:00
liuye
63d85b5c5b 三会一课 2023-11-08 10:45:48 +08:00
liuye
3473d09885 巡查上报设置 2023-11-08 09:31:03 +08:00
liuye
10ae557ad0 巡查上报 2023-11-07 14:18:28 +08:00
liuye
9307452a14 巡查上报设置 2023-11-06 15:36:13 +08:00
liuye
a2519d82a2 网格区块 2023-11-06 15:27:54 +08:00
liuye
ec8da18298 巡查上报设置 2023-11-03 16:06:48 +08:00
liuye
91701965e9 巡查上报设置 2023-11-03 15:59:19 +08:00
liuye
86171587a0 网格区块 2023-11-03 10:30:32 +08:00
liuye
6474d8d4a1 巡查上报设置 2023-11-02 14:55:23 +08:00
aixianling
dc45b610cc Merge remote-tracking branch 'origin/build' into build 2023-11-01 11:34:41 +08:00
aixianling
a0afde54ff 丰都大屏完成 2023-11-01 11:34:27 +08:00
liuye
329aeecb34 登陆 2023-11-01 08:47:20 +08:00
liuye
1b4f7d95bf Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-11-01 08:43:22 +08:00
liuye
2221b11742 登录页手机号换为账号 2023-11-01 08:42:22 +08:00
aixianling
4e07ff289e 丰都大屏完成 2023-10-31 18:06:18 +08:00
aixianling
542466d01a 丰都大屏完成 2023-10-31 18:03:52 +08:00
aixianling
b64f63ef9b 左下角交互调整 2023-10-31 16:09:11 +08:00
aixianling
ff9491490c 互助会地图交互完成 2023-10-31 11:36:39 +08:00
aixianling
9e720dd808 地图聚合 2023-10-30 17:48:04 +08:00
aixianling
985efd1a83 左下角互助会板面数据对接完成 2023-10-30 14:51:03 +08:00
liuye
9251ab86e3 党费缴纳 2023-10-30 11:56:50 +08:00
aixianling
961950bf5e 修复搜索栏显示BUG 2023-10-30 11:50:35 +08:00
aixianling
ed390fafc2 Merge remote-tracking branch 'origin/build' into build 2023-10-30 11:39:40 +08:00
aixianling
ddc099cffb 修复搜索栏显示BUG 2023-10-30 11:39:28 +08:00
liuye
c66b661779 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-10-30 11:16:27 +08:00
liuye
407b3ba2ac 党员管理 2023-10-30 11:15:58 +08:00
aixianling
d61c61d553 Merge remote-tracking branch 'origin/build' into build 2023-10-30 11:11:35 +08:00
aixianling
eaadc9ae9c 修复搜索栏显示BUG 2023-10-30 11:11:20 +08:00
liuye
667e2af2df 地图中心点 2023-10-27 15:19:30 +08:00
liuye
059df5fddf 党费缴纳 2023-10-26 14:24:10 +08:00
liuye
2d74465cf7 党费缴纳 2023-10-26 13:58:40 +08:00
liuye
8b0650641e 党费缴纳 2023-10-26 08:56:19 +08:00
liuye
c830b57f1f 党费缴纳 2023-10-25 16:20:06 +08:00
aixianling
f4b0e31858 更换兑换总积分图标 2023-10-25 12:07:12 +08:00
aixianling
24b7be6b32 修复自适应的返回异常 2023-10-25 10:54:41 +08:00
aixianling
5620d9aeb9 地图重置调整 2023-10-25 09:32:38 +08:00
aixianling
3cc973c3be 获取店铺信息调整参数为visibleId 2023-10-25 08:58:45 +08:00
aixianling
2546cadadd 修复地图切换地图变换 2023-10-24 18:17:56 +08:00
aixianling
1dd3a81607 地图尺寸还原 2023-10-24 18:12:13 +08:00
aixianling
67f1d0c45c 增加地图缩放及恢复 2023-10-24 18:10:46 +08:00
aixianling
ba05fbda15 地区切换修复 2023-10-24 16:04:19 +08:00
aixianling
6ea2e37243 缺失插件 2023-10-24 14:46:16 +08:00
aixianling
cd33176a79 增加互助会空白位补充 2023-10-24 14:27:33 +08:00
aixianling
8d19706bac Merge remote-tracking branch 'origin/build' into build 2023-10-24 13:49:18 +08:00
aixianling
ebb263cf2b 除了第三方数据均已开发完成 2023-10-24 13:48:50 +08:00
liuye
00e02114cf 丰都积分统计自定义范围两个日期不联动 2023-10-24 09:48:45 +08:00
aixianling
5a64f7ac7d 调整部分地图数据 2023-10-23 18:07:14 +08:00
aixianling
d5f959707a Merge remote-tracking branch 'origin/build' into build 2023-10-23 16:35:11 +08:00
aixianling
4ec643dd1a 除地图和对接数据外已完成 2023-10-23 16:32:13 +08:00
liuye
fd90613094 内容管理列表页面接口修改 2023-10-23 15:33:31 +08:00
liuye
1420676c7c 新增店铺 2023-10-23 14:09:52 +08:00
liuye
b37a7b0d04 积分超市店铺位置 2023-10-23 13:58:45 +08:00
aixianling
8c07c9a6cb 对接大部分接口 2023-10-23 10:48:30 +08:00
aixianling
189e7621ad 整体界面完成 2023-10-23 09:18:23 +08:00
aixianling
e55b5b8a8d 丰都图标样式基本完成 2023-10-19 17:19:15 +08:00
aixianling
b7b1431b20 平昌地图图例调整 2023-10-18 18:13:11 +08:00
aixianling
f9b7833e47 平昌地图图例调整 2023-10-18 17:47:54 +08:00
aixianling
82bd4af605 增加平昌地图图例 2023-10-18 15:22:17 +08:00
aixianling
da422ec320 丰都先提交一下 2023-10-18 14:59:52 +08:00
aixianling
8df77fb17a 丰都先提交一下 2023-10-18 10:34:41 +08:00
liuye
522b197279 话题设置,精选动态 2023-10-17 13:57:46 +08:00
liuye
e49b4840e3 巡查上报 2023-10-17 13:43:52 +08:00
liuye
ca7ad35d97 巡查上报 2023-10-17 13:42:24 +08:00
liuye
4ba346e72a 订单 2023-10-17 13:39:06 +08:00
liuye
eed32e32a7 卢龙web端功能迁移 2023-10-17 11:25:18 +08:00
aixianling
3ade163fbd 提交一部分丰都大屏 2023-10-13 18:10:45 +08:00
aixianling
ab92982e71 丰都大屏标题搞定 2023-10-12 18:17:46 +08:00
aixianling
6b7ff8e58c 增加自适应组件 2023-10-11 18:21:40 +08:00
aixianling
7be1dfd235 增加自适应组件 2023-10-11 16:32:13 +08:00
aixianling
76f8830a0e 修复样式 2023-10-10 17:52:30 +08:00
aixianling
de994686f7 增加轻量启动模式,只加载相关项目的代码,来减少构建,启动,刷新,调试所需要的时间 2023-10-10 16:46:43 +08:00
aixianling
5b09630e62 设置在高德API setFitView方法导致的中心点和缩放与初始化不一致的问题的问题调优 2023-10-10 10:25:46 +08:00
aixianling
c776c1d733 修复地图描点点击返回缩放等级与点击前不一致的问题 2023-10-10 09:27:23 +08:00
aixianling
21ed9dc914 修复联动表出现显示异常的问题 2023-10-10 09:03:53 +08:00
aixianling
cec6ccc78a 联动表问题修复 2023-10-09 20:08:00 +08:00
aixianling
6f6dc79702 追加毛玻璃效果 2023-10-09 19:23:39 +08:00
aixianling
656b4be0c3 追加毛玻璃效果 2023-10-09 19:17:35 +08:00
aixianling
e129575479 一维表转二维表完成 2023-10-09 19:11:01 +08:00
aixianling
1b2348ef73 修复轮播图编辑器 2023-10-09 17:37:22 +08:00
aixianling
3a9377fe4b 调整工程结构,并进行了优化 2023-10-09 16:46:02 +08:00
aixianling
d6d1b16a81 微心愿取消所属地区 2023-10-09 11:10:37 +08:00
aixianling
30b25883a8 第一书记跟随目录名称 2023-10-09 10:53:30 +08:00
aixianling
872e7afdd3 多维表功能完成 2023-10-08 18:16:51 +08:00
aixianling
4eeb00b093 紧急修复一老BUG 2023-10-08 14:14:27 +08:00
aixianling
dec9937830 紧急修复一老BUG 2023-10-08 13:48:30 +08:00
aixianling
c2a1ad2cd7 多维图数据设置已完成 2023-10-08 11:17:11 +08:00
aixianling
8dd48bc16c 多维图数据设置已完成 2023-10-08 11:14:00 +08:00
aixianling
8aaf56e9e9 增加如果大屏没有保存基本信息不允许添加大屏内容 2023-10-08 11:12:41 +08:00
aixianling
8224ebfb8a 暂时修复一下 2023-10-08 10:20:04 +08:00
aixianling
fa551fe618 多维表数据设置面板完成 2023-10-07 18:04:34 +08:00
aixianling
03272542b9 增加地图标记点删除功能 2023-10-07 11:52:56 +08:00
aixianling
1c69fc8366 增加地图图标面板修改功能 2023-10-07 11:38:45 +08:00
aixianling
50541832cc 已增加整轮播图和地图连线 2023-10-07 11:30:13 +08:00
aixianling
39a344b054 Merge remote-tracking branch 'origin/build' into build 2023-09-27 14:21:22 +08:00
aixianling
54d49f0d14 优化工程运行 2023-09-27 14:20:38 +08:00
liuye
b235b5a3dc 巡查上报导出 2023-09-21 16:52:20 +08:00
aixianling
54b4c6f7c3 -.-....-.---.-- -..-......----.. ---..---.-.-..- --....-....---- 2023-09-21 10:37:37 +08:00
aixianling
51aa329160 -.-....-.---.-- -..-......----.. ---..---.-.-..- --....-....---- 2023-09-21 09:38:22 +08:00
aixianling
6c60c3439a 调整统计数据度量 2023-09-21 09:18:02 +08:00
aixianling
e725476603 调整3D地图 2023-09-20 17:40:15 +08:00
aixianling
1604efdecc 调整样式 2023-09-20 16:18:47 +08:00
aixianling
7e1bf238a2 点击缩放层级改成16 2023-09-20 15:36:18 +08:00
aixianling
c300e4072b 调整轮播图正文样式 2023-09-20 15:20:34 +08:00
aixianling
c0199b7b27 修改弹窗完毕 2023-09-20 15:06:57 +08:00
liuye
068f041b1b Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-09-14 10:11:28 +08:00
liuye
2a35b7611d sdkFileUrl 2023-09-14 10:11:14 +08:00
aixianling
ec7048ac6b Merge remote-tracking branch 'origin/build' into build 2023-09-12 10:25:30 +08:00
aixianling
5a9a408bac 增加相似度匹配 2023-09-12 10:25:16 +08:00
liuye
449f315602 monitorGroupCount 2023-09-11 17:17:19 +08:00
liuye
d217c3a7d9 状态 2023-09-11 17:14:08 +08:00
liuye
12c3076fbf 席位管理 2023-09-11 17:08:30 +08:00
liuye
b2a6f5c09d 席位 2023-09-11 16:32:10 +08:00
liuye
aeb7a68940 群关联信息 2023-09-08 14:42:03 +08:00
liuye
adbf66aa00 关键词 2023-09-07 17:00:54 +08:00
liuye
20cd701073 关键词管理 2023-09-07 14:58:27 +08:00
liuye
8753f74791 xbot 2023-09-06 17:44:39 +08:00
liuye
39ad7e3a2f Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-09-06 16:46:36 +08:00
aixianling
e619acafd0 Merge remote-tracking branch 'origin/build' into build 2023-09-06 16:46:17 +08:00
liuye
9332c73979 xbot 2023-09-06 16:46:16 +08:00
aixianling
de826faffd npm升级到9之后需要调整npmrc配置 2023-09-06 16:45:58 +08:00
liuye
587b472194 xbot 2023-09-06 16:43:12 +08:00
liuye
7a67f0ebac xbot 2023-09-06 16:15:41 +08:00
liuye
74ddc88d00 xbot 2023-09-06 16:11:03 +08:00
liuye
87441df05d xbot 2023-09-06 15:54:49 +08:00
liuye
5b32a8d9f2 xbot 2023-09-06 15:37:52 +08:00
liuye
7075fed306 xbot 2023-09-06 15:29:18 +08:00
liuye
45083c459d xbot变更需求 2023-09-06 15:24:11 +08:00
liuye
390315d8fc 工单统计 2023-09-06 15:16:58 +08:00
liuye
e22bee323c 敏感词 2023-09-06 13:50:40 +08:00
liuye
f05e036bd0 统计 2023-09-06 13:36:05 +08:00
liuye
27be7e63fc 敏感词统计 2023-09-06 11:44:51 +08:00
liuye
075beeb66b 敏感词聊天记录第一页固定底部 2023-08-28 10:45:19 +08:00
liuye
a06537df58 工单 2023-08-25 10:21:14 +08:00
liuye
fc504404eb xbot 2023-08-25 09:10:55 +08:00
liuye
833b812a5f xbot 2023-08-25 08:53:06 +08:00
liuye
3dc9c0b86d 巡查上报 2023-08-24 15:48:34 +08:00
liuye
f146d3de01 lulong 2023-08-24 09:48:44 +08:00
liuye
0d772dd5d8 卢龙巡查上报 2023-08-24 09:47:22 +08:00
aixianling
a90f9be052 特征库对接 2023-08-23 16:55:51 +08:00
liuye
9038477862 xbot 2023-08-23 10:51:31 +08:00
liuye
468e05d75a xbot 2023-08-23 10:43:21 +08:00
liuye
673de90b92 xbot 2023-08-23 10:14:01 +08:00
liuye
4ce40daea1 xbot 2023-08-23 09:42:03 +08:00
liuye
21346a6798 xbot 2023-08-23 09:26:30 +08:00
liuye
fa6f4a6d96 xbot 2023-08-22 17:29:12 +08:00
liuye
71f3bce5c7 群状态 2023-08-22 16:54:42 +08:00
liuye
6ac9c8e569 xbot 2023-08-22 16:42:36 +08:00
liuye
cab95c1ae7 席位管理 2023-08-22 15:58:16 +08:00
liuye
59b65f1745 工单管理 2023-08-22 13:44:46 +08:00
liuye
d1bc5a27ce 会话存档 2023-08-22 10:22:59 +08:00
liuye
28bb272ea4 会话存档整理 2023-08-22 10:16:06 +08:00
liuye
97755bf7f9 敏感词地图 2023-08-18 10:29:43 +08:00
liuye
2146056299 敏感词 2023-08-18 09:38:01 +08:00
liuye
69e586d62b AppSensitiveWechat 2023-08-17 16:22:16 +08:00
liuye
be339c78ba 敏感词 2023-08-17 16:21:17 +08:00
liuye
c8c1e558b1 敏感词 2023-08-17 15:49:27 +08:00
liuye
e03b0a203a 敏感词 2023-08-17 15:48:39 +08:00
liuye
6c88de497b 席位管理 2023-08-17 15:23:57 +08:00
liuye
b8838d2171 地图 2023-08-17 15:21:12 +08:00
liuye
17249c16fa 敏感词 2023-08-17 14:14:33 +08:00
liuye
8e167df7e3 会话监管 2023-08-17 11:36:33 +08:00
liuye
378f4eba0b 席位管理 2023-08-14 17:52:23 +08:00
liuye
ed4b58e215 席位管理 2023-08-14 11:04:45 +08:00
liuye
c99a9a1332 席位,工单,特征库 2023-08-14 10:43:09 +08:00
aixianling
f342e7d672 巫溪迭代,代码提交一下 2023-08-09 14:16:36 +08:00
liuye
4f240ce79b 网上办事 2023-08-08 10:44:50 +08:00
liuye
3ef745acc6 msgId 2023-08-04 17:00:10 +08:00
liuye
d767bd4326 敏感词 2023-08-04 11:57:20 +08:00
liuye
36768dd5ca 个人微信版会话存档 2023-08-03 16:12:53 +08:00
liuye
0b024f86c2 绘画存档个人微信版 2023-08-02 09:49:51 +08:00
liuye
144d8be0d2 ct 2023-08-01 16:40:20 +08:00
liuye
ef371ae830 舆情监管 2023-08-01 16:39:50 +08:00
aixianling
45a6e9f468 地图描点图标调小到30px 2023-07-25 15:26:40 +08:00
aixianling
d05b98d6e1 地图描点图标调小到30px 2023-07-25 14:39:23 +08:00
liuye
14cbefd125 MP4 2023-07-18 10:19:01 +08:00
yanran200730
046f0bf729 登录日志 2023-07-13 09:05:15 +08:00
yanran200730
6b1c753d63 登录日志 2023-07-13 08:47:33 +08:00
liuye
356ce8a63c 积分类型 2023-07-12 09:36:34 +08:00
liuye
3a27e68a90 地图 2023-07-11 09:55:34 +08:00
yanran200730
6f414822de 1 2023-07-06 16:49:56 +08:00
yanran200730
783bd0c4a3 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-07-06 16:44:58 +08:00
yanran200730
f140ef743d bug 2023-07-06 16:44:50 +08:00
liuye
e87f7305af 会话存档 2023-07-06 11:10:05 +08:00
liuye
d076ac472c 会话存档配置 2023-07-06 10:57:03 +08:00
liuye
5949a8080b 会话存档配置 2023-07-06 10:41:03 +08:00
liuye
9a30b5aee0 关闭 2023-07-05 10:26:16 +08:00
liuye
b1959edcd3 居民信息 2023-07-05 09:38:12 +08:00
liuye
681088cb8d 会话存档 2023-07-04 09:08:59 +08:00
liuye
18009fdcb1 css 2023-06-30 17:16:35 +08:00
liuye
12712f55c8 css 2023-06-30 17:15:38 +08:00
liuye
2394a51cc0 更新图片base64 2023-06-30 16:36:29 +08:00
liuye
9582d09ab7 敏感词 2023-06-30 16:06:41 +08:00
liuye
fce4725783 小程序 2023-06-30 16:01:20 +08:00
liuye
7d90a45cf6 导出 2023-06-30 15:46:15 +08:00
liuye
e3c3058a14 导出 2023-06-30 15:35:27 +08:00
liuye
8b37b1236e 导出 2023-06-30 15:20:14 +08:00
liuye
20361ebe31 导出 2023-06-30 14:55:20 +08:00
liuye
d26ab93831 导出 2023-06-30 14:53:19 +08:00
liuye
d031e5d8e1 聊天记录导出 2023-06-30 14:32:21 +08:00
liuye
87f046d128 导出 2023-06-30 13:46:46 +08:00
liuye
60b14432b6 聊天记录导出 2023-06-30 10:59:43 +08:00
liuye
9e5c080c4d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-30 09:21:11 +08:00
liuye
3824243527 导出按钮 2023-06-30 09:20:50 +08:00
yanran200730
408fcffb29 bug 2023-06-28 15:36:21 +08:00
liuye
e416bd4b33 协同宣发 2023-06-27 14:03:07 +08:00
liuye
376cd60edd 协同宣发 2023-06-27 11:45:40 +08:00
liuye
497db329be 协同宣发 2023-06-27 11:32:50 +08:00
liuye
f375ede115 协同宣发 2023-06-27 11:16:37 +08:00
liuye
406be50c27 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-27 11:10:35 +08:00
liuye
2840952a41 报错 2023-06-27 11:09:32 +08:00
aixianling
4d843a9917 修复初始化加载人员的问题 2023-06-27 11:08:30 +08:00
aixianling
853dfc5988 Merge remote-tracking branch 'origin/build' into build 2023-06-27 10:57:26 +08:00
aixianling
437b348d06 修复部门树问题 2023-06-27 10:57:12 +08:00
liuye
d143c6cc94 群发通知 2023-06-27 10:15:51 +08:00
liuye
15ca20f906 协同宣发 2023-06-27 09:57:06 +08:00
aixianling
0b2b613a7d Merge remote-tracking branch 'origin/build' into build 2023-06-27 09:50:18 +08:00
aixianling
8e0265232b 增加替换接口的参数 2023-06-27 09:49:10 +08:00
liuye
0bc282c796 注释发送范围网格 2023-06-27 09:06:34 +08:00
liuye
3acc7ef3d1 title 2023-06-21 10:11:25 +08:00
liuye
8f9d0d577f bug 2023-06-21 09:24:24 +08:00
yanran200730
ccf1be34be Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-20 17:36:13 +08:00
yanran200730
22c77339d2 bug 2023-06-20 17:36:02 +08:00
liuye
7c71eb3cb8 会话存档 2023-06-20 17:16:33 +08:00
liuye
3501165a3a 附件 2023-06-20 16:48:15 +08:00
liuye
b42d1a0502 文件 2023-06-20 16:41:17 +08:00
liuye
cc1026765f 会话存档 2023-06-20 15:25:19 +08:00
aixianling
16052ff00c 支持文件列表可指定下载文件名 2023-06-20 10:08:41 +08:00
aixianling
e983bd22a1 支持文件列表可指定下载文件名 2023-06-20 09:59:25 +08:00
aixianling
b09cfd62a5 Merge remote-tracking branch 'origin/build' into build 2023-06-20 09:57:26 +08:00
aixianling
42b77e095c 支持文件列表可指定下载文件名 2023-06-20 09:57:10 +08:00
liuye
a7e4c4528b 会话存档 2023-06-20 09:50:18 +08:00
liuye
852fa0346f 会话存档 2023-06-20 09:30:57 +08:00
liuye
295ff657e8 敏感词记录 2023-06-19 15:46:28 +08:00
liuye
56b12271b8 敏感词聊天记录 2023-06-19 11:18:33 +08:00
yanran200730
80438a6ef2 bug 2023-06-16 18:02:38 +08:00
yanran200730
a3f6cde2da bug 2023-06-16 17:53:25 +08:00
yanran200730
0f1e9d4815 bug 2023-06-16 16:18:08 +08:00
yanran200730
7cee782996 bug 2023-06-16 15:57:35 +08:00
yanran200730
129ea08723 bug 2023-06-16 15:46:01 +08:00
yanran200730
cf6b2ae087 大屏 2023-06-16 14:05:05 +08:00
yanran200730
cc6719a677 宣发统计 2023-06-16 13:52:23 +08:00
yanran200730
76523d1c9f Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-15 17:06:00 +08:00
yanran200730
545f796578 协同宣发 2023-06-15 17:05:54 +08:00
liuye
f2ff079d79 关键词管理 2023-06-15 16:21:46 +08:00
liuye
f51879a8af 商品名称 2023-06-15 15:29:32 +08:00
liuye
c6638f891d 注释商品链接 2023-06-15 15:20:33 +08:00
liuye
6c517b5f2f 文字修改 2023-06-15 14:39:45 +08:00
liuye
20d2cd8426 店铺地区查询 2023-06-15 14:38:00 +08:00
liuye
645b6c774f 丰都积分新需求 2023-06-15 14:23:45 +08:00
liuye
ac9b240a0f 内部外部标签 2023-06-14 17:55:18 +08:00
liuye
0164aaa924 内部外部 2023-06-14 17:40:08 +08:00
liuye
9c0330561c loading 2023-06-14 10:52:53 +08:00
liuye
2575c256c4 关键词管理 2023-06-14 10:29:52 +08:00
liuye
543636c180 会话存档交互效果 2023-06-14 09:34:49 +08:00
liuye
23383c28de 部门选择 2023-06-13 15:35:14 +08:00
liuye
c616e57b4f 关键词管理 2023-06-13 15:15:50 +08:00
liuye
4e5814b1a1 去掉网格 2023-06-12 16:31:34 +08:00
liuye
47779269b4 删除旧版协同宣发 2023-06-12 16:16:23 +08:00
yanran200730
fe62caea78 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-12 15:54:51 +08:00
yanran200730
0dd726ced9 bug 2023-06-12 15:54:45 +08:00
liuye
5549773805 隐藏名片用户id 2023-06-12 15:11:53 +08:00
liuye
56688f75d8 群发居民群 2023-06-12 09:56:08 +08:00
yanran200730
e3a9f8032b bug 2023-06-12 09:20:24 +08:00
liuye
06eaf1e59d ct 2023-06-09 17:55:17 +08:00
liuye
5dba7c558f 会话存档 2023-06-09 17:54:34 +08:00
yanran200730
47a1f52cde Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-09 17:44:37 +08:00
yanran200730
38d79cc0e2 BUG 2023-06-09 17:44:31 +08:00
liuye
f697a86440 小程序/链接 2023-06-09 17:05:02 +08:00
yanran200730
bcbdb81ad1 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-09 16:07:06 +08:00
yanran200730
a1dfc6483c bug 2023-06-09 16:06:59 +08:00
liuye
358ad78f13 小程序/链接 2023-06-09 16:04:43 +08:00
yanran200730
164fe19a4a bug 2023-06-09 15:49:51 +08:00
yanran200730
9c45f25e8d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-09 14:50:33 +08:00
yanran200730
8af3b1b9fb Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-09 14:50:19 +08:00
liuye
5f92126be4 地图 2023-06-09 14:50:14 +08:00
yanran200730
8af5ea6f45 bug 2023-06-09 14:50:12 +08:00
liuye
cde4ef3ddf ct 2023-06-09 14:46:46 +08:00
liuye
44b4685257 消息类型地图,表情 2023-06-09 14:46:25 +08:00
yanran200730
b89581c900 bug 2023-06-09 14:40:51 +08:00
yanran200730
c18511ac01 bug 2023-06-09 14:30:26 +08:00
yanran200730
6e1b0a0684 bug 2023-06-09 14:29:35 +08:00
yanran200730
5b90115b80 每日收益明细导出 2023-06-09 14:20:20 +08:00
yanran200730
f4c3ad72c4 bug 2023-06-09 14:19:26 +08:00
yanran200730
4eb960b16b bug 2023-06-09 14:13:32 +08:00
yanran200730
f2a7cafc76 bug 2023-06-09 14:13:08 +08:00
yanran200730
96647bfa90 bug 2023-06-09 14:01:22 +08:00
yanran200730
2d943d4399 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-09 13:44:37 +08:00
yanran200730
fc0f92a7de bug 2023-06-09 13:44:31 +08:00
liuye
00340f1d21 会话 2023-06-09 11:53:52 +08:00
liuye
f59179e3bc 表情 2023-06-09 11:50:59 +08:00
yanran200730
27e6fe0eb2 bug 2023-06-09 11:33:45 +08:00
yanran200730
107515e876 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-09 11:14:47 +08:00
yanran200730
6a3cadf53d 公众号 2023-06-09 11:14:39 +08:00
liuye
feea70120c 会话 2023-06-09 11:09:12 +08:00
liuye
549d747a8c bug 2023-06-09 10:46:36 +08:00
liuye
201076e0fe 消息类型 2023-06-09 10:38:34 +08:00
liuye
75d33443f0 会话 2023-06-09 09:29:50 +08:00
liuye
b5afda4cce 会话存档 2023-06-09 09:28:05 +08:00
yanran200730
7e40790569 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-06-08 17:23:33 +08:00
yanran200730
507565de3d 账号管理 2023-06-08 17:23:28 +08:00
liuye
ad2e5bccab 会话存档 2023-06-08 17:17:36 +08:00
liuye
077fc80264 会话存档 2023-06-08 17:01:11 +08:00
liuye
7e0bc1ef61 会话存档 2023-06-08 16:53:49 +08:00
yanran200730
4392aed3f6 公众号设置 2023-06-08 14:48:10 +08:00
liuye
fe9b1cd542 会话存档 2023-06-08 09:43:39 +08:00
liuye
99d9d36549 会话存档 2023-06-08 09:37:11 +08:00
liuye
019e8262bb 会话存档 2023-06-07 17:57:27 +08:00
liuye
e89d9d8716 会话存档 2023-06-07 17:53:53 +08:00
yanran200730
6a828ff68c bug 2023-06-07 13:53:59 +08:00
yanran200730
31c18321ae 公众号设置 2023-06-06 11:13:46 +08:00
yanran200730
1763582623 公众号设置 2023-06-06 10:35:36 +08:00
yanran200730
d0a194e41b 公众号统计 2023-06-05 17:22:57 +08:00
yanran200730
a020f4c097 新闻统计 2023-06-05 16:28:10 +08:00
yanran200730
5d8ab39041 bug 2023-06-05 16:04:17 +08:00
yanran200730
e78a89a112 运营平台 2023-06-05 14:48:34 +08:00
yanran200730
3e440cfad9 大屏组件 2023-05-31 17:30:30 +08:00
yanran200730
0266acd77a 大屏组件 2023-05-29 15:41:55 +08:00
yanran200730
97306a8dc0 大屏标题组件 2023-05-29 15:26:47 +08:00
yanran200730
2598239ccd 大屏组件 2023-05-29 14:44:24 +08:00
aixianling
9623b426b0 调整字体大小 2023-05-26 17:28:50 +08:00
aixianling
68d122e38d 增加报错兼容 2023-05-26 14:07:59 +08:00
aixianling
d93a658666 增加填写时长的地方 2023-05-26 13:54:19 +08:00
aixianling
88a2955788 Merge remote-tracking branch 'origin/build' into build 2023-05-26 11:56:31 +08:00
aixianling
2cfa55841a 增加设置腾讯视频入口 2023-05-26 11:56:11 +08:00
yanran200730
8c77493f7a bug 2023-05-26 11:55:25 +08:00
yanran200730
2eedf9e7fc 大屏组件 2023-05-25 17:56:52 +08:00
yanran200730
cbda18f8e8 文字调整 2023-05-25 14:26:10 +08:00
aixianling
ce7db89626 Merge remote-tracking branch 'origin/build' into build 2023-05-25 14:19:04 +08:00
aixianling
be91cfe3b0 调整说明 2023-05-25 14:18:37 +08:00
yanran200730
99368c5f86 积分统计丰都 => 数字平昌 2023-05-25 14:15:23 +08:00
yanran200730
38d5f9d753 bug 2023-05-25 13:46:39 +08:00
aixianling
4a6732d816 调整说明 2023-05-25 10:26:21 +08:00
aixianling
44ce4979d7 积分统计完成 2023-05-25 10:15:21 +08:00
liuye
ccd8cdf9ba 订单管理 2023-05-24 15:34:06 +08:00
liuye
ba7987b7ff ct 2023-05-24 14:09:41 +08:00
liuye
9af8a19922 新加是否代兑换字段 2023-05-24 14:09:10 +08:00
yanran200730
f47a481076 bug 2023-05-24 09:08:32 +08:00
艾贤凌
84096c9bde 编码支持h265 2023-05-23 12:41:52 +00:00
yanran200730
73b7c5222b bug 2023-05-23 10:45:43 +08:00
yanran200730
6d435d32d7 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-05-23 10:35:43 +08:00
yanran200730
1fec63c027 bug 2023-05-23 10:34:19 +08:00
aixianling
383fcd00b0 Merge remote-tracking branch 'origin/build' into build 2023-05-23 09:16:42 +08:00
aixianling
5bd534c170 修复获取家庭成员时生日信息导致的异常 2023-05-23 09:16:15 +08:00
yanran200730
c71cb51e11 bug 2023-05-23 09:00:24 +08:00
yanran200730
a8ac7b14d4 bug 2023-05-22 16:38:45 +08:00
yanran200730
291d068c66 积分超市 2023-05-22 14:54:16 +08:00
yanran200730
57c1037871 积分超市 2023-05-22 14:42:21 +08:00
yanran200730
ca19697d1c 需求变更 2023-05-22 14:25:03 +08:00
yanran200730
6d037bbe8d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-05-19 15:24:21 +08:00
yanran200730
c3f80c5fa6 bug 2023-05-19 15:24:13 +08:00
aixianling
8b320ece34 调整因ws而变更的引用路径 2023-05-19 09:53:47 +08:00
aixianling
e6f2d1e599 调整邻里互助集合,并追加话题设置模块 2023-05-19 09:46:28 +08:00
aixianling
fbf2ac5d12 邻里互助提升为标准应用 2023-05-19 09:07:20 +08:00
yanran200730
ccdbbc8562 bug 2023-05-17 16:55:44 +08:00
yanran200730
5181e9ec14 网格员积分 2023-05-17 15:15:11 +08:00
yanran200730
c90cdf7678 数字平昌 2023-05-17 15:12:35 +08:00
yanran200730
57120ca85f bug 2023-05-16 14:03:14 +08:00
yanran200730
df27cbefec bug 2023-05-15 15:42:26 +08:00
liuye
381eefb78f 网格选择 2023-05-12 16:45:39 +08:00
liuye
969785c47a css 2023-05-12 15:46:36 +08:00
liuye
02ae6b6280 评价组件 2023-05-12 15:45:15 +08:00
liuye
568c560e61 el-image 2023-05-12 15:40:11 +08:00
liuye
c9d6b0dd14 评价图片 2023-05-12 15:22:23 +08:00
liuye
4d0954fad5 评价图片 2023-05-12 15:12:34 +08:00
liuye
6ff5e64613 366 2023-05-12 11:59:06 +08:00
liuye
4100f0744d 399 2023-05-12 10:16:25 +08:00
yanran200730
81d4c7c174 大屏组件 2023-05-11 17:09:40 +08:00
yanran200730
66ee9806cf 大屏组件 2023-05-11 16:55:34 +08:00
yanran200730
09b9b308ff 大屏组件 2023-05-11 16:35:45 +08:00
yanran200730
1e6c7109f3 大屏组件 2023-05-11 16:08:59 +08:00
yanran200730
17dc4d48a4 考试统计 bug 2023-05-11 13:57:09 +08:00
yanran200730
3d927d8e8d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-05-11 11:09:42 +08:00
yanran200730
66addd9ebe 考试统计 2023-05-11 11:09:25 +08:00
liuye
f92602a7c1 文字修改 2023-05-11 09:52:13 +08:00
liuye
ef06d88bd4 status 2023-05-11 09:45:12 +08:00
liuye
399180d2cf 事件上报 2023-05-10 17:18:54 +08:00
liuye
3ec7a262d4 事件上报 2023-05-10 17:02:33 +08:00
liuye
8acfa11f94 事件上报 2023-05-10 16:55:57 +08:00
aixianling
14bee51dbd Merge remote-tracking branch 'origin/build' into build 2023-05-10 10:22:35 +08:00
aixianling
1934cfaafc 巫溪复制平昌党建党员阵地 2023-05-10 10:22:21 +08:00
yanran200730
a20d1d893c Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-05-09 17:04:21 +08:00
yanran200730
a29f7b4aae 丰都积分规则 2023-05-09 17:04:15 +08:00
liuye
c73dba2cf0 事件上报 2023-05-09 16:51:27 +08:00
liuye
d15a9ee20e 事件上报 2023-05-09 15:54:07 +08:00
yanran200730
56e330588f Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-05-09 15:23:47 +08:00
yanran200730
c3ad840e0c bug 2023-05-09 15:23:41 +08:00
liuye
46e5ac38dc 事件上报 2023-05-09 15:02:37 +08:00
liuye
d662e2dc75 事件上报 2023-05-09 10:32:11 +08:00
liuye
3361aa300b 事件上报 2023-05-08 17:56:14 +08:00
liuye
6741eb17d4 事件上报 2023-05-08 14:22:01 +08:00
aixianling
44e2c25f5b 消除没有使用的接口 2023-05-08 11:14:09 +08:00
yanran200730
e238a9e052 网格排序 2023-05-06 15:03:40 +08:00
yanran200730
3087ca7ae9 居民信息 2023-05-06 10:52:17 +08:00
yanran200730
64226da7cf 曲靖-考试管理 2023-05-06 09:11:44 +08:00
yanran200730
0a5edffcf8 黔西南大屏 2023-05-06 09:03:33 +08:00
yanran200730
3e7ac24bd5 bug 2023-05-05 17:53:35 +08:00
yanran200730
80d487a726 bug 2023-05-05 17:45:00 +08:00
yanran200730
77cf1c1525 bug 2023-05-05 17:29:00 +08:00
yanran200730
2248485801 黔西南大屏 2023-05-05 17:03:30 +08:00
yanran200730
ed46bece45 黔西南大屏 2023-05-05 16:47:33 +08:00
yanran200730
da858fbe35 黔西南大屏 2023-05-05 16:46:12 +08:00
yanran200730
f2f3d5c8a7 bug 2023-05-05 16:36:08 +08:00
yanran200730
df160cbb2b 黔西南大屏 2023-05-05 16:33:53 +08:00
yanran200730
6cd0602536 bug 2023-05-05 16:32:42 +08:00
yanran200730
41a78266fe bug 2023-05-05 16:24:08 +08:00
yanran200730
ef639ba1c1 大屏 2023-05-05 16:17:36 +08:00
yanran200730
56b3240de7 大屏 2023-05-05 16:14:10 +08:00
yanran200730
e80e0c61d9 大屏 2023-05-05 15:40:16 +08:00
yanran200730
4398d76a91 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build
# Conflicts:
#	vue.config.js
2023-05-05 14:39:35 +08:00
yanran200730
c5784e268e 大屏 2023-05-05 14:37:54 +08:00
liuye
b6a55f5b9d 事件上报 2023-05-05 10:02:12 +08:00
liuye
7249809b09 事件上报 2023-05-05 09:50:49 +08:00
aixianling
892a308e0b 还原代理 2023-05-05 09:20:18 +08:00
yanran200730
0507cd9a89 大屏 2023-05-04 15:19:09 +08:00
yanran200730
60facb4d4d 黔西南大屏 2023-05-04 10:14:04 +08:00
yanran200730
d7ccdb3897 大屏 2023-04-28 17:51:54 +08:00
yanran200730
49ddfe9404 大屏 2023-04-28 16:37:35 +08:00
yanran200730
e84f8b4c18 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-28 16:02:15 +08:00
yanran200730
973ca20fb6 大屏 2023-04-28 16:01:08 +08:00
liuye
5b5fcd2a88 357 2023-04-28 14:28:39 +08:00
aixianling
1f20801f2c BUG 356 2023-04-28 14:25:54 +08:00
aixianling
fe1a7c6ced Merge remote-tracking branch 'origin/build' into build 2023-04-28 14:04:12 +08:00
aixianling
6d14c00acc BUG 353 2023-04-28 14:04:01 +08:00
yanran200730
f7cf905f93 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-28 13:47:47 +08:00
yanran200730
de3e4ef259 bug 2023-04-28 13:47:40 +08:00
aixianling
079f85eab9 Merge remote-tracking branch 'origin/build' into build 2023-04-28 11:52:35 +08:00
aixianling
c241d613fe BUG 352 2023-04-28 11:52:19 +08:00
yanran200730
f346e8289f bug 2023-04-27 17:49:35 +08:00
yanran200730
de018e95b5 bug 2023-04-27 17:25:42 +08:00
yanran200730
f5b9baac75 bug 2023-04-27 17:21:09 +08:00
yanran200730
8e501b0f7e bug 2023-04-27 16:58:49 +08:00
yanran200730
597189adb1 bug 2023-04-27 16:43:13 +08:00
yanran200730
6d28ab9d12 大屏bug 2023-04-27 16:19:09 +08:00
yanran200730
1090dc13f1 bug 2023-04-27 16:18:36 +08:00
yanran200730
8ae50f3852 bug 2023-04-27 16:16:28 +08:00
yanran200730
b098a4e294 bug 2023-04-27 15:18:57 +08:00
yanran200730
89ffcc639a bug 2023-04-27 14:39:06 +08:00
yanran200730
35105ddc05 大屏开发 2023-04-27 10:50:18 +08:00
yanran200730
de42648740 大屏bug 2023-04-27 09:18:48 +08:00
yanran200730
b1f62f868b 大屏 2023-04-26 18:02:48 +08:00
yanran200730
d026b4aa14 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-26 17:33:02 +08:00
yanran200730
9a3eeca0cf 大屏 2023-04-26 17:32:56 +08:00
liuye
16418ba1f5 会话存档 2023-04-26 16:57:26 +08:00
liuye
b5b530d1d7 积分统计 2023-04-26 16:33:55 +08:00
liuye
9370e764bb 积分兑换 2023-04-26 16:16:46 +08:00
liuye
4f4c4b1cb1 会话存档+积分统计 2023-04-26 14:23:45 +08:00
yanran200730
b77c5cc7ee 黔西南大屏 2023-04-26 14:14:37 +08:00
yanran200730
927747e95d bug 2023-04-26 11:05:49 +08:00
yanran200730
30b25e56b8 大屏 2023-04-26 09:52:49 +08:00
yanran200730
fff9891177 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-26 09:16:42 +08:00
yanran200730
7086b7af99 大屏 2023-04-26 09:15:42 +08:00
aixianling
bbdc9c3983 Merge remote-tracking branch 'origin/build' into build 2023-04-25 17:39:10 +08:00
aixianling
11ca29b3f6 字典加载 2023-04-25 17:39:01 +08:00
yanran200730
b126053e09 黔西南大屏 2023-04-25 17:25:37 +08:00
yanran200730
4d7b5949c1 黔西南大屏 2023-04-25 16:01:14 +08:00
yanran200730
0f752889fd Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-25 14:32:57 +08:00
yanran200730
aca3b38dab 大屏 2023-04-25 14:32:51 +08:00
aixianling
9c37fa0414 正则式工具增加身份证正则式 2023-04-25 14:05:52 +08:00
aixianling
1481bf7fa0 Merge remote-tracking branch 'origin/build' into build 2023-04-25 13:50:32 +08:00
aixianling
181a4018be 调整地图可能的加载顺序问题 2023-04-25 13:50:09 +08:00
yanran200730
3724b25e4c 黔西南大屏 2023-04-25 10:38:11 +08:00
yanran200730
dfc9a1cb03 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-24 17:49:57 +08:00
yanran200730
090d15dda1 大屏 2023-04-24 17:49:43 +08:00
aixianling
c3fa9b8d79 大屏设计增加地图图层设置 2023-04-24 16:24:34 +08:00
liuye
4f9c4c8d27 所属网格 2023-04-24 14:45:46 +08:00
liuye
a9959a8ed2 订单管理 2023-04-24 13:48:46 +08:00
liuye
fa9f36bca9 精选动态 2023-04-24 11:25:27 +08:00
yanran200730
4d8fd26ddd 黔西南大屏 2023-04-24 10:34:49 +08:00
liuye
f5a65e98be 351 2023-04-24 10:07:38 +08:00
yanran200730
5a4c1f9a61 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-23 17:50:44 +08:00
yanran200730
605f8a33f6 黔西南大屏 2023-04-23 17:50:36 +08:00
liuye
090fceabbe 居民订单 2023-04-23 15:30:02 +08:00
liuye
53d9e5f558 居民订单 2023-04-23 15:24:30 +08:00
liuye
fb3206a9ec 字典 2023-04-23 10:57:12 +08:00
liuye
3bf5efdd64 test 2023-04-23 10:10:25 +08:00
liuye
14fc3eff94 348 2023-04-23 09:16:28 +08:00
liuye
a1cb11b1d8 居民积分 2023-04-21 13:35:59 +08:00
liuye
8beb2a3699 积分审核 2023-04-21 10:46:27 +08:00
liuye
8b818e82b4 积分审核 2023-04-21 10:45:21 +08:00
liuye
deb5ef82e1 积分公示,编辑积分申请 2023-04-21 10:32:20 +08:00
liuye
1fc632f097 积分审核 2023-04-21 10:23:55 +08:00
liuye
ada5ef8bfe 326 2023-04-21 09:52:46 +08:00
liuye
7deff7e464 343 2023-04-21 09:48:07 +08:00
liuye
466192f7fd 345 2023-04-21 09:43:37 +08:00
liuye
cc74131f44 254 2023-04-21 09:42:29 +08:00
liuye
4f217788ca 居民积分 2023-04-21 09:21:26 +08:00
liuye
a8557de4d6 居民信息 2023-04-21 09:11:57 +08:00
yanran200730
69b2bd6b6f 245 2023-04-20 16:21:53 +08:00
yanran200730
bd5698a781 bug 2023-04-20 15:18:10 +08:00
yanran200730
7539d38294 336 2023-04-20 14:56:21 +08:00
yanran200730
32f819f16a bug 2023-04-20 14:37:23 +08:00
yanran200730
cf19a1ee7b bug 2023-04-20 14:06:58 +08:00
yanran200730
c0b9078a0b 324 2023-04-20 13:56:19 +08:00
yanran200730
09a161686c 333 2023-04-20 13:54:14 +08:00
yanran200730
c7a32d0319 330 2023-04-20 13:50:57 +08:00
yanran200730
5d42d5ad34 267 2023-04-20 11:51:27 +08:00
yanran200730
c0a513a1a7 285 2023-04-20 11:48:51 +08:00
yanran200730
d1fa008407 270 2023-04-19 14:23:55 +08:00
yanran200730
7d203cda5e 260 2023-04-19 14:16:52 +08:00
yanran200730
1846715f47 281 2023-04-19 14:15:43 +08:00
yanran200730
7ee414725c 282 2023-04-19 14:15:01 +08:00
yanran200730
d0361418cf 283 2023-04-19 14:13:57 +08:00
yanran200730
b202caec7f 310 2023-04-19 14:10:03 +08:00
yanran200730
4bed4bca66 284 2023-04-19 14:08:31 +08:00
yanran200730
61b11585b2 288 2023-04-19 14:05:33 +08:00
yanran200730
671d62d0cc 292 2023-04-19 14:00:15 +08:00
yanran200730
33695de84f 301 2023-04-19 13:57:56 +08:00
yanran200730
4b99f2768f 305 2023-04-19 13:53:24 +08:00
yanran200730
6b4051b984 306 2023-04-19 13:51:37 +08:00
yanran200730
a2747e7182 309 2023-04-19 13:49:59 +08:00
yanran200730
b36a3661a0 300 2023-04-19 11:48:51 +08:00
yanran200730
8a7dc2e798 居民信息 2023-04-19 10:58:34 +08:00
yanran200730
8c5e95859a 禁言 2023-04-19 10:13:37 +08:00
yanran200730
908a11d268 bug 2023-04-19 09:48:08 +08:00
yanran200730
2daeb761b1 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-19 09:16:26 +08:00
yanran200730
bb67491c2d bug 2023-04-19 09:16:19 +08:00
aixianling
c5b3f6daa2 Merge remote-tracking branch 'origin/build' into build 2023-04-19 09:15:18 +08:00
aixianling
8eb675f4a4 考试人数=>考试人次 2023-04-19 09:15:06 +08:00
yanran200730
6a9ca31b8f bug 2023-04-19 08:35:57 +08:00
yanran200730
f76f662aac bug 2023-04-18 18:01:55 +08:00
yanran200730
12c6feb238 居民信息 2023-04-18 17:39:34 +08:00
yanran200730
de50f365af 积分审核 2023-04-18 17:30:52 +08:00
yanran200730
14575cbb33 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-18 15:30:18 +08:00
yanran200730
4530440bd6 居民信息 2023-04-18 15:30:12 +08:00
aixianling
fdbe251c3e Merge remote-tracking branch 'origin/build' into build 2023-04-18 13:59:06 +08:00
aixianling
f4d7cebd8a 应雷雷要求修改默认值为1 2023-04-18 13:58:56 +08:00
yanran200730
113a7a174e 积分规则 2023-04-18 10:34:24 +08:00
yanran200730
693b85d0b0 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-18 10:05:10 +08:00
yanran200730
9dd6790b2d 积分规则需求变更的开发 2023-04-18 10:04:58 +08:00
aixianling
ca810d2da1 Merge remote-tracking branch 'origin/build' into build 2023-04-18 09:34:21 +08:00
aixianling
da9b3b2add 改造广播设备管理 2023-04-18 09:34:11 +08:00
yanran200730
5b4443f41f 274 2023-04-18 08:51:28 +08:00
yanran200730
4e54061671 260 2023-04-17 17:58:11 +08:00
yanran200730
e594478f16 262 2023-04-17 17:55:36 +08:00
yanran200730
6f7903b9ce 262 2023-04-17 17:54:12 +08:00
yanran200730
ff55cd42ba 266 2023-04-17 17:42:36 +08:00
yanran200730
36b34a190b Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-17 17:34:53 +08:00
yanran200730
18c0827f5a 264 2023-04-17 17:34:32 +08:00
aixianling
d49d93b19d 增加全选功能 2023-04-17 15:48:41 +08:00
yanran200730
7ec58be72d 270 2023-04-17 14:38:42 +08:00
yanran200730
9bc648f5b8 249 2023-04-17 14:36:24 +08:00
yanran200730
6be6b2626a 268 2023-04-17 14:33:13 +08:00
yanran200730
1320479c39 256 2023-04-17 14:30:21 +08:00
yanran200730
84f5c26cd3 257 2023-04-17 14:18:47 +08:00
yanran200730
a2fa56c2ad 251 2023-04-17 14:00:27 +08:00
yanran200730
49c967885c 248 2023-04-17 13:57:34 +08:00
yanran200730
40a62ead01 246 2023-04-17 13:55:17 +08:00
yanran200730
6b7e887ae8 259 2023-04-17 13:54:16 +08:00
yanran200730
fb01e4f84f 255 2023-04-17 13:52:15 +08:00
yanran200730
6d200ea43b 253 2023-04-17 13:50:02 +08:00
yanran200730
8be74f75fd 247 2023-04-17 13:49:12 +08:00
yanran200730
785ba26120 269 2023-04-17 13:45:35 +08:00
yanran200730
a461c9add7 积分公示 2023-04-17 10:27:32 +08:00
yanran200730
9ab6ed0f11 bug 2023-04-17 10:17:39 +08:00
yanran200730
e553c9c758 bug 2023-04-14 17:42:51 +08:00
yanran200730
42eff40f48 bug 2023-04-14 16:14:06 +08:00
yanran200730
87ae42f7fe 订单导出 2023-04-14 15:58:19 +08:00
yanran200730
c37a19036a 积分超市 2023-04-14 14:49:46 +08:00
yanran200730
7d72023ad7 积分订单 2023-04-14 14:04:38 +08:00
yanran200730
c72eb9c40e Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-14 10:06:11 +08:00
yanran200730
fd089d78ac 订单 2023-04-14 10:06:03 +08:00
aixianling
5b49e3ef7c Merge remote-tracking branch 'origin/build' into build 2023-04-14 09:15:33 +08:00
aixianling
4d97436d14 大屏地图标记弹窗完成 2023-04-14 09:15:16 +08:00
yanran200730
442f0deccb Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-13 18:01:42 +08:00
yanran200730
483a4d585f 积分超市 2023-04-13 18:01:11 +08:00
aixianling
1bd2bf44bb 大屏地图标记弹窗完成 2023-04-13 15:59:28 +08:00
yanran200730
62c927746b Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-13 14:26:47 +08:00
yanran200730
1cb5b85483 积分超市 2023-04-13 14:26:41 +08:00
aixianling
ea60eb2938 去除多余引用 2023-04-13 14:06:43 +08:00
aixianling
032b077bdc 修复异常 2023-04-13 11:38:49 +08:00
yanran200730
27b91ad6fa Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-12 17:49:48 +08:00
yanran200730
1971f36547 积分超市 2023-04-12 17:49:40 +08:00
aixianling
14cdb8bd31 Merge remote-tracking branch 'origin/build' into build 2023-04-12 17:12:19 +08:00
aixianling
a3a847aff6 增加地图标记点编辑 2023-04-12 17:12:04 +08:00
yanran200730
9084c6fd1b 积分超市 2023-04-12 16:39:14 +08:00
yanran200730
a698ef19cb 需求变更 2023-04-12 11:32:29 +08:00
yanran200730
2cdfa358eb bug 2023-04-12 09:55:12 +08:00
yanran200730
ef91ed6254 bug 2023-04-12 09:34:14 +08:00
yanran200730
c9b5dc63af Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-11 17:52:30 +08:00
yanran200730
f437e49ed2 积分超市 2023-04-11 17:52:24 +08:00
aixianling
1c64d0b827 兼容旧样式的埋点 2023-04-11 16:22:48 +08:00
aixianling
b48e60ea69 Merge remote-tracking branch 'origin/build' into build 2023-04-11 16:16:43 +08:00
aixianling
7330da14eb 强制重新加载地图,并增加兼容旧样式的埋点 2023-04-11 16:16:33 +08:00
yanran200730
3823968e95 bug 2023-04-11 16:05:07 +08:00
yanran200730
a69319b9e4 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-11 15:37:22 +08:00
yanran200730
895ca677cf 订单 2023-04-11 15:37:16 +08:00
aixianling
481f3f13b3 大屏地图修复 2023-04-11 14:33:36 +08:00
aixianling
c55de2e7ea Merge remote-tracking branch 'origin/build' into build 2023-04-11 10:31:42 +08:00
aixianling
9aa6d8f180 网格标绘增加图层切换 2023-04-11 10:29:57 +08:00
yanran200730
29b9e8fdd0 证书 2023-04-10 14:19:26 +08:00
yanran200730
b106b798eb 证书 2023-04-10 11:25:19 +08:00
yanran200730
f361599dc5 曲靖证书 2023-04-10 11:05:37 +08:00
yanran200730
e31ced26f9 bug 2023-04-07 18:06:55 +08:00
yanran200730
416d4a3a45 bug 2023-04-07 17:13:03 +08:00
yanran200730
930ce7bf70 bug 2023-04-07 17:11:17 +08:00
yanran200730
d6dc17553d bug 2023-04-07 17:09:08 +08:00
yanran200730
d64fab95f4 219 2023-04-07 17:06:26 +08:00
yanran200730
61d0e5b401 205 2023-04-07 16:59:29 +08:00
yanran200730
dcf5c019b9 232 2023-04-07 16:50:22 +08:00
yanran200730
b8dcf71057 231 2023-04-07 16:49:07 +08:00
yanran200730
25068e9f2d 204 2023-04-07 16:21:10 +08:00
yanran200730
eab6649474 224 2023-04-07 16:03:29 +08:00
yanran200730
16178ecbac 225 2023-04-07 16:02:49 +08:00
yanran200730
3a1e6a51cf bug 2023-04-07 16:00:10 +08:00
yanran200730
c39e347b28 227 2023-04-07 15:57:00 +08:00
yanran200730
657f31b6bc 215 2023-04-07 13:37:38 +08:00
yanran200730
6c2d460aa9 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-07 11:50:26 +08:00
yanran200730
eb0f04ebd7 223 2023-04-07 11:50:20 +08:00
aixianling
cf5e4e466e Merge remote-tracking branch 'origin/build' into build 2023-04-07 11:49:13 +08:00
aixianling
a1677cab63 事项配置重构 2023-04-07 11:49:01 +08:00
yanran200730
021c696120 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-07 11:44:15 +08:00
yanran200730
d5cd5e490b 188 2023-04-07 11:44:09 +08:00
aixianling
18d4919386 Merge remote-tracking branch 'origin/build' into build 2023-04-07 11:35:42 +08:00
aixianling
485a294fb4 事项配置重构 2023-04-07 11:35:09 +08:00
yanran200730
acfac42957 212 2023-04-07 11:34:50 +08:00
yanran200730
46dbf2e570 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-07 11:19:59 +08:00
yanran200730
c151ca3679 206 2023-04-07 11:19:53 +08:00
aixianling
aebf16936c 变量闭环 2023-04-07 09:09:01 +08:00
aixianling
e420628475 数组转树结构,删除空的子节点数组 2023-04-07 08:36:04 +08:00
aixianling
df940bc035 Merge remote-tracking branch 'origin/build' into build 2023-04-06 17:09:37 +08:00
aixianling
c13334c38a 图层切换添加完成 2023-04-06 17:09:21 +08:00
yanran200730
4248e915b3 189 2023-04-06 14:20:04 +08:00
yanran200730
6cafe6f9c5 186 2023-04-06 11:03:40 +08:00
yanran200730
b7563eebc8 185 2023-04-06 11:00:36 +08:00
yanran200730
8288b7d26a 居民积分 2023-04-06 10:32:34 +08:00
yanran200730
46f49f4686 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-04-06 10:02:35 +08:00
yanran200730
ec189139b6 bug 2023-04-06 10:02:28 +08:00
aixianling
4385d32cf6 数据模型修改 2023-04-04 18:08:12 +08:00
aixianling
0d309a158e 数据模型修改 2023-04-04 17:29:39 +08:00
aixianling
89c406d802 数据模型完成 2023-04-04 14:10:46 +08:00
yanran200730
75b7b01706 精选动态 2023-04-04 10:13:18 +08:00
aixianling
b377e98dbe Merge remote-tracking branch 'origin/build' into build 2023-04-04 10:08:51 +08:00
aixianling
ecda9aac4e 暂时提交一下 2023-04-04 10:08:35 +08:00
yanran200730
7e545b7b99 推送精选 2023-04-04 10:07:19 +08:00
aixianling
9dbc8bccf3 提交一下 2023-04-04 09:41:48 +08:00
aixianling
5cfc275876 清除不必要的代理 2023-04-04 09:24:43 +08:00
aixianling
f0dfc59828 优化调整web端内存溢出的问题 2023-04-04 09:20:21 +08:00
aixianling
f3cf8360c2 优化调整web端内存溢出的问题 2023-04-04 09:19:47 +08:00
yanran200730
5e7ef3d27a 积分 2023-04-03 16:29:03 +08:00
aixianling
dd4ab4ec0d 迁移位置,并清除多余的报错 2023-04-03 16:28:12 +08:00
aixianling
fdbe0c4c37 数据模型初步接入接口 2023-03-31 18:49:51 +08:00
yanran200730
8b3f831bbd Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-31 15:17:59 +08:00
yanran200730
8309afbbd8 山东移动 2023-03-31 15:17:52 +08:00
aixianling
22e22185b5 返回评价数据处理错误修复 2023-03-31 11:03:48 +08:00
aixianling
ad4772ce98 修复未展示评价的BUG 2023-03-31 10:47:51 +08:00
yanran200730
5d8088ce8c Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-31 09:13:31 +08:00
yanran200730
cbde0e30f7 180 2023-03-31 09:13:13 +08:00
aixianling
6c9d7f54d8 Merge remote-tracking branch 'origin/build' into build 2023-03-30 17:57:06 +08:00
aixianling
54f23228f8 先提交一波 2023-03-30 17:56:49 +08:00
yanran200730
1c557e3f63 bug 2023-03-30 17:40:53 +08:00
yanran200730
70172e2a98 bug 2023-03-30 17:26:40 +08:00
yanran200730
310a39cd3a 178 2023-03-30 16:45:11 +08:00
yanran200730
27fe4304b6 175 2023-03-30 15:57:36 +08:00
yanran200730
4d15f1eb10 172 2023-03-30 15:14:17 +08:00
yanran200730
6c75e81cb7 168 2023-03-30 15:13:35 +08:00
yanran200730
f86132fbb1 161 2023-03-30 14:39:41 +08:00
yanran200730
a0c331fbd4 163 2023-03-30 14:39:04 +08:00
yanran200730
7422040057 171 2023-03-30 14:37:33 +08:00
yanran200730
3bbdc89d6b 167 2023-03-30 14:36:14 +08:00
yanran200730
04caf5b569 bug 2023-03-30 12:02:22 +08:00
yanran200730
5721938ea2 159 2023-03-30 12:01:15 +08:00
yanran200730
04a0f81129 144 2023-03-30 12:00:32 +08:00
yanran200730
1e7632abe7 145 2023-03-30 10:00:55 +08:00
yanran200730
bd167224cb 146 2023-03-30 09:59:32 +08:00
yanran200730
068ae16f50 147 2023-03-30 09:57:54 +08:00
yanran200730
3d74da20e0 155 2023-03-30 09:56:52 +08:00
yanran200730
9533b4b1ba 148 2023-03-30 09:56:21 +08:00
yanran200730
86e53ab31d 149 2023-03-30 09:54:16 +08:00
yanran200730
1731e68364 150 2023-03-30 09:52:03 +08:00
yanran200730
f53c7b82ef 151 2023-03-30 09:49:08 +08:00
yanran200730
08225b7e1f 153 2023-03-30 09:46:28 +08:00
yanran200730
ebf1802374 152 2023-03-30 09:45:10 +08:00
aixianling
c848ad8063 数据模型提交 2023-03-29 18:27:47 +08:00
aixianling
9e3fdd0922 Merge remote-tracking branch 'origin/build' into build 2023-03-29 14:43:54 +08:00
aixianling
d0ed795da2 修复组件缺少名字的问题 2023-03-29 14:43:34 +08:00
yanran200730
c471549e0d bug 2023-03-29 10:55:10 +08:00
yanran200730
42fb9cd0aa 积分任务 2023-03-29 09:24:21 +08:00
aixianling
e29c00477b 先提交一波 2023-03-28 17:59:07 +08:00
yanran200730
b6b5254c80 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-28 17:02:01 +08:00
yanran200730
4e14121dbd 1 2023-03-28 17:01:54 +08:00
aixianling
06c5fc7af5 Merge remote-tracking branch 'origin/build' into build 2023-03-27 18:06:05 +08:00
aixianling
e653f84891 先提交一波 2023-03-27 18:03:05 +08:00
yanran200730
f497a3a658 大屏地图 2023-03-27 18:02:05 +08:00
liuye
ac0baae856 邻里互助 2023-03-27 11:38:38 +08:00
liuye
7a042222db 邻里互助 2023-03-27 11:24:20 +08:00
aixianling
5ed957b628 调整下权限指令 2023-03-27 11:20:37 +08:00
aixianling
0dda0201ba BUG 139 2023-03-24 15:24:18 +08:00
yanran200730
da27eaee98 bug 2023-03-24 11:32:32 +08:00
yanran200730
104e966604 bug 2023-03-24 10:49:52 +08:00
yanran200730
7a7896b3f1 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-24 10:37:39 +08:00
yanran200730
3da57e5351 bug 2023-03-24 10:37:33 +08:00
aixianling
acf90b3d7d 先版本回退一下 2023-03-24 10:19:37 +08:00
aixianling
d3b220ab50 Merge remote-tracking branch 'origin/build' into build 2023-03-24 09:02:18 +08:00
aixianling
8086251ef5 本地化字典增加企微端 2023-03-24 09:01:25 +08:00
yanran200730
a703350639 bug 2023-03-24 08:55:30 +08:00
yanran200730
e030c693b4 bug 2023-03-24 08:51:59 +08:00
yanran200730
19f308ee52 bug 2023-03-24 08:46:38 +08:00
yanran200730
2dadcfe4e6 bug 2023-03-24 08:39:40 +08:00
yanran200730
3aeeed7951 bug 2023-03-24 08:38:42 +08:00
aixianling
39dacc0b20 Merge remote-tracking branch 'origin/build' into build 2023-03-23 18:20:10 +08:00
aixianling
3a01fa9011 BUG 139 2023-03-23 18:19:52 +08:00
yanran200730
ffaf9e8aae Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-23 11:55:35 +08:00
yanran200730
4c65ce4df4 bug 2023-03-23 11:55:22 +08:00
aixianling
d4f1c04f07 Merge remote-tracking branch 'origin/build' into build 2023-03-23 11:30:02 +08:00
aixianling
c02b19f3eb 数据库乱搞,定制方案字典本地代码化 2023-03-23 11:29:50 +08:00
yanran200730
86bbb552c5 bug 2023-03-23 11:07:03 +08:00
yanran200730
a19b770b9f bug 2023-03-23 10:36:00 +08:00
yanran200730
e2e2e34f74 bug 2023-03-23 09:38:59 +08:00
yanran200730
d2a2f5d702 bug 2023-03-22 17:07:00 +08:00
yanran200730
9d1ebec018 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-22 17:00:57 +08:00
yanran200730
ae868f6525 曲靖需求变更 2023-03-22 17:00:49 +08:00
aixianling
99480dc8d3 防抖节流装饰器 2023-03-22 16:30:43 +08:00
aixianling
81dbd135e2 增加v-permit用来控制权限 2023-03-22 15:56:10 +08:00
aixianling
6633182efe Merge remote-tracking branch 'origin/build' into build 2023-03-22 15:41:46 +08:00
aixianling
2129a8ad8b 自定义命令统一管理,装饰器统一管理 2023-03-22 15:41:27 +08:00
yanran200730
24d16e65d3 考试管理 2023-03-22 14:27:21 +08:00
liuye
8f2ac6ed81 blur 2023-03-21 17:55:47 +08:00
liuye
b18e9ce7ae 引导页设置 2023-03-21 17:17:19 +08:00
liuye
30dad1ee7d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-21 14:16:07 +08:00
liuye
cda8a68794 邻里互助 2023-03-21 14:15:47 +08:00
aixianling
33831736a9 BUG 34 2023-03-21 11:58:55 +08:00
aixianling
a0170b974d Merge remote-tracking branch 'origin/build' into build 2023-03-20 18:06:39 +08:00
aixianling
a009c8379a 增加引导页设置功能 2023-03-20 18:06:26 +08:00
liuye
d66ff0ede0 引导页配置 2023-03-20 17:38:47 +08:00
liuye
ce1d5ccb5d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-20 09:52:41 +08:00
liuye
361a857ccd bug111 2023-03-20 09:52:19 +08:00
aixianling
a024aa6931 BUG 89 2023-03-20 09:20:25 +08:00
liuye
20408bb71f 引导页设置 2023-03-17 16:08:20 +08:00
liuye
b16d4a8af9 随手拍换名字 2023-03-17 09:36:36 +08:00
liuye
8f3dc49a76 邻里互动 2023-03-16 17:25:55 +08:00
liuye
024efa9bcb 邻里互助 2023-03-16 17:03:24 +08:00
liuye
a6122f481d 邻里互助 2023-03-16 17:01:59 +08:00
liuye
f1b4729b63 邻里互助 2023-03-16 16:55:25 +08:00
liuye
aebe3d75d7 邻里互助 2023-03-16 16:49:07 +08:00
liuye
05959f7e24 邻里互助 2023-03-16 15:12:41 +08:00
liuye
8614b5a369 邻里互助 2023-03-16 14:41:48 +08:00
liuye
7be3016bfa 邻里互助 2023-03-16 14:01:40 +08:00
liuye
72d6e63edc 邻里互助 2023-03-16 11:35:37 +08:00
liuye
7dca4813ed 邻里互助 2023-03-16 10:54:06 +08:00
liuye
ab11967a8e 话题设置 2023-03-15 17:32:00 +08:00
yanran200730
189186c988 bug 2023-03-15 17:10:04 +08:00
yanran200730
d1f6348ef3 大屏bug修复 2023-03-15 16:45:59 +08:00
yanran200730
328cff225d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-15 16:10:48 +08:00
yanran200730
fe682e7a2b bug 2023-03-15 16:10:38 +08:00
liuye
0631d8ea2e Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-15 15:55:27 +08:00
liuye
e995c30eea 引导页设置 2023-03-15 15:54:48 +08:00
aixianling
8d4fa0c81d Merge remote-tracking branch 'origin/build' into build 2023-03-15 15:30:18 +08:00
aixianling
3808155201 丰都增加显示字段 2023-03-15 15:30:05 +08:00
yanran200730
529e0ddccf 表格组件 2023-03-15 15:18:25 +08:00
yanran200730
106535fc01 大屏组件 2023-03-15 11:18:38 +08:00
yanran200730
f053a06231 大屏组件 2023-03-15 11:18:12 +08:00
yanran200730
00d90dc8b7 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-15 11:02:27 +08:00
yanran200730
999f6190dc 大屏表格组件bug 2023-03-15 11:02:21 +08:00
aixianling
b4d4c3d46b Merge remote-tracking branch 'origin/build' into build 2023-03-15 10:54:12 +08:00
aixianling
a63bc61f4a 切换tab修复 2023-03-15 10:51:38 +08:00
yanran200730
d66760f9c2 大屏组件 2023-03-15 10:46:47 +08:00
yanran200730
76dfe48114 bug 2023-03-14 17:11:20 +08:00
yanran200730
23fae77443 大屏表格新增配置 2023-03-14 16:32:58 +08:00
yanran200730
0e31e19472 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-14 14:51:53 +08:00
yanran200730
8e09ea8efc 大屏组件 2023-03-14 14:51:44 +08:00
aixianling
0bd31e965d 调整下webpack策略 2023-03-14 11:25:21 +08:00
yanran200730
34e50b6406 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-14 10:13:37 +08:00
yanran200730
fb97afe39a 统计组件 2023-03-14 10:13:29 +08:00
aixianling
8ad3292630 调整下加载策略 2023-03-14 09:47:19 +08:00
aixianling
812e085795 增加装饰器类 确认弹窗,loading,节流 2023-03-13 15:42:49 +08:00
aixianling
d0cafeea6d 关闭页签 2023-03-13 09:13:46 +08:00
yanran200730
4a88944b9c 完成大屏党建主题的适配 2023-03-10 17:32:10 +08:00
yanran200730
f3570acc61 党建主题适配 2023-03-10 17:15:44 +08:00
yanran200730
e210352339 党建主题适配 2023-03-10 16:22:15 +08:00
aixianling
da6bbc2a40 删除大屏背景组件 2023-03-10 15:58:58 +08:00
aixianling
cada8f6972 取消测试数据 2023-03-10 15:52:45 +08:00
aixianling
663cb21eb2 党建主题 2023-03-10 15:52:05 +08:00
aixianling
8cd4546f9d Merge remote-tracking branch 'origin/build' into build 2023-03-10 14:10:52 +08:00
aixianling
4030225304 禁止小程序在定制方案中打包,下载更新,和群发通知 2023-03-10 14:10:42 +08:00
yanran200730
5b266397ee 大屏 2023-03-10 13:35:52 +08:00
aixianling
b5bfc24916 方方字体加入 2023-03-10 11:49:55 +08:00
aixianling
3e9090c6a4 方方字体加入 2023-03-10 11:48:20 +08:00
aixianling
2147a1dea8 Merge remote-tracking branch 'origin/build' into build 2023-03-10 11:47:58 +08:00
aixianling
a8f83afbf8 方方字体加入 2023-03-10 11:47:49 +08:00
yanran200730
c16559ea1e 图表组件 2023-03-10 10:55:02 +08:00
yanran200730
7c6a898bf0 大屏组件开发 2023-03-10 10:05:09 +08:00
aixianling
84689f602b 修复导航点击失效问题 2023-03-10 09:38:31 +08:00
aixianling
e8d89279d6 Merge remote-tracking branch 'origin/build' into build 2023-03-10 09:08:05 +08:00
aixianling
789a5673e3 清理测试数据 2023-03-10 09:07:54 +08:00
yanran200730
cef67555bf 图表组件 2023-03-09 18:01:23 +08:00
aixianling
b30ce1c9a2 调整默认背景 2023-03-09 16:50:12 +08:00
aixianling
8615e4cb34 新版大屏顶部 2023-03-09 16:47:32 +08:00
yanran200730
f2d0a09dc8 柱状图组件 2023-03-09 14:49:55 +08:00
aixianling
7a04aba3f9 Merge remote-tracking branch 'origin/build' into build 2023-03-09 11:09:01 +08:00
aixianling
bc2e68207f 大屏顶部旧样式归档处理 2023-03-09 11:08:49 +08:00
yanran200730
fd9260cc74 大屏组件排行榜 2023-03-09 10:40:12 +08:00
yanran200730
6f0fbde825 大屏表格组件 2023-03-09 08:52:14 +08:00
yanran200730
c8f6b546cb 大屏表格组件 2023-03-08 17:32:51 +08:00
yanran200730
341643a87e 大屏组件 2023-03-08 17:16:07 +08:00
yanran200730
452952670b 大屏组件开发 2023-03-08 17:03:14 +08:00
yanran200730
54bcd5979a 大屏组件开发 2023-03-08 15:46:00 +08:00
aixianling
0770065a43 触发点改为提交之后 2023-03-08 09:48:35 +08:00
aixianling
0b040a2192 Merge remote-tracking branch 'origin/build' into build 2023-03-08 09:33:24 +08:00
aixianling
cc748e1c99 整合样式,BUG 59 2023-03-08 09:33:10 +08:00
yanran200730
97b1cc0f8d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-07 17:09:31 +08:00
yanran200730
8aa991ae07 素材库 2023-03-07 17:09:20 +08:00
aixianling
5a43d51436 曲靖复制郫都 商品管理,订单管理,网格员积分 2023-03-07 16:08:10 +08:00
aixianling
590dfcc348 BUG 52 2023-03-07 15:53:15 +08:00
aixianling
e2e347bd14 BUG 54 2023-03-07 15:52:23 +08:00
aixianling
4e8a30948d Merge remote-tracking branch 'origin/build' into build 2023-03-07 15:29:44 +08:00
aixianling
d61ad0c909 BUG 58 2023-03-07 15:29:27 +08:00
yanran200730
87a038b0ed Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-07 14:30:09 +08:00
yanran200730
ebf652932a 素材库 2023-03-07 14:30:02 +08:00
aixianling
8bd754064e 增加可信证书异常抛出 2023-03-07 09:59:28 +08:00
aixianling
8bce4caa97 Merge remote-tracking branch 'origin/build' into build 2023-03-07 09:44:57 +08:00
aixianling
acd7915be4 替换字典 2023-03-07 09:44:36 +08:00
yanran200730
5f6e420460 bug 2023-03-06 17:07:43 +08:00
yanran200730
d8b1251dd8 bug 2023-03-06 16:38:12 +08:00
yanran200730
495cea8064 bug 2023-03-06 16:18:24 +08:00
yanran200730
89390fa3ff 素材库 2023-03-06 11:45:33 +08:00
aixianling
a887fb8adf 调整接口 2023-03-06 10:27:06 +08:00
aixianling
ecd6a00c35 重名文件 2023-03-06 10:24:22 +08:00
aixianling
e75b6b8459 还原代理 2023-03-06 09:17:07 +08:00
aixianling
bc296e0cb9 曲靖矛盾调解迁移完成 2023-03-06 09:06:00 +08:00
yanran200730
c87cff02f7 bug 2023-03-03 16:41:48 +08:00
yanran200730
413219ac7a bug 2023-03-03 15:02:42 +08:00
yanran200730
b6189a2eda bug 2023-03-03 15:01:36 +08:00
yanran200730
9c4423b8bc 群发bug 2023-03-03 14:59:45 +08:00
yanran200730
0ac5a99433 素材管理 2023-03-03 14:20:49 +08:00
yanran200730
1b95c37826 素材库 2023-03-03 13:48:20 +08:00
yanran200730
cec0cf34e4 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-02 18:02:11 +08:00
yanran200730
152defa377 素材库 2023-03-02 18:02:00 +08:00
aixianling
499a57880f Merge remote-tracking branch 'origin/build' into build 2023-03-02 17:34:21 +08:00
aixianling
0dbf18c751 调整扫码跳转因一级域名目录导致的异常 2023-03-02 17:32:51 +08:00
yanran200730
6a91ea51c9 素材库 2023-03-02 15:23:27 +08:00
yanran200730
421c7ee0a5 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-02 13:45:09 +08:00
yanran200730
e08c522066 bug 2023-03-02 13:44:56 +08:00
aixianling
2d71a56011 优化样式 2023-03-02 11:17:19 +08:00
aixianling
50ab3b2edd Merge remote-tracking branch 'origin/build' into build 2023-03-02 10:47:11 +08:00
aixianling
230ce1822f 清洗数据 2023-03-02 10:47:00 +08:00
yanran200730
df8ef12198 bug 2023-03-02 09:40:57 +08:00
yanran200730
edfe9b2c2b bug 2023-03-02 09:39:39 +08:00
yanran200730
448e057ae8 bug 2023-03-02 09:13:17 +08:00
yanran200730
b042f60e41 bug 2023-03-02 09:12:16 +08:00
yanran200730
08a91c64db bug 2023-03-02 09:06:22 +08:00
yanran200730
f17509d6d7 关闭任务 2023-03-02 09:03:11 +08:00
yanran200730
021f60b7d7 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-02 09:00:38 +08:00
yanran200730
6039674de8 bug 2023-03-02 09:00:32 +08:00
aixianling
a4476570bd Merge remote-tracking branch 'origin/build' into build 2023-03-01 16:45:10 +08:00
aixianling
7df0f128a3 增加可信证书埋点 2023-03-01 16:44:58 +08:00
yanran200730
74e78c8e59 bug 2023-03-01 14:48:26 +08:00
yanran200730
36f401b165 bug 2023-03-01 14:40:06 +08:00
yanran200730
892cae075f bug 2023-03-01 14:36:49 +08:00
yanran200730
30f19c6431 文字修改 2023-03-01 14:24:44 +08:00
yanran200730
c67611f204 关闭任务 2023-03-01 14:21:48 +08:00
yanran200730
0bed36e832 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-01 14:17:31 +08:00
yanran200730
e45ebaa025 群发统计 2023-03-01 14:17:24 +08:00
aixianling
fcef2eb44b Merge remote-tracking branch 'origin/build' into build 2023-03-01 10:14:54 +08:00
aixianling
8ce27cbc55 更优雅的变更页签标题 2023-03-01 10:14:41 +08:00
yanran200730
d121bb6a73 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-03-01 10:05:12 +08:00
yanran200730
e709e1e74f 协同宣发 2023-03-01 10:05:04 +08:00
aixianling
a10971e126 修复主题设置 2023-02-28 16:40:00 +08:00
yanran200730
04c47c0387 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-28 14:53:34 +08:00
yanran200730
6a9ce60c47 bug 2023-02-28 14:53:16 +08:00
aixianling
93efa0608a Merge remote-tracking branch 'origin/build' into build 2023-02-28 10:43:45 +08:00
aixianling
7c8a9a28d7 慧治理代码更新调整 2023-02-28 10:43:31 +08:00
yanran200730
47f0099020 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-28 10:38:44 +08:00
yanran200730
1fb3f7cb5e 删除 2023-02-28 10:38:34 +08:00
aixianling
bf784f05ea 消除异常 2023-02-28 10:12:01 +08:00
aixianling
8539bd5d75 Dialog升级,支持可拖动,支持v-model控制显隐 2023-02-24 17:06:29 +08:00
aixianling
ff8665fbc4 Merge remote-tracking branch 'origin/build' into build 2023-02-24 16:54:30 +08:00
aixianling
eee3818332 Dialog升级,支持可拖动,支持v-model控制显隐 2023-02-24 16:54:17 +08:00
yanran200730
6be2744b49 居民积分bug修复 2023-02-24 10:54:12 +08:00
yanran200730
46b9e57ed1 bug 2023-02-24 09:37:57 +08:00
yanran200730
d62b0bafac bug 2023-02-23 15:53:45 +08:00
yanran200730
bfef93c8a8 积分 2023-02-23 15:33:25 +08:00
yanran200730
e7d30c38cd bug 2023-02-22 17:24:09 +08:00
yanran200730
780b520878 积分 2023-02-22 16:19:23 +08:00
yanran200730
c9f8b5939c 居民积分 2023-02-22 15:31:33 +08:00
yanran200730
2114486851 bug 2023-02-21 16:07:21 +08:00
yanran200730
59061827f1 bug 2023-02-21 14:21:33 +08:00
yanran200730
180e43924a bug 2023-02-21 13:50:26 +08:00
yanran200730
c3674e7e5a bug 2023-02-21 13:44:49 +08:00
yanran200730
1218923012 需求变更 2023-02-21 11:40:30 +08:00
yanran200730
0f7842c5c2 bug 2023-02-21 10:19:05 +08:00
yanran200730
b49521cf3a bug 2023-02-20 17:51:57 +08:00
yanran200730
8a7e27b58f bug 2023-02-20 17:09:28 +08:00
yanran200730
9493853fe4 bug 2023-02-20 16:41:39 +08:00
yanran200730
f8e91898af 优化显示 2023-02-20 15:13:38 +08:00
yanran200730
7036ed9bc8 bug 2023-02-20 14:45:45 +08:00
yanran200730
68bdd92126 评论次数 2023-02-20 11:02:27 +08:00
yanran200730
5bac0e1183 bug 2023-02-20 10:55:17 +08:00
yanran200730
d23eb73948 优化 2023-02-20 10:37:08 +08:00
yanran200730
403dfeb725 优化 2023-02-20 10:27:27 +08:00
yanran200730
be1b24568a bug 2023-02-20 10:14:17 +08:00
yanran200730
38a6ace8d2 新闻中心 新增评论模块 2023-02-20 10:13:44 +08:00
yanran200730
a1c7972f9d bug 2023-02-20 09:30:16 +08:00
yanran200730
0222a26313 权限控制 2023-02-20 08:53:43 +08:00
yanran200730
8564a6881e bug 2023-02-20 08:40:31 +08:00
yanran200730
580fbf1366 bug 2023-02-17 17:15:29 +08:00
yanran200730
567923139d bug 2023-02-17 16:11:26 +08:00
yanran200730
3d7d4655f5 bug 2023-02-17 15:27:38 +08:00
yanran200730
b9afe898b3 样式修改 2023-02-17 15:25:24 +08:00
yanran200730
4234539e65 bug 2023-02-17 13:58:19 +08:00
yanran200730
4214ccd49c Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-17 13:55:56 +08:00
yanran200730
dd0c6cf1ef bug 2023-02-17 13:55:40 +08:00
aixianling
8e293e0d9b 修复打包显示进度的问题 2023-02-17 11:48:54 +08:00
01bb09da30 修复ws返回信息 2023-02-17 11:12:51 +08:00
yanran200730
1e5085f4cc Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-17 10:37:46 +08:00
yanran200730
467a5d789b bug 2023-02-17 10:37:39 +08:00
aixianling
4c080b7b19 修复打包的问题 2023-02-16 17:30:50 +08:00
aixianling
31e79f88a3 修复打包的问题 2023-02-16 17:06:48 +08:00
aixianling
bc26d3af46 Merge remote-tracking branch 'origin/build' into build 2023-02-16 16:20:20 +08:00
aixianling
81dee66f6c 修复打包的问题 2023-02-16 16:20:05 +08:00
yanran200730
0cc8626866 数据统计 2023-02-16 15:41:24 +08:00
yanran200730
7652208a74 bug 2023-02-16 15:15:20 +08:00
yanran200730
1344fa92fe Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-16 14:17:10 +08:00
yanran200730
11e3bc06f0 证书 2023-02-16 14:17:02 +08:00
b2fde1c419 调整ws的调用方式 2023-02-16 12:29:26 +08:00
0c65313b35 调整ws的调用方式 2023-02-16 11:34:36 +08:00
yanran200730
28856c980c 学习记录 2023-02-15 17:29:10 +08:00
yanran200730
249917b3d9 考试记录 2023-02-15 17:16:59 +08:00
yanran200730
cea33b109f 学习统计 2023-02-15 14:45:07 +08:00
yanran200730
6302d125e8 评论管理 2023-02-14 15:37:55 +08:00
yanran200730
0a0913d922 课程管理 2023-02-14 11:48:54 +08:00
yanran200730
7aaf9cd6be bug 2023-02-14 10:13:41 +08:00
yanran200730
093d46ee4e Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-13 18:08:35 +08:00
yanran200730
d433c503e4 曲靖 2023-02-13 18:08:25 +08:00
aixianling
841c67b51d 发现监控接口自我报错后停止监控 2023-02-13 10:55:56 +08:00
aixianling
993db9585e Merge remote-tracking branch 'origin/build' into build 2023-02-13 10:47:30 +08:00
aixianling
870d2b27bc 默认监视接口节流5秒/次 2023-02-13 10:47:17 +08:00
aixianling
d111a4b95c 默认监视时间调整为30s 2023-02-13 10:46:00 +08:00
yanran200730
708a2193b0 完成试题库 2023-02-13 10:22:32 +08:00
刘仕伟
670ceae73c Update list.vue 2023-02-10 17:54:22 +00:00
刘仕伟
a17182c918 el-input 2023-02-10 12:15:56 +00:00
刘仕伟
f9e2fa0222 修改input样式 2023-02-10 12:07:41 +00:00
刘仕伟
bb07c913aa 新增打卡次数筛选条件 2023-02-10 11:55:28 +00:00
aixianling
7e5b68818f 打卡时间=>最新打卡时间 2023-02-10 18:44:49 +08:00
aixianling
695b30855e 调整统计角度 2023-02-10 18:40:04 +08:00
aixianling
29db1a13cc 排除frontjs的监控 2023-02-10 18:19:34 +08:00
aixianling
e977b079a8 铜仁反向同步到黔西南 2023-02-10 18:08:34 +08:00
aixianling
ea04b618cd 调整来源 2023-02-10 17:07:54 +08:00
aixianling
6c237e8f2f Merge remote-tracking branch 'origin/build' into build 2023-02-10 16:29:18 +08:00
aixianling
5f355e47f1 前端监控完成 2023-02-10 16:29:01 +08:00
yanran200730
addb18b2ef 曲靖 2023-02-10 11:48:28 +08:00
yanran200730
4846762d37 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-10 10:05:05 +08:00
yanran200730
dff66dca3e 曲靖数据统计 2023-02-10 10:04:58 +08:00
aixianling
89a7eb3441 铜仁复制黔西南账号管理 2023-02-09 16:10:49 +08:00
aixianling
609b6edbba 强制数字类型 2023-02-09 15:42:45 +08:00
aixianling
be3eca952d 铜仁打卡修改完成 2023-02-09 15:36:30 +08:00
aixianling
8fbf846ff9 Merge remote-tracking branch 'origin/build' into build 2023-02-09 11:53:49 +08:00
aixianling
ddee2e82b3 先提交一下前端监控机器人--观察者 2023-02-09 11:53:35 +08:00
yanran200730
8d52238a6f 居民学习记录 2023-02-09 10:27:05 +08:00
yanran200730
ea5850fb70 试题库 2023-02-09 10:03:12 +08:00
yanran200730
6a58457c36 题库 2023-02-08 17:53:38 +08:00
yanran200730
47596137ec 曲靖 2023-02-08 17:33:24 +08:00
yanran200730
124b588a66 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-08 16:36:48 +08:00
yanran200730
4670ffee85 bug 2023-02-08 16:36:40 +08:00
aixianling
6a5078dbb7 Merge remote-tracking branch 'origin/build' into build 2023-02-08 15:28:45 +08:00
aixianling
2c89032a7e 导出增加节流锁 2023-02-08 15:28:36 +08:00
yanran200730
bf508e8cb8 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-08 15:25:38 +08:00
yanran200730
d000c5f394 bug 2023-02-08 15:25:00 +08:00
aixianling
c2badb66e2 Merge remote-tracking branch 'origin/build' into build 2023-02-08 14:17:19 +08:00
aixianling
8d3a4ad6c2 导出增加节流锁 2023-02-08 14:17:07 +08:00
yanran200730
081effb3b3 bug 2023-02-08 14:14:04 +08:00
yanran200730
12331f8970 曲靖 2023-02-08 14:08:58 +08:00
yanran200730
4333cfa0ab Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-08 13:57:18 +08:00
yanran200730
93b364f049 bug 2023-02-08 13:57:10 +08:00
aixianling
27f208561e 账号管理增加账号角色筛选 2023-02-08 13:53:30 +08:00
aixianling
37893bb106 接口异常监控 2023-02-07 18:05:13 +08:00
aixianling
6a79f09476 修复异常 2023-02-07 17:51:19 +08:00
aixianling
377e1b8f93 瞎鸡儿改账号管理,后面乱七八糟了别找我 2023-02-07 16:15:46 +08:00
aixianling
561d24bade Merge remote-tracking branch 'origin/build' into build 2023-02-07 15:52:29 +08:00
aixianling
23b1b47a7d 瞎鸡儿改账号管理,后面乱七八糟了别找我 2023-02-07 15:52:17 +08:00
yanran200730
fba1d515b2 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-07 15:47:21 +08:00
yanran200730
35ad7b031d 曲靖 2023-02-07 15:46:53 +08:00
aixianling
5f67f637d3 Merge remote-tracking branch 'origin/build' into build 2023-02-07 15:19:33 +08:00
aixianling
ff75533025 更换接口 2023-02-07 15:19:22 +08:00
yanran200730
6ddadfe53c 曲靖 2023-02-07 13:36:09 +08:00
艾贤凌
182015e843 Update list.vue 2023-02-06 10:14:35 +00:00
aixianling
3f97c9e17e 修复样式 2023-02-06 17:48:05 +08:00
yanran200730
5320115e13 bug 2023-02-06 13:43:16 +08:00
yanran200730
f1f3e6fe5a 需求变更 2023-02-06 10:37:04 +08:00
刘仕伟
7e5c3c78e6 Update list.vue 2023-02-05 06:10:35 +00:00
刘仕伟
0da7a3e74a Update AppSignInfo.vue 2023-02-05 06:09:30 +00:00
aixianling
996c5ab75a 修复关闭当前页tab无法正常跳转的问题 2023-02-03 17:10:35 +08:00
aixianling
b1d8a3c1ca 增加目录的高亮 2023-02-03 16:55:35 +08:00
aixianling
9c4d0868cf 改成24小时制 2023-02-03 16:41:10 +08:00
aixianling
2f30da9156 签到完成 2023-02-03 15:20:53 +08:00
aixianling
e61cc019e8 Merge remote-tracking branch 'origin/build' into build 2023-02-03 15:19:48 +08:00
aixianling
0bed825f70 签到完成 2023-02-03 15:19:34 +08:00
yanran200730
ffeb1b182d bug 2023-02-03 13:50:32 +08:00
yanran200730
a6141078e0 bug 2023-02-03 09:58:15 +08:00
yanran200730
c68babb4d0 bug 2023-02-03 09:42:13 +08:00
yanran200730
77159304aa Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-03 09:00:54 +08:00
yanran200730
bddfa88823 bug 2023-02-03 09:00:48 +08:00
aixianling
5b41cd85e0 提交样式 2023-02-02 18:21:14 +08:00
aixianling
deb90a8574 提交样式 2023-02-02 18:20:46 +08:00
yanran200730
a8547275bd bug 2023-02-02 18:05:59 +08:00
yanran200730
a10ec22c99 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-02 16:42:06 +08:00
yanran200730
be61bf2166 bug 2023-02-02 16:42:00 +08:00
aixianling
d5f31cbe97 Merge remote-tracking branch 'origin/build' into build 2023-02-02 16:20:07 +08:00
aixianling
470cb4d398 页面标签完成底座部署 2023-02-02 16:19:47 +08:00
yanran200730
982612a1e7 bug 2023-02-02 16:00:32 +08:00
yanran200730
3d84a3afe7 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-02 15:38:51 +08:00
yanran200730
2c49e28a58 bug 2023-02-02 15:38:44 +08:00
aixianling
d5d7314af5 调整一下 2023-02-02 14:33:30 +08:00
aixianling
05453ed16d 调整一下 2023-02-02 14:33:12 +08:00
aixianling
51185a43ee 页面tab完成 2023-02-02 12:00:12 +08:00
yanran200730
e45f6ee040 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-02-01 17:39:16 +08:00
yanran200730
e3297fead4 营销活动 2023-02-01 17:38:37 +08:00
aixianling
543df34425 bin-code-editor=>bin-ace-editor 2023-02-01 15:29:12 +08:00
aixianling
76ccc36824 代码编辑器暂时用不到 2023-02-01 15:07:49 +08:00
aixianling
d0965fddfe bin-code-editor=>bin-ace-editor 2023-02-01 14:59:50 +08:00
yanran200730
d4d662a201 bug 2023-02-01 10:29:01 +08:00
yanran200730
40e2d71db4 bug 2023-01-30 17:53:59 +08:00
yanran200730
cd2f56db4f Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-30 17:11:49 +08:00
yanran200730
443ec1b082 bug 2023-01-30 17:11:42 +08:00
aixianling
46c6bc67ec Merge remote-tracking branch 'origin/build' into build 2023-01-30 14:41:32 +08:00
aixianling
18af0281b1 页签历史驻留,返回关闭功能完成 2023-01-30 14:41:19 +08:00
yanran200730
b947d4236d bug 2023-01-30 09:56:43 +08:00
yanran200730
1abd4c49b0 活动管理 2023-01-29 14:44:07 +08:00
yanran200730
a7072daf4a 活动管理 2023-01-29 14:37:45 +08:00
yanran200730
22f3a52a14 活动管理 2023-01-29 11:46:21 +08:00
yanran200730
cfcbef14c5 运营趋势 2023-01-29 10:40:51 +08:00
shijingjing
2193c950d9 群发居民群 2023-01-29 09:12:28 +08:00
aixianling
5eeef42174 测试git机器人 2023-01-28 18:07:57 +08:00
aixianling
34e23beaeb 新版打包监控,不再用前端轮询 2023-01-19 10:47:51 +08:00
liuye
e419339c10 居民档案 2023-01-18 15:52:14 +08:00
aixianling
ba6e3a0c95 Merge remote-tracking branch 'origin/build' into build 2023-01-18 14:45:32 +08:00
aixianling
a6401b44b2 修复组件 2023-01-18 14:45:21 +08:00
yanran200730
81e3a86776 运营分析 2023-01-18 14:17:12 +08:00
aixianling
feb76e4d63 增加为实际部署设置的域名根目录baseURL 2023-01-17 11:14:34 +08:00
aixianling
28ec0d0ef9 Merge remote-tracking branch 'origin/build' into build 2023-01-17 11:05:44 +08:00
aixianling
15fa0bfd38 增加为实际部署设置的域名根目录baseURL 2023-01-17 11:05:24 +08:00
liuye
ce36a373eb 学习问答 2023-01-17 09:57:43 +08:00
shijingjing
38bc07f0fd 类型恢复 2023-01-16 14:17:24 +08:00
shijingjing
9793ac502f 积分类型 2023-01-16 14:14:15 +08:00
shijingjing
00ee02ccb9 积分正负号 2023-01-16 14:06:57 +08:00
shijingjing
4cd0fa249c 郫都网格员积分 2023-01-16 13:56:50 +08:00
liuye
66c4ed2b79 问答详情 2023-01-12 13:42:18 +08:00
aixianling
eda173a5a7 更新图标库 2023-01-12 11:15:41 +08:00
aixianling
e7006873ca Merge remote-tracking branch 'origin/build' into build 2023-01-12 11:11:13 +08:00
aixianling
1d0f10ddca 新增若干sass常用场景样式:内外边距,吸顶,悬浮 2023-01-12 11:11:01 +08:00
shijingjing
c81e461cb5 默认时间 2023-01-11 16:14:42 +08:00
liuye
a1f9f71d31 学习问答 2023-01-11 15:37:18 +08:00
liuye
79eb498a83 学习问答 2023-01-11 15:15:34 +08:00
liuye
fb89cb1a8d css 2023-01-11 15:11:44 +08:00
liuye
90fa4f53f8 我也把头像换成圆的 2023-01-11 14:57:19 +08:00
liuye
ba22e5f039 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-11 11:00:34 +08:00
liuye
894f3b7952 学习问答 2023-01-11 10:59:56 +08:00
aixianling
5aff9d6bc2 BUG 26 2023-01-11 10:20:14 +08:00
aixianling
565d053224 小程序发布增加删除按钮 2023-01-11 09:40:19 +08:00
yanran200730
ee7f70734b Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-10 15:03:49 +08:00
yanran200730
7d3169b077 bug 2023-01-10 15:03:42 +08:00
shijingjing
fd33eb238d 残疾人+吸毒删除 2023-01-10 14:11:41 +08:00
yanran200730
22494d28d3 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-10 10:41:58 +08:00
yanran200730
e95986c93a 修改 2023-01-10 10:41:52 +08:00
liuye
a63e704b1e 学习问答 2023-01-10 10:40:01 +08:00
aixianling
5aa5438dd6 Merge remote-tracking branch 'origin/build' into build 2023-01-09 17:28:41 +08:00
aixianling
7cc92ee011 渲染地图增加判断条件是否有元素再渲染加载 2023-01-09 17:28:30 +08:00
liuye
642276cbdc 学习问答 2023-01-09 16:38:58 +08:00
aixianling
039cfb5673 Merge remote-tracking branch 'origin/build' into build 2023-01-09 13:53:30 +08:00
aixianling
a176ee54fa 大屏滚动列表 2023-01-09 13:53:19 +08:00
shijingjing
825c7210e2 多了个分号 2023-01-09 11:29:57 +08:00
shijingjing
14abc276c3 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-09 10:38:05 +08:00
shijingjing
a6b5c47251 变更记录 2023-01-09 10:37:42 +08:00
aixianling
26ad1124bf 增加统一的分页设置 2023-01-09 10:17:07 +08:00
aixianling
b576a61551 优化aitable 2023-01-09 09:36:10 +08:00
shijingjing
275461a474 组织变更 2023-01-09 09:26:42 +08:00
shijingjing
d9e4901336 组织变更记录 2023-01-06 17:59:43 +08:00
shijingjing
66ad57066a 提示 2023-01-06 17:00:44 +08:00
shijingjing
af3ad4ff63 发展党员转正 2023-01-06 16:27:31 +08:00
shijingjing
7850eb9bb9 特殊人群导入功能 2023-01-06 16:09:43 +08:00
liuye
feaa79e1b1 黔西南-群发 2023-01-06 11:43:15 +08:00
liuye
904d6f8c49 积分统计 2023-01-06 08:53:01 +08:00
liuye
b6f0b27b9b 居民分类 2023-01-05 17:49:10 +08:00
yanran200730
9ca7094ee4 bug 2023-01-05 17:35:36 +08:00
yanran200730
c6487873b8 bug 2023-01-05 17:17:12 +08:00
yanran200730
a6e46660cc bug 2023-01-05 17:13:12 +08:00
liuye
31f41cbff5 积分规则 2023-01-05 16:32:56 +08:00
liuye
725c68ad18 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-05 16:06:41 +08:00
liuye
2d62200297 轮播图片编辑,详情 2023-01-05 16:06:20 +08:00
shijingjing
29495c0ee3 居民活动 2023-01-05 11:15:33 +08:00
shijingjing
554db4fe72 选人组件更换 2023-01-05 09:59:13 +08:00
aixianling
39707d88d5 定制方案-小程序-底部导航栏增加 添加按钮和位置控制 2023-01-05 09:49:07 +08:00
aixianling
c42f6006b8 优化当获取不到应用时,出现的逻辑错误 2023-01-05 09:10:12 +08:00
liuye
b69b0e878a Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-04 16:56:55 +08:00
liuye
a37da5cfd0 天府星 2023-01-04 16:56:28 +08:00
shijingjing
83210f5501 bug24 2023-01-04 16:45:35 +08:00
shijingjing
81a7a77f2c AiTableSelect 2023-01-04 16:28:57 +08:00
liuye
17463ed691 bug 2023-01-04 15:10:59 +08:00
liuye
793c384d58 事件汇总统计 2023-01-04 15:04:40 +08:00
liuye
5595f0295d 积分导出 2023-01-04 14:52:48 +08:00
liuye
8a478fa108 积分明细导出 2023-01-04 14:43:21 +08:00
liuye
f14212d1a3 群发通知 2023-01-04 14:32:14 +08:00
liuye
44e142d935 文字修改 2023-01-04 13:48:30 +08:00
liuye
36a795c585 黔西南-积分 2023-01-04 11:41:07 +08:00
yanran200730
d2aa32ee18 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-04 11:30:34 +08:00
yanran200730
890d263017 bug 2023-01-04 11:30:28 +08:00
liuye
4ff8f5c9e1 积分规则 2023-01-04 11:12:50 +08:00
liuye
377c48d4a0 字典更换 2023-01-04 09:12:33 +08:00
liuye
c29791c904 居民分类信息 2023-01-04 09:07:15 +08:00
liuye
489c36ac00 积分规则 2023-01-04 09:01:39 +08:00
liuye
fef2f1d781 字典 2023-01-04 08:52:19 +08:00
liuye
e3d316d374 黔西南-居民分类信息 2023-01-03 15:28:15 +08:00
yanran200730
f7fc731773 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-03 13:47:43 +08:00
yanran200730
94a6972bda bug 2023-01-03 13:47:37 +08:00
liuye
838f61b16e Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-03 11:54:42 +08:00
liuye
1a9be3bc1a 黔西南积分 2023-01-03 11:54:23 +08:00
yanran200730
36a1e17314 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2023-01-03 10:41:42 +08:00
yanran200730
aa29336164 bug 2023-01-03 10:41:29 +08:00
liuye
e19b9bcc4a qxn 2023-01-03 09:41:45 +08:00
yanran200730
8fe8b65535 投票记录 2023-01-03 09:03:34 +08:00
yanran200730
3277618a05 投票 2022-12-30 17:17:58 +08:00
yanran200730
2833cd589a 丰都 投票 2022-12-30 14:55:38 +08:00
yanran200730
02e4b80ba1 bug 2022-12-29 15:07:57 +08:00
aixianling
5e9f44e5c4 企微H5增加自定义登录开关 2022-12-29 09:24:31 +08:00
aixianling
8a830a53d9 增加群机器人通知等功能 2022-12-28 17:50:17 +08:00
liuye
30a77df14e 积分统计 2022-12-28 15:31:00 +08:00
shijingjing
d707dea56b 详情 2022-12-28 14:22:54 +08:00
liuye
3aa20736a5 郫都积分 2022-12-28 14:20:13 +08:00
liuye
c61941e6ba 积分 2022-12-28 14:09:42 +08:00
shijingjing
8b2c78636e 网格员积分 2022-12-28 14:09:17 +08:00
shijingjing
36a4e6a533 网格员积分 2022-12-28 13:56:49 +08:00
liuye
7f5cb892af Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-12-28 10:46:06 +08:00
liuye
e03f33a334 事件类型 2022-12-28 10:45:42 +08:00
yanran200730
8379a5be40 bug 2022-12-28 10:12:38 +08:00
liuye
79539038b7 郫都积分 2022-12-28 09:56:06 +08:00
yanran200730
7083bf34a6 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-12-27 16:46:44 +08:00
yanran200730
992cf9a870 需求变更 2022-12-27 16:46:36 +08:00
aixianling
4db8bb7001 去除多余的npm配置 2022-12-27 16:05:37 +08:00
yanran200730
bab8ba857e Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-12-27 15:34:27 +08:00
yanran200730
8f89d2355f bug 2022-12-27 15:34:15 +08:00
liuye
5848c05c9c 群发朋友圈 2022-12-27 14:26:52 +08:00
liuye
07fbf08f78 web端宣发 2022-12-27 14:08:17 +08:00
aixianling
4185ce15ae Merge remote-tracking branch 'origin/build' into build 2022-12-27 11:48:48 +08:00
aixianling
2235f5411c 调整播发广播在任意时刻可撤回 2022-12-27 11:48:32 +08:00
shijingjing
f47f9ad336 7改1 2022-12-27 11:04:20 +08:00
yanran200730
dc91f5b104 bug 2022-12-26 15:46:35 +08:00
yanran200730
372d69ea85 bug 2022-12-26 14:49:51 +08:00
yanran200730
b7647d87bc bug 2022-12-26 14:04:57 +08:00
yanran200730
4d3f12785c bug 2022-12-26 11:38:07 +08:00
yanran200730
fde725abb2 bug 2022-12-26 11:18:55 +08:00
yanran200730
0e09eea6cf Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-12-26 11:17:16 +08:00
yanran200730
a6bad0cba2 bug 2022-12-26 11:17:10 +08:00
aixianling
a271861fb1 node-ipc的傻逼作者开源供应链投毒 2022-12-26 11:08:24 +08:00
yanran200730
be0e713f5b Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-12-26 11:02:49 +08:00
yanran200730
3b5d99072a bug 2022-12-26 11:02:42 +08:00
aixianling
ae15375d55 Merge remote-tracking branch 'origin/build' into build 2022-12-26 10:28:05 +08:00
aixianling
d9082683cc 新版小程序打包 2022-12-26 10:27:53 +08:00
yanran200730
4b31a9bbbc Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-12-26 10:22:50 +08:00
yanran200730
741460d55b bug 2022-12-26 10:22:32 +08:00
aixianling
9ca1f09fc5 新版小程序打包 2022-12-23 18:02:29 +08:00
yanran200730
e270cb25ee bug 2022-12-23 16:09:45 +08:00
yanran200730
c8429cac20 bug 2022-12-23 16:08:31 +08:00
yanran200730
7e51b443c2 bug 2022-12-23 16:04:49 +08:00
yanran200730
09f9256f06 bug 2022-12-23 15:35:16 +08:00
yanran200730
7f33c522ea 微盘bug 2022-12-23 14:13:50 +08:00
yanran200730
da8c1bdaf2 微盘权限设置 2022-12-23 14:01:55 +08:00
yanran200730
0f122aad76 bug 2022-12-23 10:28:49 +08:00
aixianling
7c19380b22 火影は 俺の夢だから 2022-12-23 10:10:53 +08:00
liuye
599c04ab62 网格员积分 2022-12-21 10:17:03 +08:00
yanran200730
0bafb6ad26 考核评分 2022-12-20 17:01:19 +08:00
yanran200730
dd764c99ff 评分考核 2022-12-20 09:26:19 +08:00
yanran200730
97fd249134 bug 2022-12-19 14:12:18 +08:00
yanran200730
4a434b4009 工作考核 2022-12-19 08:40:21 +08:00
yanran200730
cc3af06617 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-12-13 16:05:11 +08:00
yanran200730
01c48a1cd6 bug 2022-12-13 16:05:01 +08:00
艾贤凌
f42b272636 变更仓库地址,并启用新的仓库 2022-12-13 15:30:30 +08:00
艾贤凌
bebb4bbf04 人员调整 2022-12-13 09:44:36 +08:00
yanran200730
e8ff014598 工作考核 2022-12-08 13:36:47 +08:00
yanran200730
240b1537da 审批管理 2022-12-08 09:45:28 +08:00
yanran200730
c561494d7b 考核评分 2022-12-08 08:37:21 +08:00
shijingjing
a4ce4af297 积分明细 默认显示七天数据 2022-12-07 16:59:52 +08:00
yanran200730
4d3c2ec149 审批管理 2022-12-06 14:52:14 +08:00
yanran200730
3279bdb348 返乡登记 2022-12-06 14:08:40 +08:00
yanran200730
2d6094153e Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-12-06 11:41:05 +08:00
yanran200730
fed26bc925 模板评分 2022-12-06 11:40:59 +08:00
aixianling
5f715dedb2 Merge remote-tracking branch 'origin/build' into build 2022-12-06 09:26:13 +08:00
aixianling
0028854ea5 调整样式 2022-12-06 09:25:58 +08:00
yanran200730
632ae0c86c Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-12-05 17:46:01 +08:00
yanran200730
fc017fcc5a 考核评分 2022-12-05 17:45:48 +08:00
aixianling
8138515a4c 优化在获取不到主体配置时正常展示 2022-12-05 10:57:02 +08:00
liuye
c2a4261ac4 微心愿导入 2022-12-02 17:41:48 +08:00
aixianling
c17bdd2b2f 调整package.json配置 2022-12-02 16:22:51 +08:00
aixianling
66ec58a21e 调整发布包内容 2022-12-02 08:53:04 +08:00
aixianling
5f320d5a3b Merge remote-tracking branch 'origin/build' into union 2022-12-01 17:06:26 +08:00
aixianling
553b49eb13 应用配置完成 2022-12-01 17:05:48 +08:00
yanran200730
d3c4d69781 bug 2022-12-01 16:47:02 +08:00
aixianling
9b4b16fc57 Merge remote-tracking branch 'origin/build' into union 2022-12-01 15:30:23 +08:00
aixianling
c91826f741 调整配置 2022-12-01 11:25:59 +08:00
yanran200730
69e419d9cf bug 2022-12-01 11:02:31 +08:00
yanran200730
e20a06fa4f bug 2022-12-01 10:18:44 +08:00
yanran200730
a9ad0a47ae 平昌疫情防控 2022-12-01 09:50:43 +08:00
yanran200730
370f0093ff bug 2022-12-01 09:41:28 +08:00
aixianling
35ee47189f Merge remote-tracking branch 'origin/build' into union 2022-12-01 09:38:35 +08:00
yanran200730
0314be9515 bug 2022-12-01 09:36:16 +08:00
aixianling
883ec09a0e ::v-deep=>:deep() 2022-12-01 09:35:20 +08:00
aixianling
d12c7b2c5e Merge remote-tracking branch 'origin/build' into union 2022-12-01 09:15:34 +08:00
aixianling
02a4b50fc0 ui库合并版本完成 2022-12-01 09:13:53 +08:00
yanran200730
5030e55f84 bug 2022-12-01 09:13:44 +08:00
yanran200730
5e27020f77 订单导出 2022-12-01 08:38:19 +08:00
yanran200730
dc13def187 bug 2022-11-30 17:14:06 +08:00
yanran200730
4e9be55405 bug 2022-11-30 17:00:50 +08:00
yanran200730
127c018d83 bug 2022-11-30 16:46:59 +08:00
yanran200730
3835a9a470 bug 2022-11-30 16:21:30 +08:00
yanran200730
28f52973f3 bug 2022-11-30 16:17:59 +08:00
yanran200730
7a936f8a9f bug 2022-11-30 15:20:57 +08:00
yanran200730
6b55a574d8 bug 2022-11-30 15:18:47 +08:00
yanran200730
1182f5b3af 商品管理bug 2022-11-30 14:40:42 +08:00
yanran200730
6858e8eca6 图片剪裁 2022-11-30 14:28:17 +08:00
aixianling
fe3e06e654 Merge remote-tracking branch 'origin/build' into union 2022-11-30 14:03:46 +08:00
yanran200730
78e9e20a5d 31159 2022-11-30 14:03:05 +08:00
yanran200730
394975f4d5 31157 2022-11-30 14:00:37 +08:00
yanran200730
57107ae4ad 31161 2022-11-30 13:59:20 +08:00
yanran200730
b4ae677932 bug 2022-11-30 13:48:31 +08:00
aixianling
4ab84b7766 Merge remote-tracking branch 'origin/build' into union
# Conflicts:
#	.npmrc
2022-11-30 10:22:42 +08:00
yanran200730
7f4607c3ba 平昌 2022-11-30 09:58:49 +08:00
yanran200730
823e382748 积分审核 2022-11-30 09:33:22 +08:00
yanran200730
b1ae10b570 积分审核 2022-11-30 09:13:47 +08:00
yanran200730
82baab5401 积分申请 2022-11-30 09:07:12 +08:00
8bf6c57668 ui库和web端产品库合并版本(还需修复细节) 2022-11-29 18:27:14 +08:00
yanran200830
5e4bd93238 bug 2022-11-29 18:08:57 +08:00
yanran200830
5f4aa6034f 积分 2022-11-29 18:06:04 +08:00
yanran200830
101d67ad48 bug 2022-11-29 15:55:21 +08:00
yanran200830
7d2fded062 bug 2022-11-28 15:33:22 +08:00
yanran200830
a79a165d60 疫情防控 2022-11-28 14:53:15 +08:00
yanran200830
ddd4bfc033 bug 2022-11-25 17:06:13 +08:00
yanran200830
ae1edfe384 积分商城 2022-11-25 16:37:08 +08:00
yanran200830
44ffb4f607 积分商城 + 导出bug 2022-11-25 15:25:28 +08:00
yanran200830
060900ebc7 bug 2022-11-25 13:35:42 +08:00
yanran200830
8673ab0197 平昌党建 2022-11-24 16:39:29 +08:00
yanran200830
bc30cc3e03 卡口排序 2022-11-24 11:16:25 +08:00
yanran200830
0de2f5ecf4 平昌疫情防控 2022-11-23 16:24:18 +08:00
yanran200830
ee933c3460 卡口登记 2022-11-23 16:19:32 +08:00
yanran200830
243def0a2f 积分商品 2022-11-23 14:00:29 +08:00
yanran200830
991310f9b8 积分商城 2022-11-22 17:57:05 +08:00
yanran200830
30b9a137c2 积分商城 2022-11-22 15:18:30 +08:00
yanran200830
2320fcd462 走访慰问 2022-11-22 14:20:01 +08:00
yanran200830
288e652f93 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-11-21 17:07:09 +08:00
yanran200830
9b845a04bf bug 2022-11-21 17:07:01 +08:00
2362f194cf node服务线上设置 2022-11-21 16:39:36 +08:00
yanran200830
2bf45e799f 调查走访 2022-11-21 16:19:20 +08:00
yanran200830
d28e02d004 bug 2022-11-21 16:15:26 +08:00
yanran200830
c7e7ab69ea Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-11-21 15:50:39 +08:00
yanran200830
fe1639c89d 平昌疫情防控 2022-11-21 15:50:17 +08:00
d1219caea7 Merge branch 'dev' into build 2022-11-21 14:58:40 +08:00
bdbff3c9bd 代理设置已完成 2022-11-21 14:50:29 +08:00
yanran200830
68a7c57e0b 工作任务 2022-11-21 11:54:03 +08:00
e968059ecd 适应远程办公设置 2022-11-21 10:59:28 +08:00
aixianling
c5f9f3f3b0 修正页面 2022-11-18 17:20:28 +08:00
aixianling
cc96fa6d65 Merge remote-tracking branch 'origin/build' into build 2022-11-18 16:39:29 +08:00
aixianling
4ac0d0b7d8 优化web库的体积 2022-11-18 16:39:09 +08:00
yanran200730
b4a5343ce6 bug 2022-11-18 14:26:52 +08:00
yanran200730
a07cd5f295 bug 2022-11-18 14:12:51 +08:00
yanran200730
e73c339a99 bug 2022-11-18 13:58:50 +08:00
yanran200730
92b94b2289 bug 2022-11-18 09:35:55 +08:00
yanran200730
d7c406b0e9 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-11-18 08:51:09 +08:00
yanran200730
6f8b6a01a1 bug 2022-11-18 08:50:59 +08:00
liuye
9e4bcaa6a4 评价 2022-11-17 16:43:41 +08:00
liuye
df45607495 导入按钮隐藏 2022-11-17 15:52:19 +08:00
liuye
99fab7d22b css 2022-11-17 11:46:54 +08:00
shijingjing
c3d404dcbf 100字 2022-11-17 10:44:57 +08:00
liuye
9fc84a5ebf 门店照片 2022-11-16 16:59:58 +08:00
liuye
ffc48ff3fa 微心愿 2022-11-16 16:26:53 +08:00
liuye
dea5786a85 微心愿 2022-11-16 14:37:38 +08:00
liuye
851e7a1bbb 微心愿 2022-11-16 14:12:27 +08:00
liuye
6542952597 微心愿 2022-11-16 13:41:18 +08:00
yanran200730
c9cc263d52 需求变更 2022-11-16 09:04:40 +08:00
liuye
2f54bd3054 微心愿-事件分组 2022-11-16 08:37:24 +08:00
liuye
34dd1da3f5 办事评价 2022-11-15 16:22:18 +08:00
liuye
0cd43bc229 realName 2022-11-15 15:26:23 +08:00
liuye
ce5e2a3330 微心愿 2022-11-15 15:13:48 +08:00
shijingjing
5ca7516c5e bug 2022-11-15 09:56:44 +08:00
aixianling
d2961c2760 BUG 31154 2022-11-14 18:16:19 +08:00
shijingjing
262897223b 审核党员 2022-11-14 15:05:48 +08:00
liuye
33034b6db2 搜索字段 2022-11-14 14:48:00 +08:00
aixianling
bb192c6e68 Merge remote-tracking branch 'origin/build' into build 2022-11-14 11:38:58 +08:00
aixianling
654cc3e644 BUG 31147 2022-11-14 11:38:38 +08:00
yanran200730
dc607c2c91 bug 2022-11-14 11:29:54 +08:00
yanran200730
ec06d22c00 bug 2022-11-14 11:28:48 +08:00
shijingjing
74f7f7a340 审核党员 2022-11-14 10:40:35 +08:00
shijingjing
9bf9905bf7 平昌党员管理 2022-11-11 17:20:00 +08:00
aixianling
31d7c5b75d 定制方案提供应用名称更换 2022-11-11 17:13:36 +08:00
liuye
874851f6ee 党员阵地 2022-11-11 11:35:01 +08:00
liuye
eb8862ad1f 商户管理-店铺照片 2022-11-10 17:43:24 +08:00
liuye
ecd5c5c4bd Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-11-10 16:40:58 +08:00
liuye
43565daed4 店铺照片 2022-11-10 16:40:26 +08:00
aixianling
50631a3e36 增加地图是否只显示指定区域的地图 2022-11-10 14:57:08 +08:00
aixianling
b2b85d4f2d 提供3D旋转和覆盖物标签隐藏/显示切换 2022-11-09 18:00:57 +08:00
aixianling
e7d1bd2af0 修改属性及时刷新地图预览 2022-11-09 17:00:49 +08:00
aixianling
35498105ec 大屏提供3D地图 2022-11-09 16:55:13 +08:00
aixianling
13e503cc55 地图组件改造 2022-11-09 16:29:44 +08:00
aixianling
29dba7eab7 Merge remote-tracking branch 'origin/build' into build 2022-11-09 14:41:56 +08:00
aixianling
d39f1d793b 解决大屏拖拽卡顿的问题 2022-11-09 14:40:36 +08:00
shijingjing
120e10d348 bug 2022-11-09 14:29:41 +08:00
aixianling
8e7a8488b3 Merge remote-tracking branch 'origin/build' into build 2022-11-09 11:54:27 +08:00
aixianling
8252fca39f 设计页面驻留调整 2022-11-09 11:54:15 +08:00
liuye
32a02f04bd 地图 2022-11-09 11:49:13 +08:00
shijingjing
b20b9bd30c 定位中心点 2022-11-09 11:45:26 +08:00
aixianling
c48d86ee42 修复图标 2022-11-08 18:33:05 +08:00
shijingjing
33107d6a6e bug 2022-11-08 13:55:06 +08:00
liuye
9ce1c89d90 商户名称 2022-11-08 13:52:08 +08:00
shijingjing
a4311f7acd bug 2022-11-08 10:57:09 +08:00
liuye
48cbeefa39 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-11-08 10:56:02 +08:00
liuye
97520a33ea 文字 2022-11-08 10:55:46 +08:00
shijingjing
265ec48919 字典 2022-11-08 10:51:22 +08:00
liuye
c56e8127d7 商户管理 2022-11-08 10:33:06 +08:00
shijingjing
8031358f60 api 2022-11-08 08:49:19 +08:00
shijingjing
10cea217bf 搜索框样式 2022-11-08 08:47:47 +08:00
aixianling
4466f66584 随机数据工具完成,包含①页面数据填充;②自动生成业务数据 2022-11-07 16:03:02 +08:00
aixianling
2e9cd1c5a9 接入mock准备测试自动化和随机数据生成 2022-11-04 18:12:28 +08:00
liuye
4b560896f6 状态 2022-11-04 16:19:35 +08:00
liuye
6055ddb90f Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-11-04 16:18:26 +08:00
liuye
85ae4d8036 天府星2.0搞定 2022-11-04 16:18:10 +08:00
shijingjing
9383a41500 商户优惠 2022-11-04 15:33:30 +08:00
shijingjing
f016cd338c 商户优惠 2022-11-04 14:05:47 +08:00
yanran200730
3af39ca6a9 bug 2022-11-03 16:30:48 +08:00
shijingjing
5089b071dd 2022-11-03 15:35:56 +08:00
shijingjing
07ce838056 地图 2022-11-03 15:27:56 +08:00
shijingjing
7e00aa30a9 地图 2022-11-03 15:01:20 +08:00
liuye
8fa66aeed5 用户管理 2022-11-03 13:58:11 +08:00
shijingjing
791c3a72fd 位置调整 2022-11-03 12:00:00 +08:00
shijingjing
b09d4980c2 详情 2022-11-03 11:58:41 +08:00
liuye
37d61417ad 字典 2022-11-03 11:45:08 +08:00
liuye
5f691befb0 任务审核 2022-11-03 11:28:30 +08:00
shijingjing
33babd6b2f 进场打卡开始时间不能小于当前时间 2022-11-03 11:20:43 +08:00
liuye
4e5c201cd2 nickName 2022-11-03 10:52:54 +08:00
shijingjing
309b1cdffa 位置调整 2022-11-03 10:40:27 +08:00
liuye
8bd0f97911 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-11-03 10:39:27 +08:00
liuye
c4caac27f7 任务审核 2022-11-03 10:39:04 +08:00
shijingjing
caa7c809ab css 2022-11-03 10:36:23 +08:00
liuye
fc40512a8e 用户姓名 2022-11-03 10:27:05 +08:00
liuye
73980d8dde 字典 2022-11-03 10:23:35 +08:00
shijingjing
5f46e2f3d0 漏了 2022-11-03 10:22:49 +08:00
shijingjing
965a3552c8 字典 2022-11-03 10:17:07 +08:00
shijingjing
d13d61a17d 活动列表 2022-11-03 10:14:09 +08:00
liuye
7f5fcdadb6 天府星配置 2022-11-03 10:11:01 +08:00
aixianling
6021b64cd7 小程序设置单服务 2022-11-02 17:51:48 +08:00
shijingjing
dfbc0ee705 bug 2022-11-02 17:49:49 +08:00
liuye
b71845155e 审核判断 2022-11-02 17:46:21 +08:00
aixianling
ad01c3f8f7 Merge remote-tracking branch 'origin/build' into build 2022-11-02 17:38:08 +08:00
aixianling
37dfaf7a6d 小程序设置单服务 2022-11-02 17:37:56 +08:00
shijingjing
c9ab9f853d 去console 2022-11-02 17:12:58 +08:00
aixianling
062eb8eb5f 允许小程序自由编辑底部导航栏 2022-11-02 16:51:03 +08:00
shijingjing
7fb28c7fd4 时间限制 2022-11-02 16:39:30 +08:00
shijingjing
e79d98d623 活动管理 2022-11-02 16:11:19 +08:00
shijingjing
cb2d64f92a 活动管理 2022-11-02 15:16:14 +08:00
aixianling
48dc4a3d33 允许小程序自由设置底部导航栏个数 2022-11-02 14:42:18 +08:00
liuye
f1534ffc71 用户管理 2022-11-02 10:13:03 +08:00
liuye
7edeb5124e Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-11-01 18:27:20 +08:00
liuye
7b085f916b 用户管理,等级配置,任务审核 2022-11-01 18:27:03 +08:00
shijingjing
7aef39843a 列表 2022-11-01 18:25:16 +08:00
aixianling
4098093a1c Merge remote-tracking branch 'origin/build' into build 2022-11-01 16:20:24 +08:00
aixianling
3f87bffd17 天府星配置 2022-11-01 16:20:13 +08:00
shijingjing
14cd66cf13 活动管理 2022-11-01 16:01:41 +08:00
liuye
5acb635f6b 审核任务 2022-11-01 14:44:44 +08:00
liuye
7d111f90e4 等级配置 2022-11-01 11:52:21 +08:00
liuye
cbc57959e3 天府星 2022-11-01 09:37:29 +08:00
aixianling
c56e28081a 保险产品业务办理二维码 2022-11-01 08:55:45 +08:00
aixianling
5237a6edbb BUG 31153 2022-10-31 16:58:03 +08:00
aixianling
4f5963697b 修复换届提醒人回显问题 2022-10-31 16:44:29 +08:00
aixianling
eae8459ca5 修复换届提醒人回显问题 2022-10-31 16:44:02 +08:00
aixianling
3efb7f43d2 BUG 31152 2022-10-31 16:40:18 +08:00
aixianling
ee8dda577b 在线管理完成 2022-10-31 15:51:58 +08:00
aixianling
87e7fa45ce BUG 31149 2022-10-31 13:59:09 +08:00
aixianling
d6cdc715b5 BUG 31150 2022-10-31 11:23:30 +08:00
aixianling
d04559427e 在线管理界面完成模块 2022-10-31 11:12:41 +08:00
aixianling
d11670366d 增加在线管理模块 2022-10-31 10:08:40 +08:00
aixianling
3e393880b1 BUG 31144 2022-10-28 17:48:37 +08:00
aixianling
9c9146ca8c BUG 31142 2022-10-28 17:13:40 +08:00
aixianling
22174f431d BUG 31141 2022-10-28 17:01:47 +08:00
aixianling
ea5e35d8b4 BUG 31143 2022-10-28 17:00:11 +08:00
aixianling
e0b7c76b9a 调整组织换届的布局 2022-10-28 16:32:02 +08:00
aixianling
3284aaca02 修复详情数据缺失 2022-10-28 15:45:31 +08:00
aixianling
c9db239b23 修复异常 2022-10-28 11:51:24 +08:00
aixianling
8806c1357f BUG 31138 2022-10-28 11:48:54 +08:00
aixianling
dbe55db84d BUG 31139 2022-10-28 11:19:39 +08:00
aixianling
9dbe2fde3f BUG 31140 2022-10-28 11:15:37 +08:00
liuye
e7301e6cb9 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-27 18:08:02 +08:00
liuye
a86f37ecfc bug 2022-10-27 18:07:44 +08:00
aixianling
531ab674f3 Merge remote-tracking branch 'origin/build' into build 2022-10-27 18:07:16 +08:00
aixianling
31cbb5d2bf 组织换届重构完成 2022-10-27 18:07:02 +08:00
liuye
96acf75571 党员报到按钮禁用 2022-10-27 15:52:28 +08:00
liuye
f09c27abb2 日志审核 2022-10-27 14:13:57 +08:00
liuye
ccea7494e6 css 2022-10-27 10:26:54 +08:00
liuye
856b27fd33 树结构选中css 2022-10-27 09:53:15 +08:00
liuye
19b2ec07d9 报到统计 2022-10-27 09:28:14 +08:00
liuye
19fde2b445 报名截止时间 2022-10-27 09:12:19 +08:00
liuye
8c3c5f8876 bug 2022-10-27 09:10:25 +08:00
liuye
042139091a bug 2022-10-27 09:05:42 +08:00
liuye
1a318d4d2a css 2022-10-26 17:49:00 +08:00
liuye
225b2eb035 bug 2022-10-26 17:38:19 +08:00
yanran200730
a477039f7c bug 2022-10-26 14:49:21 +08:00
yanran200730
1b63596355 bug 2022-10-26 14:42:35 +08:00
yanran200730
69f4fe5f36 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-26 14:12:50 +08:00
yanran200730
056730c338 bug 2022-10-26 14:12:42 +08:00
liuye
cb549dd492 最后更新时间 2022-10-26 11:23:39 +08:00
yanran200730
0f8859cf3c bug 2022-10-26 10:35:47 +08:00
yanran200730
1d4e69460a bug 2022-10-26 10:24:29 +08:00
yanran200730
bdf6459fd6 bug 2022-10-26 10:09:28 +08:00
yanran200730
6e5657e446 bug 2022-10-26 09:15:15 +08:00
yanran200730
1f41eb6acc bug 2022-10-26 09:01:27 +08:00
yanran200730
9e80281542 bug 2022-10-26 08:53:06 +08:00
yanran200730
26d1fbf8be bug 2022-10-25 17:20:50 +08:00
yanran200730
75e646832b bug 2022-10-25 16:41:05 +08:00
yanran200730
a12ea7d641 bug 2022-10-25 16:38:56 +08:00
yanran200730
aeb4fcd452 bug 2022-10-25 16:31:16 +08:00
yanran200730
a62913ee6c bug 2022-10-25 16:06:40 +08:00
yanran200730
b1a8a70bdd bug 2022-10-25 15:51:32 +08:00
yanran200730
549ef25edf bug 2022-10-25 15:33:07 +08:00
yanran200730
fd70858523 bug 2022-10-25 15:24:40 +08:00
yanran200730
850dd34da9 bug 2022-10-25 15:24:11 +08:00
yanran200730
ee67948bc0 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-25 14:03:45 +08:00
yanran200730
7561f7af27 2 2022-10-25 14:03:39 +08:00
liuye
6813e9d75b Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-25 09:53:32 +08:00
liuye
ef51d99f66 css 2022-10-25 09:53:14 +08:00
yanran200730
b482e6d691 bug 2022-10-25 09:33:05 +08:00
yanran200730
91cbb0928b Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-24 17:49:57 +08:00
yanran200730
1e9ac9d65a 考核评分 2022-10-24 17:49:20 +08:00
shijingjing
2757dcf19c tips 2022-10-24 16:19:58 +08:00
aixianling
f895172405 Merge remote-tracking branch 'origin/build' into build 2022-10-24 16:13:18 +08:00
aixianling
a9351c58d3 平昌党建先提交挂起 2022-10-24 16:13:01 +08:00
yanran200730
0d5ae1bf0c Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-24 15:58:35 +08:00
yanran200730
84605fd1e7 bug 2022-10-24 15:57:31 +08:00
shijingjing
9209ac9fae 换届选举 2022-10-24 14:47:23 +08:00
aixianling
e78cdbe81d Merge remote-tracking branch 'origin/build' into build 2022-10-24 11:59:01 +08:00
aixianling
f178667db8 追加关于党组织的抽象类 2022-10-24 11:58:47 +08:00
yanran200730
fb0354221d 问卷表单 2022-10-24 11:18:07 +08:00
aixianling
bda2b10c7f 先提交一波整理的代码 2022-10-21 18:10:58 +08:00
liuye
719a45a4c2 css 2022-10-21 17:47:21 +08:00
liuye
69eead6c28 css 2022-10-21 17:44:17 +08:00
liuye
40a2cb39b8 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-21 17:37:59 +08:00
liuye
657dcea2a1 两新组织功能迁移 2022-10-21 17:37:41 +08:00
shijingjing
5d6d98abc2 yData3 2022-10-21 17:31:54 +08:00
shijingjing
0d3d163aec 投票实况 2022-10-21 17:22:38 +08:00
shijingjing
a83b4746f9 结束投票&bug 2022-10-21 15:20:09 +08:00
shijingjing
458b41b5f6 换届选举 2022-10-21 14:43:15 +08:00
yanran200730
3c04ca7c5a Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-21 14:00:24 +08:00
yanran200730
81d437399c 优化 2022-10-21 13:59:38 +08:00
aixianling
cc3fc6a8bd Merge remote-tracking branch 'origin/build' into build 2022-10-21 11:54:16 +08:00
aixianling
bd41857962 先提交一波整理的代码 2022-10-21 11:53:29 +08:00
liuye
ff4f83959a 在职党员社区报到 2022-10-21 11:28:16 +08:00
yanran200730
46d5a004d4 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-21 10:41:22 +08:00
yanran200730
3f49a771c5 表单 2022-10-21 10:41:09 +08:00
liuye
9fddbc5e6a Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-20 17:01:43 +08:00
liuye
d3036b3b89 在职党员社区报到 2022-10-20 17:01:26 +08:00
aixianling
1e59444e0e Merge remote-tracking branch 'origin/build' into build 2022-10-20 16:35:40 +08:00
aixianling
1fa3081b08 随手拍改造完成 2022-10-20 16:35:11 +08:00
yanran200730
ec1860cece 表单 2022-10-20 15:20:57 +08:00
liuye
cc1dc9173d 报到数据 2022-10-20 11:01:16 +08:00
liuye
025eb8e865 在职党员社区报到 报到数据统计 2022-10-20 10:07:37 +08:00
liuye
3e5acf655e 在职党员社区报到 2022-10-19 17:04:26 +08:00
liuye
bf31cb10da 报到组织管理 2022-10-19 14:16:14 +08:00
liuye
ffcf343915 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-19 13:38:32 +08:00
liuye
86e99e0c74 在职党员社区报到 2022-10-19 13:38:16 +08:00
aixianling
f0e20994a2 增加评分等级文本 2022-10-19 11:17:48 +08:00
yanran200730
9739073178 bug 2022-10-18 17:59:12 +08:00
yanran200730
07f27ac44c Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-18 17:54:45 +08:00
yanran200730
281acb69be 调试 2022-10-18 17:54:38 +08:00
shijingjing
6bf1d00455 新增换届 2022-10-18 17:50:46 +08:00
yanran200730
290bb93b49 bug 2022-10-18 17:48:09 +08:00
yanran200730
f7bf8f8f35 bug 2022-10-18 17:28:49 +08:00
yanran200730
d93ae197e3 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-18 17:10:01 +08:00
yanran200730
2dee5e3b37 bug 2022-10-18 17:09:55 +08:00
shijingjing
5d95afe99d 新增换届 2022-10-18 16:55:17 +08:00
shijingjing
9bb702549e 新增换届 2022-10-18 16:48:27 +08:00
yanran200730
5360102236 bug 2022-10-18 16:40:20 +08:00
yanran200730
e6cebd42b3 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-18 16:06:33 +08:00
yanran200730
6f41acf447 bug 2022-10-18 16:06:27 +08:00
shijingjing
c7c8f1d72e 组织换届 2022-10-18 15:56:46 +08:00
yanran200730
8f8e8afa83 2 2022-10-18 15:56:02 +08:00
yanran200730
6fae11838c bug 2022-10-18 15:14:55 +08:00
yanran200730
6577e406a4 bug 2022-10-18 15:13:39 +08:00
shijingjing
53aeb4c43a 党员 2022-10-17 18:03:38 +08:00
yanran200730
8c85768a4d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-17 18:03:10 +08:00
yanran200730
f7de5fc391 bug 2022-10-17 18:03:03 +08:00
shijingjing
c0d80e528e 编辑 2022-10-17 17:35:03 +08:00
yanran200730
361012c80e bug 2022-10-17 17:22:12 +08:00
yanran200730
8832a8365c Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-17 17:08:58 +08:00
yanran200730
fa2e1968bb 31106 2022-10-17 17:05:03 +08:00
shijingjing
91ac09a2e3 列表 2022-10-17 17:00:13 +08:00
shijingjing
f1b35354dc 列表 2022-10-17 16:56:42 +08:00
liuye
34694492b9 发展党员 2022-10-17 16:51:21 +08:00
liuye
b1b35b05cf 发展党员 2022-10-17 16:49:47 +08:00
liuye
1c8d53cec5 发展党员 2022-10-17 16:43:05 +08:00
liuye
8efb289cc4 发展党员 2022-10-17 16:40:00 +08:00
yanran200730
b2ddce303f 31103 2022-10-17 16:09:07 +08:00
yanran200730
ade9638c13 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-17 16:06:02 +08:00
yanran200730
c762999f67 31102 2022-10-17 16:05:55 +08:00
shijingjing
026fd37a22 详情 2022-10-17 15:59:19 +08:00
shijingjing
7691c392e4 新增成功 2022-10-17 14:18:32 +08:00
shijingjing
32f8cbf995 校验 2022-10-17 11:38:11 +08:00
shijingjing
2894dac5d8 换届 2022-10-17 11:09:47 +08:00
shijingjing
99f086a75a 新增 2022-10-14 17:32:19 +08:00
yanran200730
6eac863f34 31101 2022-10-14 16:37:04 +08:00
yanran200730
e917c16c2c bug 2022-10-14 16:32:14 +08:00
yanran200730
bb3015f626 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-14 16:13:56 +08:00
yanran200730
a9e63cca54 导出 2022-10-14 16:13:47 +08:00
shijingjing
f753f534a4 换届 2022-10-14 15:27:43 +08:00
shijingjing
046715d4b6 换届 2022-10-14 14:47:48 +08:00
aixianling
cfb0177a45 清理idCardNoUtils,改使用ID对象 2022-10-14 13:58:35 +08:00
aixianling
12b3a48baa Merge remote-tracking branch 'origin/build' into build 2022-10-14 11:54:20 +08:00
aixianling
e710fc4604 清理$calcAge 2022-10-14 11:53:24 +08:00
shijingjing
edc371ed30 当前届次 2022-10-14 11:36:06 +08:00
yanran200730
54f1356756 bug 2022-10-14 10:05:43 +08:00
yanran200730
e02fcd6a08 bug 2022-10-14 09:25:12 +08:00
yanran200730
2ac19ef81f Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-14 08:38:57 +08:00
yanran200730
10d9d5ee65 bug 2022-10-14 08:38:50 +08:00
liuye
c8fd7fa5f2 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-13 17:58:28 +08:00
liuye
f9f2812344 发展党员 2022-10-13 17:58:16 +08:00
shijingjing
f9411b7278 组织换届 2022-10-13 17:57:48 +08:00
yanran200730
2f01516cff Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-13 17:10:42 +08:00
shijingjing
1940a24a05 组织换届 2022-10-13 17:10:36 +08:00
yanran200730
0a9ce48880 31090 2022-10-13 17:10:35 +08:00
yanran200730
3bec4fc26d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-13 16:39:01 +08:00
yanran200730
d9499cae4a 31096 2022-10-13 16:38:53 +08:00
liuye
a2207a781f init 2022-10-13 14:49:19 +08:00
liuye
c3d761d05f 删除 2022-10-13 14:48:27 +08:00
shijingjing
4fd7e4ee2a 换届选举 2022-10-13 14:42:24 +08:00
yanran200730
9f9eb7d23a bug 2022-10-13 14:38:04 +08:00
yanran200730
ab3604d613 bug 2022-10-13 14:05:30 +08:00
liuye
f210317222 发展党员 2022-10-13 13:52:35 +08:00
yanran200730
5a56b3be3f 31095 2022-10-13 11:49:04 +08:00
yanran200730
7c1aedd461 31094 2022-10-13 10:45:41 +08:00
yanran200730
2a7dec2811 31093 2022-10-13 09:04:00 +08:00
yanran200730
0530e553eb 数据比对 2022-10-13 08:58:54 +08:00
yanran200730
2b33f221d6 bug 2022-10-13 08:37:15 +08:00
yanran200730
6c1167a98a 数据比对 2022-10-13 08:35:30 +08:00
yanran200730
464a12ad1e 数据比对 2022-10-13 08:21:49 +08:00
yanran200730
f431ddb5f8 数据比对 2022-10-13 08:17:08 +08:00
yanran200730
1295278175 bug 2022-10-12 18:08:51 +08:00
yanran200730
fe87373cfb 31092 2022-10-12 15:50:26 +08:00
yanran200730
30078c1755 2 2022-10-12 15:47:21 +08:00
yanran200730
c11b74d689 31088 2022-10-12 15:37:11 +08:00
yanran200730
ac5400fb6c 31086 2022-10-12 15:16:55 +08:00
yanran200730
919612648a 31085 2022-10-12 15:15:38 +08:00
yanran200730
c78b43c01c 31084 2022-10-12 15:14:35 +08:00
yanran200730
bfd0b7767b 31083 2022-10-12 15:11:51 +08:00
yanran200730
0067f9ecbc Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-12 10:03:26 +08:00
yanran200730
3ede04c0c3 bug 2022-10-12 10:03:20 +08:00
shijingjing
36f979a67a 资源管理编辑 删除 2022-10-12 09:22:59 +08:00
yanran200730
2f42c353e4 bug 2022-10-12 09:20:48 +08:00
yanran200730
28d958ecc9 健康上报 2022-10-11 17:05:52 +08:00
yanran200730
880a144cc1 健康上报 2022-10-11 15:38:28 +08:00
yanran200730
7857bfab40 bug 2022-10-11 14:31:03 +08:00
yanran200730
0303017f2b 返乡报备 2022-10-11 13:57:43 +08:00
yanran200730
ab4692b655 bug 2022-10-11 10:53:11 +08:00
yanran200730
b26eb2e1dc bug 2022-10-11 09:55:59 +08:00
yanran200730
88e9c450b5 bug 2022-10-11 09:30:43 +08:00
yanran200730
08c8fe0366 bug 2022-10-11 09:22:37 +08:00
yanran200730
0284997d6a Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-10 18:04:40 +08:00
yanran200730
b03ba3b988 bug 2022-10-10 18:04:33 +08:00
liuye
298bae5301 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-10 17:59:10 +08:00
liuye
39a4916939 areaId 2022-10-10 17:58:41 +08:00
yanran200730
77bd0c256f Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-10 17:52:34 +08:00
yanran200730
3ba14427a5 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-10 17:52:14 +08:00
liuye
ac869994a7 地图 2022-10-10 17:52:05 +08:00
yanran200730
3f30a1cbd1 bug 2022-10-10 17:50:21 +08:00
shijingjing
2421df4995 地区展示 2022-10-10 17:44:14 +08:00
liuye
71261b4a82 地图 2022-10-10 17:19:16 +08:00
yanran200730
9df5e447eb Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-10 17:10:30 +08:00
yanran200730
9b25a8fa0e bug 2022-10-10 17:10:21 +08:00
shijingjing
e898b55fa3 限制地区 2022-10-10 17:07:03 +08:00
shijingjing
f740372e71 地图key值 2022-10-10 16:44:17 +08:00
yanran200730
8f73ddb063 31081 2022-10-10 11:07:27 +08:00
yanran200730
90fed1bae2 31079 2022-10-10 10:27:07 +08:00
yanran200730
4d5b7f3664 31078 2022-10-10 10:18:48 +08:00
yanran200730
cb7493c6c9 31077 2022-10-10 10:18:10 +08:00
yanran200730
9c69aab95c Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-09 11:42:12 +08:00
yanran200730
c228aaa7af bug 2022-10-09 11:42:03 +08:00
liuye
a8d4dede1d 资源地图 2022-10-09 11:05:50 +08:00
liuye
b07607a932 ct 2022-10-09 10:22:44 +08:00
liuye
962ea61fa5 资源地图 2022-10-09 10:21:00 +08:00
yanran200730
57e8a411c2 bug 2022-10-09 10:19:36 +08:00
yanran200730
2a48e816f4 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-09 09:11:24 +08:00
yanran200730
97611a8dc8 大屏 2022-10-09 09:11:18 +08:00
shijingjing
ce113372e8 路由 2022-10-08 17:41:45 +08:00
shijingjing
f204f3fff3 地区切换 2022-10-08 17:27:01 +08:00
shijingjing
aa9a3a92f1 校验 2022-10-08 17:15:54 +08:00
liuye
edddb02dfe Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-08 16:58:38 +08:00
liuye
407c1a8db0 资源地图 2022-10-08 16:58:09 +08:00
shijingjing
7d265446c4 校验规则 2022-10-08 16:48:22 +08:00
shijingjing
575606766f 新增资源管理 2022-10-08 15:31:25 +08:00
yanran200730
4a0f4535d0 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-10-08 14:05:21 +08:00
yanran200730
06e75084bb 资源地图 2022-10-08 14:05:13 +08:00
shijingjing
89a22c82c9 资源分类 2022-10-08 11:33:13 +08:00
shijingjing
1bbb14bf5d 转数组 2022-10-08 10:56:24 +08:00
shijingjing
b082164ff6 资源分类 2022-10-08 10:16:49 +08:00
liuye
2a0b67be09 资源场所 2022-10-08 09:28:09 +08:00
shijingjing
e437812fd5 资源分类 2022-10-08 08:52:46 +08:00
shijingjing
fb0291ff99 资源分类 2022-09-30 18:01:15 +08:00
shijingjing
fd90a48b9c 资源管理列表 2022-09-30 16:14:56 +08:00
yanran200730
ba1fdf332b Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-09-30 16:03:07 +08:00
yanran200730
c1ca2fa181 监护大屏 2022-09-30 16:02:59 +08:00
shijingjing
8549f68fbd 社会资源 2022-09-30 13:47:38 +08:00
shijingjing
b597eb5916 社会资源 2022-09-30 11:44:35 +08:00
yanran200730
646902cc53 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-09-30 11:34:02 +08:00
yanran200730
48535c313e 监控大屏 2022-09-30 11:33:54 +08:00
shijingjing
368a490502 彭刘杨 2022-09-30 11:26:07 +08:00
yanran200730
8f5cf47c75 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-09-30 10:59:35 +08:00
yanran200730
3a4dabae4e 房屋大屏 2022-09-30 10:59:29 +08:00
shijingjing
e608ab6204 彭刘杨 2022-09-30 10:45:57 +08:00
shijingjing
45b4c5ad24 删除dev分支的彭刘杨 2022-09-30 10:40:01 +08:00
shijingjing
a2d506a56d 彭刘杨 2022-09-30 10:31:04 +08:00
yanran200730
d97f650fb5 bug 2022-09-30 10:21:48 +08:00
yanran200730
4c6142d0b6 bug 2022-09-30 10:03:17 +08:00
yanran200730
5ed1532762 bug 2022-09-30 10:02:34 +08:00
yanran200730
368ec56181 bug 2022-09-30 09:46:10 +08:00
yanran200730
65455afb58 bug 2022-09-30 09:13:14 +08:00
yanran200730
21d32a888d bug 2022-09-30 08:57:56 +08:00
yanran200730
8da835bd0b bug 2022-09-30 08:40:29 +08:00
yanran200730
843a5b83c5 彭刘杨大屏 2022-09-29 17:53:38 +08:00
yanran200730
a8347e622d 房屋大屏 2022-09-29 15:20:52 +08:00
yanran200730
ef3c99e086 优化图表 2022-09-29 10:27:35 +08:00
yanran200730
0acae3b222 bug 2022-09-29 09:40:47 +08:00
yanran200730
73442de46c bug 2022-09-29 09:28:48 +08:00
yanran200730
8a73e9cb2c bug 2022-09-28 16:25:40 +08:00
yanran200730
b13b8a0ded bug 2022-09-28 14:52:23 +08:00
yanran200730
9c05b0d79c bug 2022-09-28 13:58:59 +08:00
yanran200730
5dfa42880e bug 2022-09-28 09:52:40 +08:00
yanran200730
9af93d42f7 bug 2022-09-28 09:21:09 +08:00
yanran200730
58def567cd bug 2022-09-28 09:18:02 +08:00
yanran200730
b944c0f25f bug 2022-09-27 16:54:57 +08:00
yanran200730
5e2fcdea28 导出 2022-09-27 15:54:02 +08:00
yanran200730
adee39f37f bug 2022-09-27 15:20:45 +08:00
yanran200730
d00b876181 bug 2022-09-27 14:56:32 +08:00
yanran200730
039d65c94d 31059 2022-09-27 14:54:16 +08:00
yanran200730
39849cea5a 31054 2022-09-27 14:50:04 +08:00
yanran200730
2e13f43057 31055 2022-09-27 14:43:34 +08:00
yanran200730
aff79a6d5f 31057 2022-09-27 14:43:01 +08:00
yanran200730
f90c7c2c6f 31058 2022-09-27 14:41:58 +08:00
yanran200730
7c49db0a33 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-09-27 14:36:53 +08:00
yanran200730
5992e78365 bug 2022-09-27 14:36:44 +08:00
aixianling
71e7bb68ab 监护地图路由更新 2022-09-27 11:07:48 +08:00
aixianling
ff684ffe83 Merge remote-tracking branch 'origin/build' into build 2022-09-27 10:35:40 +08:00
aixianling
854fb197bb 监护地图路由更新 2022-09-27 10:35:21 +08:00
yanran200730
6716deb004 卡口登记 2022-09-26 17:11:00 +08:00
yanran200730
b631420500 卡口登记 2022-09-26 17:08:06 +08:00
yanran200730
43527038aa 社区管理 2022-09-26 15:21:17 +08:00
yanran200730
419469b52d Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-09-26 15:19:09 +08:00
yanran200730
b206dfa77f 社区管理 2022-09-26 15:19:03 +08:00
aixianling
7ef87ef44f 修复因字典节流加载导致的异步正常结束异常 2022-09-26 09:41:56 +08:00
aixianling
45432afb6f Merge remote-tracking branch 'origin/build' into build
# Conflicts:
#	project/pingchang/apps/AppRiskArea/components/List.vue
2022-09-23 18:21:47 +08:00
aixianling
4daab388ab 同步国家卫健委风险地区数据 2022-09-23 18:20:29 +08:00
yanran200730
a50e13a8df 大屏 2022-09-23 11:12:32 +08:00
yanran200730
dd662e8d22 大屏 2022-09-23 09:47:53 +08:00
yanran200730
ece325a45e bug 2022-09-23 09:43:39 +08:00
yanran200730
f7de989f59 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-09-23 09:18:49 +08:00
yanran200730
3be7075a08 测试 2022-09-23 09:18:44 +08:00
aixianling
2ca0518c98 Merge remote-tracking branch 'origin/build' into build 2022-09-22 14:40:25 +08:00
aixianling
60a8791e92 BUG 31039 2022-09-22 14:40:07 +08:00
yanran200730
1f9295f1a7 风险区域配置 2022-09-22 14:28:26 +08:00
yanran200730
769d69b8be bug 2022-09-22 11:22:38 +08:00
yanran200730
6e12c5d4ce Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-09-22 11:19:00 +08:00
yanran200730
fcda3b5e8e bug 2022-09-22 11:18:48 +08:00
aixianling
d4692f883d Merge remote-tracking branch 'origin/build' into build 2022-09-22 10:43:24 +08:00
aixianling
a08f2525ee BUG 31039 2022-09-22 10:43:07 +08:00
yanran200730
5ad966a025 大屏 2022-09-22 10:34:19 +08:00
yanran200730
b2f9169f9f Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-09-22 10:31:28 +08:00
yanran200730
54d4ebcd4d 大屏 2022-09-22 10:30:35 +08:00
aixianling
c661413585 统一字眼 2022-09-21 17:46:33 +08:00
aixianling
87739cf75e 修复跳转异常,和文字说明 2022-09-21 17:22:49 +08:00
aixianling
3ef31d3631 修复跳转异常 2022-09-21 17:02:01 +08:00
aixianling
398e0890ba 修复跳转异常 2022-09-21 16:43:11 +08:00
aixianling
b70bff5807 BUG 31036 2022-09-21 16:11:15 +08:00
aixianling
15f5d59794 BUG 31035 2022-09-21 15:54:58 +08:00
aixianling
25edd8b7df 小程序配置中追加半屏小程序兼容2.23版本一下设置 2022-09-21 11:46:54 +08:00
aixianling
34ca42cfa3 BUG 31034 2022-09-21 11:29:43 +08:00
aixianling
efd31eaaa5 Merge remote-tracking branch 'origin/build' into build 2022-09-20 15:28:17 +08:00
aixianling
de4eccb8c8 同步queryType和金融机构类型保持一致 2022-09-20 15:27:58 +08:00
yanran200730
7368889731 bug 2022-09-20 14:57:01 +08:00
yanran200730
1c38847eff 优化选择器 2022-09-20 10:28:16 +08:00
yanran200730
e68efdd6fe bug 2022-09-19 17:55:25 +08:00
yanran200730
e0a0cea985 bug 2022-09-19 16:38:02 +08:00
yanran200730
6d5eeb2174 bug 2022-09-19 11:40:01 +08:00
yanran200730
4700c71a44 Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-09-19 11:38:34 +08:00
yanran200730
552c91eb23 22 2022-09-19 11:38:26 +08:00
aixianling
cf582b359a Merge remote-tracking branch 'origin/build' into build 2022-09-19 11:31:23 +08:00
aixianling
1ec38cb03d 保险产品需求调整完毕 2022-09-19 11:31:01 +08:00
yanran200730
05129aa200 黔西南大屏 2022-09-19 11:06:52 +08:00
yanran200730
57abf72ecd bug 2022-09-16 09:16:30 +08:00
yanran200730
b0051271da Merge branch 'build' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into build 2022-09-15 18:05:38 +08:00
yanran200730
f46198b63f 22 2022-09-15 18:05:30 +08:00
aixianling
d5246f6863 Merge remote-tracking branch 'origin/build' into build 2022-09-15 16:53:38 +08:00
aixianling
eff73b831b 协同宣发临时版本(beta) 2022-09-15 16:47:29 +08:00
yanran200730
a804b82b06 网格区块 2022-09-15 16:18:04 +08:00
yanran200730
e16c1d6c85 bug 2022-09-15 15:26:52 +08:00
yanran200730
0fc014b17b 1 2022-09-15 15:00:09 +08:00
yanran200730
05aad4b68e bug 2022-09-15 14:21:44 +08:00
yanran200730
653e441f55 bug 2022-09-15 13:48:25 +08:00
yanran200730
cf80182740 群发居民群需求变更 2022-09-15 13:44:27 +08:00
yanran200730
0c2ac4808a 协同宣发 2022-09-14 18:04:56 +08:00
yanran200730
ebce8b7025 协同宣发 2022-09-13 18:19:57 +08:00
yanran200730
fc1e0812f5 协同宣发 2022-09-13 15:57:16 +08:00
yanran200730
81f3a4b35d 2 2022-09-09 17:58:34 +08:00
yanran200730
3f1084a542 bug 2022-09-09 10:16:24 +08:00
yanran200730
6f129181f3 bug 2022-09-09 10:07:01 +08:00
aixianling
f6ab2c9306 Merge remote-tracking branch 'origin/dev' into build 2022-09-09 09:40:08 +08:00
yanran200730
aed4f4bdc7 大屏 2022-09-09 09:10:26 +08:00
yanran200730
7a30018e52 大屏 2022-09-09 09:02:48 +08:00
yanran200730
95eb08e8c1 兴义大屏 2022-09-08 18:09:30 +08:00
yanran200730
52d7c20639 兴义大屏 2022-09-08 17:39:57 +08:00
aixianling
9ea39b1386 Merge remote-tracking branch 'origin/dev' into build 2022-09-08 16:17:08 +08:00
yanran200730
3f713a8d15 兴义大屏 2022-09-08 16:06:01 +08:00
aixianling
6e98d28b88 Merge remote-tracking branch 'origin/dev' into build 2022-09-08 13:23:39 +08:00
yanran200730
36f4283374 郫都大屏 2022-09-08 13:18:33 +08:00
yanran200730
a9ae034fcd 兴义大屏 2022-09-08 10:35:13 +08:00
yanran200730
ec379e6b72 兴义大屏 2022-09-08 09:03:41 +08:00
aixianling
cae010c2fc 清除不用的资源 2022-09-07 17:42:46 +08:00
aixianling
1b9c231a08 动效优化 2022-09-07 17:38:57 +08:00
aixianling
8883aaceb1 Merge remote-tracking branch 'origin/dev' into build 2022-09-07 16:01:57 +08:00
yanran200730
85caf086b7 兴义大屏 2022-09-07 14:54:41 +08:00
yanran200730
db431af916 大屏 2022-09-07 14:33:22 +08:00
yanran200730
022a15cc9d 大屏 2022-09-07 14:04:28 +08:00
yanran200730
6dfb287c9f 兴义大屏 2022-09-07 10:09:29 +08:00
aixianling
afeb2ffbec 修复预览界面 2022-09-06 15:19:28 +08:00
aixianling
1d6f9d4928 Merge remote-tracking branch 'origin/dev' into build 2022-09-06 11:47:02 +08:00
aixianling
7b11e728ff BUG 30994 2022-09-05 17:40:26 +08:00
yanran200730
5ed578faa0 30948 2022-09-05 17:35:23 +08:00
aixianling
2e2c38848a BUG 30994 2022-09-05 17:28:27 +08:00
yanran200730
faffbaeafe 协同宣发 2022-09-05 14:31:44 +08:00
aixianling
617ef4b9c9 企业微信设置调整,系统信息科在修改调整 2022-09-05 11:11:10 +08:00
aixianling
efc537a45b 慧治理设置完毕 2022-09-05 11:08:44 +08:00
yanran200730
9cf8ffc5c1 协同宣发 2022-09-05 10:54:11 +08:00
aixianling
1ae777d0d5 兼容登录页做调整 2022-09-05 10:00:38 +08:00
aixianling
dd33829b39 Merge remote-tracking branch 'origin/dev' into build 2022-09-05 09:18:06 +08:00
yanran200730
e2acdacf1f Merge branch 'dev' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into dev 2022-09-02 16:11:50 +08:00
yanran200730
db077cb9d5 协同宣发 2022-09-02 16:11:29 +08:00
aixianling
8edddb8cda 增加手动同步库信息脚本 2022-09-02 15:36:44 +08:00
aixianling
f68fef4012 Merge remote-tracking branch 'origin/dev' into build 2022-09-02 15:34:39 +08:00
aixianling
5a287a627a 增加手动同步库信息脚本 2022-09-02 15:25:46 +08:00
liuye
0aa51096a3 企微配置 2022-09-02 14:16:20 +08:00
aixianling
37c6f38354 Merge remote-tracking branch 'origin/dev' into build 2022-09-02 09:20:59 +08:00
liuye
a863c70ea4 企微应用配置 2022-09-01 17:46:23 +08:00
aixianling
68b8c4f43d Merge remote-tracking branch 'origin/dev' into build 2022-09-01 16:06:13 +08:00
liuye
9f8f035b83 企微配置 2022-09-01 15:58:10 +08:00
liuye
71bebd8048 企微应用配置 2022-09-01 15:31:58 +08:00
yanran200730
4a75301322 协同宣发 2022-09-01 15:08:54 +08:00
yanran200730
ec24628e02 协同宣发 2022-09-01 13:47:14 +08:00
yanran200730
7f51812208 Merge branch 'dev' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into dev 2022-09-01 13:45:49 +08:00
yanran200730
9f5b6e10a3 协同宣发 2022-09-01 13:45:42 +08:00
shijingjing
7e918cbf4a 取绝对值 2022-09-01 11:10:02 +08:00
aixianling
422b809a08 BUG 31009 2022-09-01 10:30:07 +08:00
aixianling
d34a69d143 BUG 31009 2022-09-01 10:00:53 +08:00
shijingjing
3383deabd2 31011 2022-09-01 09:30:23 +08:00
aixianling
e8b49517e2 Merge remote-tracking branch 'origin/dev' into build 2022-09-01 09:02:27 +08:00
shijingjing
6c99807d85 size 2022-08-31 17:43:01 +08:00
aixianling
b1d31708da 修复接口代理问题 2022-08-31 17:29:17 +08:00
aixianling
6c44cf5a65 Merge remote-tracking branch 'origin/dev' into build
# Conflicts:
#	packages/bigscreen/designer/components/Add.vue
2022-08-31 16:32:37 +08:00
aixianling
06f02e3435 更换新组件 2022-08-31 16:15:25 +08:00
yanran200730
564a4e57d8 31001 2022-08-31 15:16:37 +08:00
yanran200730
dd8e0b8f5f 31006 2022-08-31 14:36:52 +08:00
yanran200730
f50166c297 协同宣发 2022-08-31 14:25:01 +08:00
yanran200730
aea4f4e5c0 协同宣发 2022-08-31 14:19:04 +08:00
aixianling
28968f7cbb 统一文件名 2022-08-31 11:49:32 +08:00
aixianling
bc5408bfbc Merge remote-tracking branch 'origin/dev' into build 2022-08-31 10:58:04 +08:00
yanran200730
8a91728452 协同宣发 2022-08-31 10:29:57 +08:00
aixianling
072c780824 Merge remote-tracking branch 'origin/dev' into build 2022-08-30 18:01:05 +08:00
aixianling
c0cbb61731 定制大屏调整位置 2022-08-30 17:49:35 +08:00
aixianling
73355a8f07 定制大屏调整位置 2022-08-30 17:29:29 +08:00
aixianling
eef6c52ac5 定制大屏调整位置 2022-08-30 17:20:15 +08:00
yanran200730
70ddb69006 群发居民群 2022-08-30 17:05:02 +08:00
aixianling
33a5d975ce Merge remote-tracking branch 'origin/dev' into build 2022-08-30 16:22:31 +08:00
yanran200730
72eae2fb4b 协同宣发 2022-08-30 16:02:41 +08:00
aixianling
ee91eeb7c5 Merge branch 'dev' into build 2022-08-30 11:00:57 +08:00
yanran200730
e92613391f 郫都优化 2022-08-30 10:48:59 +08:00
yanran200730
bef847e128 bug 2022-08-30 10:37:15 +08:00
aixianling
c85c6f85fa 控制样式,当前节点,当前节点model 2022-08-29 17:20:12 +08:00
yanran200730
8f17c453e1 秀山 2022-08-29 17:17:44 +08:00
aixianling
7b6640a42e 增加权限码控制 2022-08-29 17:07:29 +08:00
aixianling
4b2aee6d04 [图片] 2022-08-29 15:45:31 +08:00
aixianling
49426284fc BUG 30987 2022-08-29 14:50:59 +08:00
aixianling
2c7a536d28 BUG 30997 2022-08-29 14:44:52 +08:00
aixianling
6b9dd3d898 BUG 30993 2022-08-29 14:30:00 +08:00
aixianling
da7691db33 BUG 30991 2022-08-29 14:21:55 +08:00
aixianling
e4aa26de64 BUG 30981 2022-08-29 14:14:36 +08:00
aixianling
d6b806bd02 BUG 30977 2022-08-29 14:12:26 +08:00
aixianling
61afcd2d98 更换cdn源 2022-08-29 14:07:10 +08:00
aixianling
183885134d 更换cdn源 2022-08-29 13:43:56 +08:00
aixianling
981c6cf3f8 增加全部审批页签 2022-08-29 11:43:20 +08:00
aixianling
6a847bd991 BUG 30988 2022-08-29 11:37:17 +08:00
aixianling
99ee6f83f9 BUG 30987 2022-08-29 11:35:16 +08:00
aixianling
9454c5a1de BUG 30986 2022-08-29 11:32:50 +08:00
aixianling
4130d0ceb4 BUG 30984 2022-08-29 11:31:30 +08:00
aixianling
be394a53c2 BUG 30983 2022-08-29 11:26:56 +08:00
aixianling
d037a7d938 BUG 30982 2022-08-29 11:21:55 +08:00
aixianling
bbdd34f0ec BUG 30981 2022-08-29 11:16:25 +08:00
aixianling
c09ead4515 BUG 30979 2022-08-29 11:05:29 +08:00
aixianling
90293be2fa BUG 30978 2022-08-29 10:58:48 +08:00
aixianling
3d58a98b38 BUG 30977 2022-08-29 10:55:16 +08:00
aixianling
fc395682d8 添加api 2022-08-29 10:02:59 +08:00
aixianling
6ee02bb486 增加favicon埋点 2022-08-29 09:51:46 +08:00
aixianling
43a4d05d60 修复异常 2022-08-29 09:16:50 +08:00
aixianling
2760adc7b9 umd引入大屏组件 2022-08-29 09:12:16 +08:00
aixianling
de8d58766c Merge branch 'dev' into build 2022-08-29 09:05:20 +08:00
aixianling
9a56c2ee8a Merge remote-tracking branch 'origin/build' into build 2022-08-29 08:59:10 +08:00
aixianling
945d538bad 大屏预览提升为组件 2022-08-29 08:58:52 +08:00
艾贤凌
4a5e04c2be Update AppAccountXiushan.vue 2022-08-26 11:59:54 +00:00
aixianling
7a0d77770d 调整审批显示 2022-08-26 18:49:20 +08:00
aixianling
623fc73640 接口因为代理做整合 2022-08-26 18:37:40 +08:00
aixianling
ccf21dacb5 手机APP导航栏埋点 2022-08-26 18:22:22 +08:00
aixianling
1744f27b75 手机APP导航栏埋点 2022-08-26 18:06:40 +08:00
aixianling
e3d8559ff6 全局增加关于登录信息的扩展埋点 2022-08-26 17:59:20 +08:00
aixianling
7137263693 全局增加关于登录信息的扩展埋点 2022-08-26 17:44:30 +08:00
aixianling
05baf15363 全局增加关于登录信息的扩展埋点 2022-08-26 17:39:18 +08:00
aixianling
2b50fdf5a4 全局增加关于登录信息的扩展埋点 2022-08-26 17:20:08 +08:00
aixianling
b70e270475 工作台样式优化 2022-08-26 16:57:08 +08:00
aixianling
80704876f0 网格员积分应用名称可随菜单变化 2022-08-26 15:13:18 +08:00
shijingjing
57628dc429 网格员积分优化 2022-08-26 15:09:02 +08:00
aixianling
ded1bbfcb9 秀山需求变更完成 2022-08-26 14:58:53 +08:00
aixianling
ce1fd46b7e 修正接口请求 2022-08-26 14:24:34 +08:00
aixianling
44ca30cbf3 修正接口请求 2022-08-26 14:17:03 +08:00
aixianling
3e69a37fa6 修正接口请求 2022-08-26 14:16:32 +08:00
aixianling
eaa57ebec8 秀山工作台入库 2022-08-26 14:10:10 +08:00
aixianling
dc4a9761e9 修复引优化导致的产品库目录路径异常的问题 2022-08-26 14:03:04 +08:00
aixianling
fc695b80f7 转移副标题的json字符串 2022-08-26 10:12:37 +08:00
aixianling
1938c91e05 允许增加logo文字 2022-08-26 09:54:23 +08:00
aixianling
d0ccae9c1a web端主库应用不展示核心库应用 2022-08-25 17:56:09 +08:00
aixianling
5bc00ec520 Merge branch 'dev' into build
# Conflicts:
#	project/oms/apps/develop/AppDeployCustom/add.vue
2022-08-25 17:34:56 +08:00
aixianling
20b04d1789 同步整合文件名 2022-08-25 17:30:35 +08:00
aixianling
5a9f0ae9d1 针对主库应用扩展分页数量 2022-08-25 16:58:57 +08:00
aixianling
a75d96561c 系统设置数据结构适应,定制方案增加web端系统信息设置 2022-08-25 11:21:58 +08:00
aixianling
e86f473fc0 调整隐藏工具栏 2022-08-25 09:54:56 +08:00
yanran200730
53aa333967 bug 2022-08-25 09:48:47 +08:00
yanran200730
d2f611623b bug 2022-08-25 09:39:56 +08:00
yanran200730
8fa7e9c083 优化 2022-08-25 09:34:43 +08:00
yanran200730
ff973bf62f bug 2022-08-25 09:19:16 +08:00
aixianling
d3c8292035 头部导航增加埋点设置 2022-08-24 18:18:17 +08:00
yanran200730
c7718b024b Merge branch 'dev' of http://git.sinoecare.com/sinoecare/digital_village_v2/dvcp_v2_webapp into dev 2022-08-24 17:58:14 +08:00
yanran200730
7e52c337c3 优化 2022-08-24 17:56:10 +08:00
aixianling
e5591db83a 头部导航增加埋点设置 2022-08-24 17:50:15 +08:00
shijingjing
3c37b1b4ad css 2022-08-24 17:29:47 +08:00
shijingjing
0538342491 人员类别 2022-08-24 16:53:32 +08:00
aixianling
af298ca17e Merge branch 'dev' into build 2022-08-24 16:35:06 +08:00
yanran200730
883aca74e1 优化网格选择组件 2022-08-24 16:07:00 +08:00
aixianling
c112e7cde8 允许一级菜单为应用且可设置图标 2022-08-24 15:13:23 +08:00
yanran200730
64d2edd2cd bug 2022-08-24 15:11:43 +08:00
aixianling
100d75fec0 百度流量开关 2022-08-24 14:44:26 +08:00
aixianling
d8fcd77b4f 工作台入库埋点设置 2022-08-24 14:43:43 +08:00
aixianling
95d22d59f6 工作台入库埋点设置 2022-08-24 13:44:19 +08:00
aixianling
f4fe01797d 工作台入库 2022-08-24 13:40:40 +08:00
aixianling
f2b9834cb1 工作台入库 2022-08-24 11:51:27 +08:00
aixianling
0d7c0a9671 工作台入库 2022-08-24 11:46:01 +08:00
aixianling
ccc6455274 构建版收录web端产品库 2022-08-24 11:16:47 +08:00
aixianling
083c1ff068 Merge branch 'dev' into build 2022-08-24 11:08:04 +08:00
aixianling
36dc08d8ab 构建版收录web端产品库 2022-08-24 11:04:18 +08:00
aixianling
be15c94417 Merge branch 'dev' into build 2022-08-24 10:51:00 +08:00
aixianling
b42d755e9b BUG 30974 2022-08-23 16:57:42 +08:00
aixianling
afa698cf72 BUG 30970 2022-08-23 16:04:42 +08:00
aixianling
8bebe9f661 统一一下字典加载 2022-08-23 16:00:44 +08:00
aixianling
e1bc2c9c2e BUG 30967 2022-08-23 15:54:03 +08:00
aixianling
831faf4a34 BUG 30968 2022-08-23 15:47:47 +08:00
aixianling
07c7c267aa BUG 30968 2022-08-23 15:45:28 +08:00
aixianling
2650c69ff7 BUG 30969 2022-08-23 15:40:57 +08:00
aixianling
d8db5ef7bb BUG 30961 2022-08-23 15:39:17 +08:00
aixianling
11d24d2f2c BUG 30961 2022-08-23 15:37:21 +08:00
aixianling
9de3f32d6c Merge branch 'dev' into build
# Conflicts:
#	project/oms/apps/develop/AppDeployCustom/add.vue
2022-08-23 15:20:21 +08:00
aixianling
ae1c7ce5eb 百度流量埋点设置 2022-08-23 15:19:35 +08:00
aixianling
e8774de7d4 BUG 30961 2022-08-23 14:59:30 +08:00
aixianling
df89da46f1 BUG 30957 2022-08-23 14:24:35 +08:00
aixianling
35ac06a05b BUG 30962 2022-08-23 14:22:37 +08:00
aixianling
cef6c224ee 调整名字 2022-08-23 14:18:35 +08:00
aixianling
6ac1f0a87a BUG 30961 2022-08-23 14:15:04 +08:00
aixianling
ec729eb1e9 BUG 30959 2022-08-23 11:27:01 +08:00
aixianling
7590a5bcb2 减少冗余代码 2022-08-23 11:05:24 +08:00
aixianling
7bbdaee6d3 Merge branch 'dev' into build
# Conflicts:
#	components/AiOkrTree/AiOkrTree.vue
#	project/dv/apps/AppGridDV.vue
2022-08-23 11:04:07 +08:00
aixianling
e445063afc 重新构建一遍okr-tree 2022-08-23 10:37:38 +08:00
aixianling
59542c73b3 Merge branch 'dev' into build
# Conflicts:
#	package.json
#	project/dv/apps/AppGridDV.vue
2022-08-22 18:07:04 +08:00
aixianling
4bb6e3be77 Merge branch 'dev' into build 2022-08-22 15:23:01 +08:00
aixianling
88296e0f3e okrtree 2022-08-22 14:39:08 +08:00
aixianling
425cb93e8d 兼容判断 2022-08-22 14:20:06 +08:00
aixianling
f18a7fd85c 调整目录结构使其能够被引用 2022-08-22 11:27:05 +08:00
aixianling
e67a8c4ac2 Merge branch 'dev' into build 2022-08-22 11:17:02 +08:00
aixianling
dbbd384221 调整目录结构使其能够被引用 2022-08-22 11:16:34 +08:00
aixianling
bca314e635 增加web端埋点 2022-08-22 11:09:55 +08:00
aixianling
7b5841122e 更新引入路径为相对路径 2022-08-22 09:28:16 +08:00
aixianling
58ec778b3e Merge branch 'dev' into build 2022-08-19 13:55:42 +08:00
aixianling
c04bcbf90e 大屏组件做一下切割 2022-08-19 13:54:37 +08:00
aixianling
89b39916d7 构建版产品库组件整合 2022-08-19 13:39:28 +08:00
aixianling
b388d03536 Merge branch 'dev' into build 2022-08-19 11:54:33 +08:00
aixianling
097b434712 更换列表上标绘接口 2022-08-18 17:36:39 +08:00
aixianling
392ffee1ea Merge branch 'dev' into build
# Conflicts:
#	package.json
#	vue.config.js
2022-08-18 17:33:48 +08:00
aixianling
84299df63e Merge branch 'dev' into build 2022-08-15 13:51:24 +08:00
aixianling
4e1cf8a814 删除无用文件 2022-08-15 13:51:06 +08:00
aixianling
de53dfed54 Merge branch 'dev' into build 2022-08-15 09:31:48 +08:00
aixianling
cc06862696 图片压缩并把图片转移至cdn 2022-08-12 17:16:21 +08:00
aixianling
2d76c3fee4 Merge branch 'dev' into build 2022-08-12 17:06:29 +08:00
aixianling
d7d6f12142 Merge branch 'dev' into build 2022-08-12 15:02:57 +08:00
aixianling
cf2de900f0 Merge remote-tracking branch 'origin/dev' into build 2022-08-12 13:58:33 +08:00
aixianling
6a39364b03 Merge remote-tracking branch 'origin/dev' into build 2022-08-12 11:50:33 +08:00
aixianling
38d01b37fd 修复大华视频播放 2022-08-12 11:50:04 +08:00
aixianling
98946c1e28 构建版本修改 2022-08-12 11:20:51 +08:00
1544 changed files with 256937 additions and 11261 deletions

2
.env.ai Normal file
View File

@@ -0,0 +1,2 @@
VUE_APP_SCOPE=ai
VUE_APP_API=http://192.168.1.87:9000

5
.env.biaopin Normal file
View File

@@ -0,0 +1,5 @@
VUE_APP_SCOPE=biaopin
#VUE_APP_API=https://web.fdfengshou.cn/
#VUE_APP_API=http://192.168.1.87:9000/
VUE_APP_API=https://www.wyzzb.com
#VUE_APP_API=http://test87web.cunwuyun.cn/

2
.env.dv Normal file
View File

@@ -0,0 +1,2 @@
VUE_APP_SCOPE=dv
VUE_APP_API=http://192.168.1.87:9000

4
.env.fengdu Normal file
View File

@@ -0,0 +1,4 @@
VUE_APP_SCOPE=fengdu
#VUE_APP_API=https://web.fdfengshou.cn/
VUE_APP_API=http://192.168.1.87:9000/
#VUE_APP_API=http://test87web.cunwuyun.cn/

4
.env.oms Normal file
View File

@@ -0,0 +1,4 @@
VUE_APP_SCOPE=oms
VUE_APP_API=http://192.168.1.87:19897
VUE_APP_IS_SIMPLE_SERVER=1
VUE_APP_PORT=19897

2
.gitignore vendored
View File

@@ -25,3 +25,5 @@ yarn-error.log*
/oms/dist/
/project/*/index.js
/project/*/dist
/ui/package-lock.json
/examples/modules.json

View File

@@ -6,6 +6,7 @@ core/
public/
project/
.idea/
ui/lib/
# 忽略指定文件
vue.config.js

3
.npmrc
View File

@@ -1,6 +1,5 @@
registry=http://192.168.1.87:4873/
email=aixianling@sinoecare.com
always-auth=true
_auth="YWRtaW46YWRtaW4xMjM="
package-lock=false
//192.168.1.87:4873/:_auth="YWRtaW46YWRtaW4xMjM="

38
bin/appsSync.js Normal file
View File

@@ -0,0 +1,38 @@
const axios = require("axios");
const {chalkTag, findApp, fs} = require("./tools");
const compiler = require('vue-template-compiler')
const saveApps = app => {
if (app.list.length > 0) {
return axios.post("http://192.168.1.87:12525/node/wechatapps/addOrUpdate", app, {timeout: 1000}).then(res => {
if (res.data.code == 0) chalkTag.done("产品库目录已同步至后台数据库...")
}).catch(() => 0)
} else return Promise.reject("没有应用")
}
const getAppInfo = (file, apps) => {
if (/[\\\/](App[A-Z][^\\\/]+)\.vue$/g.test(file)) {
const name = file.replace(/.+[\\\/](App[^\\\/]+)\.vue$/, '$1'),
source = fs.readFileSync(file).toString(),
parsed = compiler.parseComponent(source),
script = parsed.script?.content || "",
label = script.match(/label:[^,]+/)?.[0]?.replace(/.+["']([^"']+).+/, '$1')
apps.push({
id: file.replace(/\.vue$/, '').replace(/[\\\/]/g, '_'),
label: label || name,
libPath: `/${file.replace(/\.vue$/, '').replace(/[\\\/]/g, '/')}`,
name,
type: 'web'
})
}
}
const sync = () => {
chalkTag.info("开始扫描库工程...")
const list = []
Promise.all([
findApp('packages', app => getAppInfo(app, list)),
findApp('project', app => getAppInfo(app, list)),
]).then(() => {
chalkTag.info("正在同步...")
saveApps({type: "web", list}).catch(() => 0).finally(() => chalkTag.done("同步成功!"))
})
}
sync()

33
bin/mods.js Normal file
View File

@@ -0,0 +1,33 @@
const {chalkTag, findApp, fs, fsExtra} = require("./tools");
const compiler = require('vue-template-compiler')
const getAppInfo = (file, apps) => {
if (/[\\\/](App[A-Z][^\\\/]+)\.vue$/g.test(file)) {
const name = file.replace(/.+[\\\/](App[^\\\/]+)\.vue$/, '$1'),
source = fs.readFileSync(file).toString(),
parsed = compiler.parseComponent(source),
script = parsed.script?.content || "",
label = script.match(/label:[^,]+/)?.[0]?.replace(/.+["']([^"']+).+/, '$1')
const paths = file.split(/[\\\/]/)
apps.push({
id: file.replace(/\.vue$/, '').replace(/[\\\/]/g, '_'),
label: label || name,
path: `/${file.replace(/\.vue$/, '').replace(/[\\\/]/g, '/')}`,
workspace: paths.at(0),
esm: ['.', paths.slice(1)].flat().join("/"),
name
})
}
}
const start = () => {
chalkTag.info("开始扫描库工程...")
const list = []
Promise.all([
findApp('packages', app => getAppInfo(app, list)),
findApp('project', app => getAppInfo(app, list)),
]).then(() => {
fsExtra.outputJson('examples/modules.json', {apps: list})
chalkTag.done("扫描完毕")
})
}
start()

70
bin/tools.js Normal file
View File

@@ -0,0 +1,70 @@
const fsExtra = require('fs-extra')
const path = require('path')
const chalk = require('chalk')
const fs = require('fs')
/**
* 将函数封装成promise
*/
const promisify = fn => {
return function () {
let args = arguments;
return new Promise(function (resolve, reject) {
[].push.call(args, function (err, result) {
if (err) {
console.log(err)
reject(err);
} else {
resolve(result);
}
});
fn.apply(null, args);
});
}
}
const readdir = promisify(fs.readdir)
const stat = promisify(fs.stat)
/**
* 封装打印工具
*/
const {log} = console
const chalkTag = {
info: msg => log([chalk.bgBlue.black(' INFO '), msg].join(' ')),
done: msg => log([chalk.bgGreen.black(' DONE '), msg].join(' ')),
warn: msg => log([chalk.bgYellow.black(' WARN '), msg].join(' ')),
error: msg => log([chalk.bgRed.black(' ERROR '), msg].join(' ')),
}
/**
* 遍历应用的方法
*/
const findApp = (dir, cb) => {
fsExtra.ensureDirSync(dir)
return readdir(dir).then(apps => {
return Promise.all(apps.map(e => {
let cPath = path.join(dir, e)
return stat(cPath).then(state => {
if (state.isDirectory()) {
return findApp(cPath, cb)
} else if (state.isFile()) {
cb && cb(cPath)
}
})
}) || [])
})
}
const copyFiles = (dir, source = 'src/mods') => {
chalkTag.info(`开始扫描${source}...`)
return new Promise(resolve => {
fsExtra.emptyDir(dir, err => {
if (!err) {
fsExtra.copy(source, dir).then(() => {
chalkTag.done(source + ' 扫描完毕')
resolve()
})
}
})
})
}
module.exports = {findApp, chalkTag, fsExtra, copyFiles, fs, path}

View File

@@ -1,5 +0,0 @@
apps/
index.js
*.map
vcapps.import.js
dist/

View File

@@ -1,45 +0,0 @@
/**
* 系统业务模块
* @param Vue 外部接入Vue
* @param params showList:打印加载的应用;apps:加载的应用文件名数组
*/
const install = function (Vue, params) {
if (install.installed) return Promise.resolve()
else {
// 遍历工作控件内的应用
let apps = []
let contexts = require.context('.', true, /\.(\/.+)\/App[^\/]+\.vue$/)
if (contexts) {
contexts.keys().map(e => {
if (contexts(e).default) {
if (params?.apps) {
if (params?.apps.includes(contexts(e).default.name)) {
apps.push(contexts(e).default)
Vue.component(contexts(e).default.name, contexts(e).default)
}
} else {
apps.push(contexts(e).default)
Vue.component(contexts(e).default.name, contexts(e).default)
}
}
})
// apps.map(e=>{
// console.log(e.name,e.label)
// })
!!params?.showList && console.log(apps.map(e => e.name))
}
return Promise.resolve(apps)
}
}
// 判断是否是直接引入文件
if (typeof window !== 'undefined' && window.Vue) {
install(window.Vue)
}
export default {
// 导出的对象必须具有 install才能被 Vue.use() 方法安装
install
}

View File

@@ -1,12 +0,0 @@
{
"name": "dvcp-core",
"description": "系统业务模块",
"version": "1.0.13",
"main": "dist/dvcp-core.common.js",
"files": [
"dist"
],
"publishConfig": {
"registry": "http://cli.sinoecare.net"
}
}

View File

@@ -2,14 +2,20 @@
<div id="app">
<header-nav v-if="showTools" title="web端产品库">
<template #right>
<mock/>
<div @click="showTools=false,dvDev=true">大屏开发</div>
<div @click="showTools=false">隐藏工具栏</div>
<div @click="handleLogin">点此登录</div>
</template>
</header-nav>
<el-row class="fill mar-t48" type="flex">
<slider-nav v-if="showTools"/>
<ai-dv-wrapper class="fill" v-if="dvDev">
<router-view/>
</ai-dv-wrapper>
<el-row v-else-if="showTools" class="fill mar-t48" type="flex">
<slider-nav/>
<main-content class="fill"/>
</el-row>
<router-view class="fill" v-else/>
<div v-if="dialog" class="sign-box">
<ai-sign style="margin: auto" :instance="$request" :action="{login}"
visible @login="getToken" :showScanLogin="false"/>
@@ -23,10 +29,12 @@ import SliderNav from "./components/sliderNav";
import MainContent from "./components/mainContent";
import HeaderNav from "./components/headerNav";
import {mapActions, mapMutations, mapState} from "vuex";
import Mock from "./components/mock";
import AiDvWrapper from "@dui/dv/layout/AiDvWrapper/AiDvWrapper.vue";
export default {
name: 'app',
components: {HeaderNav, MainContent, SliderNav},
components: {AiDvWrapper, Mock, HeaderNav, MainContent, SliderNav},
computed: {
...mapState(['user']),
login() {
@@ -39,11 +47,17 @@ export default {
return {
dialog: false,
showTools: true,
dvDev: false
}
},
watch: {
showTools(v) {
v && (this.dvDev = false)
}
},
methods: {
...mapMutations(['setToken', 'setFinanceUser']),
...mapActions(['getUserInfo']),
...mapMutations(['setToken']),
...mapActions(['getUserInfo', 'getFinanceUser']),
getToken(params) {
if (params.access_token) {
this.setToken([params.token_type, params.access_token].join(' '))
@@ -58,12 +72,14 @@ export default {
this.dialog = true
})
},
handleMock() {
}
},
created() {
wx = jWeixin
if (this.user.token) this.getUserInfo().then(() => {
if (this.user.token) this.getUserInfo().finally(() => {
if (/^\/project\/xiushan/.test(location.pathname)) {
this.setFinanceUser()
this.getFinanceUser()
}
})
}
@@ -97,6 +113,7 @@ html, body {
top: 0;
right: 60px;
opacity: 0;
z-index: 999;
&:hover {
opacity: 1;

View File

@@ -13,7 +13,7 @@
<el-avatar :src="user.info.avatar">
{{ defaultAvatar }}
</el-avatar>
<span>{{ [user.info.name, user.info.roleName].join(" - ") }}</span>
<span v-text="defaultName"/>
<i :class="dropdownIcon"/>
</el-row>
<el-dropdown-menu>
@@ -45,12 +45,9 @@ export default {
},
computed: {
...mapState(['user']),
dropdownIcon() {
return this.isClick ? 'el-icon-caret-top' : 'el-icon-caret-bottom'
},
defaultAvatar() {
return this.user.info.name?.slice(-2) || "无名"
}
dropdownIcon: v => v.isClick ? 'el-icon-caret-top' : 'el-icon-caret-bottom',
defaultAvatar: v => v.user.info.name?.slice(-2) || "无名",
defaultName: v => [v.user.info.name, v.user.info.roleName].filter(Boolean)?.join(" - ") || "请先登录"
},
methods: {
// 获取最新的安卓、ios下载二维码
@@ -124,11 +121,12 @@ export default {
z-index: -1;
}
::v-deep.toolbar {
:deep(.toolbar) {
gap: 12px;
margin-right: 32px;
& > div {
& > div, .toolbarBtn {
color: #fff;
padding: 0 12px;
&:hover {
@@ -167,7 +165,7 @@ export default {
}
}
::v-deep .downLoad_main {
:deep( .downLoad_main ) {
width: 100%;
height: 100%;
padding: 16px;

View File

@@ -1,76 +1,24 @@
<template>
<section class="mainContent">
<el-tabs class="layout" type="card" :value="currentTab" @tab-click="handleTabClick"
@tab-remove="handleTabRemove">
<el-tab-pane label="默认页" class="layoutItem">
<ai-empty>欢迎使用村微产品库</ai-empty>
</el-tab-pane>
<el-tab-pane v-for="op in tabs" :key="op.name" :closable="op.name!='工作台'" :name="op.name" :label="op.label" lazy>
<router-view v-if="currentTab==op.name"/>
</el-tab-pane>
</el-tabs>
<ai-nav-tab :routes="apps"/>
<div class="fill">
<router-view/>
<ai-empty v-if="isHome">欢迎使用村微产品库</ai-empty>
</div>
</section>
</template>
<script>
import {mapState} from "vuex";
import AiNavTab from "dui/packages/basic/AiNavTab";
import {mapState} from "vuex"
export default {
name: "mainContent",
components: {AiNavTab},
computed: {
...mapState(['apps']),
currentTab() {
let {name, query, hash} = this.$route
return [name?.replace(query?.id, ''), query?.id, hash].join("") || "0"
}
isHome: v => v.$route.path == '/',
},
data() {
return {
tabs: []
}
},
watch: {
$route: {
immediate: true,
handler() {
this.getTabs("route")
}
},
},
methods: {
handleTabClick({name}) {
let {name: route, query, hash} = this.tabs.find(e => e.name == name),
exps = []
query.id && exps.push(query.id)
hash && exps.push(hash)
let reg = new RegExp(`(${exps.join("|")})`, 'g')
this.$router.push({name: route.replace(reg, ''), query, hash})
},
handleTabRemove(id = this.currentTab) {
let tabs = JSON.parse(JSON.stringify(this.tabs)),
index = tabs?.findIndex(e => id == e.name)
if (id == this.currentTab) {
let next = tabs?.[index + 1] || tabs?.[index - 1]
next ? this.handleTabClick(next) : this.$router.push({path: '/'})
}
this.tabs.splice(index, 1)
},
getTabs(from) {
let {name, query, hash} = this.$route
console.log(`getTabs>>>>>>>>>%s>>>>>>>%s`, from, name)
let tab = this.tabs.find(e => e.name == this.currentTab),
tabName = [name, query?.id, hash].join("")
if (tab) {
} else if (!name) {
} else if (tabName) {
let menu = this.apps.find(e => e.name == name)
this.tabs.push({name: tabName, query, hash, label: menu?.label})
}
},
},
created() {
this.getTabs("created")
}
}
</script>
@@ -78,86 +26,7 @@ export default {
.mainContent {
height: 100%;
width: 100%;
::v-deep.layout {
height: 100%;
background: #F5F6F9;
display: flex;
flex-direction: column;
& > .el-tabs__header {
margin-bottom: 0;
background: linear-gradient(180deg, #FCFCFC 0%, #E0E2E4 100%);
height: 40px;
display: flex;
align-items: flex-end;
border: none;
.el-tabs__nav {
border: none;
}
.el-tabs__item {
padding: 0 8px 0 12px;
text-align: left;
min-width: 130px;
height: 36px;
line-height: 36px;
border: none;
color: #555;
font-size: 12px;
& + .el-tabs__item {
margin-left: 2px;
}
.el-icon-close {
float: right;
width: auto;
height: 100%;
line-height: 36px;
background: transparent;
font-size: 16px;
color: #89b;
&:hover {
color: #000;
}
}
&.is-active {
border: 1px solid #D8DCE3;
border-bottom: none;
border-radius: 4px 4px 0 0;
background: #F5F6F9;
color: #222;
&:after {
display: none;
}
}
&:after {
position: absolute;
right: 0;
content: " ";
width: 1px;
background: #D8DCE3;
height: 24px;
top: 50%;
transform: translateY(-50%);
}
}
}
.el-tabs__content {
flex: 1;
min-height: 0;
.el-tab-pane {
height: 100%;
}
}
}
display: flex;
flex-direction: column;
}
</style>

View File

@@ -0,0 +1,110 @@
<template>
<section class="mock">
<el-dropdown>
<div class="toolbarBtn" v-text="`生成随机数据`"/>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>
<ai-dialog-btn dialogTitle="随机数据配置" :customFooter="false" @onConfirm="submit" appendToBody @open="getBeans" width="500px">
<div class="btn" slot="btn">生成数据</div>
<el-form size="small" label-width="60px">
<el-form-item label="接口">
<el-input v-model="action" placeholder="请输入接口" @change="handleAction"/>
</el-form-item>
</el-form>
</ai-dialog-btn>
</el-dropdown-item>
<el-dropdown-item>
<ai-dialog-btn dialogTitle="随机数据配置" :customFooter="false" @onConfirm="generateForm" appendToBody @open="getBeans" width="500px">
<div class="btn" slot="btn">页面数据</div>
<el-form size="small" label-width="60px">
<el-form-item label="接口">
<el-input v-model="action" placeholder="请输入接口" @change="handleAction"/>
</el-form-item>
</el-form>
</ai-dialog-btn>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</section>
</template>
<script>
import Mock from "mockjs"
import instance from "../router/axios";
export default {
name: "mock",
data() {
return {
instance,
action: "",
config: "",
swagger: {},//swagger接口对象集合
}
},
computed: {
url: v => /addOrUpdate/.test(v.action) ? v.action : `/${v.action}/addOrUpdate`
},
methods: {
handleAction() {
let formName = this.swagger.paths[this.url]?.post.parameters.find(e => e.in == "body")?.name || ""
const {Random} = Mock
if (formName) {
formName = Random.capitalize(formName)
const props = this.swagger.definitions[formName]?.properties || {}
Object.keys(props).map(e => {
const item = props[e]
if (item.format == "date-time") {
props[e] = () => Random.datetime()
} else if (/[0-9a-zA-Z]/.test(item.description)) {
props[e] = () => Random.pick(item.description?.match(/\b[0-9a-zA-Z]+\b/g))
} else if (/address/i.test(e)) {
props[e] = () => Random.county(true)
} else if (/userName/i.test(e)) {
props[e] = () => Random.cname()
} else if (/lat/.test(e)) {
props[e] = () => Random.float(3, 53, 6, 8)
} else if (/lng/.test(e)) {
props[e] = () => Random.float(73, 135, 6, 8)
} else if (item.type == "number") {
props[e] = () => Random.float(0, 1000, 0, 2)
} else if (item.type == "integer") {
props[e] = () => Random.integer(0, 1000)
} else if (item.type == "string") {
props[e] = () => Random.ctitle()
} else props[e] = null
})
this.config = props
}
},
getBeans() {
this.instance.get("/app/v2/api-docs", {withoutToken: true}).then(res => this.swagger = res)
},
generateForm() {
const {mock} = Mock
this.$vm.$emit("mock", mock(this.config))
},
submit() {
const {mock} = Mock
const data = mock({
'list|50-100': [this.config]
})
Promise.all(data.list.map(e => this.instance.post(this.url, e))).then(() => this.$message.success("随机数据生成,执行完毕!"))
}
}
}
</script>
<style lang="scss" scoped>
.mock {
.btn {
cursor: pointer;
user-select: none;
padding: 0 12px;
&:hover {
color: rgba(#fff, .8);
}
}
}
</style>

View File

@@ -44,16 +44,13 @@ export default {
let reg = new RegExp(`.*${this.searchApp?.replace(/-/g,'')||''}.*`, 'gi')
return (this.apps || []).filter(e => !this.searchApp || reg?.test(e.name) || reg?.test(e.label)).map(e => {
if (/\/project\//.test(e.path)) {
e.project = e.path.replace(/.*project\/([^\/]+)\/.+/, '$1')
e.project = process.env.VUE_APP_SCOPE || e.path.replace(/.*project\/([^\/]+)\/.+/, '$1')
} else if (/\/core\//.test(e.path)) {
e.project = "core"
}
return e
})
},
isConsoleRoute() {
return this.$route.name == "工作台"
},
menuPath() {
let paths = [], current = this.apps?.find(e => e.name == this.$route.name)
const findParent = name => {
@@ -200,7 +197,7 @@ export default {
}
}
::v-deep .ai-menu {
:deep( .ai-menu ) {
padding-left: 0;
flex: 1;
min-height: 0;
@@ -214,7 +211,7 @@ export default {
}
}
::v-deep .searchApp {
:deep( .searchApp ) {
display: flex;
align-items: center;
height: 44px;

View File

@@ -4,17 +4,15 @@ import ui from 'element-ui';
import router from './router/router';
import axios from './router/axios';
import utils from './utils';
import vcUI from 'dvcp-ui';
import 'dvcp-ui/lib/styles/common.scss';
import 'dvcp-ui/lib/dvcp-ui.css';
import dui from 'dui';
import store from './store';
import dataV from '@jiaminghi/data-view';
import dvui from '../project/dvui/entries'
import dvui from '@dui/dv'
Vue.use(dataV);
Vue.use(dataV)
Vue.use(ui);
Vue.use(vcUI);
Vue.use(dvui)
Vue.use(dui);
Vue.use(dvui);
//富文本编辑器配置
Vue.config.productionTip = false;
Object.keys(utils).map((e) => (Vue.prototype[e] = utils[e]));
@@ -25,11 +23,12 @@ const app = new Vue({
render: h => h(App)
});
let theme = null
store.dispatch('getSystem').then(({colorScheme}) => {
theme = JSON.parse(colorScheme || null)
store.dispatch('getSystem').then(res => {
theme = JSON.parse(res?.colorScheme || null)
Vue.prototype.$theme = theme?.web || "blue"
return import(`dvcp-ui/lib/styles/theme.${theme?.web}.scss`).catch(() => 0)
return import(`dui/lib/styles/theme.${theme?.web}.scss`).catch(() => 0)
}).finally(() => {
!theme ? app.$mount('#app') : import(`dvcp-ui/lib/styles/common.scss`).finally(() => app.$mount('#app'))
Vue.prototype.$vm = app
import(`dui/lib/styles/common.scss`).finally(() => app.$mount('#app'))
})

View File

@@ -1,8 +1,7 @@
import store from "../store";
import {waiting} from "../utils";
import appEntry from "../views/apps/appEntry";
import appEntry from "../views/appEntry";
import router from "./router";
import axios from "./axios";
export default {
routes: () => store.state.apps,
@@ -10,39 +9,73 @@ export default {
//约束正则式
store.commit("cleanApps")
// 自动化本工程应用
this.loadApps()
waiting.init({innerHTML: '应用加载中..'})
let startTime = new Date().getTime()
/**
* require.context 的路径变量范式只能为静态字符串
*/
switch (process.env.VUE_APP_SCOPE) {
case 'dv':
this.esm = {
packages: require.context('../../packages/bigscreen', true, /\.(\/.+)\/App[A-Z][^\/]+\.vue$/, 'lazy')
}
break
case 'fengdu':
this.esm = {
project: require.context('../../project/fengdu', true, /\.(\/.+)\/App[A-Z][^\/]+\.vue$/, 'lazy')
}
break
case 'ai':
this.esm = {
biaopin: require.context('../../project/biaopin/AppCopilotConfig', true, /\.\/App[A-Z][^\/]+\.vue$/, 'lazy'),
project: require.context('../../project/ai', true, /\.(\/.+)\/App[A-Z][^\/]+\.vue$/, 'lazy')
}
break
case 'oms':
this.esm = {
project: require.context('../../project/oms', true, /\.(\/.+)\/App[A-Z][^\/]+\.vue$/, 'lazy')
}
break
default:
this.esm = {
packages: require.context('../../packages/', true, /\.(\/.+)\/App[A-Z][^\/]+\.vue$/, 'lazy'),
project: require.context('../../project/', true, /\.(\/.+)\/App[A-Z][^\/]+\.vue$/, 'lazy')
}
}
console.log('模块引用用了%s秒', (new Date().getTime() - startTime) / 1000)
startTime = new Date().getTime()
this.loadApps().finally(() => {
console.log('模块加载用了%s秒', (new Date().getTime() - startTime) / 1000)
waiting.close()
})
},
loadMods() {
// return Promise.all(mods.apps.map(e => {
// Vue.component(e.name, this.esm[e.workspace](e.esm))
// const addApp = {...e, component: appEntry}
// waiting.setContent(`加载${e.name}...`)
// //命名规范入口文件必须以App开头
// return store.commit("addApp", addApp)
// }))
},
loadApps() {
//新App的自动化格式
let apps = require.context('../../packages/', true, /\.(\/.+)\/App[A-Z][^\/]+\.vue$/, 'lazy'),
projects = require.context('../../project/', true, /\.(\/.+)\/App[A-Z][^\/]+\.vue$/, 'lazy')
const promise = (mods, base) => Promise.all(mods.keys().map(path => mods(path).then(file => {
if (file.default) {
let {name, label} = file.default,
addApp = {
name: path.replace(/\.\/?(vue)?/g, '')?.split("/").join("_"), label: label || name,
path: `/${base}${path.replace(/\.(\/.+\/App.+)\.vue$/, '$1')}`,
component: appEntry,
module: file.default
}
const {name, label} = file.default
const addApp = {
name: [base, path.replace(/\.\/?(vue)?/g, '')?.split("/")].flat().join("_"),
label: label || name,
path: `/${base}${path.replace(/\.(\/.+\/App.+)\.vue$/, '$1')}`,
component: appEntry,
esm: file.default
}
waiting.setContent(`加载${name}...`)
router.addRoute(addApp)
//命名规范入口文件必须以App开头
return store.commit("addApp", addApp)
} else return 0
})))
waiting.init({innerHTML: '应用加载中..'})
Promise.all([
promise(apps, "packages"),
promise(projects, "project")
]).then(() => {
axios.post("/node/wechatapps/addOrUpdate", {
type: "web",
list: this.routes().map(({path: libPath, label, module: {name}, name: id}) => ({
id, type: 'web', libPath, label, name
}))
}, {baseURL: "/ns"}).catch(() => 0)
waiting.close()
})
}).catch(err => console.log(err))))
return Promise.all(Object.entries(this.esm).map(([root, mods]) => promise(mods, root))).catch(console.error)
}
}

View File

@@ -1,5 +1,5 @@
import instance from 'dvcp-ui/lib/js/request'
import {Message} from 'element-ui'
import instance from '../../ui/lib/js/request'
let baseURLs = {
production: "/",
@@ -9,10 +9,18 @@ instance.defaults.baseURL = baseURLs[process.env.NODE_ENV]
instance.interceptors.request.use(config => {
if (config.url.startsWith("/node")) {
config.baseURL = "/ns"
} else if (config.url.startsWith("/sse")) {
config.baseURL = "/"
} else if (/\/project\/activeAnalysis/.test(location.pathname)) {
config.baseURL = "/analysis"
} else if (/\/project\/beta/.test(location.pathname)) {
config.baseURL = "/wg"
} else if (/\/project\/sass/.test(location.pathname)) {
config.baseURL = "/saas"
} else if (/\/tianfuxing/.test(location.pathname)) {
config.baseURL = "/tfx"
} else if (/\/qianxinan/.test(location.pathname)) {
// config.baseURL = "/qxn"
} else if (/\/xiushan/.test(location.pathname)) {
config.baseURL = "/xsjr"
} else if (/project\/oms/.test(location.pathname)) {
@@ -20,8 +28,14 @@ instance.interceptors.request.use(config => {
} else if (/#url-/.test(location.hash)) {
config.baseURL = location.hash.replace(/#url-/, '/')
}
if (["/xsjr", "/omsapi"].includes(config.baseURL)) {
config.url = config.url.replace(/(app|auth|admin)\//, "")
if (["/xsjr", "/tfx", "/omsapi"].includes(config.baseURL)) {
config.url = config.url.replace(/(app|auth|admin|api)\//, "api/")
}
if (['/qxn', '/analysis'].includes(config.baseURL)) {
config.url = config.url.replace(/(app|auth|admin)\//, "api/")
}
if (process.env.VUE_APP_IS_SIMPLE_SERVER == 1) {
config.url = config.url.replace(/(app|auth|admin)\//, "api/")
}
return config
}, error => Message.error(error))

View File

@@ -1,8 +1,8 @@
import Vue from 'vue'
import Vuex from 'vuex'
import preState from 'vuex-persistedstate'
import * as modules from "dvcp-ui/lib/js/modules"
import axios from "../router/axios";
import * as modules from "dui/lib/js/modules"
import xsActions from "../../project/xiushan/actions"
Vue.use(Vuex)
@@ -17,11 +17,9 @@ export default new Vuex.Store({
cleanApps(state) {
state.apps = []
},
setFinanceUser(state) {
axios.post("appfinancialorganizationuser/checkUser").then(res => {
state.user.financeUser = res.data
}).catch(() => 0)
}
},
actions: {
...xsActions
},
modules,
plugins: [preState()]

View File

@@ -1,6 +1,6 @@
import {MessageBox} from 'element-ui'
import store from '../store'
import tools from 'dvcp-ui/lib/js/utils'
import tools from 'dui/lib/js/utils'
const addChildParty = (parent, pending) => {
let doBeforeCount = pending.length
@@ -28,6 +28,7 @@ const $confirm = (content, options) => {
return MessageBox.confirm(content, {
type: "warning",
confirmButtonText: "确认",
closeOnClickModal: false,
center: true,
title: "提示",
dangerouslyUseHTMLString: true,
@@ -69,7 +70,7 @@ export const waiting = {
div.style.lineHeight = '100vh'
div.style.color = '#26f'
div.style.fontSize = '20px'
div.style.background = 'rgba(255,255,255,.8)'
div.style.background = 'rgba(255,255,255,.6)'
div.style.backdropFilter = 'blur(6px)'
document.body.appendChild(div)
} else if (count < 10) {

View File

@@ -0,0 +1,46 @@
<template>
<section class="appEntry">
<component v-if="app" :is="app" ref="currentPage" :instance="$request" :dict="$dict" :permissions="$permissions"/>
<ai-empty v-else>无法找到应用文件</ai-empty>
</section>
</template>
<script>
import {mapState} from "vuex";
import Vue from "vue";
export default {
name: "appEntry",
label: "应用库-应用",
computed: {
...mapState(['apps']),
app() {
const app = this.apps.find(e => e.name == this.$route.name)
return app.esm ?? ""
}
},
mounted() {
this.$vm.$on("mock", v => {
if (!!this.$refs.currentPage.$children?.[0]?.form) {
this.$refs.currentPage.$children[0].form = v
this.$refs.currentPage.$children[0].$forceUpdate()
}
})
}
}
</script>
<style lang="scss" scoped>
.appEntry {
width: 100%;
flex: 1;
min-width: 0;
min-height: 0;
height: 100%;
& > * {
height: 100%;
}
}
</style>

View File

@@ -1,37 +0,0 @@
<template>
<section class="appEntry">
<component v-if="app" :is="app" :instance="$request" :dict="$dict" :permissions="$permissions"/>
<ai-empty v-else>无法找到应用文件</ai-empty>
</section>
</template>
<script>
import {mapState} from "vuex";
export default {
name: "appEntry",
label: "应用库-应用",
computed: {
...mapState(['apps']),
app() {
let app = this.apps.find(e => e.name == this.$route.name)
return app ? app.module : ""
}
}
}
</script>
<style lang="scss" scoped>
.appEntry {
width: 100%;
flex: 1;
min-width: 0;
min-height: 0;
height: 100%;
& > * {
height: 100%;
}
}
</style>

View File

@@ -1,13 +0,0 @@
<template>
<router-view />
</template>
<script>
export default {
name: "index"
}
</script>
<style scoped>
</style>

View File

@@ -1,41 +1,51 @@
{
"name": "cw-webapps",
"version": "2.0.0",
"name": "dvcp-web-apps",
"version": "3.0.0",
"private": false,
"author": "kubbo",
"main": "lib/cw-webapps.common.js",
"scripts": {
"dev": "vue-cli-service serve",
"lib": "vue-cli-service build --no-clean --target lib --dest lib packages/index.js&&npm unpublish --force&&npm publish",
"lib:core": "vue-cli-service build --target lib --dest core/dist core/index.js --name dvcp-core&&npm unpublish dvcp-core --force&&npm publish core/",
"lib:project": "node project/build.js",
"lib:all": "node project/allProject.js&&npm unpublish --workspaces --force&&npm publish --workspaces",
"ui": "npm i dvcp-ui@latest"
"dev": "vue-cli-service serve examples/main.js",
"build": "vue-cli-service build",
"dev:ai": "vue-cli-service serve examples/main.js --mode ai",
"dev:oms": "vue-cli-service serve examples/main.js --mode oms",
"dev:biaopin": "vue-cli-service serve examples/main.js --mode biaopin",
"dev:dv": "vue-cli-service serve examples/main.js --mode dv",
"dev:fengdu": "vue-cli-service serve examples/main.js --mode fengdu",
"lib": "npm publish||(npm unpublish -f&&npm publish)",
"preui": "npm publish -ws||(npm unpublish -f -ws&&npm publish -ws)",
"ui": "npm i dui@latest @dui/dv@latest",
"sync": "node bin/appsSync.js",
"preview": "vue-cli-service serve"
},
"workspaces": [
"project/*"
"ui",
"ui/dv"
],
"files": [
"packages",
"project"
],
"dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
"@jiaminghi/c-render": "^0.4.3",
"@jiaminghi/charts": "^0.2.18",
"@dui/dv": "^1.0.0",
"@jiaminghi/data-view": "^2.10.0",
"bin-code-editor": "^0.9.0",
"@logicflow/core": "^1.2.1",
"bin-ace-editor": "^3.2.0",
"dayjs": "^1.8.35",
"dvcp-ui": "^1.42.2",
"echarts": "^5.1.2",
"dui": "^2.0.0",
"echarts-wordcloud": "^2.0.0",
"hash.js": "^1.1.7",
"html2canvas": "^1.4.1",
"mp4box": "^0.4.1",
"print-js": "^1.0.63",
"serialize-javascript": "^6.0.0",
"sortablejs": "^1.12.0",
"vue-carousel": "^0.18.0",
"vue-draggable-resizable": "^2.3.0",
"vue-json-editor": "^1.4.3",
"vue-ruler-tool": "^1.2.4",
"vue-style-loader": "^4.1.3",
"vuedraggable": "^2.24.3"
},
"publishConfig": {
"registry": "http://192.168.1.87:4873/"
},
"devDependencies": {
"@babel/plugin-proposal-logical-assignment-operators": "^7.10.4",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4",
@@ -51,35 +61,21 @@
"eslint-plugin-vue": "^5.0.0",
"image-webpack-loader": "^6.0.0",
"inquirer": "^6.5.2",
"mockjs": "^1.1.0",
"node-ipc": "^9.2.1",
"readline": "^1.3.0",
"sass": "~1.32.12",
"sass": "~1.32.6",
"sass-loader": "^7.3.1",
"uglifyjs-webpack-plugin": "^2.2.0",
"v-viewer": "^1.6.4",
"vue": "^2.6.14",
"vue": "^2.7.14",
"vue-router": "^3.3.4",
"vue-style-loader": "^4.1.3",
"vue-template-compiler": "^2.6.14",
"vue-template-compiler": "^2.7.14",
"vuex": "^3.5.1",
"vuex-persistedstate": "^2.7.1"
},
"vetur": {
"attributes": "./attributes.json"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"rules": {},
"parserOptions": {
"parser": "babel-eslint"
}
},
"postcss": {
"plugins": {
"autoprefixer": {}
@@ -89,5 +85,8 @@
"> 1%",
"last 2 versions",
"not ie <= 8"
]
],
"resolutions": {
"sass": "1.32.6"
}
}

View File

@@ -0,0 +1,289 @@
<template>
<ai-detail>
<template slot="title">
<ai-title :title="isEdit ? '编辑项目' : '添加项目'" isShowBack isShowBottomBorder @onBackClick="cancel"/>
</template>
<template slot="content">
<el-form ref="form" :model="form" label-width="110px" label-position="right">
<ai-card title="基本信息">
<template #content>
<div class="ai-form">
<el-form-item label="名称" prop="name"
:rules="[{ required: true, message: '请输入大屏项目名称', trigger: 'blur' }]">
<el-input size="small" :maxlength="30" placeholder="请输入大屏项目名称" v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="描述" style="width: 100%;" prop="description">
<el-input size="small" :maxlength="200" :rows="5" type="textarea" style="width: 100%;"
placeholder="请输入描述"
v-model="form.description"></el-input>
</el-form-item>
<el-form-item label="是否开启" style="width: 100%;" prop="status">
<el-switch
v-model="form.status"
active-value="1"
inactive-value="0">
</el-switch>
</el-form-item>
</div>
</template>
</ai-card>
<ai-card title="大屏" v-if="isEdit">
<template #right>
<el-button @click="gotoDesign()" type="primary">添加大屏</el-button>
<el-button @click="dialog=true" type="primary">定制大屏</el-button>
</template>
<template #content>
<ai-table
:tableData="tableData"
:col-configs="colConfigs"
:total="total"
style="margin-top: 6px;"
:border="true"
row-key="id"
:isShowPagination="false"
@getList="() => {}">
<el-table-column slot="options" label="状态" align="center">
<template slot-scope="{ row }">
<el-switch
v-model="row.status"
active-value="1"
@change="() => onStatusChange(row.id)">
</el-switch>
</template>
</el-table-column>
<el-table-column slot="options" width="160px" fixed="right" label="操作" align="center">
<template slot-scope="{ row, column, $index }">
<div class="table-options">
<el-button type="text" @click="toEdit(row.id, row.isCustom, row)">编辑</el-button>
<el-button type="text" @click="toViewer(row.id)">预览</el-button>
<el-button type="text" @click="remove($index)">删除</el-button>
</div>
</template>
</el-table-column>
</ai-table>
</template>
</ai-card>
</el-form>
<ai-dialog :visible.sync="dialog" title="定制大屏" @closed="custom={}" @onConfirm="handleCustomizedDV">
<el-form ref="CustomDVFrom" size="small" :model="custom" :rules="rules" label-width="80px">
<el-form-item label="大屏标题" prop="title">
<el-input v-model="custom.title" clearable placeholder="请填写"/>
</el-form-item>
<el-form-item label="选择大屏" prop="dv">
<ai-select v-model="custom.dv" :selectList="dict.getDict('customizedDVs')"/>
</el-form-item>
<el-form-item label="静态数据">
<el-input type="textarea" rows="5" v-model="custom.meta"/>
</el-form-item>
</el-form>
</ai-dialog>
</template>
<template #footer>
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="confirm">提交</el-button>
</template>
</ai-detail>
</template>
<script>
import Layout from './viewport.vue'
import Sortable from 'sortablejs'
import {mapActions} from "vuex"
export default {
name: 'Add',
props: {
instance: Function,
dict: Object,
urlPrefix: String
},
inject: {
home: {default: ''}
},
components: {
Layout
},
data() {
return {
info: {},
department: [],
form: {
name: '',
relationLsIds: '',
relationLsNames: '',
status: '1',
description: ''
},
screenId: '',
query: {},
total: 0,
colConfigs: [
{prop: 'title', label: '标题'},
{prop: 'id', label: 'ID'}
],
tableData: [],
id: '',
dialog: false,
custom: {},
rules: {
dv: [{required: true, message: "请选择 定制大屏"}],
title: [{required: true, message: "请输入 大屏标题"}],
},
config: {
backgroundImage: []
}
}
},
computed: {
isEdit: v => !!v.$route.query.id
},
created() {
this.dict.load('customizedDVs')
this.getInfo().then(() => this.$route.params?.id && this.onChange(this.$route.params))
},
methods: {
...mapActions(['closePage']),
getInfo() {
let {id} = this.$route.query
if (!id) return Promise.reject()
return this.instance.post(`${this.urlPrefix}/appdiylargescreen/queryLargeScreenProjectDetailById?id=${id}`).then(res => {
if (res?.data) {
this.form = {
...res.data
}
if (res.data.relationLsIds) {
this.tableData = res.data.lsList.map(v => {
let conf = JSON.parse(v.config || '') || {}
return {
id: v.id,
title: v.title,
dv: conf.custom || '',
meta: JSON.stringify(conf.meta),
isCustom: !!conf.custom,
status: v.status
}
})
this.total = res.data.lsList.length
this.$nextTick(() => {
this.rowDrop()
})
}
}
})
},
onStatusChange(id) {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/enableLargeScreen?id=${id}`).then(res => {
if (res.code === 0) {
this.$message.success('操作成功')
}
})
},
rowDrop() {
const tbody = document.querySelector('.el-table__body-wrapper tbody')
const _this = this
Sortable.create(tbody, {
onEnd({newIndex, oldIndex}) {
const currRow = _this.tableData.splice(oldIndex, 1)[0]
_this.tableData.splice(newIndex, 0, currRow)
}
})
},
toViewer(id) {
this.$router.push({query: {id}, hash: "#preview"})
},
onChange(e) {
const ids = this.tableData.map(v => v.id)
if (ids.indexOf(e.id) < 0) {
this.tableData.push({
title: e.title,
id: e.id,
status: '1'
})
} else {
const index = this.tableData.findIndex(v => v.id === e.id)
this.$set(this.tableData[index], 'title', e.title)
}
this.$nextTick(() => {
if (this.$route.query.id) {
const ids = this.tableData.map(v => v.id).join(',')
const names = this.tableData.map(v => v.name).join(',')
this.instance.post(`${this.urlPrefix}/appdiylargescreen/addOrUpdateLargeScreenProject`, {
...this.form,
relationLsIds: ids,
relationLsNames: names
})
}
})
},
gotoDesign(did) {
const {id} = this.$route.query
this.$router.push({hash: "#design", query: {id, did, name: this.form.name}})
},
toEdit(id, isCustom, form) {
if (!isCustom) {
this.gotoDesign(id)
} else {
this.dialog = true
this.custom = form
}
},
remove(index) {
this.tableData.splice(index, 1)
},
confirm() {
this.$refs.form.validate((valid) => {
if (valid) {
const ids = this.tableData.map(v => v.id).join(',')
const names = this.tableData.map(v => v.name).join(',')
this.instance.post(`${this.urlPrefix}/appdiylargescreen/addOrUpdateLargeScreenProject`, {
...this.form,
relationLsIds: ids,
relationLsNames: names
}).then(res => {
if (res.code == 0) {
this.$message.success('提交成功')
this.home && this.home.refreshDvOptions && this.home.refreshDvOptions()
setTimeout(() => {
this.cancel()
}, 600)
}
})
}
})
},
cancel() {
this.closePage()
this.$router.push({})
},
handleCustomizedDV() {
this.$refs.CustomDVFrom.validate(v => {
if (v) {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/addOrUpdateLargeScreen`, {
config: JSON.stringify({
custom: this.custom.dv,
meta: JSON.parse(this.custom.meta?.replace(/\\n/g, '') || null)
}),
status: 1,
id: this.custom.id,
title: this.custom.title,
}).then(res => {
if (res?.code == 0 && res?.data) {
this.$message.success('保存成功')
this.onChange(res.data)
this.dialog = false
}
})
}
})
}
}
}
</script>
<style scoped lang="scss">
</style>

View File

@@ -5,15 +5,16 @@
</template>
<script>
import List from './components/List.vue'
import Add from './components/Add'
import SourceData from './components/SourceData'
import Preview from "./components/preview";
import List from './List.vue'
import Add from './Add.vue'
import SourceData from './SourceData.vue'
import Preview from "./preview.vue";
import DesignDashboard from "./viewport.vue";
export default {
name: 'AppDesigner',
label: '大屏设计',
components: {Preview, List, Add, SourceData},
components: {DesignDashboard, Preview, List, Add, SourceData},
props: {
instance: Function,
dict: Object,
@@ -29,7 +30,8 @@ export default {
const {hash} = this.$route
return hash == "#sourceData" ? SourceData :
hash == "#add" ? Add :
hash == "#preview" ? Preview : List
hash == "#preview" ? Preview :
hash == "#design" ? DesignDashboard : List
},
tabs() {
return [

View File

@@ -33,7 +33,7 @@
style="margin-top: 6px;"
:current.sync="search.current"
:size.sync="search.size"
@getList="getList">
@getList="getList" :dict="dict">
<el-table-column slot="options" width="160px" fixed="right" label="操作" align="center">
<template slot-scope="{ row }">
<div class="table-options">
@@ -88,7 +88,7 @@ export default {
{prop: 'name', label: '模板名称'},
{prop: 'createUserName', align: 'center', label: '创建人'},
{prop: 'description', align: 'center', label: '描述'},
{prop: 'status', align: 'center', label: '状态', formart: v => this.dict.getLabel('cwpStatus', v)},
{prop: 'status', align: 'center', label: '状态', dict:"cwpStatus"},
{prop: 'createTime', align: 'center', label: '创建时间'}
],
tableData: [],

View File

@@ -127,6 +127,7 @@
</div>
</el-form-item>
</div>
<el-form-item style="width: 100%;" v-if="form.type === '0'">
<el-button type="primary" @click="add('statisticsConfigs')">添加统计项</el-button>
</el-form-item>
@@ -209,7 +210,7 @@ export default {
{prop: 'appName', label: '应用名'},
{prop: 'appTableName', align: 'center', label: '表名'},
{prop: 'description', align: 'center', label: '描述'},
{prop: 'type', align: 'center', label: '类型', formart: v => v === '0' ? '村微应用' : 'sql语句'},
{prop: 'type', align: 'center', label: '类型', format: v => v === '0' ? '村微应用' : 'sql语句'},
{prop: 'createUserName', align: 'center', label: '创建人'},
{prop: 'createTime', align: 'center', label: '创建时间'}
],

View File

@@ -1,300 +0,0 @@
<template>
<ai-detail>
<template slot="title">
<ai-title :title="id ? '编辑项目' : '添加项目'" isShowBack isShowBottomBorder @onBackClick="cancel"/>
</template>
<template slot="content">
<el-form ref="form" :model="form" label-width="110px" label-position="right">
<ai-card title="基本信息">
<template #content>
<div class="ai-form">
<el-form-item label="名称" prop="name" :rules="[{ required: true, message: '请输入大屏项目名称', trigger: 'blur' }]">
<el-input size="small" :maxlength="30" placeholder="请输入大屏项目名称" v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="描述" style="width: 100%;" prop="description">
<el-input size="small" :maxlength="200" :rows="5" type="textarea" style="width: 100%;" placeholder="请输入描述" v-model="form.description"></el-input>
</el-form-item>
<el-form-item label="是否开启" style="width: 100%;" prop="status">
<el-switch
v-model="form.status"
active-value="1"
inactive-value="0">
</el-switch>
</el-form-item>
</div>
</template>
</ai-card>
<ai-card title="大屏">
<template #right>
<el-button @click="add('')" type="primary">添加大屏</el-button>
<el-button @click="dialog=true" type="primary">定制大屏</el-button>
</template>
<template #content>
<ai-table
:tableData="tableData"
:col-configs="colConfigs"
:total="total"
style="margin-top: 6px;"
:border="true"
row-key="id"
:isShowPagination="false"
@getList="() => {}">
<el-table-column slot="options" label="状态" align="center">
<template slot-scope="{ row }">
<el-switch
v-model="row.status"
active-value="1"
@change="() => onStatusChange(row.id)">
</el-switch>
</template>
</el-table-column>
<el-table-column slot="options" width="160px" fixed="right" label="操作" align="center">
<template slot-scope="{ row, column, $index }">
<div class="table-options">
<el-button type="text" @click="toEdit(row.id, row.isCustom, row)">编辑</el-button>
<el-button type="text" @click="toViewer(row.id)">预览</el-button>
<el-button type="text" @click="remove($index)">删除</el-button>
</div>
</template>
</el-table-column>
</ai-table>
</template>
</ai-card>
</el-form>
<Layout
v-if="isShowLayout"
:instance="instance"
:dict="dict"
:params="query"
@change="onChange"
:urlPrefix="urlPrefix"
:theme="config.theme"
@close="isShowLayout = false">
</Layout>
<ai-dialog :visible.sync="dialog" title="定制大屏" @closed="custom={}" @onConfirm="handleCustomizedDV">
<el-form ref="CustomDVFrom" size="small" :model="custom" :rules="rules" label-width="80px">
<el-form-item label="大屏标题" prop="title">
<el-input v-model="custom.title" clearable placeholder="请填写"/>
</el-form-item>
<el-form-item label="选择大屏" prop="dv">
<ai-select v-model="custom.dv" :selectList="dict.getDict('customizedDVs')"/>
</el-form-item>
<el-form-item label="静态数据">
<el-input type="textarea" rows="5" v-model="custom.meta"/>
</el-form-item>
</el-form>
</ai-dialog>
</template>
<template #footer>
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="confirm">提交</el-button>
</template>
</ai-detail>
</template>
<script>
import Layout from './Layout.vue'
import Sortable from 'sortablejs'
export default {
name: 'Add',
props: {
instance: Function,
dict: Object,
urlPrefix: String
},
inject: {
home: {default: ''}
},
components: {
Layout
},
data() {
return {
info: {},
department: [],
form: {
name: '',
relationLsIds: '',
relationLsNames: '',
status: '1',
description: ''
},
screenId: '',
query: {},
total: 0,
colConfigs: [
{prop: 'title', label: '标题'},
{prop: 'id', label: 'ID'}
],
tableData: [],
isShowLayout: false,
id: '',
dialog: false,
custom: {},
rules: {
dv: [{required: true, message: "请选择 定制大屏"}],
title: [{required: true, message: "请输入 大屏标题"}],
},
config: {
backgroundImage: []
}
}
},
created() {
this.dict.load('customizedDVs')
this.getInfo()
},
methods: {
getInfo() {
let {id} = this.$route.query
this.instance.post(`${this.urlPrefix}/appdiylargescreen/queryLargeScreenProjectDetailById?id=${id}`).then(res => {
if (res?.data) {
this.form = {
...res.data
}
if (res.data.relationLsIds) {
this.tableData = res.data.lsList.map(v => {
let conf = JSON.parse(v.config || '') || {}
return {
id: v.id,
title: v.title,
dv: conf.custom || '',
meta: JSON.stringify(conf.meta),
isCustom: !!conf.custom,
status: v.status
}
})
this.total = res.data.lsList.length
this.$nextTick(() => {
this.rowDrop()
})
}
}
})
},
onStatusChange (id) {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/enableLargeScreen?id=${id}`).then(res => {
if (res.code === 0) {
this.getInfo()
this.$message.success('操作成功')
}
})
},
rowDrop() {
const tbody = document.querySelector('.el-table__body-wrapper tbody')
const _this = this
Sortable.create(tbody, {
onEnd({newIndex, oldIndex}) {
const currRow = _this.tableData.splice(oldIndex, 1)[0]
_this.tableData.splice(newIndex, 0, currRow)
}
})
},
toViewer(id) {
this.$router.push({query: {id}, hash: "#preview"})
},
onChange(e) {
const ids = this.tableData.map(v => v.id)
if (ids.indexOf(e.id) < 0) {
this.tableData.push({
title: e.title,
id: e.id
})
} else {
const index = this.tableData.findIndex(v => v.id === e.id)
this.$set(this.tableData[index], 'title', e.title)
}
},
add() {
this.query = {
id: '',
name: this.form.name
}
this.isShowLayout = true
},
toEdit(id, isCustom, form) {
if (!isCustom) {
this.query = {
id,
name: this.form.name
}
this.isShowLayout = true
} else {
this.dialog = true
this.custom = {
...form,
}
}
},
remove(index) {
this.tableData.splice(index, 1)
},
confirm() {
this.$refs.form.validate((valid) => {
if (valid) {
const ids = this.tableData.map(v => v.id).join(',')
const names = this.tableData.map(v => v.name).join(',')
this.instance.post(`${this.urlPrefix}/appdiylargescreen/addOrUpdateLargeScreenProject`, {
...this.form,
relationLsIds: ids,
relationLsNames: names
}).then(res => {
if (res.code == 0) {
this.$message.success('提交成功')
this.home && this.home.refreshDvOptions && this.home.refreshDvOptions()
setTimeout(() => {
this.cancel()
}, 600)
}
})
}
})
},
cancel() {
this.$router.push({})
},
handleCustomizedDV() {
this.$refs.CustomDVFrom.validate(v => {
if (v) {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/addOrUpdateLargeScreen`, {
config: JSON.stringify({
custom: this.custom.dv,
meta: JSON.parse(this.custom.meta?.replace(/\\n/g, '') || null)
}),
status: 1,
id: this.custom.id,
title: this.custom.title,
}).then(res => {
if (res?.code == 0 && res?.data) {
this.$message.success('保存成功')
this.onChange(res.data)
this.dialog = false
}
})
}
})
}
}
}
</script>
<style scoped lang="scss">
</style>

View File

@@ -0,0 +1,459 @@
<template>
<div class="layout-config__group--wrapper">
<template v-if="options.type=='map'">
<ai-fold>
<div slot="title" class="flex w100">
<span class="layoutTitle fill">标记点设置</span>
<el-button type="text" icon="iconfont iconAdd" @click="handleMapMarker()">添加</el-button>
</div>
<config-item v-for="(item,i) in markers" :key="i" :label="item.label">
<el-input :value="[item.lat,item.lng].join(',')" readonly size="small"/>
<el-button type="text" icon="el-icon-edit" @click="handleMapMarker(item,i)"/>
<el-button type="text" icon="el-icon-delete" @click="removeMapMarker(i)"/>
</config-item>
</ai-fold>
<ai-fold title="标记点连线">
<ai-dialog-btn :modal="false" dialog-title="设置标记点连线" :customFooter="false" @confirm="savePolylines"
@open="handleMapPolylines">
<code-editor slot="btn" readonly :value="JSON.stringify(options.staticData.polylines, null, 2)" lang="json"
theme="github" width="100%" height="250" placeholder="测试默认值"/>
<el-button class="m-center" type="text" @click="handleMapPolylineDoc" :closable="false">
点击查看连线设置参考文档
</el-button>
<code-editor v-model="json" lang="json" theme="github" width="100%" height="440"/>
</ai-dialog-btn>
</ai-fold>
</template>
<template v-else-if="isPlot">
<ai-fold v-for="(chart,i) in options.charts" :key="i">
<div slot="title" class="flex w100">
<span class="layoutTitle fill" v-text="chart.title"/>
<el-button type="text" icon="el-icon-delete" @click="options.charts.splice(i,1)"/>
</div>
<config-item label="图表名">
<el-input size="small" v-model="chart.title"/>
</config-item>
<config-item label="图表模板">
<chart-picker v-model="chart.chart"/>
</config-item>
<datasource-picker v-model="chart.ds" :instance="instance" class="mar-b10"
@input="chart={...chart,...chart.ds},$emit('change',options)"/>
<config-item label="数据维度" v-if="chart.dataType !== 'staticData'">
<code-editor v-model="chart.djson" lang="json" theme="github" width="100%" height="100"
placeholder="参照echarts配置数据维度,为一个数组,数组的第一个值为维度值"
@change="v=>chart.dimensions=JSON.parse(v)"/>
</config-item>
</ai-fold>
<el-button type="text" icon="el-icon-plus" @click="options.charts.push({title:'新图表'})">添加图表</el-button>
</template>
<template v-else-if="options.type=='monitorCarousel'">
<config-item label="监控列表">
<el-button type="text" icon="el-icon-plus" @click="options.list.push({})"/>
</config-item>
<el-table size="mini" :data="options.list" border :row-style="{backgroundColor:'transparent'}">
<el-table-column label="监控类型">
<template v-slot="{row}">
<ai-select size="mini" v-model="row.monitorType" :select-list="monitorTypes"/>
</template>
</el-table-column>
<el-table-column label="监控地址">
<template v-slot="{row}">
<el-input v-if="['hik','dahua'].includes(row.monitorType)" size="mini" v-model="row.src" clearable/>
<div v-else-if="['cmcc','slw'].includes(row.monitorType)">
<el-input size="mini" v-model="row.api" clearable placeholder="请输入监控列表接口"/>
<ai-select v-model="row.did" :instance="instance" @change="handleMonitor(row)" size="mini"
:prop="{label:'name'}" :condition="e=>!!e.name&&!!e.id" class="mar-t8" :action="row.api"/>
</div>
</template>
</el-table-column>
<el-table-column width="60px" label="操作">
<template v-slot="{row,i}">
<el-button type="text" @click="$confirm('是否删除该监控?').then(()=>options.list.splice(i,1))">删除
</el-button>
</template>
</el-table-column>
</el-table>
</template>
<div class="layout-config__group" v-else-if="['hik','dahua'].includes(options.monitorType)">
<h2>基础设置</h2>
<config-item label="视频地址">
<el-input size="mini" v-model="options.src"/>
</config-item>
</div>
<div class="layout-config__group" v-else>
<h2>基础设置</h2>
<datasource-picker :options="options" :instance="instance" @input="$emit('change',options)"/>
</div>
<div class="layout-config__group" v-if="isTable">
<h2>表格设置</h2>
<code-editor v-model="json" theme="github" width="100%" height="440"
placeholder="参照dvScrollBoard设置表格"
@change="v=>options.tableConfig=JSON.parse(v)"/>
</div>
<div v-if="options.dataType!='staticData'&&options.type=='monitor'&&['cmcc','slw'].includes(options.monitorType)"
class="layout-config__group">
<h2>字段设置</h2>
<config-item label="监控视频">
<el-select size="mini" v-model="options.moniterId" placeholder="请选择监控视频" @change="onMoniterId">
<el-option
v-for="(item, index) in monitorList"
:key="index"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</config-item>
</div>
<div v-if="options.dataType!='staticData'&& keys.length &&!['table','monitor','map','plot'].includes(options.type)"
class="layout-config__group">
<h2>字段设置</h2>
<config-item label="X轴设置">
<el-select size="mini" v-model="options.dataX" placeholder="请选择X轴" @change="onChooseChange">
<el-option
v-for="(item, index) in keys"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</config-item>
<config-item label="Y轴设置">
<el-select size="mini" multiple :multiple-limit="options.type.indexOf('pie') > -1 ? 1 : 100"
v-model="options.dataY" collapse-tags placeholder="请选择Y轴"
@change="onChooseChange">
<el-option
v-for="(item, index) in keys"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</config-item>
</div>
<ai-dialog class="layout-config__edit" v-model="showMapEditor" title="设置地图标记点" append-to-body
@close="form={}" @confirm="saveMarker">
<el-form :model="form" size="small" ref="mapMarker" label-width="120px">
<el-form-item label="标记点名称" :rules="{required:true,message:'请填写标记点名称'}">
<el-input placeholder="用于地图上展示对标记点的文字标签" v-model="form.label" clearable/>
</el-form-item>
<el-form-item label="标记点图标">
<el-input placeholder="用于地图上展示对标记点的显示图标" v-model="form.icon" clearable/>
</el-form-item>
<div flex>
<el-form-item class="fill" label="经度" :rules="{required:true,message:'请填写标记点经度'}">
<el-input v-model="form.lng" clearable placeholder="小数点位保留至少6位数"/>
</el-form-item>
<el-form-item class="fill" label="纬度" :rules="{required:true,message:'请填写标记点纬度'}">
<el-input v-model="form.lat" clearable placeholder="小数点位保留至少6位数"/>
</el-form-item>
</div>
<el-form-item label="弹窗内容">
<ai-editor v-model="form.infoWindowHtml" :instance="instance"/>
</el-form-item>
</el-form>
</ai-dialog>
</div>
</template>
<script>
import CodeEditor from 'bin-ace-editor'
import 'brace/mode/json'
import 'brace/snippets/json';
import 'brace/theme/github';
import 'brace/theme/monokai';
import AiDialogBtn from "dui/packages/layout/AiDialogBtn.vue";
import AiFold from "dui/packages/layout/AiFold.vue";
import ChartPicker from "./chartPicker.vue";
import {monitorTypes} from "../config";
import ConfigItem from "./configItem.vue";
import DatasourcePicker from "./datasourcePicker.vue";
import AiSelect from "dui/packages/basic/AiSelect.vue";
import {DvCompData} from "@dui/dv";
export default {
name: 'dataConfig',
model: {
prop: "options",
event: "change"
},
props: {
options: Object,
instance: Function,
dict: Object,
},
data() {
return {
dataTypes: Object.entries(DvCompData.types).map(e => ({id: e[0], label: e[1]})),
json: "",
keys: [],
monitorList: [],
list: [],
showMapEditor: false,
form: {},
datasource: {},
monitorTypes
}
},
computed: {
markers: v => v.options.staticData?.markers || [],
isTable: v => v.options.type == 'table',
isPlot: v => v.options.type == 'plot'
},
components: {
AiSelect,
DatasourcePicker,
ConfigItem,
ChartPicker,
AiFold,
AiDialogBtn,
CodeEditor,
},
created() {
if (this.options.type == "map" && Array.isArray(this.options.staticData)) {//处理历史数据,并更新最新数据结构
const values = this.$copy(this.options)
values.staticData = {markers: this.$copy(this.options.staticData)}
this.$emit("change", values)
} else if (this.isTable) {
this.json = JSON.stringify(this.options.tableConfig)
} else if (this.options.type == "monitorCarousel") {
const {list = []} = this.options
this.$set(this.options, 'list', list)
} else if (this.isPlot) {
this.options.charts = this.options.charts.map(e => ({...e, ds: e}))
}
},
mounted() {
if ((this.options.dataY && this.options.dataY.length && this.options.dataX) || this.options.type === 'monitor') {
const api = this.options.dataType === 'apiData' ? this.options.api : `/app/appdiylargescreen/statisticsByLsid?id=${this.options.sourceDataId}`
this.instance.post(api).then(res => {
if (res.code == 0) {
if (res.data.length && this.options.type !== 'monitor') {
this.list = res.data
this.keys = Object.keys(res.data[0])
this.$nextTick(() => {
this.onChooseChange()
})
} else if (this.options.type === 'monitor') {
this.monitorList = res.data
if (this.options.src) {
const obj = res.data.filter(v => this.options.title === v.name)
if (obj.length) {
this.options.src = obj[0].url
}
}
}
}
})
}
},
methods: {
onMoniterId(e) {
this.instance.post(`/app/appzyvideoequipment/getWebSdkUrl?deviceId=${e}`).then(res => {
if (res.code == 0) {
this.options.src = JSON.parse(res.data).url
}
})
},
handleMonitor(row) {
this.instance.post(`/app/appzyvideoequipment/getWebSdkUrl?deviceId=${row.did}`).then(res => {
if (res.code == 0) {
this.$set(row, 'src', JSON.parse(res.data).url)
}
})
},
onChooseChange() {
let arr = []
if (this.options.dataX && this.options.dataY.length) {
this.list.forEach(item => {
let obj = {}
this.options.dataY.forEach(v => {
obj[v] = item[v]
})
arr.push({
[this.options.dataX]: item[this.options.dataX],
...obj
})
})
this.options[this.options.dataType] = arr
}
},
handleMapMarker(v = {}, index) {
this.form = this.$copy({...v, index})
this.showMapEditor = true
},
saveMarker() {
this.$refs.mapMarker.validate().then(() => {
const i = this.$copy(this.form.index)
delete this.form.index
if (i > -1) {
this.options.staticData.markers.splice(i, 1, this.form)
} else this.options.staticData.markers.push(this.form)
this.showMapEditor = false
})
},
removeMapMarker(i) {
this.$confirm("是否要删除该标记点").then(() => {
this.options.staticData.markers.splice(i, 1)
})
},
savePolylines() {
this.$set(this.options.staticData, 'polylines', JSON.parse(this.json))
},
handleMapPolylines() {
this.json = JSON.stringify(this.options.staticData.polylines || [{path: [[31.547706, 107.224325], [31.552456, 107.201185]]}])
},
handleMapPolylineDoc() {
window.open('https://lbs.amap.com/api/javascript-api-v2/documentation#polyline')
}
}
}
</script>
<style lang="scss">
.el-dialog__body {
.jsoneditor-vue {
height: 480px;
.jsoneditor-poweredBy {
display: none;
}
}
}
.ai-dialog__wrapper {
color: #333;
}
.layout-config__group--wrapper {
:deep(.layout-config__group) {
padding: 10px 10px 20px;
border-bottom: 1px solid #000000;
&:last-child {
border: none;
}
& > h2 {
margin-bottom: 20px;
color: #FFFFFF;
font-size: 15px;
font-weight: 700;
}
.layoutTitle {
color: #FFFFFF;
font-size: 15px;
font-weight: 700;
}
}
:deep(.layout-config__item) {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 10px;
&:last-child {
margin-bottom: 0;
}
label {
flex-shrink: 0;
width: 60px;
color: #FFFFFF;
font-size: 12px;
text-align: right;
}
.el-select .el-tag {
color: #fff;
background: transparent;
}
.el-input__icon {
color: #fff;
}
.el-switch__label {
color: #fff;
}
.el-select {
width: 100%;
&:last-child {
margin-right: 0;
}
input {
background: #262C33;
font-size: 12px;
color: #fff;
border: 1px solid #030411;
}
.el-input__icon {
color: #fff;
}
}
:deep(.el-collapse) {
height: 18px;
}
}
.el-icon-delete {
color: #f46;
}
.el-button--text + .el-button--text {
margin-left: 0;
}
input {
background: #262C33;
font-size: 12px;
color: #fff;
border: 1px solid #030411;
}
.layout-config__item--right {
display: flex;
align-items: center;
justify-content: flex-end;
text-align: right;
margin-left: 30px;
}
.el-table {
background-color: transparent;
tr {
background-color: transparent;
}
.el-table__cell {
color: white;
background-color: #1D2127 !important;
input:disabled {
background-color: transparent;
border-color: transparent;
color: white;
padding: 0;
}
&:last-of-type {
border-left: 1px solid #fff;
}
}
}
}
</style>

View File

@@ -0,0 +1,91 @@
<template>
<section class="chartPicker">
<ai-dialog-btn :modal="false" dialog-title="选择图表模板" :customFooter="false"
@confirm="handleConfirm" @open="handleOpenDialog">
<template #btn>
<img class="pointer thumb" v-if="current.thumb" :src="current.thumb"/>
<el-button v-else type="text">选择图表</el-button>
</template>
<div class="charts">
<div class="item pointer" v-for="(tpl,i) in tpls" :key="i" :class="{selected:selected==tpl.type}"
@click="selected=tpl.type">
<img :src="tpl.thumb"/>
<div v-text="tpl.label"/>
</div>
</div>
</ai-dialog-btn>
</section>
</template>
<script>
import AiDialogBtn from "dui/packages/layout/AiDialogBtn";
import {chartTpl} from "../config";
export default {
name: "chartPicker",
components: {AiDialogBtn},
model: {
prop: "value",
event: "input"
},
props: {
value: String,
tpls: {default: () => chartTpl.map(e => e.list).flat()}
},
data() {
return {
selected: null
}
},
computed: {
current: v => v.tpls.find(e => e.type == v.value) || {}
},
watch: {
value(v) {
v && this.$emit("config", this.$echartTpls[v])
}
},
methods: {
handleConfirm() {
this.$emit("input", this.selected)
},
handleOpenDialog() {
this.selected = this.$copy(this.value)
}
},
}
</script>
<style scoped lang="scss">
.chartPicker {
text-align: left;
.pointer {
cursor: pointer;
}
.thumb {
width: 200px;
height: 90px;
}
.charts {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
gap: 8px;
.item {
text-align: center;
padding: 2px;
border: 2px solid transparent;
& > img {
width: 100%;
height: 90px;
}
&.selected, &:hover {
border-color: #46f;
}
}
}
}
</style>

View File

@@ -0,0 +1,89 @@
<template>
<section class="componentConfig">
<div class="layout-right__content--wrapper">
<div class="layout-config__group">
<h2>基础设置</h2>
<div class="layout-config__item">
<label>图表尺寸</label>
<div class="layout-config__item--right">
<el-input-number size="mini" :min="0" v-model="config.width" controls-position="right"/>
<el-input-number size="mini" :min="0" v-model="config.height" controls-position="right"/>
</div>
</div>
<div class="layout-config__item">
<label>图表位置</label>
<div class="layout-config__item--right">
<el-input-number size="mini" :min="0" v-model="config.left" controls-position="right"/>
<el-input-number size="mini" :min="0" v-model="config.top" controls-position="right"/>
</div>
</div>
<config-item label="內边距">
<el-input size="mini" v-model="config.padding" clearable placeholder="请输入符合css的padding合法值"/>
</config-item>
</div>
</div>
<div class="layout-right__content--wrapper">
<div class="layout-config__group">
<h2>组件设置</h2>
<config-extra v-model="config"/>
</div>
</div>
<div class="layout-right__content--wrapper">
<div class="layout-config__group">
<h2>弹窗设置</h2>
<config-item label="标题">
<el-input size="mini" clearable placeholder="请输入弹窗标题" v-model="config.dialogTitle"/>
</config-item>
<config-item label="内容" v-if="!['table','AiDvTable','AiDvMap','linkageMap'].includes(config.type)">
<ai-dialog-btn dialog-title="弹窗内容" text="打开编辑器" :modal="false">
<ai-editor clearable placeholder="请输入弹窗内容" v-model="config.dialogContent" :instance="instance"/>
</ai-dialog-btn>
</config-item>
</div>
</div>
</section>
</template>
<script>
import ConfigItem from "./configItem";
import ConfigExtra from "./configExtra.vue";
export default {
name: 'componentConfig',
components: {ConfigExtra, ConfigItem},
props: {
config: {default: () => ({})},
instance: Function,
dict: Object,
},
}
</script>
<style lang="scss" scoped>
.componentConfig {
.table-config {
& > div {
display: flex;
align-items: center;
justify-content: space-between;
width: 232px;
:deep( .el-select ) {
width: 80px;
}
.el-select {
width: 100%;
.el-input {
width: 100%;
:deep( input ) {
width: 80px
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,239 @@
<script>
import GroupItem from "./groupItem";
import ConfigItem from "./configItem";
import ChartPicker from "./chartPicker";
import JsonEditor from "./jsonEditor";
import {layers, monitorTypes} from "../config";
import AiDvSummary from "@dui/dv/layout/AiDvSummary/AiDvSummary";
export default {
name: "configExtra",
components: {JsonEditor, ChartPicker, ConfigItem, GroupItem},
props: ['config'],
model: {
prop: 'config',
event: 'input'
},
data() {
return {
borderList: ['border0', 'border1', 'border2', 'border3', 'border4', 'border5', 'border6', 'border7', 'border8', 'border9', 'border10',
'border11', 'border12', 'border13', 'border14', 'border15'],//边框待选项
layers, monitorTypes,
tableStatus: [
{label: '是', value: '1'},
{label: '否', value: '0'}
],
positionList: [
{label: "左上", id: "lt"},
{label: "右上", id: "rt"},
{label: "左下", id: "lb"},
{label: "右下", id: "rb"}
],
}
},
computed: {
summaryOps: () => Object.keys(AiDvSummary.components).map(e => ({label: e, id: e})),
values: v => v.config?.[v.config?.dataType] || v.config.data
},
watch: {
values: {
immediate: true, deep: true,
handler() {
if (this.config.type === 'AiDvTable') {
this.config.config = this.values?.map((v, i) => {
return {
color: this.config.config?.[i]?.color || '',
width: this.config.config?.[i]?.width || '',
align: this.config.config?.[i]?.align || '',
}
})
}
}
}
},
}
</script>
<template>
<section class="configExtra">
<config-item label="标题">
<el-input v-model="config.summaryTitle" size="mini" v-if="config.display === 'summary2'" placeholder="请输入标题"/>
<el-input v-else v-model="config.title" size="mini" placeholder="请输入标题"/>
</config-item>
<config-item label="边框" v-if="config.type !== 'display'">
<el-select size="mini" v-model="config.border" placeholder="请选择边框" clearable>
<el-option
v-for="(item, index) in borderList"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</config-item>
<config-item label="图表模板">
<chart-picker v-model="config.type" :tpls="layers" @input="v=>config.echartOps=$echartTpls[v]"/>
</config-item>
<template v-if="/(AiDvMap|linkageMap)/.test(config.type)">
<config-item label="地图数据(geoJSON)">
<el-input v-model="config.geoJson" size="mini" clearable placeholder="请输入geoJson的URL地址"/>
</config-item>
</template>
<template v-if="/linkageMap/.test(config.type)">
<config-item v-for="(item,i) in config.summaryConfigs" :key="i" :label="`统计${i+1}`">
<ai-select placeholder="请选择位置" v-model="item.pos" :select-list="positionList" size="mini"/>
<ai-select placeholder="请选择类型" v-model="item.display" :select-list="summaryOps" size="mini"/>
</config-item>
</template>
<template v-if="/tabs/.test(config.type)">
<group-item v-for="(tab,i) in values" :key="i" :label="i">
<group-item v-for="(comp,j) in tab" :key="j" :label="comp.name">
<config-extra v-model="tab[j]"/>
</group-item>
</group-item>
</template>
<template v-if="/Chart/.test(config.type)">
<config-item label="图表配置项" top-label>
<json-editor v-model="config.echartOps"/>
</config-item>
</template>
<config-item label="视频地址" v-if="config.type === 'video'">
<el-input v-model="config.src" size="mini"/>
</config-item>
<config-item label="图片URL" v-if="config.type=='img'">
<el-input v-model="config.src" size="mini" clearable placeholder="请输入图片URL"/>
</config-item>
<config-item label="视频类型" v-if="config.type === 'monitor'">
<ai-select size="mini" v-model="config.monitorType" :select-list="monitorTypes"/>
</config-item>
<config-item label="样式" v-if="config.type === 'AiRanking'">
<el-select size="mini" v-model="config.subType" placeholder="请选择样式" clearable>
<el-option label="样式1" value="Ranking1"></el-option>
<el-option label="样式2" value="Ranking2"></el-option>
<el-option label="样式3" value="Ranking3"></el-option>
</el-select>
</config-item>
<template v-if="config.type === 'table' || config.type === 'AiDvTable'">
<config-item label="显示排名">
<el-select size="mini" v-model="config.isShowIndex" placeholder="请选择" clearable>
<el-option
v-for="(item, index) in tableStatus"
:key="index"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</config-item>
<config-item label="斑马纹" v-if="config.type === 'AiDvTable'">
<el-select size="mini" v-model="config.stripe" placeholder="请选择" clearable>
<el-option
label="是"
value="1">
</el-option>
<el-option
label="否"
value="0">
</el-option>
</el-select>
</config-item>
<config-item label="简易样式" v-if="config.type === 'AiDvTable'">
<el-select size="mini" v-model="config.simple" placeholder="请选择" clearable>
<el-option
label="是"
value="1">
</el-option>
<el-option
label="否"
value="0">
</el-option>
</el-select>
</config-item>
<config-item label="表格行数" v-if="config.type !== 'AiDvTable'">
<el-input-number size="mini" style="width: 232px" :min="0" v-model="config.rowNum" controls-position="right"/>
</config-item>
<config-item v-if="config.type === 'AiDvTable'" v-for="(item, i) in config.config" :key="i" :label="`第${i+1}列`">
<el-select size="mini" style="width: 80px;" v-model="item.align" placeholder="请选择" clearable>
<el-option label="居中" value="center"></el-option>
<el-option label="居左" value="left"></el-option>
<el-option label="居右" value="right"></el-option>
</el-select>
<el-color-picker v-model="item.color" class="mar-h10" size="mini"/>
<el-input-number v-model="item.width" label="描述文字" controls-position="right" size="mini"/>
</config-item>
</template>
<template v-if="config.type === 'map'">
<div class="layout-config__item">
<label>遮罩层</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="config.mask" placeholder="请选择" clearable>
<el-option label="是" value="1"></el-option>
<el-option label="否" value="2"></el-option>
</el-select>
</div>
</div>
<div class="layout-config__item">
<label>地图图层</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="config.layers" placeholder="请选择" clearable>
<el-option label="地图" value="vector"/>
<el-option label="卫星" value="satellite"/>
</el-select>
</div>
</div>
<div class="layout-config__item">
<label>选择地区</label>
<div class="layout-config__item--right">
<AiAreaGet :instance="instance" :valueLevel="3" v-model="config.areaId" placeholder="地图展示的中心"/>
</div>
</div>
<div class="layout-config__item">
<label>限制地区</label>
<div class="layout-config__item--right">
<ai-select v-model="config.limitArea" :selectList="dict.getDict('yesOrNo')"/>
</div>
</div>
<div class="layout-config__item">
<label>显示标签</label>
<div class="layout-config__item--right">
<ai-select v-model="config.alwaysShow" :selectList="dict.getDict('yesOrNo')"/>
</div>
</div>
<div class="layout-config__item">
<label>展示光轨</label>
<div class="layout-config__item--right">
<ai-select v-model="config.pulseLines" :selectList="dict.getDict('yesOrNo')"/>
</div>
</div>
<div class="layout-config__item layout-config__item--input">
<label>地图样式</label>
<div class="layout-config__item--right">
<el-input size="mini" v-model="config.mapStyle" clearable placeholder="请输入地图样式ID,从UI处获取.."/>
</div>
</div>
<div class="layout-config__item layout-config__item--input">
<label>3D地图</label>
<div class="layout-config__item--right">
<ai-select v-model="config.is3d" :selectList="dict.getDict('yesOrNo')"/>
</div>
</div>
<div class="layout-config__item layout-config__item--input" v-if="config.is3d==1">
<label>3D环绕</label>
<div class="layout-config__item--right">
<ai-select v-model="config.is3dAround" :selectList="dict.getDict('yesOrNo')"/>
</div>
</div>
<div class="layout-config__item layout-config__item--input">
<label>显示图例</label>
<div class="layout-config__item--right">
<ai-select v-model="config.showPingchangMapLegend" :selectList="dict.getDict('yesOrNo')"/>
</div>
</div>
</template>
<config-item label="数据汇总" v-if="config.type === 'summary'">
<ai-select size="mini" v-model="config.display" placeholder="请选择类型" :select-list="summaryOps"/>
</config-item>
</section>
</template>
<style scoped lang="scss">
</style>

View File

@@ -0,0 +1,111 @@
<template>
<section class="configItem" :class="{topLabel}">
<label :class="{bold}" v-text="label"/>
<div class="content fill">
<slot v-if="$slots.default"/>
<div v-else-if="value" v-html="value"/>
</div>
</section>
</template>
<script>
export default {
name: "configItem",
props: {
label: String,
value: {default: null},
topLabel: Boolean,
bold: Boolean
},
}
</script>
<style scoped lang="scss">
.configItem {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 10px;
&:last-child {
margin-bottom: 0;
}
& > label {
flex-shrink: 0;
width: 60px;
color: #FFFFFF;
font-size: 12px;
text-align: right;
&.bold {
font-weight: bold;
}
}
.el-select .el-tag {
color: #fff;
background: transparent;
}
.el-input__icon {
color: #fff;
}
.el-switch__label {
color: #fff;
}
.el-select, .ai-select {
width: 100%;
&:last-child {
margin-right: 0;
}
input {
background: #262C33;
font-size: 12px;
color: #fff;
border: 1px solid #030411;
}
.el-input__icon {
color: #fff;
}
}
:deep(.el-collapse) {
height: 18px;
}
:deep(.content) {
display: flex;
align-items: center;
justify-content: flex-end;
text-align: right;
margin-left: 27px;
input, textarea {
background: #262C33;
font-size: 12px;
color: #fff;
border: 1px solid #030411;
}
}
&.topLabel {
flex-direction: column;
align-items: normal;
& > label {
margin-bottom: 8px;
}
.content {
flex-shrink: 0;
width: 100%;
margin-left: 0;
}
}
}
</style>

View File

@@ -0,0 +1,119 @@
<template>
<section class="datasourcePicker">
<config-item label="数据类型">
<ai-select v-model="source.dataType" placeholder="请选择数据类型" :select-list="dataTypes"/>
</config-item>
<div class="codeEditor" v-if="['htmlData'].includes(source.dataType)">
<ai-dialog-btn :modal="false" dialog-title="编辑器" :customFooter="false"
@confirm="changeData(JSON.parse(content))" @open="content=contentstr">
<code-editor slot="btn" readonly :value="contentstr" :lang="dataLang" theme="github" width="100%" height="250"/>
<code-editor v-model="content" :lang="dataLang" theme="github" width="100%" height="440" wrap/>
</ai-dialog-btn>
</div>
<template v-else-if="source.dataType === 'staticData'">
<config-item label="设置数据" topLabel>
<json-editor v-model="options.staticData" mainMenuBar/>
</config-item>
</template>
<config-item v-else-if="source.dataType === 'dynamicData'" label="数据源">
<ai-select v-model="source.sourceDataId" placeholder="请选择数据源" :instance="instance"
:prop="{label:'description'}" @change="changeData"
action="/app/appdiylargescreen/allDatasourceByPage"/>
</config-item>
<config-item label="接口地址" v-else-if="source.dataType === 'apiData'">
<el-input size="small" v-model="source.api" @change="changeData" placeholder="请输入数据接口URL"/>
</config-item>
</section>
</template>
<script>
import AiDialogBtn from "dui/packages/layout/AiDialogBtn.vue";
import ConfigItem from "./configItem.vue";
import CodeEditor from 'bin-ace-editor'
import 'brace/mode/json'
import 'brace/snippets/json';
import 'brace/theme/github';
import 'brace/theme/monokai';
import JsonEditor from "./jsonEditor.vue";
import {DvCompData} from "@dui/dv";
export default {
name: "datasourcePicker",
components: {JsonEditor, ConfigItem, AiDialogBtn, CodeEditor},
model: {
event: "input",
prop: "options"
},
props: {
options: Object,
instance: Function
},
data() {
return {
dataTypes: Object.entries(DvCompData.types).map(e => ({id: e[0], label: e[1]})),
content: "",
loading: false,
}
},
computed: {
contentstr: v => JSON.stringify(v.options.staticData),
dataLang: v => v.options.dataType == 'htmlData' ? 'html' : 'json',
source: {
set(v) {
this.$emit("input", v)
},
get() {
return this.options
}
},
staticDataOps() {
const columnProp = "name", ops = {colConfigs: [], tableData: []}
if (Array.isArray(this.options.staticData)) {
const columns = []
ops.colConfigs = []
this.options.staticData.map((row, i) => {
const prop = `c${i || ""}`
ops.colConfigs.push({label: row[columnProp] || row.key, prop})
Object.entries(row).map(([k, v]) => {
if (/^v/.test(k) && k != "value") {
const item = ops.tableData[k.substring(1) || 0] || {}
item[prop] = v
ops.tableData[k.substring(1) || 0] = item
} else if (![columnProp, 'key'].includes(k)) {
const index = columns.findIndex(e => k == e)
if (index > -1) {
const item = ops.tableData[index] || {}
item[prop] = v
ops.tableData[index] = item
} else {
columns.push(k)
const newIndex = columns.length - 1
const item = ops.tableData[newIndex] || {}
item[prop] = v
ops.tableData[newIndex] = item
}
}
})
})
ops.tableData = ops.tableData.map(e => ({...e, $cellEdit: false}))
}
return ops
}
},
methods: {
changeData(sdata) {
this.source.dataType == 'staticData' ? this.source.staticData = sdata :
new DvCompData(this.source, this.instance).getData().then(data => {
this.source[this.source.dataType] = data
})
}
}
}
</script>
<style scoped lang="scss">
.datasourcePicker {
.codeEditor {
position: relative;
padding-left: 10px;
}
}
</style>

View File

@@ -1,463 +0,0 @@
<template>
<div class="layout-config__group--wrapper">
<ai-dialog
append-to-body
:visible.sync="isShowEditor"
width="1000px"
class="layout-config__edit"
title="编辑器"
@onConfirm="onConfirm">
<div>
<code-editor v-model="json" :lint="true" auto-format height="440px"></code-editor>
</div>
</ai-dialog>
<div class="layout-config__group" v-if="options.monitorType !== 'hik' && options.monitorType !== 'dahua'">
<h2>基础设置</h2>
<div class="layout-config__item">
<label>数据类型</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="options.dataType" placeholder="请选择数据类型">
<el-option
v-for="item in dataTypes"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
</div>
<div class="layout-config__code" v-if="options.dataType === 'staticData'">
<el-button @click="showEditor" class="layout-config__code--btn" title="编辑" type="text" icon="iconfont iconjdq_led_edit"></el-button>
<vue-json-editor
:value="options.staticData"
:show-btns="false"
mode="view"
lang="zh">
</vue-json-editor>
</div>
<template v-else-if="options.dataType === 'dynamicData'">
<div class="layout-config__item">
<label>数据源</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="options.sourceDataId" placeholder="请选择数据源" @change="onDataChange">
<el-option
v-for="item in sourceData"
:key="item.id"
:label="item.description"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-else>
<div class="layout-config__item">
<label>接口地址</label>
<div class="layout-config__item--right">
<el-input size="mini" v-model="options.api" @blur="onApiChange"></el-input>
</div>
</div>
</template>
</div>
<div class="layout-config__group" v-if="options.monitorType === 'hik' || options.monitorType === 'dahua'">
<h2>基础设置</h2>
<div class="layout-config__item">
<label>视频地址</label>
<div class="layout-config__item--right">
<el-input size="mini" v-model="options.src"></el-input>
</div>
</div>
</div>
<div class="layout-config__group" v-if="options.dataType !== 'staticData' && options.type === 'monitor' && (options.monitorType === 'cmcc' || options.monitorType === 'slw')">
<h2>字段设置</h2>
<div class="layout-config__item">
<label>监控视频</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="options.moniterId" placeholder="请选择监控视频" @change="onMoniterId">
<el-option
v-for="(item, index) in monitorList"
:key="index"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
</div>
<div class="layout-config__group" v-if="options.dataType !== 'staticData' && options.type !== 'monitor' && keys.length && options.type !== 'table'">
<h2>字段设置</h2>
<div class="layout-config__item">
<label>X轴设置</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="options.dataX" placeholder="请选择X轴" @change="onChooseChange">
<el-option
v-for="(item, index) in keys"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</div>
</div>
<div class="layout-config__item">
<label>Y轴设置</label>
<div class="layout-config__item--right">
<el-select size="mini" multiple :multiple-limit="options.type.indexOf('pie') > -1 ? 1 : 100" v-model="options.dataY" collapse-tags placeholder="请选择Y轴" @change="onChooseChange">
<el-option
v-for="(item, index) in keys"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</div>
</div>
</div>
</div>
</template>
<script>
import vueJsonEditor from 'vue-json-editor'
import { CodeEditor } from 'bin-code-editor'
import 'bin-code-editor/lib/styles/index.css'
export default {
name: 'dataCofing',
props: {
options: Object,
instance: Function,
dict: Object,
params: Object,
urlPrefix: String
},
data () {
return {
dataTypes: [
{
value: 'staticData',
label: '静态数据'
},
{
value: 'dynamicData',
label: '动态数据'
},
{
value: 'apiData',
label: '接口'
}
],
isShowEditor: false,
json: {},
sourceDataId: '',
sourceData: [],
keys: [],
monitorList: [],
list: [],
jsonData: `{"title":"测试json数据","children":[{"name":"子项名称", "desc":"子项说明" },{"name":"子项名称1", "desc":"子项说明1" }]}`
}
},
components: {
vueJsonEditor,
CodeEditor
},
mounted () {
this.getDataList()
if ((this.options.dataY && this.options.dataY.length && this.options.dataX) || this.options.type === 'monitor') {
const api = this.options.dataType === 'apiData' ? this.options.api : `${this.urlPrefix}/appdiylargescreen/statisticsByLsid?id=${this.options.sourceDataId}`
this.instance.post(api).then(res => {
if (res.code == 0) {
if (res.data.length && this.options.type !== 'monitor') {
this.list = res.data
this.keys = Object.keys(res.data[0])
this.$nextTick(() => {
this.onChooseChange()
})
} else if (this.options.type === 'monitor') {
this.monitorList = res.data
if (this.options.src) {
const obj = res.data.filter(v => this.options.title === v.name)
if (obj.length) {
this.options.src = obj[0].url
}
}
}
}
})
}
},
methods: {
showEditor () {
this.json = JSON.stringify(this.options.staticData)
this.isShowEditor = true
},
onMoniterId (e) {
this.instance.post(`${this.urlPrefix}/appzyvideoequipment/getWebSdkUrl?deviceId=${e}`).then(res => {
if (res.code == 0) {
this.options.src = JSON.parse(res.data).url
}
})
},
getDataList () {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/allDatasourceByPage`, null, {
params: {
current: 1,
size: 10000
}
}).then(res => {
if (res.code == 0) {
this.sourceData = res.data.records
}
})
},
onApiChange () {
this.options.dataX = ''
this.options.dataY = []
this.instance.post(this.options.api).then(res => {
if (res.code == 0) {
if (res.data.length) {
if (this.options.type === 'table') {
const keys = Object.keys(res.data[0])
const list = res.data
this.options.apiData = keys.map(v => {
let obj = {}
list.forEach((item, index) => {
obj[`v${index}`] = item[v]
})
return {
row: v,
...obj
}
})
} else if (this.options.type === 'summary') {
if (this.options.display === 'summary9') {
this.options.apiData = res.data
} else {
this.options.apiData = Object.keys(res.data[0]).map(item => {
return {
key: item,
value: res.data[0][item]
}
})
}
} else if (this.options.type === 'monitor') {
this.monitorList = res.data
} else {
this.list = res.data
this.keys = Object.keys(res.data[0])
}
}
} else {
this.options.dynamicData = []
}
})
},
onChooseChange () {
let arr = []
if (this.options.dataX && this.options.dataY.length) {
this.list.forEach(item => {
let obj = {}
this.options.dataY.forEach(v => {
obj[v] = item[v]
})
arr.push({
[this.options.dataX]: item[this.options.dataX],
...obj
})
})
this.options[this.options.dataType] = arr
}
},
onDataChange (e) {
this.options.dataX = ''
this.options.dataY = []
this.instance.post(`${this.urlPrefix}/appdiylargescreen/statisticsByLsid?id=${e}`).then(res => {
if (res.code == 0) {
if (res.data.length) {
if (this.options.type === 'table') {
const keys = Object.keys(res.data[0])
const list = res.data
this.options.dynamicData = keys.map(v => {
let obj = {}
list.forEach((item, index) => {
obj[`v${index}`] = item[v]
})
return {
row: v,
...obj
}
})
} else if (this.options.type === 'summary') {
this.options.dynamicData = Object.keys(res.data[0]).map(item => {
return {
key: item,
value: res.data[0][item]
}
})
} else {
this.list = res.data
this.keys = Object.keys(res.data[0])
}
} else {
this.options.dynamicData = []
}
}
})
},
onConfirm () {
this.$set(this.options, 'staticData', JSON.parse(this.json))
this.isShowEditor = false
this.$emit('change')
}
}
}
</script>
<style lang="scss">
.el-dialog__body {
.jsoneditor-vue {
height: 480px;
.jsoneditor-poweredBy {
display: none;
}
}
}
.layout-config__group--wrapper {
.layout-config__code .jsoneditor-vue {
.jsoneditor-menu {
display: none;
}
.jsoneditor {
border: 1px solid #030411;
background: #0e1013;
}
.jsoneditor-field {
color: gray;
}
.jsoneditor-tree button:focus {
background-color: transparent;
outline: none;
}
}
.layout-config__group {
padding: 10px 10px 20px;
border-bottom: 1px solid #000000;
&:last-child {
border: none;
}
.layout-config__code {
position: relative;
padding-left: 10px;
.layout-config__code--btn {
position: absolute;
right: 0;
top: 0;
color: gray;
z-index: 1;
&:hover {
opacity: 0.8 ;
}
}
}
& > h2 {
margin-bottom: 20px;
color: #FFFFFF;
font-size: 15px;
font-weight: 700;
}
}
.layout-config__item {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 10px;
&:last-child {
margin-bottom: 0;
}
label {
flex-shrink: 0;
width: 60px;
color: #FFFFFF;
font-size: 12px;
text-align: right;
}
.layout-config__item--right {
display: flex;
align-items: center;
justify-content: flex-end;
width: 200px;
text-align: right;
}
.el-select .el-tag {
color: #fff;
background: transparent;
}
input {
background: #262C33;
font-size: 12px;
color: #fff;
border: 1px solid #030411;
}
.el-input__icon {
color: #fff;
}
.el-switch__label {
color: #fff;
}
.el-select {
width: 100%;
&:last-child {
margin-right: 0;
}
input {
background: #262C33;
font-size: 12px;
color: #fff;
border: 1px solid #030411;
}
.el-input__icon {
color: #fff;
}
}
}
}
</style>

View File

@@ -0,0 +1,32 @@
<script>
export default {
name: "groupItem",
props: ['label']
}
</script>
<template>
<section class="groupItem">
<h2 v-if="label" v-text="label"/>
<slot/>
</section>
</template>
<style scoped lang="scss">
.groupItem {
padding: 10px 10px 20px;
border-bottom: 1px solid #000000;
&:last-child {
border: none;
}
& > h2 {
margin-bottom: 20px;
color: #FFFFFF;
font-size: 15px;
font-weight: 700;
}
}
</style>

View File

@@ -0,0 +1,98 @@
<script>
export default {
name: "jsonEditor",
model: {
event: "input",
prop: "value"
},
props: {
value: {default: () => ({})}
},
data() {
return {
editor: null,
fullscreen: false
}
},
watch: {
value(v) {
const content = this.editor.get()
if (v && content && JSON.stringify(v) != JSON.stringify(content)) {
this.editor?.set(v)
}
}
},
methods: {
init() {
const {JSONEditor} = window
if (!this.editor && JSONEditor) {
const {mode, search, mainMenuBar, navigationBar} = this.$attrs
this.editor = new JSONEditor(this.$el, {
modes: ['code', 'form', 'tree'],
language: 'zh-CN', mode, search, mainMenuBar, navigationBar, statusBar: true,
onChange: () => {
this.$emit("input", this.editor.get())
},
}, this.value)
} else setTimeout(() => this.init(), 500)
const fullscreenBtn = this.$el.querySelector(".fullscreenBtn")
if (!fullscreenBtn) {
const btn = document.createElement("div")
btn.className = "fullscreenBtn el-icon-full-screen"
btn.onclick = evt => {
evt.stopPropagation()
this.fullscreen = !this.fullscreen
}
this.$el.appendChild(btn)
}
}
},
mounted() {
this.init()
},
beforeDestroy() {
this.editor?.destroy()
}
}
</script>
<template>
<section class="jsoneditor" @contextmenu.stop :class="{fullscreen}"/>
</template>
<style scoped lang="scss">
.jsoneditor {
position: relative;
&.fullscreen {
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 80vw;
height: 80vh;
z-index: 202403221146;
}
:deep(.ace-jsoneditor) {
font-size: 14px !important;
}
:deep(.fullscreenBtn) {
position: absolute;
z-index: 202403221132;
right: 6px;
top: 0;
height: 35px;
color: white;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
&:hover {
color: rgba(white, .6);
}
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,22 +1,16 @@
<template>
<section class="preview">
<ai-dv-wrapper :views="[{label: '返回'}]" :theme="config.theme" @change="$router.back()" v-if="screenId" :title="info.name">
<ai-dv-background
:theme="config.theme"
v-if="config.length || config.theme === '1'"
:src="config.theme === '1' ? 'https://cdn.cunwuyun.cn/dvcp/dv/img/dj-bg.png' : config.backgroundImage[0].url">
</ai-dv-background>
<app-gigscreen-viewer :urlPrefix="urlPrefix" :instance="instance" :dict="dict" :id="screenId"/>
<ai-dv-wrapper :views="[{label: '返回'}]" :theme="config.theme" @change="handleBack" v-if="screenId" :title="info.name" :background="bgImg" :titleSize="config.titleSize">
<ai-dv-viewer :urlPrefix="urlPrefix" :instance="instance" :dict="dict" :id="screenId"/>
</ai-dv-wrapper>
</section>
</template>
<script>
import AppGigscreenViewer from "../../viewer/AppGigscreenViewer";
import {mapActions} from "vuex"
export default {
name: "preview",
components: {AppGigscreenViewer},
props: {
instance: Function,
dict: Object,
@@ -27,7 +21,8 @@ export default {
}
},
computed: {
screenId: v => v.$route.query.id
screenId: v => v.$route.query.id,
bgImg: v => v.config.theme == 1 ? 'https://cdn.cunwuyun.cn/dvcp/dv/img/dj_bg.png' : (v.config.backgroundImage?.[0]?.url || "")
},
data() {
return {
@@ -36,14 +31,19 @@ export default {
}
},
methods: {
...mapActions(['closePage']),
getDvData() {
let {id} = this.$route.query
this.instance.post(`${this.urlPrefix}/appdiylargescreen/queryLargeScreenDetailById?id=${id}`).then(res => {
this.instance.post(`/app/appdiylargescreen/queryLargeScreenDetailById?id=${id}`).then(res => {
if (res?.data) {
this.info = res.data
this.config = JSON.parse(res.data.config).dashboard
}
})
},
handleBack() {
this.$router.back()
this.closePage()
}
},
created() {

View File

@@ -7,23 +7,30 @@
<h2>{{ dashboard.title }}</h2>
</div>
<div class="layout-header__right">
<span type="text" @click="preview">预览</span>
<span type="text" @click="isShowImg = true">素材</span>
<span type="text" @click="back">退出</span>
<span type="text" @click="back()">退出</span>
<span type="text" @click="save">保存</span>
</div>
</div>
<div class="layout-wrapper">
<div class="layout-left">
<h2>全部资产</h2>
<div class="layout-left" :class="{hide:leftHide}">
<h2 class="flex">
<div class="fill">全部资产</div>
<el-button class="leftHideBtn" type="text" @click="leftHide=!leftHide">{{
leftHide ? "展开" : "收起"
}}
</el-button>
</h2>
<div class="layout-left__wrapper">
<div class="layout-left__left">
<div @click="subIndex = 0, parentIndex = index" :class="parentIndex === index ? 'active' : ''"
<div @click="subIndex = 0, parentIndex = index" :class="{active: parentIndex === index}"
v-for="(item, index) in components" :key="index">
<i class="iconfont iconqiyeguanli"></i>
<span>{{ item.label }}</span>
</div>
</div>
<div class="layout-left__middle">
<div class="layout-left__middle" v-if="hasCategories">
<div>全部</div>
<div
class="layout-left__middle--item"
@@ -44,29 +51,28 @@
</div>
<div class="layout-middle">
<div class="canvas-wrapper">
<vue-ruler-tool
v-model="dashboard.presetLine"
class="vueRuler"
:step-length="50"
:parent="true"
:position="'relative'"
:is-scale-revise="true"
:visible.sync="dashboard.presetLineVisible">
<div
id="workbench"
class="workbench"
:style="{
<vue-ruler-tool v-model="dashboard.presetLine" v-if="resizeWrapper"
class="vueRuler"
:step-length="50"
parent
is-scale-revise
position="relative"
:visible.sync="dashboard.presetLineVisible">
<div id="workbench"
class="workbench"
:style="{
transform: workbenchTransform,
width: bigscreenWidth + 'px',
height: bigscreenHeight + 'px'
}">
<ai-dv-wrapper style="height: 100%" :title="params.name" :theme="dashboard.theme">
<ai-dv-wrapper
style="height: 100%"
:type="dashboard.style"
:title="$route.query.name"
:titleSize="dashboard.titleSize"
:theme="dashboard.theme"
:background="dashboard.theme == 1 ? 'https://cdn.cunwuyun.cn/dvcp/dv/img/dj_bg.png' : (dashboard.backgroundImage.length ? dashboard.backgroundImage[0].url : '')">
<div style="width: 100%; height: 100%">
<AiDvBackground
:theme="dashboard.theme"
v-if="dashboard.backgroundImage.length || dashboard.theme === '1'"
:src="dashboard.theme === '1' ? 'https://cdn.cunwuyun.cn/dvcp/dv/img/dj-bg.png' : dashboard.backgroundImage[0].url">
</AiDvBackground>
<vue-draggable-resizable
:w="item.width"
:h="item.height"
@@ -80,10 +86,10 @@
:class="[activeIndex === index ? 'drag-active' : '']"
class="draggable"
@contextmenu.native.stop="e => onContextmenu(e, index)"
@dragging="(x, y) => onDrag(x, y, index)"
@resizing="(x, y, w, h) => onResizing(x, y, w, h, index, item.type)"
@dragstop="(x, y) => onDrag(x, y,item)"
@resizestop="(x, y, w, h) => onResizing(x, y, w, h, item)"
@activated="onActivated(index)"
@click.native.stop="activeIndex = index"
@click.native.stop
v-for="(item, index) in componentList"
:key="index">
<div class="coordinate" v-show="activeIndex === index">
@@ -91,7 +97,7 @@
<div class="coordinate-top"></div>
<div class="coordinate-label">{{ item.left }}, {{ item.top }}</div>
</div>
<ai-dv-render :data="item" :theme="dashboard.theme" :index="index" :instance="instance" />
<ai-dv-render :data="item" :theme="dashboard.theme" :index="index" :instance="instance"/>
</vue-draggable-resizable>
</div>
</ai-dv-wrapper>
@@ -100,181 +106,44 @@
</div>
</div>
<div class="layout-right" @click.stop>
<div class="layout-tab" v-if="activeIndex > -1">
<span @click="configIndex = 0" :class="[configIndex === 0 ? 'layout-tab__active' : '']">参数</span>
<span @click="configIndex = 1" :class="[configIndex === 1 ? 'layout-tab__active' : '']">数据</span>
</div>
<div class="layout-right__content" v-if="activeIndex > -1">
<div class="layout-right__content--wrapper" v-show="configIndex === 0">
<div class="layout-config__group">
<h2>基础设置</h2>
<div class="layout-config__item">
<label>图表尺寸</label>
<div class="layout-config__item--right">
<el-input-number size="mini" :min="0" v-model="currLayout.width"
controls-position="right"></el-input-number>
<el-input-number size="mini" :min="0" v-model="currLayout.height"
controls-position="right"></el-input-number>
</div>
</div>
<div class="layout-config__item">
<label>图表位置</label>
<div class="layout-config__item--right">
<el-input-number size="mini" :min="0" v-model="currLayout.left"
controls-position="right"></el-input-number>
<el-input-number size="mini" :min="0" v-model="currLayout.top"
controls-position="right"></el-input-number>
</div>
</div>
<!-- 选中组件面板-->
<template v-if="activeIndex > -1">
<div class="layout-tab">
<span @click="configIndex = 0" :class="[configIndex === 0 ? 'layout-tab__active' : '']">参数</span>
<span @click="configIndex = 1" :class="[configIndex === 1 ? 'layout-tab__active' : '']">数据</span>
</div>
<div class="layout-right__content">
<component-config v-show="configIndex === 0" :config="currLayout" v-bind="$props"/>
<div class="layout-right__content--wrapper" v-show="configIndex === 1"
v-if="currLayout.type !== 'title' && currLayout.type !== 'video'">
<data-config v-model="currLayout" :instance="instance" :dict="dict" @change="onChange('barChart')"/>
</div>
</div>
<div class="layout-right__content--wrapper" v-show="configIndex === 0">
<div class="layout-config__group">
<h2>组件设置</h2>
<div class="layout-config__item layout-config__item--input">
<label>标题</label>
<div class="layout-config__item--right">
<el-input v-model="currLayout.title" size="mini"></el-input>
</div>
</div>
<div class="layout-config__item layout-config__item--input" v-if="currLayout.display === 'summary2'">
<label>标题</label>
<div class="layout-config__item--right">
<el-input v-model="currLayout.summaryTitle" size="mini"></el-input>
</div>
</div>
<div class="layout-config__item" v-if="currLayout.type !== 'display'">
<label>边框</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="currLayout.border" placeholder="请选择边框" clearable>
<el-option
v-for="(item, index) in borderList"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</div>
</div>
<div class="layout-config__item layout-config__item--input" v-if="currLayout.type === 'video'">
<label>视频地址</label>
<div class="layout-config__item--right">
<el-input v-model="currLayout.src" size="mini"></el-input>
</div>
</div>
<div class="layout-config__item" v-if="currLayout.type === 'monitor'">
<label>视频类型</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="currLayout.monitorType" placeholder="请选择" clearable>
<el-option label="中国移动" value="cmcc"></el-option>
<el-option label="海康威视" value="hik"></el-option>
<el-option label="大华" value="dahua"></el-option>
<el-option label="视联网" value="slw"></el-option>
</el-select>
</div>
</div>
<div class="layout-config__item" v-if="currLayout.type === 'table'">
<label>显示排名</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="currLayout.isShowIndex" placeholder="请选择" clearable>
<el-option
v-for="(item, index) in tableStatus"
:key="index"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
</div>
<div class="layout-config__item" v-if="currLayout.type === 'table'">
<label>表格行数</label>
<div class="layout-config__item--right">
<el-input-number size="mini" style="width: 232px" :min="0" v-model="currLayout.rowNum" controls-position="right"></el-input-number>
</div>
</div>
<template v-if="currLayout.type === 'map'">
<div class="layout-config__item">
<label>遮罩层</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="currLayout.mask" placeholder="请选择" clearable>
<el-option label="是" value="1"></el-option>
<el-option label="否" value="2"></el-option>
</el-select>
</div>
</div>
<div class="layout-config__item">
<label>选择地区</label>
<div class="layout-config__item--right">
<AiAreaGet :instance="instance" :valueLevel="3" v-model="currLayout.areaId" placeholder="请选择地区"></AiAreaGet>
</div>
</div>
<div class="layout-config__item">
<label>展示光轨</label>
<div class="layout-config__item--right">
<ai-select v-model="currLayout.pulseLines" :selectList="dict.getDict('yesOrNo')"/>
</div>
</div>
<div class="layout-config__item layout-config__item--input">
<label>地图样式</label>
<div class="layout-config__item--right">
<el-input size="mini" v-model="currLayout.mapStyle" clearable placeholder="请输入地图样式ID,从UI处获取.."/>
</div>
</div>
</template>
<div class="layout-config__item" v-if="currLayout.type === 'summary'">
<label>数据汇总</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="currLayout.display" placeholder="请选择类型" clearable>
<el-option
v-for="(item, index) in summaryList"
:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</div>
</div>
</div>
</div>
<div class="layout-right__content--wrapper" v-show="configIndex === 1"
v-if="currLayout.type !== 'title' && currLayout.type !== 'video'">
<data-config
ref="dataConfig"
:instance="instance"
:dict="dict"
:urlPrefix="urlPrefix"
:options="currLayout"
@change="onChange('barChart')">
</data-config>
</div>
</div>
<div class="layout-page__setting layout-right__content" v-if="activeIndex === -1">
</template>
<!--未选中组件,页面设置-->
<div class="layout-page__setting layout-right__content" v-else>
<h2>页面设置</h2>
<div class="layout-config__group">
<div class="layout-config__item">
<label>屏幕大小</label>
<div class="layout-config__item--right">
<el-input-number size="mini" :min="0" v-model="bigscreenWidth" disabled
controls-position="right"></el-input-number>
<el-input-number size="mini" :min="0" v-model="bigscreenHeight" disabled
controls-position="right"></el-input-number>
</div>
</div>
<div class="layout-config__item layout-config__item--input">
<label>屏幕标题</label>
<div class="layout-config__item--right">
<el-input v-model="dashboard.title" size="mini"></el-input>
</div>
</div>
<div class="layout-config__item">
<label>主题设置</label>
<div class="layout-config__item--right">
<el-select size="mini" v-model="dashboard.theme" placeholder="请选择">
<el-option label="默认" value="0"></el-option>
<el-option label="党建" value="1"></el-option>
</el-select>
</div>
</div>
<config-item label="屏幕大小">
<el-input-number size="mini" :min="0" v-model="bigscreenWidth" controls-position="right"/>
<el-input-number size="mini" :min="0" v-model="bigscreenHeight" controls-position="right"/>
</config-item>
<config-item label="屏幕标题">
<el-input v-model="dashboard.title" size="mini"/>
<el-input type="number" v-model="dashboard.titleSize" size="mini" placeholder="字体大小" :max="68"/>
</config-item>
<config-item label="主题设置">
<el-select size="mini" v-model="dashboard.theme" placeholder="请选择">
<el-option label="默认" value="0"></el-option>
<el-option label="党建" value="1"></el-option>
</el-select>
</config-item>
<config-item label="样式设置">
<el-select size="mini" v-model="dashboard.style" placeholder="请选择">
<el-option label="默认" value="black"/>
<el-option label="经典" value="classic"/>
</el-select>
</config-item>
<div class="layout-config__item">
<label>背景图</label>
<div class="layout-config__item--right layout-config__item--bg">
@@ -321,9 +190,9 @@
:total="images.length"
:colConfigs="colConfigs"
@getList="() => {}">
<el-table-column slot="img" prop="素材地址" label="素材" align="center">
<el-table-column :slot="'img'" prop="素材地址" label="素材" align="center">
</el-table-column>
<el-table-column slot="options" width="140px" fixed="right" label="操作" align="center">
<el-table-column :slot="'options'" width="140px" fixed="right" label="操作" align="center">
<template slot-scope="{ row, $index }">
<div class="table-options">
<el-button type="text" @click="removeImg($index)">删除</el-button>
@@ -333,7 +202,8 @@
</el-table-column>
</ai-table>
</ai-dialog>
<ai-dialog :visible.sync="isShowAddImg" width="580px" append-to-body title="添加素材" @closed="form.images = []" @onConfirm="onImageConfirm">
<ai-dialog :visible.sync="isShowAddImg" width="580px" append-to-body title="添加素材" @closed="form.images = []"
@onConfirm="onImageConfirm">
<ai-uploader
:instance="instance"
v-model="form.images"
@@ -348,20 +218,27 @@
<script>
import {components} from '../config'
import {components} from './config'
import VueRulerTool from 'vue-ruler-tool'
import VueDraggableResizable from 'vue-draggable-resizable'
import 'vue-draggable-resizable/dist/VueDraggableResizable.css'
import DataConfig from './form/DataConfig.vue'
import DataConfig from './components/DataConfig.vue'
import ComponentConfig from "./components/componentConfig.vue";
import {mapActions} from "vuex"
import Vue from "vue";
import ConfigItem from "./components/configItem.vue";
export default {
name: "viewport",
provide() {
return {
setCurLayer: this.setCurLayer
}
},
props: {
instance: Function,
dict: Object,
params: Object,
urlPrefix: String
},
data() {
return {
colConfigs: [
@@ -386,11 +263,13 @@ export default {
componentList: [],
dashboard: {
title: '大屏',
titleSize: 38,
width: 1920,
height: 1080,
theme: '0',
backgroundColor: '',
backgroundImage: []
backgroundImage: [],
style: 'black'
},
menuX: 0,
menuY: 0,
@@ -400,66 +279,69 @@ export default {
middleHeight: 0,
widthScale: 0,
heightScale: 0,
bigscreenScaleInWorkbench: 0,
tableStatus: [{
label: '是',
value: '1'
}, {
label: '否',
value: '0'
}],
images: [],
summaryList: ['summary0', 'summary1', 'summary2', 'summary3', 'summary4', 'summary6', 'summary5', 'summary7', 'summary8', 'summary9', 'summary10', 'summary11'],
borderList: ['border0', 'border1', 'border2', 'border3', 'border4', 'border5']
leftHide: false,
resizeWrapper: true
}
},
components: {
ConfigItem,
ComponentConfig,
DataConfig,
VueRulerTool,
VueDraggableResizable,
},
computed: {
workbenchTransform() {
return `scale(${this.heightScale})`
},
currLayout() {
if (this.activeIndex === -1) return {}
return this.componentList[this.activeIndex]
},
widget() {
if (this.components.length && this.components[this.parentIndex].list.length) {
return this.components[this.parentIndex].list[this.subIndex].list
currLayout: {
set(v) {
this.setCurLayer(v)
},
get() {
return this.activeIndex > -1 ? this.componentList[this.activeIndex] : {}
}
},
widget() {
const categories = this.components[this.parentIndex].list
if (categories.length) {
return categories[this.subIndex]?.list || categories
}
return []
},
hasCategories: v => v.components[v.parentIndex].list[v.subIndex].list?.length > 0,
comps: v => {
const obj = {}
const handleOps = e => {
e.echartOps = e.echartOps || v.$echartTpls[e.type]
obj[e.type] = e
}
v.components.map(e => e.list.map(c => c.list?.map(handleOps) || handleOps(c)))
return obj
}
},
mounted() {
if (this.params && this.params.id) {
this.getInfo(this.params.id)
}
this.dict.load("yesOrNo")
this.getInfo(this.$route.query.did)
this.$nextTick(() => {
this.middleWidth = document.querySelector('.layout-wrapper').offsetWidth - 670
this.middleHeight = document.querySelector('.layout-wrapper').offsetHeight
this.initCanvas()
})
},
methods: {
bindEvent() {
this.middleWidth = document.querySelector('.layout-wrapper').offsetWidth - 670
this.middleHeight = document.querySelector('.layout-wrapper').offsetHeight
this.$nextTick(() => {
watch: {
leftHide: {
handler(v) {
this.middleWidth = document.querySelector('.layout-wrapper').offsetWidth - (v ? 340 : 670)
this.initCanvas()
})
},
this.resizeWrapper = false
this.$nextTick(() => this.resizeWrapper = true)
}
}
},
methods: {
...mapActions(['closePage']),
copy(link) {
let oInput = document.createElement('input')
oInput.value = link
@@ -472,11 +354,9 @@ export default {
})
oInput.remove()
},
removeImg(index) {
this.images.splice(index, 1)
},
onImageConfirm() {
if (!this.form.images.length) {
return this.$message.error('请上传图片')
@@ -490,7 +370,7 @@ export default {
this.form.images = []
this.isShowAddImg = false
},
//
setTop() {
const maxZindex = Math.max.apply(Math, this.componentList.map(item => {
return item.zIndex
@@ -498,84 +378,87 @@ export default {
this.$set(this.componentList[this.activeIndex], 'zIndex', maxZindex + 1)
},
//
setBottom() {
const item = this.componentList[this.activeIndex]
this.componentList.splice(this.activeIndex, 1)
this.componentList.unshift(item)
},
getInfo(id) {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/queryLargeScreenDetailById?id=${id}`).then(res => {
if (res.code === 0) {
id && this.instance.post(`/app/appdiylargescreen/queryLargeScreenDetailById?id=${id}`).then(res => {
if (res?.data) {
const data = JSON.parse(res.data.config)
this.componentList = data.config
const getComp = type => this.comps[type] || {}
this.componentList = data.config.filter(Boolean).map(e => ({...getComp(e.type), ...e}))
this.dashboard = data.dashboard
this.images = data.images || []
}
})
},
back() {
this.$emit('close')
const {id} = this.$route.query
this.$router.push({hash: "#add", query: {id}})
this.closePage()
},
save() {
this.instance.post(`${this.urlPrefix}/appdiylargescreen/addOrUpdateLargeScreen`, {
const {did: id, id: pid} = this.$route.query, {dashboard} = this
this.instance.post(`/app/appdiylargescreen/addOrUpdateLargeScreen`, {
id, pid,
config: JSON.stringify({
config: this.componentList,
dashboard: this.dashboard,
dashboard,
images: this.images
}),
status: 1,
title: this.dashboard.title,
id: this.params.id || ''
title: dashboard.title,
}).then(res => {
if (res.code == 0) {
if (res?.code == 0) {
this.$message.success('保存成功')
this.$emit('change', res.data)
this.back()
this.getInfo(this.$route.query.did)
}
})
},
//使
clone(e) {
if (/Chart/.test(e.type)) {
e.echartOps = this.$echartTpls[e.config]
}
this.componentList.push(this.deepClone(e))
},
onChange(e) {
if (e.indexOf('Chart') > -1) {
this.$refs[`chart${this.activeIndex}`][0].refresh()
}
onChange() {
this.$refs[`chart${this.activeIndex}`]?.[0]?.refresh()
},
deepClone(data, hash = new WeakMap()) {
if (typeof data !== 'object' || data === null) {
throw new TypeError('传入参数不是对象')
}
if (hash.has(data)) {
return hash.get(data)
}
let newData = {}
const dataKeys = Object.keys(data)
dataKeys.forEach(value => {
const currentDataValue = data[value]
if (typeof currentDataValue !== "object" || currentDataValue === null) {
newData[value] = currentDataValue
} else if (Array.isArray(currentDataValue)) {
newData[value] = [...currentDataValue]
} else if (currentDataValue instanceof Set) {
newData[value] = new Set([...currentDataValue])
} else if (currentDataValue instanceof Map) {
newData[value] = new Map([...currentDataValue])
deepClone(obj) {
if (obj instanceof Object) {
let newObj = {}
if (Array.isArray(obj)) {
return this.$copy(obj)
} else if (typeof obj == 'function') {
newObj = obj.bind(newObj)
} else {
hash.set(data, data)
newData[value] = this.deepClone(currentDataValue, hash)
for (let key in obj) {
let value = obj[key]
if (typeof value == 'function') {
newObj[key] = value.bind(newObj)
} else if (typeof value == 'object') {
if (Array.isArray(value)) {
newObj[key] = []
value.forEach(item => {
newObj[key].push(this.deepClone(item))
})
} else {
newObj[key] = this.deepClone(value)
}
} else {
newObj[key] = value
}
}
}
})
return newData
return newObj
} else {
return obj
}
},
onContextmenu(e, index) {
this.menuX = e.clientX + 10
this.menuY = e.clientY + 10
@@ -584,43 +467,48 @@ export default {
e.preventDefault()
},
//
copyLayer() {
const layer = this.deepClone(this.componentList[this.activeIndex])
this.componentList.push(layer)
},
//
removeLayer() {
this.componentList.splice(this.activeIndex, 1)
this.activeIndex = -1
},
onActivated(index) {
this.activeIndex = index
},
onDrag(x, y, index) {
this.$set(this.componentList[index], 'left', x)
this.$set(this.componentList[index], 'top', y)
onDrag(x, y, item) {
item.left = x
item.top = y
},
onResizing(x, y, w, h, index, type) {
this.$set(this.componentList[index], 'left', x)
this.$set(this.componentList[index], 'top', y)
this.$set(this.componentList[index], 'width', w)
this.$set(this.componentList[index], 'height', h)
if (type.indexOf('Chart') > -1) {
// this.$refs[`chart${index}`][0].watchResize()
}
onResizing(x, y, w, h, item) {
item.left = x
item.top = y
item.width = w
item.height = h
},
initCanvas() {
var widthScale = (this.middleWidth - this.widthPaddingTools) / this.bigscreenWidth
var heightScale = (this.middleHeight - this.widthPaddingTools) / this.bigscreenHeight
let widthScale = (this.middleWidth - this.widthPaddingTools) / this.bigscreenWidth
let heightScale = (this.middleHeight - this.widthPaddingTools) / this.bigscreenHeight
this.heightScale = Math.min(widthScale, heightScale)
},
preview() {
const {origin, pathname} = location
window.open(origin + pathname + '?id=' + this.$route.query.did + "#preview")
},
setCurLayer(v) {
this.componentList.splice(this.activeIndex, 1, v)
}
},
created() {
Vue.use(window.AVUE, {
size: 'mini',
tableSize: 'mini',
calcHeight: 36,
})
}
}
</script>
@@ -636,7 +524,7 @@ export default {
color: #fff;
background: #1d1e1f;
::v-deep .dv-scroll-board {
:deep( .dv-scroll-board ) {
height: calc(100%) !important;
.header-item {
@@ -720,17 +608,17 @@ export default {
opacity: 0.8;
}
::v-deep .el-upload-list--picture-card, ::v-deep.el-upload-list__item-thumbnail, ::v-deep .uploader {
:deep( .el-upload-list--picture-card), :deep(.el-upload-list__item-thumbnail), :deep( .uploader ) {
width: 232px;
height: 120px;
}
::v-deep .el-upload-list--picture-card .el-upload-list__item {
:deep( .el-upload-list--picture-card .el-upload-list__item ) {
width: 232px;
height: 120px;
}
::v-deep .el-upload--picture-card {
:deep( .el-upload--picture-card ) {
background-color: transparent;
}
@@ -757,7 +645,7 @@ export default {
}
}
::v-deep #dv-full-screen-container {
:deep( #dv-full-screen-container ) {
width: 100% !important;
height: 100% !important;
}
@@ -880,6 +768,22 @@ export default {
flex-shrink: 0;
background: #1D2127;
&.hide {
width: 0;
position: relative;
h2 > .fill {
display: none;
}
.leftHideBtn {
position: absolute;
left: 0;
top: 0;
transform: translate(0, -100%);
}
}
& > h2 {
height: 40px;
line-height: 40px;
@@ -919,6 +823,8 @@ export default {
flex: 1;
padding: 0 10px;
background: #0A0B0D;
overflow-y: auto;
overflow-x: hidden;
.layout-left__right--item {
margin-top: 10px;
@@ -930,8 +836,12 @@ export default {
}
img {
width: 180px;
height: 80px;
width: auto;
height: auto;
max-height: 130px;
max-width: 100%;
margin-left: 50%;
transform: translateX(-50%);
}
span {
@@ -1007,13 +917,13 @@ export default {
.layout-middle {
flex: 1;
min-width: 0;
background: #000;
.canvas-wrapper {
position: relative;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-box-sizing: border-box;
box-sizing: border-box;
height: 100%;
margin: 0;
@@ -1023,11 +933,11 @@ export default {
width: 100%;
padding: 18px 0 0 18px;
::v-deep .vue-ruler-ref-line-v, ::v-deep .vue-ruler-ref-line-h {
:deep( .vue-ruler-ref-line-v), :deep( .vue-ruler-ref-line-h ) {
display: none;
}
::v-deep .vue-ruler-v {
:deep( .vue-ruler-v ) {
.n {
transform: rotate(180deg);
}
@@ -1047,7 +957,7 @@ export default {
}
}
::v-deep .handle {
:deep( .handle ) {
border-radius: 100%;
border: none;
background-color: #09f;
@@ -1062,6 +972,7 @@ export default {
.draggable {
position: absolute;
border: none;
transition: none;
&::after {
position: absolute;
@@ -1095,7 +1006,7 @@ export default {
border-left: 1px solid #000000;
background: #1D2127;
::v-deep .el-input-number {
:deep(.el-input-number ) {
width: 106px;
margin-right: 20px;
@@ -1117,9 +1028,9 @@ export default {
}
}
.layout-right__content {
height: calc(100% - 40px);
overflow-y: overlay;
:deep(.layout-right__content ) {
height: calc(100% - 50px);
overflow-y: auto;
overflow-x: hidden;
.layout-config__group {
@@ -1144,12 +1055,13 @@ export default {
margin-bottom: 0;
}
::v-deep .el-select, ::v-deep .el-cascader {
.el-select, .el-cascader {
width: 232px;
color: #fff;
background: transparent;
input {
width: 232px;
width: 100%;
background: #262C33;
font-size: 12px;
color: #fff;
@@ -1187,7 +1099,7 @@ export default {
}
}
&.layout-config__item--input ::v-deep input {
&.layout-config__item--input input {
width: 232px;
background: #262C33;
font-size: 12px;

View File

@@ -12,7 +12,7 @@
<script>
import {scrollBoard} from '@jiaminghi/data-view'
import bgImage from '../assets/centralTask/bg.png'
import bgImage from './assets/centralTask/bg.png'
import Vue from "vue";
Vue.use(scrollBoard)
@@ -74,7 +74,7 @@ export default {
.leftBox {
width: 100%;
height: 100%;
background-image: url("../assets/centralTask/box.png");
background-image: url("./assets/centralTask/box.png");
background-size: 100% 100%;
background-repeat: no-repeat;
display: flex;
@@ -88,7 +88,7 @@ export default {
.boxTitle {
height: 68px;
width: 534px;
background-image: url("../assets/centralTask/titleBox.png");
background-image: url("./assets/centralTask/titleBox.png");
text-align: center;
font-size: 22px;
font-weight: 400;
@@ -97,7 +97,7 @@ export default {
line-height: 68px;
}
::v-deep .dv-scroll-board {
:deep( .dv-scroll-board ){
width: 100%;
flex: 1;
min-height: 0;

View File

@@ -298,7 +298,7 @@ export default {
flex-direction: column;
::v-deep .eventItem {
:deep( .eventItem ){
width: 100%;
color: #82C5FF;
@@ -309,7 +309,7 @@ export default {
}
}
::v-deep .communityEvent {
:deep( .communityEvent ){
list-style-type: circle;
white-space: nowrap;
overflow: hidden;
@@ -320,7 +320,7 @@ export default {
color: #82C5FF;
}
::v-deep .tag {
:deep( .tag ){
padding: 0 10px;
border-radius: 4px;
margin-right: 10px;
@@ -343,7 +343,7 @@ export default {
}
.centerTopPane {
background-image: url("../assets/govInteraction/globe_map.png");
background-image: url("./assets/govInteraction/globe_map.png");
background-repeat: no-repeat;
background-size: 100% 100%;
height: 540px;
@@ -361,7 +361,7 @@ export default {
transform: translate(-50%, -50%);
}
::v-deep .gradientFont {
:deep( .gradientFont ){
background-image: linear-gradient(180deg, #FFFFFF 0%, #FFFFFF 18%, #6BC7FF 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
@@ -373,10 +373,10 @@ export default {
}
}
::v-deep .dataPane {
:deep( .dataPane ){
width: 122px;
height: 114px;
background-image: url("../assets/govInteraction/kuaikuai.png");
background-image: url("./assets/govInteraction/kuaikuai.png");
background-repeat: no-repeat;
background-size: 100% 80px;
background-position: bottom center;
@@ -426,7 +426,7 @@ export default {
.titlePane {
width: 100%;
background-image: url("../assets/govInteraction/title.png");
background-image: url("./assets/govInteraction/title.png");
background-repeat: no-repeat;
background-size: 309px 100%;
height: 60px;

View File

@@ -55,7 +55,7 @@
<ai-echart
style="height: 100%; width: 100%;"
:data="eventInfo"
:ops="pieChart">
:ops="pieChart2">
</ai-echart>
</div>
</div>
@@ -63,7 +63,7 @@
<el-dialog :visible.sync="isShowInfo" width="640px" :close-on-click-modal="false" :modal-append-to-body="false">
<template slot="title">
<h2>家庭信息</h2>
<img src="../assets/grid/close.png" @click="isShowInfo = false">
<img src="./assets/grid/close.png" @click="isShowInfo = false">
</template>
<div class="grid-info">
<div class="grid-info__title">
@@ -86,15 +86,11 @@
</template>
<script>
import pieChart from 'dvcp-dv-ui/components/AiEchart/template/pie/pieChart2'
import barChart1 from 'dvcp-dv-ui/components/AiEchart/template/bar/barChart1'
import AiOkrTree from "dvcp-dv-ui/components/AiOkrTree/AiOkrTree"
import {barChart1, pieChart2} from "./components/chartOps"
export default {
name: 'AppGridDV',
label: '网格数据大屏',
components: {AiOkrTree},
props: {
instance: Function,
dict: Object,
@@ -111,7 +107,7 @@ export default {
barChart1,
userInfo: [],
eventInfo: [],
pieChart,
pieChart2,
total: 0,
isShowInfo: false,
defaultProps: {
@@ -131,14 +127,14 @@ export default {
}
}, row.householdName === '1' ? '户主' : (this.dict.getLabel('householdRelation', row.householdRelation) || '-'))
},
formart: v => this.dict.getLabel('householdRelation', v)
format: v => this.dict.getLabel('householdRelation', v)
},
{
prop: 'idNumber',
label: '身份证号',
align: 'center',
width: 220,
formart: v => v ? v.replace(/^(\d{10})\d{4}(.{4}$)/g, `$1${Array(5).join('*')}$2`) : '-'
format: v => v ? v.replace(/^(\d{10})\d{4}(.{4}$)/g, `$1${Array(5).join('*')}$2`) : '-'
},
{prop: 'phone', label: '联系方式', align: 'center'}
],
@@ -512,7 +508,7 @@ export default {
}
}
::v-deep .el-dialog__body {
:deep( .el-dialog__body ){
padding: 10px 40px 30px;
.el-table {
@@ -542,7 +538,7 @@ export default {
}
}
::v-deep .el-dialog {
:deep( .el-dialog ){
position: absolute;
top: 50%;
left: 50%;
@@ -580,7 +576,7 @@ export default {
}
}
::v-deep .userlist-container {
:deep( .userlist-container ){
.userlist {
display: flex;
align-items: center;
@@ -710,7 +706,7 @@ export default {
display: flex;
width: 320px;
height: 62px;
background-image: url(../assets/grid/title-bg.png);
background-image: url(assets/grid/title-bg.png);
background-size: 100% 100%;
h2 {
@@ -776,7 +772,7 @@ export default {
height: 300%;
}
::v-deep .org-chart-container {
:deep( .org-chart-container ){
display: flex;
justify-content: center;
@@ -805,7 +801,7 @@ export default {
}
}
::v-deep .org-chart-node-children {
:deep( .org-chart-node-children ){
display: flex;
justify-content: center;
}
@@ -823,7 +819,7 @@ export default {
padding-bottom: 8px;
}
::v-deep .el-tree {
:deep( .el-tree ){
background: transparent;
.el-tree-node__expand-icon {

View File

@@ -0,0 +1,812 @@
<template>
<div style="height:100%;" class="AppHouseMapDv">
<div class="map">
<div id="map" ref="rootmap" @click="hidePopup"/>
<div class="community-info" v-show="isShowInfo">
<div class="community-info__close" title="关闭" @click="info = {}, isShowInfo = false,chooseBuildId=''">
<i class="iconClean iconfont"></i>
</div>
<div class="community-info__header">
<h2 v-if="!info.name">{{ info.createAddress }}</h2>
<h2 v-if="info.name">{{ info.homesteadAddress }}</h2>
<div>{{ info.lng }},{{ info.lat }}</div>
</div>
<div class="community-info__wrapper" v-if="info.name">
<h2>户主信息</h2>
<div class="community-info__item">
<label>所属村</label>
<span>{{ info.areaName }}</span>
</div>
<div class="community-info__item">
<label>姓名</label>
<span style="color:#2266FF;">{{ info.name }}</span>
</div>
<div class="community-info__item">
<label>联系电话</label>
<span style="color:#2266FF;">{{ info.phone }}</span>
</div>
<div class="community-info__item">
<label>性别</label>
<span>{{ info.sex == 1 ? '男' : '女' }}</span>
</div>
<div class="community-info__item">
<label>年龄</label>
<span>{{ info.age }}</span>
</div>
</div>
<div class="community-info__wrapper" v-if="info.name">
<h2>宅基地信息</h2>
<div class="community-info__item">
<label>住宅建筑面积</label>
<span>{{ info.liveBuildingArea }}</span>
</div>
<div class="community-info__item">
<label>建筑层数</label>
<span>{{ info.buildingFloorNumber }}</span>
</div>
<div class="community-info__item">
<label>建筑高度</label>
<span>{{ info.buildingHeight }}m</span>
</div>
</div>
<div class="community-info__wrapper" v-if="!info.name">
<h2>房屋信息</h2>
<div class="community-info__item">
<label>所属社区</label>
<span>{{ info.areaName }}</span>
</div>
<div class="community-info__item">
<label>所属小区</label>
<span>{{ info.communityName }}</span>
</div>
<div class="community-info__item">
<label>房屋类型</label>
<span>{{ dict.getLabel("communityBuildingType", info.buildingType) }}</span>
</div>
<div class="community-info__item">
<label>楼长姓名</label>
<span>{{ info.managerName }}</span>
</div>
<div class="community-info__item">
<label>楼长电话</label>
<span>{{ info.managerPhone }}</span>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import AMapLoader from '@amap/amap-jsapi-loader'
import {mapState} from 'vuex'
export default {
name: 'AppHouseMapDv',
label: '房屋地图',
provide() {
return {
root: this
}
},
props: {
instance: Function,
dict: Object
},
data() {
return {
map: null,
mapLib: null,
community: '',
areaData: {},
isShowInfo: false,
areaId: '',
areaName: '',
list: [],
info: {},
resident: null,
satellite: null,
zoom: 11,
chooseBuildId: '',
buildList: [],
searchList: [],
house: null,
center: [],
type: '',
showStatistics: false
}
},
computed: {
...mapState(['user'])
},
watch: {
community: {
deep: true,
handler() {
this.debounce(this.search, 500)
}
},
showStatistics: {
deep: true,
handler() {
this.debounce(this.getCorpLocation, 500)
}
},
},
created() {
this.dict.load('householdRelation', 'communityBuildingType')
},
mounted() {
this.areaId = this.user.info.areaId
this.areaName = this.user.info.areaName
this.getCorpLocation()
},
methods: {
getCorpLocation() {
if (this.showStatistics) {
return
}
this.instance.post("/app/appdvcpconfig/getCorpLocation").then(res => {
if (res.code == 0) {
this.initMap(res.data)
}
})
},
changeZoom(isAdd) {
const zoom = isAdd ? this.map.getZoom() + 1 : this.map.getZoom() - 1
this.map.setZoom(zoom, false, 600)
},
getBuildInfo(id, type) {
var url = `/app/apphomesteadinfo/queryDetailById?id=${id}`
if (type == 0) {
url = `/app/appcommunityhouseinfo/queryDetailByIdWithBuilding?buildId=${id}`
}
this.instance.post(url).then(res => {
if (res.code === 0) {
if (type == 1) {
this.info = res.data
} else {
this.info = res.data.build
this.resident = null;
}
this.$nextTick(() => {
this.isShowInfo = true
})
}
})
},
chooseCommunity(item) {
if (item.name) { //宅基地
if (!item.lng || !item.lat) {
return this.$message.error('未获取到该房屋坐标信息')
} else {
this.map.setZoomAndCenter(18, [item.lng, item.lat], false, 600)
this.info = item
this.$nextTick(() => {
this.isShowSearch = false
this.isShowInfo = true
})
}
} else { //楼栋
this.instance.post(`/app/appcommunityhouseinfo/queryDetailByIdWithBuilding`, null, {
params: {
buildId: item.buildingId,
houseId: item.id,
residentId: item.residentId
}
}).then(res => {
if (res.code === 0) {
if (!res.data.build?.lng || !res.data.build?.lat) {
this.isShowInfo = true
this.isShowSearch = false
this.info = res.data.build;
return this.$message.error('未获取到该房屋坐标信息')
} else {
this.chooseBuildId = res.data.build.id
this.house = res.data.house
this.resident = res.data.resident;
}
this.map.setZoomAndCenter(18, [res.data.build?.lng, res.data.build?.lat], false, 600)
this.info = res.data.build
this.$nextTick(() => {
this.isShowSearch = false
this.isShowInfo = true
})
}
})
}
},
toCenter() {
this.map.setZoomAndCenter(this.zoom, this.center, false, 600)
},
renderClusterMarker(context) {
let el = `<div class="polymeric">
<div class="polymeric-container">
<p>${context.count}</p>
</div>
</div>`
let {mapLib: AMap} = this
let offset = new AMap.Pixel(-9, -9)
context.marker.setContent(el)
context.marker.setOffset(offset)
context.marker.lnglat = context.clusterData[0].lnglat
context.marker.on('click', e => {
this.map.setZoomAndCenter(this.map.getZoom() + 2, e.target.lnglat, false, 500)
})
},
renderMarker(context) {
const buildId = context.data[0].id
let el = ''
var urlType = ''
if (context.data[0].communityName == context.data[0].buildingNumber) { //宅基地
urlType = 1
el = `<div id="buildId-${buildId}" class="mark ${buildId === this.chooseBuildId ? 'mark-active' : ''}">
<div class="mark-contaienr">
<span>${context.data[0].areaName}</span>&nbsp;&nbsp;
<span>${context.data[0].communityName}</span>
</div>
</div>`
} else {
urlType = 0
el = `<div id="buildId-${buildId}" class="mark ${buildId === this.chooseBuildId ? 'mark-active' : ''}">
<div class="mark-contaienr">
<span>${context.data[0].communityName}</span>&nbsp;&nbsp;
<span>${context.data[0].buildingNumber}栋</span>
</div>
</div>`
}
context.marker.setContent(el);
context.marker.setAnchor("center")
context.marker.id = `${buildId}`
context.marker.lnglat = context.data[0].lnglat
context.marker.urlType = urlType
context.marker.on('click', e => {
this.chooseBuildId = e.target.id
this.getBuildInfo(e.target.id, e.target.urlType)
context.marker.setContent(el);
document.querySelectorAll('.mark').forEach(el => {
el.classList.remove('mark-active')
})
document.querySelector(`#buildId-${e.target.id}`).classList.add('mark-active')
})
},
addMakert(points) {
let {mapLib: AMap} = this
new AMap.MarkerClusterer(this.map, points, {
gridSize: 60,
maxZoom: 15,
clusterByZoomChange: false,
renderClusterMarker: this.renderClusterMarker,
renderMarker: this.renderMarker
})
},
getCommunityList() {
this.instance.post('/app/appcommunitybuildinginfo/listByBuilding', null, {
params: {
current: 1,
size: 1000000
}
}).then(res => {
if (res.code === 0) {
this.buildList = res.data
const points = res.data.map(item => {
return {
lnglat: [item.lng, item.lat],
id: item.id,
corpId: item.corpId,
areaName: item.areaName,
buildingNumber: item.name || item.buildingNumber,
communityName: item.name || item.communityName,
}
})
this.addMakert(points)
}
})
},
hidePopup() {
this.isShowArea = false
this.isShowSearch = false
},
initMap({lng, lat}) {
this.center = [lng, lat];
AMapLoader.load({
key: '54a02a43d9828a8f9cd4f26fe281e74e',
version: '2.0',
plugins: ['AMap.ToolBar', 'AMap.Scale', 'AMap.MouseTool', 'AMap.MarkerClusterer'],
AMapUI: {
version: '1.1',
plugins: []
}
}).then((AMap) => {
this.mapLib = AMap
this.map = new AMap.Map('map', {
resizeEnable: true,
zooms: [6, 20],
center: [lng, lat],
zoom: this.zoom,
mapStyle: 'amap://styles/40f6fba77127e061a058f670433a67ec'
})
this.satellite = new AMap.TileLayer.Satellite()
this.getCommunityList()
})
}
}
}
</script>
<style lang="scss" scoped>
.map {
:deep( .amap-logo), :deep( .amap-copyright ){
display: none !important;
}
:deep( .amap-icon ){
width: 40px !important;
height: 40px !important;
img {
width: 100%;
height: 100%;
}
}
}
.community-info__star {
margin-top: 4px;
margin-bottom: 8px;
.community-info__star--content {
display: flex;
align-items: center;
height: 36px;
padding: 0 12px;
color: #666666;
font-size: 12px;
span {
flex: 1;
text-align: center;
&:first-child {
text-align: left;
}
&:last-child {
text-align: right;
}
}
&:nth-of-type(2n) {
background: #fff;
}
}
.community-info__star--tab {
display: flex;
align-items: center;
height: 36px;
padding: 0 12px;
user-select: none;
background: #fff;
span {
height: 100%;
line-height: 36px;
color: #999999;
font-size: 12px;
font-weight: 700;
cursor: pointer;
border-bottom: 2px solid transparent;
&:first-child {
margin-right: 16px;
}
&.star-active {
color: #2266FF;
border-bottom: 2px solid #2266FF;
}
}
}
}
.community-info__item--imgs {
display: block !important;
height: auto !important;
label {
height: 36px;
line-height: 36px;
}
.community-info__item--img {
display: flex;
align-items: center;
flex-wrap: wrap;
padding-bottom: 10px;
overflow: hidden;
img {
width: 69px;
height: 69px;
margin-right: 4px;
margin-bottom: 4px;
cursor: pointer;
&:nth-of-type(4n) {
margin-right: 0;
}
&:last-child {
margin-right: 0;
}
}
}
}
.map {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
:deep( .ol-zoom ){
display: none !important;
top: inherit !important;
bottom: 0.5em !important;
}
div {
box-sizing: border-box;
}
#map {
width: 100%;
height: 100%;
}
}
.community {
display: flex;
align-items: center;
position: relative;
height: 28px;
padding: 0 10px;
background: #0F8F64;
border-radius: 26px;
color: #fff;
font-size: 12px;
cursor: pointer;
&.color1 {
background: #2266FF;
em:after {
border-top-color: #2266FF !important;
}
}
&.color2 {
background: #F46159;
em:after {
border-top-color: #F46159 !important;
}
}
em {
position: absolute;
bottom: -6px;
left: 50%;
transform: translate(-50%, 0);
&::after {
position: absolute;
bottom: -6px;
left: 0;
width: 0;
height: 0;
border: 6px solid #0F8F64;
border-bottom-color: transparent;
border-left-color: transparent;
border-right-color: transparent;
transform: translate(-50%, 0);
overflow: hidden;
content: ' ';
}
}
i {
padding-right: 2px;
position: relative;
color: #ffc928;
font-size: 16px;
font-style: normal;
}
}
:deep( .polymeric ){
display: flex;
position: relative;
align-items: center;
justify-content: center;
width: 62px;
height: 62px;
border-radius: 50%;
cursor: pointer;
user-select: none;
&.polymeric-active {
.polymeric-container {
background: #F46159;
}
&::after {
background-color: #F46159;
}
}
&::after {
position: absolute;
z-index: -1;
width: 62px;
height: 62px;
border-radius: 50%;
-webkit-animation: warn 1s ease-out 0s infinite;
animation: warn 1s ease-out 0s infinite;
background-color: rgba(15, 143, 100, 1);
transform: translate(-50%, -50%);
content: " ";
}
.polymeric-container {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
width: 62px;
height: 62px;
border-radius: 50%;
background: rgba(15, 143, 100, 1);
p {
text-align: center;
width: 58px;
color: #fff;
font-size: 18px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
p:first-child {
font-size: 14px;
}
h2 {
color: #fff;
font-weight: normal;
font-size: 12px;
}
}
}
:deep( .mark ){
user-select: none;
cursor: pointer;
height: 32px;
border-radius: 26px;
position: relative;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
padding: 0 12px;
background: rgba(0,39,100,0.50);
border: 1px solid #36A5FF;
border-radius: 30px;
&.mark-active {
background: #004AC0;
border: 1px solid transparent;
box-shadow: inset 0 0 8px 2px #33BBFF;
}
.mark-contaienr {
color: white;
font-size: 14px;
position: relative;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: flex;
align-items: center;
justify-content: center;
}
.arrow {
position: absolute;
left: 50%;
transform: translateX(-50%);
bottom: -21px;
width: 0;
height: 0;
border: 12px solid transparent;
border-top: 12px solid #0F8F64;
}
}
@-webkit-keyframes warn {
0% {
transform: scale(.5);
opacity: 1
}
30% {
opacity: .5
}
to {
transform: scale(1.8);
opacity: 0
}
}
@keyframes warn {
0% {
transform: scale(.5);
opacity: 1
}
30% {
opacity: .5
}
to {
transform: scale(1.4);
opacity: 0
}
}
.community-info {
position: absolute;
top: 58px;
right: 10px;
width: 400px;
height: calc(100% - 117px);
overflow-y: auto;
overflow-x: hidden;
z-index: 111;
border-radius: 2px;
background: rgba(0,15,38,0.30);
border: 1px solid #103588;
// filter: blur(5px);
.community-info__close {
position: absolute;
right: 0;
top: 0;
padding: 16px 12px 0 12px;
font-size: 16px;
color: #fff;
cursor: pointer;
&:hover {
opacity: 0.6;
}
}
&::-webkit-scrollbar {
width: 6px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 6px;
background: rgba(144, 147, 153, .5);
}
.community-info__header {
padding: 12px 20px;
background-image: linear-gradient(270deg, rgba(11, 158, 255, 0.2) 0%, rgba(2, 81, 227, 0.2) 100%);
h2 {
max-width: 360px;
line-height: 28px;
margin: 0;
color: #fff;
font-size: 20px;
font-weight: 600;
margin-bottom: 10px;
}
div {
display: flex;
align-items: center;
color: #D2E0FF;
font-size: 12px;
}
span {
display: block;
margin-top: 4px;
font-style: normal;
color: #82C5FF;
font-size: 14px;
}
}
.community-info__wrapper {
h2 {
margin: 20px 0 20px 20px;
padding: 0 20px;
font-size: 15px;
color: #fff;
font-weight: 600;
background: url(https://cdn.cunwuyun.cn/dvcp/ply/title-bg.png) no-repeat;
background-size: 169px 30px;
background-position-y: -5px;
background-position-x: -10px;
}
.community-info__item {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0 20px;
padding: 12px 12px;
font-size: 14px;
color: #fff;
background: rgba(63, 136, 255, 0.15);
&:nth-of-type(2n) {
background: transparent;
}
span {
max-width: 70%;
text-align: right;
}
label {
flex-shrink: 1;
color: #82C5FF;
}
}
&.community-info__wrapper--last {
.community-info__item {
background: #fff;
&:nth-of-type(2n-1) {
background: #fff;
}
}
}
.bg-fff {
background-color: #fff !important;
}
}
}
</style>

View File

@@ -0,0 +1,887 @@
<template>
<div class="map">
<div id="map" ref="rootmap" />
<div class="community-info" v-show="isShowInfo">
<div class="community-info__close" title="关闭" @click="closeInfo">
<i class="iconClean iconfont"></i>
</div>
<div class="community-info__header">
<div class="user" :style="userStyle">
<span>{{ formatName(info.name) }}</span>
</div>
<h2>{{ info.name }}</h2>
<h3>{{ info.gpsDesc }}</h3>
<p>最后更新时间{{ info.lastUpdateTime }}</p>
<div class="community-info__header--status">
<div :style="{color: info.onlineStatus === '1' ? '#2EA222' : '#F46' }">
<i class="iconfont iconzhuangtai"></i>
<span>设备{{ info.onlineStatus === '1' ? '在线' : '离线' }}</span>
</div>
<div>
<i class="iconfont icondianliang"></i>
<span>剩余{{ info.electricQuantity }}%</span>
</div>
</div>
<div class="community-info__header--info">
<div class="community-info__header--info-item" v-for="(item, index) in testItem" :key="item.name" v-if="index !== 0">
<div class="left">
<div :style="{backgroundColor: item.color}">
<i :class="item.icon" class="iconfont"></i>
</div>
<span>{{ item.name }}</span>
</div>
<i :style="{color: (testData[index] && testData[index].abnormalStatus === '1') ? '#F46' : ''}">{{ testData[index] ? testData[index].itemValue : '-' }}{{ index === '1' ? '℃' : '' }}</i>
</div>
</div>
</div>
<div class="community-info__wrapper">
<div class="community-info__title">
<h2>人员信息</h2>
<span :style="userStatusColor">{{ userStatus }}</span>
</div>
<div class="community-info__item">
<label>姓名</label>
<span>{{ info.name}}</span>
</div>
<div class="community-info__item">
<label>性别</label>
<span>{{ info.sex === '1' ? '男' : '女' }}</span>
</div>
<div class="community-info__item">
<label>年龄</label>
<span>{{ info.age }}</span>
</div>
<div class="community-info__item">
<label>所属地区</label>
<span>{{ info.areaName }}</span>
</div>
<div class="community-info__item">
<label>联系电话</label>
<span>{{ info.phone }}</span>
</div>
</div>
</div>
</div>
</template>
<script>
import AMapLoader from '@amap/amap-jsapi-loader'
import {mapState} from 'vuex'
export default {
name: 'AppMonitorMapDv',
label: '监护地图',
provide() {
return {
root: this
}
},
props: {
instance: Function,
dict: Object
},
data() {
return {
map: null,
community: '',
isShowInfo: false,
info: {},
satellite: null,
zoom: 11,
choosedId: '',
testItem: [{
name: '体温',
icon: 'icontiwen',
color: '#6BA3DB'
}, {
name: '心率',
icon: 'iconxinlv',
color: '#72BB5C'
}, {
name: '血压',
icon: 'iconxueya',
color: '#7577CB'
}, {
name: '血氧',
icon: 'iconxueyang',
color: '#FF5656'
}],
testData: [],
center: []
}
},
computed: {
...mapState(['user']),
userStatus () {
if (this.info.abnormalStatus === '2') {
return '求助'
}
if (this.info.abnormalStatus === '1') {
return '异常'
}
if (this.info.abnormalStatus === '0') {
return '正常'
}
return '-'
},
userStatusColor () {
if (this.info.abnormalStatus === '2') {
return {
color: '#FF69DD',
border: '1px solid #FF69DD'
}
}
if (this.info.abnormalStatus === '1') {
return {
color: '#FF6969',
border: '1px solid #FF6969'
}
}
return {
color: '#22FF81',
border: '1px solid #22FF81'
}
},
userStyle () {
if (this.info.abnormalStatus === '2') {
return {
background: 'rgba(96,8,102,0.80)',
border: '1px solid #FF69DD',
boxShadow: '0 4px 4px 0 #000000, inset 0 0 8px 4px #C312CA'
}
}
if (this.info.abnormalStatus === '1') {
return {
background: 'rgba(79,14,7,0.80)',
border: '1px solid #FF6969',
boxShadow: '0 4px 4px 0 #000000, inset 0 0 8px 4px #C60E0E'
}
}
return {
background: 'rgba(8,73,35,0.80)',
border: '1px solid #22FF81',
boxShadow: '0 4px 4px 0 #000000, inset 0 0 8px 4px #15BE55'
}
}
},
mounted() {
this.getCorpLocation()
},
methods: {
getIdInfo (UUserCard, num) {
if (num == 1) {
var birth = UUserCard.substring(6, 10) + '-' + UUserCard.substring(10, 12) + '-' + UUserCard.substring(12, 14)
return birth
}
if (num == 2) {
if (parseInt(UUserCard.substr(16, 1)) % 2 == 1) {
return '1'
} else {
return '0'
}
}
if (num == 3) {
var myDate = new Date()
var month = myDate.getMonth() + 1
var day = myDate.getDate()
var age = myDate.getFullYear() - UUserCard.substring(6, 10) - 1;
if (UUserCard.substring(10, 12) < month || UUserCard.substring(10, 12) == month && UUserCard.substring(12, 14) <= day) {
age ++
}
return age
}
},
getCorpLocation(){
this.instance.post("/app/appdvcpconfig/getCorpLocation").then(res=>{
if(res.code==0){
this.initMap(res.data);
}
})
},
getList () {
this.instance.post(`/app/appintelligentguardianshipdevice/list`, null, {
params: {
size: 8000,
current: 1
}
}).then(res => {
if (res.code == 0) {
const points = res.data.records.map(item => {
return {
...item,
lnglat: [item.lng, item.lat],
id: item.id,
corpId: item.corpId,
areaName:item.areaName,
name: item.name
}
})
this.addMakert(points)
if (this.$route.query.id) {
this.onTreeChange({
type: '1',
deviceId: this.$route.query.id,
lng: this.$route.query.lng,
lat: this.$route.query.lat
})
}
}
})
},
formatName (str) {
if (!str) return ''
return str.substr(str.length - 2)
},
getInfo (id) {
this.instance.post(`/app/appintelligentguardianshipdevice/queryMonitorList?deviceId=${id}&type=1`).then(res => {
if (res.code === 0) {
let obj = {}
this.testData = res.data.records.forEach(item => {
obj[item.item] = item
})
this.testData = obj
}
})
this.instance.post(`/app/appintelligentguardianshipdevice/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.info = res.data
this.info.age = this.getIdInfo(res.data.idNumber, 3)
this.isShowInfo = true
}
})
},
toCenter() {
this.map.setZoomAndCenter(this.zoom, this.center, false, 600)
},
renderClusterMarker(context) {
let el = `<div class="polymeric">
<div class="polymeric-container">
<p>${context.count}</p>
</div>
</div>`
let offset = new AMap.Pixel(-9, -9)
context.marker.setContent(el)
context.marker.setOffset(offset)
context.marker.lnglat = context.clusterData[0].lnglat
context.marker.on('click', e => {
this.map.setZoomAndCenter(this.map.getZoom() + 3, e.target.lnglat, false, 500)
})
},
renderMarker(context) {
const buildId = context.data[0].id
let el = `<div class="mark mark${context.data[0].abnormalStatus}" id="buildId-${buildId}">
<div class="mark-contaienr">
<span>${context.data[0].name}</span>
</div>
</div>`
context.marker.setContent(el);
context.marker.setAnchor("center")
context.marker.id = `${buildId}`
context.marker.data = JSON.stringify(context.data[0])
context.marker.lnglat = context.data[0].lnglat
context.marker.on('click', e => {
this.choosedId = e.target.id
this.getInfo(e.target.id)
context.marker.setContent(el);
document.querySelectorAll('.mark').forEach(el => {
el.classList.remove('mark-active')
})
document.querySelector(`#buildId-${e.target.id}`).add('mark-active')
this.map.setZoomAndCenter(this.map.getZoom() + 0.000000001, e.target.lnglat, false, 300)
})
},
closeInfo () {
this.info = {}
this.isShowInfo = false
this.choosedId = ''
this.map.setZoom(this.map.getZoom() + 0.0001)
},
addMakert(points) {
new AMap.MarkerClusterer(this.map, points, {
gridSize: 60,
maxZoom: 15,
clusterByZoomChange: false,
renderClusterMarker: this.renderClusterMarker,
renderMarker: this.renderMarker
})
},
initMap({lng,lat}) {
this.center = [lng,lat];
AMapLoader.load({
key: '54a02a43d9828a8f9cd4f26fe281e74e',
version: '2.0',
plugins: ['AMap.ToolBar', 'AMap.Scale', 'AMap.MouseTool', 'AMap.MarkerClusterer'],
AMapUI: {
version: '1.1',
plugins: []
}
}).then((AMap) => {
this.map = new AMap.Map('map', {
resizeEnable: true,
zooms: [6, 20],
center: [lng, lat],
zoom: this.zoom,
mapStyle: 'amap://styles/40f6fba77127e061a058f670433a67ec'
})
this.satellite = new AMap.TileLayer.Satellite()
this.getList()
})
}
}
}
</script>
<style lang="scss" scoped>
.map {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
.community-info {
position: absolute;
top: 10px;
right: 10px;
width: 400px;
max-height: calc(100% - 20px);
overflow-y: overlay;
overflow-x: hidden;
z-index: 111;
background: rgba(7,11,35,0.50);
border: 1px solid #14345F;
.community-info__close {
position: absolute;
right: 0;
top: 0;
padding: 16px 12px 0 12px;
font-size: 16px;
color: #8899bb;
cursor: pointer;
&:hover {
opacity: 0.6;
}
}
&::-webkit-scrollbar {
width: 6px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 6px;
background: rgba(144, 147, 153, .5);
}
.community-info__header {
padding-top: 40px;
text-align: center;
.user {
display: flex;
align-items: center;
justify-content: center;
width: 50px;
height: 50px;
margin: 0 auto 8px;
border-radius: 50%;
background: #2266FF;
span {
color: #fff;
font-size: 16px;
}
}
h2 {
line-height: 24px;
margin-bottom: 12px;
font-weight: Bold;
font-size: 16px;
color: #FFFFFF;
}
h3, p {
width: 300px;
line-height: 22px;
margin: 0 auto 4px;
font-size: 13px;
color: #82C5FF;
text-align: center;
font-weight: normal;
}
& > h3 {
line-height: 1.4;
color: #82C5FF;
}
.community-info__header--info {
display: flex;
flex-wrap: wrap;
padding: 0 20px;
.community-info__header--info-item {
display: flex;
align-items: center;
justify-content: space-between;
width: 174px;
height: 56px;
margin-bottom: 10px;
padding: 0 12px;
background-image: linear-gradient(270deg, rgba(119,169,255,0.20) 0%, rgba(66,112,255,0.50) 100%);
border-radius: 4px;
&:nth-of-type(2n - 1) {
margin-right: 10px;
}
& > i {
position: relative;
top: 2px;
font-style: normal;
color: #fff;
font-size: 16px;
font-weight: 700;
}
.left {
display: flex;
align-items: center;
span {
font-size: 14px;
color: rgba(130, 197, 255, 1);
}
div {
display: flex;
align-items: center;
justify-content: center;
margin-right: 8px;
width: 24px;
height: 24px;
border-radius: 50%;
background: #6BA3DB;
i {
color: #fff;
font-size: 16px;
}
}
}
}
}
.community-info__header--status {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20px;
div {
display: flex;
align-items: center;
color: #74FF66;
}
span {
font-size: 14px;
}
div:first-child {
margin-right: 20px;
}
i {
position: relative;
margin-right: 2px;
font-size: 16px;
}
div:last-child {
color: #fff;
span {
font-size: 12px;
}
}
}
}
.community-info__wrapper {
padding: 0 20px 40px;
.community-info__title {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
h2 {
position: relative;
width: 169px;
padding: 0 20px;
font-size: 15px;
color: #fff;
font-weight: 700;
background: url(https://cdn.cunwuyun.cn/dvcp/ply/title-bg.png) no-repeat;
background-size: 169px 30px;
background-position-y: -5px;
background-position-x: -10px;
}
span {
width: 52px;
height: 24px;
line-height: 24px;
color: #fff;
font-size: 14px;
text-align: center;
border-radius: 12px;
}
}
.community-info__item {
display: flex;
align-items: center;
justify-content: space-between;
height: 40px;
padding: 0 12px;
font-size: 12px;
color: #fff;
background: transparent;
&:nth-of-type(2n) {
background-image: linear-gradient(270deg, rgba(119,169,255,0.20) 0%, rgba(66,112,255,0.50) 100%);
}
span {
max-width: 70%;
text-align: right;
}
label {
flex-shrink: 1;
color: rgba(130, 197, 255, 1);
}
}
&.community-info__wrapper--last {
.community-info__item {
background: #fff;
&:nth-of-type(2n) {
background: #F3F6F9;
}
}
}
}
}
:deep( .ol-zoom ){
display: none !important;
top: inherit !important;
bottom: 0.5em !important;
}
div {
box-sizing: border-box;
}
#map {
width: 100%;
height: 100%;
}
:deep( .amap-logo), :deep( .amap-copyright ){
display: none !important;
}
:deep( .amap-icon ){
width: 40px !important;
height: 40px !important;
img {
width: 100%;
height: 100%;
}
}
.no-more {
display: block;
height: 60px;
line-height: 60px;
margin-top: 2px;
text-align: center;
font-size: 12px;
color: #999;
width: 100%;
}
}
.community {
display: flex;
align-items: center;
position: relative;
height: 28px;
padding: 0 10px;
background: #0F8F64;
border-radius: 26px;
color: #fff;
font-size: 12px;
cursor: pointer;
&.color1 {
background: #2266FF;
em:after {
border-top-color: #2266FF !important;
}
}
&.color2 {
background: #F46159;
em:after {
border-top-color: #F46159 !important;
}
}
em {
position: absolute;
bottom: -6px;
left: 50%;
transform: translate(-50%, 0);
&::after {
position: absolute;
bottom: -6px;
left: 0;
width: 0;
height: 0;
border: 6px solid #0F8F64;
border-bottom-color: transparent;
border-left-color: transparent;
border-right-color: transparent;
transform: translate(-50%, 0);
overflow: hidden;
content: ' ';
}
}
i {
padding-right: 2px;
position: relative;
color: #ffc928;
font-size: 16px;
font-style: normal;
}
}
:deep( .polymeric ){
display: flex;
position: relative;
align-items: center;
justify-content: center;
width: 62px;
height: 62px;
border-radius: 50%;
cursor: pointer;
user-select: none;
&.polymeric-active {
.polymeric-container {
background: #F46159;
}
&::after {
background-color: #F46159;
}
}
&::after {
position: absolute;
z-index: -1;
width: 62px;
height: 62px;
border-radius: 50%;
-webkit-animation: warn 1s ease-out 0s infinite;
animation: warn 1s ease-out 0s infinite;
background-color: rgba(15, 143, 100, 1);
transform: translate(-50%, -50%);
content: " ";
}
.polymeric-container {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
width: 62px;
height: 62px;
border-radius: 50%;
background: rgba(15, 143, 100, 1);
p {
text-align: center;
width: 58px;
color: #fff;
font-size: 18px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
p:first-child{
font-size: 14px;
}
h2 {
color: #fff;
font-weight: normal;
font-size: 12px;
}
}
}
:deep( .mark){
display: flex;
align-items: center;
justify-content: center;
position: relative;
user-select: none;
cursor: pointer;
width: 56px;
height: 56px;
background: rgba(108,94,14,0.80);
border: 1px solid #FFDF54;
box-shadow: 0 4px 4px 0 #000000, inset 0 0 8px 4px #D1A818;
border-radius: 50%;
box-sizing: border-box;
font-size: 14px;
color: #FFFFFF;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-shadow: 0 2px 4px rgba(0,0,0,0.50);
&.mark0 {
background: rgba(8,73,35,0.80);
border: 1px solid #22FF81;
box-shadow: 0 4px 4px 0 #000000, inset 0 0 8px 4px #15BE55;
}
&.mark1 {
background: rgba(79,14,7,0.80);
border: 1px solid #FF6969;
box-shadow: 0 4px 4px 0 #000000, inset 0 0 8px 4px #C60E0E;
}
&.mark2 {
background: rgba(96,8,102,0.80);
border: 1px solid #FF69DD;
box-shadow: 0 4px 4px 0 #000000, inset 0 0 8px 4px #C312CA;
}
.mark-contaienr {
width: 56px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-align: center;
}
// &.mark1::after {
// position: absolute;
// z-index: -1;
// width: 100px;
// height: 100px;
// border-radius: 50%;
// -webkit-animation: warn 1s ease-out 0s infinite;
// animation: warn 1s ease-out 0s infinite;
// background-color: #FF6969;
// transform: translate(-50%, -50%);
// content: " ";
// }
// &.mark2::after {
// position: absolute;
// z-index: -1;
// width: 100px;
// height: 100px;
// border-radius: 50%;
// -webkit-animation: warn 1s ease-out 0s infinite;
// animation: warn 1s ease-out 0s infinite;
// background-color: #FF69DD;
// transform: translate(-50%, -50%);
// content: " ";
// }
}
@-webkit-keyframes warn {
0% {
transform: scale(.5);
opacity: 1
}
30% {
opacity: .5
}
to {
transform: scale(1.8);
opacity: 0
}
}
@keyframes warn {
0% {
transform: scale(.5);
opacity: 1
}
30% {
opacity: .5
}
to {
transform: scale(1.4);
opacity: 0
}
}
</style>

View File

@@ -32,7 +32,7 @@
</div>
</div>
</div>
<div class="chart1" style="width: 100%; height: 200px;"></div>
<div class="chart1" style="width: 100%; height: 160px;"></div>
</div>
<div class="item">
<div class="title">居民群统计</div>
@@ -65,24 +65,25 @@
</div>
</div>
</div>
<div class="chart2" style="width: 100%; height: 200px;"></div>
<div class="chart2" style="width: 100%; height: 160px;"></div>
</div>
<div class="item item-tags">
<div class="title">标签人群</div>
<div class="item-bottom">
<div class="item-bottom__item">
<h2>高龄老人</h2>
<span>{{ tagInfo.elderlyPeople || 0 }}</span>
<div class="title">宣发统计</div>
<div class="item-top xf">
<div class="item-top__item">
<h2>宣发任务数</h2>
<p>{{ xfInfo.createCount || 0 }}</p>
</div>
<div class="item-bottom__item">
<h2>精神病人</h2>
<span>{{ tagInfo.mentalIllness || 0 }}</span>
<div class="item-top__item">
<h2>执行宣发次数</h2>
<p>{{ xfInfo.executeCount || 0 }}</p>
</div>
<div class="item-bottom__item">
<h2>贫困居民</h2>
<span>{{ tagInfo.poorResidents || 0 }}</span>
<div class="item-top__item">
<h2>触达人次</h2>
<p>{{ xfInfo.receiveCount || 0 }}</p>
</div>
</div>
<div class="chart11" style="width: 336px; margin-top: 10px; height: 160px;"></div>
</div>
</div>
<div class="tab-content__item" v-show="leftIndex === 1">
@@ -229,7 +230,7 @@
<script>
import DonutChart from './components/DonutChart'
import PdGrid from './components/PdGrid'
import * as echarts from 'echarts'
export default {
name: 'AppPdDv',
@@ -262,6 +263,7 @@
groupChatNumber: {},
dynamicList: [],
rankList: [],
xfInfo: {},
pointList: []
}
},
@@ -272,6 +274,7 @@
},
mounted () {
document.title = '微网实格 · 服务矩阵'
this.$nextTick(() => {
if (document.querySelector('.AiDvWrapper .viewPanel')) {
document.querySelector('.AiDvWrapper .viewPanel').style.backgroundImage = 'url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/bg.png)'
@@ -290,9 +293,22 @@
this.pointList = res.data
}
})
this.instance.post(`app/appintegraluser/suffixWeekIntegralSort`).then(res => {
this.instance.post(`app/appintegraluser/userTotalIntegralSort`).then(res => {
if (res.code === 0) {
this.rankList = res.data
this.pointList = res.data
}
})
this.instance.post(`app/appmasssendingtask/statisticsEffectByPidu`).then(res => {
if (res.code === 0) {
this.xfInfo = res.data
this.initBarChart('.chart11', {
x: res.data.trend.map(v => v.ymd),
value: res.data.trend.map(v => v.createCount),
name: '宣发统计'
}, [
{offset: 0, color: 'rgba(25, 179, 209, 1)'},
{offset: 1, color: 'rgba(25, 179, 209, 0)'}
])
}
})
this.instance.post(`/app/wxgroupstatistic/getCustommerNumber`).then(res => {
@@ -321,7 +337,7 @@
this.initLineChart('.chart2', {
x: res.data['群成员数'].map(v => v.month),
value: res.data['群成员数'].map(v => v.totalNumber),
name: '居民'
name: '居民'
})
}
})
@@ -654,6 +670,39 @@
}
}
.xf {
display: flex;
align-items: center;
justify-content: space-between;
.item-top__item {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
width: 107px;
height: 52px;
line-height: 1;
cursor: pointer;
user-select: none;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/ql4.png);
background-size: 100% 100%;
h2 {
margin-bottom: 8px;
color: #2AB7D1;
font-size: 12px;
}
p {
font-size: 14px;
color: #fff;
font-weight: bold;
font-style: oblique;
}
}
}
.ql {
display: flex;
align-items: center;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,505 @@
<template>
<div class="map">
<div id="map" ref="rootmap" />
<div class="community-info" v-show="isShowInfo">
<div class="community-info__close" title="关闭" @click="closeInfo">
<i class="iconClean iconfont"></i>
</div>
<div class="community-info__header">
<h2>{{ info.resourceName }}</h2>
<el-tag type="success" size="small" style="margin: 6px 0;">{{ info.categoryName }}</el-tag>
<div>{{ info.areaName }}{{ info.address }}</div>
</div>
<div class="community-info__wrapper">
<div class="community-info__title">
<h2>资源信息</h2>
</div>
<p>{{ info.information }}</p>
</div>
</div>
</div>
</template>
<script>
import AMapLoader from '@amap/amap-jsapi-loader'
import {mapState} from 'vuex'
export default {
name: 'AppResourceMapDv',
label: '资源地图',
provide() {
return {
root: this
}
},
props: {
instance: Function,
dict: Object
},
data() {
return {
map: null,
community: '',
isShowInfo: false,
info: {},
satellite: null,
zoom: 11,
choosedId: '',
center: [],
list: []
}
},
computed: {
...mapState(['user'])
},
mounted() {
this.getCorpLocation()
},
methods: {
getCorpLocation(){
this.instance.post("/app/appdvcpconfig/getCorpLocation").then(res=>{
if(res.code==0){
this.initMap(res.data)
}
})
},
getList () {
this.instance.post(`/app/appresourceinfo/listAll`).then(res => {
if (res.code == 0) {
const points = res.data.map(item => {
return {
...item,
lnglat: [item.lng, item.lat],
id: item.id,
corpId: item.corpId,
areaName:item.areaName,
name: item.resourceName
}
})
this.list = points
this.addMakert(points)
}
})
},
getInfo (id) {
this.info = this.list.filter(v => id === v.id)[0]
this.isShowInfo = true
},
renderClusterMarker(context) {
let el = `<div class="polymeric">
<div class="polymeric-container">
<p>${context.count}</p>
</div>
</div>`
let offset = new AMap.Pixel(-9, -9)
context.marker.setContent(el)
context.marker.setOffset(offset)
context.marker.lnglat = context.clusterData[0].lnglat
context.marker.on('click', e => {
this.map.setZoomAndCenter(this.map.getZoom() + 3, e.target.lnglat, false, 500)
})
},
renderMarker(context) {
const buildId = context.data[0].id
let el = `<div id="buildId-${buildId}" class="mark ${buildId === this.choosedId ? 'mark-active' : ''}">
<img src="${context.data[0].categoryIcon || 'https://cdn.cunwuyun.cn/dvcp/ply/icon.png'}">
</div>`
context.marker.setContent(el);
context.marker.setAnchor("center")
context.marker.id = `${buildId}`
context.marker.data = JSON.stringify(context.data[0])
context.marker.lnglat = context.data[0].lnglat
context.marker.on('click', e => {
this.choosedId = e.target.id
this.getInfo(e.target.id)
context.marker.setContent(el);
document.querySelectorAll('.mark').forEach(el => {
el.classList.remove('mark-active')
})
document.querySelector(`#buildId-${e.target.id}`).classList.add('mark-active')
})
},
closeInfo () {
this.info = {}
this.isShowInfo = false
this.choosedId = ''
this.map.setZoom(this.map.getZoom() + 0.0001)
},
addMakert(points) {
new AMap.MarkerClusterer(this.map, points, {
gridSize: 60,
maxZoom: 15,
clusterByZoomChange: false,
renderClusterMarker: this.renderClusterMarker,
renderMarker: this.renderMarker
})
},
initMap({lng,lat}) {
this.center = [lng,lat];
AMapLoader.load({
key: '54a02a43d9828a8f9cd4f26fe281e74e',
version: '2.0',
plugins: ['AMap.ToolBar', 'AMap.Scale', 'AMap.MouseTool', 'AMap.MarkerClusterer'],
AMapUI: {
version: '1.1',
plugins: []
}
}).then((AMap) => {
this.map = new AMap.Map('map', {
resizeEnable: true,
zooms: [6, 20],
center: [lng, lat],
zoom: this.zoom,
mapStyle: 'amap://styles/40f6fba77127e061a058f670433a67ec'
})
this.satellite = new AMap.TileLayer.Satellite()
this.getList()
})
}
}
}
</script>
<style lang="scss" scoped>
.map {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
.community-info__header {
margin-bottom: 10px;
padding: 12px 20px;
background-image: linear-gradient(270deg, rgba(11, 158, 255, 0.2) 0%, rgba(2, 81, 227, 0.2) 100%);
h2 {
max-width: 360px;
line-height: 28px;
margin: 0;
color: #fff;
font-size: 20px;
font-weight: 500;
}
div {
display: flex;
align-items: center;
color: #D2E0FF;
font-size: 12px;
}
}
.community-info {
position: absolute;
top: 10px;
right: 10px;
width: 400px;
max-height: calc(100% - 20px);
overflow-y: overlay;
overflow-x: hidden;
z-index: 111;
background: rgba(7,11,35,0.50);
border: 1px solid #14345F;
.community-info__close {
position: absolute;
right: 0;
top: 0;
padding: 16px 12px 0 12px;
font-size: 16px;
color: #8899bb;
cursor: pointer;
&:hover {
opacity: 0.6;
}
}
&::-webkit-scrollbar {
width: 6px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 6px;
background: rgba(144, 147, 153, .5);
}
.community-info__wrapper {
padding: 0 20px 40px;
.community-info__title {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
h2 {
position: relative;
width: 169px;
padding: 0 20px;
font-size: 15px;
color: #fff;
font-weight: 700;
background: url(https://cdn.cunwuyun.cn/dvcp/ply/title-bg.png) no-repeat;
background-size: 169px 30px;
background-position-y: -5px;
background-position-x: -10px;
}
span {
width: 52px;
height: 24px;
line-height: 24px;
color: #fff;
font-size: 14px;
text-align: center;
border-radius: 12px;
}
}
p {
line-height: 1.5;
font-size: 14px;
color: #82C5FF;
}
}
}
:deep( .ol-zoom ){
display: none !important;
top: inherit !important;
bottom: 0.5em !important;
}
div {
box-sizing: border-box;
}
#map {
width: 100%;
height: 100%;
}
:deep( .amap-logo), :deep( .amap-copyright ){
display: none !important;
}
:deep( .amap-icon ){
width: 40px !important;
height: 40px !important;
img {
width: 100%;
height: 100%;
}
}
.no-more {
display: block;
height: 60px;
line-height: 60px;
margin-top: 2px;
text-align: center;
font-size: 12px;
color: #999;
width: 100%;
}
}
.community {
display: flex;
align-items: center;
position: relative;
height: 28px;
padding: 0 10px;
background: #0F8F64;
border-radius: 26px;
color: #fff;
font-size: 12px;
cursor: pointer;
&.color1 {
background: #2266FF;
em:after {
border-top-color: #2266FF !important;
}
}
&.color2 {
background: #F46159;
em:after {
border-top-color: #F46159 !important;
}
}
em {
position: absolute;
bottom: -6px;
left: 50%;
transform: translate(-50%, 0);
&::after {
position: absolute;
bottom: -6px;
left: 0;
width: 0;
height: 0;
border: 6px solid #0F8F64;
border-bottom-color: transparent;
border-left-color: transparent;
border-right-color: transparent;
transform: translate(-50%, 0);
overflow: hidden;
content: ' ';
}
}
i {
padding-right: 2px;
position: relative;
color: #ffc928;
font-size: 16px;
font-style: normal;
}
}
:deep( .polymeric ){
display: flex;
position: relative;
align-items: center;
justify-content: center;
width: 62px;
height: 62px;
border-radius: 50%;
cursor: pointer;
user-select: none;
&.polymeric-active {
.polymeric-container {
background: #F46159;
}
&::after {
background-color: #F46159;
}
}
&::after {
position: absolute;
z-index: -1;
width: 62px;
height: 62px;
border-radius: 50%;
-webkit-animation: warn 1s ease-out 0s infinite;
animation: warn 1s ease-out 0s infinite;
background-color: rgba(15, 143, 100, 1);
transform: translate(-50%, -50%);
content: " ";
}
.polymeric-container {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
width: 62px;
height: 62px;
border-radius: 50%;
background: rgba(15, 143, 100, 1);
p {
text-align: center;
width: 58px;
color: #fff;
font-size: 18px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
p:first-child{
font-size: 14px;
}
h2 {
color: #fff;
font-weight: normal;
font-size: 12px;
}
}
}
:deep( .mark){
position: relative;
user-select: none;
width: 50px;
height: 50px;
border-radius: 50%;
cursor: pointer;
img {
width: 50px;
height: 50px;
border-radius: 50%;
}
&:hover {
opacity: 0.8;
}
&.mark-active {
transform: scale(1.2);
}
}
@-webkit-keyframes warn {
0% {
transform: scale(.5);
opacity: 1
}
30% {
opacity: .5
}
to {
transform: scale(1.8);
opacity: 0
}
}
@keyframes warn {
0% {
transform: scale(.5);
opacity: 1
}
30% {
opacity: .5
}
to {
transform: scale(1.4);
opacity: 0
}
}
</style>

View File

@@ -439,7 +439,6 @@ export default {
}
}).then(res => {
if (res.code === 0) {
console.log(res)
this.buildList = res.data.records
const points = res.data.records.map(item => {
return {
@@ -950,7 +949,7 @@ export default {
}
::v-deep .ai-list__content--right-wrapper {
:deep( .ai-list__content--right-wrapper ){
height: 100%;
margin: 0 !important;
background-color: transparent !important;
@@ -959,11 +958,11 @@ export default {
.map {
::v-deep .amap-logo, ::v-deep .amap-copyright {
:deep( .amap-logo), :deep( .amap-copyright ){
display: none !important;
}
::v-deep .amap-icon {
:deep( .amap-icon ){
width: 40px !important;
height: 40px !important;
@@ -1080,7 +1079,7 @@ export default {
height: 100%;
overflow: hidden;
::v-deep .ol-zoom {
:deep( .ol-zoom ){
display: none !important;
top: inherit !important;
bottom: 0.5em !important;
@@ -1096,7 +1095,7 @@ export default {
}
}
::v-deep .polymeric {
:deep( .polymeric ){
display: flex;
position: relative;
align-items: center;
@@ -1162,7 +1161,7 @@ export default {
}
}
::v-deep .mark {
:deep( .mark ){
width: 56px;
height: 56px;
text-align: center;
@@ -1173,25 +1172,25 @@ export default {
color: #fff;
}
::v-deep .online-status0 {
:deep( .online-status0 ){
background: rgba(8, 73, 35, 0.8);
box-shadow: 0 4px 4px 0 #000000, 0 0 8px 4px #15BE55;
border: 1px solid #22FF81;
}
::v-deep .online-status1 {
:deep( .online-status1 ){
background: rgba(79, 14, 7, 0.8);
box-shadow: 0 4px 4px 0 #000000, 0 0 8px 4px #C60E0E;
border: 1px solid #FF6969;
}
::v-deep .online-status2 {
:deep( .online-status2 ){
background: rgba(96, 8, 102, 0.8);
box-shadow: 0 4px 4px 0 #000000, 0 0 8px 4px #C312CA;
border: 1px solid #FF69DD;
}
::v-deep .online-status3 {
:deep( .online-status3 ){
background: rgba(108, 94, 14, 0.8);
box-shadow: 0 4px 4px 0 #000000, 0 0 8px 4px #D1A818;
border: 1px solid #FFDF54;

View File

@@ -287,7 +287,7 @@ export default {
.left-top {
width: 100%;
background-image: url("../assets/videoMonitor/box1.png");
background-image: url("./assets/videoMonitor/box1.png");
background-size: 100% 100%;
position: relative;
overflow: hidden;
@@ -301,7 +301,7 @@ export default {
.left-bottom {
width: 100%;
height: 311px;
background-image: url("../assets/videoMonitor/box2.png");
background-image: url("./assets/videoMonitor/box2.png");
background-size: 100% 100%;
margin-top: 7px;
display: flex;
@@ -326,7 +326,7 @@ export default {
display: flex;
align-items: center;
justify-content: center;
background-image: url("../assets/videoMonitor/card.png");
background-image: url("./assets/videoMonitor/card.png");
background-size: 100% 100%;
margin-right: 24px;
@@ -352,7 +352,7 @@ export default {
.center-bottom {
width: 100%;
height: 789px;
background-image: url("../assets/videoMonitor/middlebox.png");
background-image: url("./assets/videoMonitor/middlebox.png");
background-size: 100% 100%;
margin-top: 40px;
position: relative;
@@ -398,7 +398,7 @@ export default {
.right-top {
width: 100%;
height: 333px;
background-image: url("../assets/videoMonitor/box3.png");
background-image: url("./assets/videoMonitor/box3.png");
background-size: 100% 100%;
position: relative;
overflow: hidden;
@@ -432,7 +432,7 @@ export default {
.right-middle, .right-bottom {
width: 100%;
height: 276px;
background-image: url("../assets/videoMonitor/box4.png");
background-image: url("./assets/videoMonitor/box4.png");
background-size: 100% 100%;
margin: 19px 0;
position: relative;
@@ -457,7 +457,7 @@ export default {
}
}
::v-deep .AiEchart {
:deep( .AiEchart ){
width: 251px;
height: 175px;
margin: 11px auto 0;
@@ -506,15 +506,15 @@ export default {
color: #FFFFFF;
}
::v-deep .index {
:deep( .index ){
background-color: transparent !important;
}
::v-deep .header {
background: url("../assets/videoMonitor/titlebox.png");
:deep( .header ){
background: url("./assets/videoMonitor/titlebox.png");
}
::v-deep .row-item div:nth-child(3) {
:deep( .row-item div:nth-child(3) ){
font-size: 13px;
color: #00CDFF;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

Before

Width:  |  Height:  |  Size: 362 KiB

After

Width:  |  Height:  |  Size: 362 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 693 KiB

After

Width:  |  Height:  |  Size: 693 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 445 B

After

Width:  |  Height:  |  Size: 445 B

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 140 KiB

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -5,7 +5,7 @@
ref="tree"
id="tree"
:style="{left: x, top: y, transform: `scale(${scale}) translate(-50%, -50%) `, 'transform-origin': `${0} ${0}`}">
<VueOkrTree
<ai-okr-tree
:props="props"
node-key="id"
show-collapsable
@@ -15,23 +15,16 @@
ref="VueOkrTree"
@node-click="onNodeClick"
:data="treeData">
</VueOkrTree>
</ai-okr-tree>
</div>
</div>
</template>
<script>
import AiOkrTree from "dvcp-dv-ui/components/AiOkrTree/AiOkrTree"
export default {
name: 'AiGrid',
props: ['instance'],
components: {
VueOkrTree: AiOkrTree
},
data() {
return {
scale: 1,
@@ -169,7 +162,7 @@ export default {
background: linear-gradient(180deg, #42C6CE 0%, #307598 100%);
}
::v-deep .org-chart-container {
:deep( .org-chart-container ){
color: #FFFFFF;
font-size: 16px;

View File

@@ -0,0 +1,190 @@
<template>
<div class="DoughnutChart-wrapper">
<div class="DoughnutChart" :id="id">
<canvas :id="canvasId"></canvas>
<div class="DonutChart-text">
<span>{{ ratio }}%</span>
</div>
</div>
<div class="DoughnutChart-explain">
<div class="item" v-for="(item, index) in value" :key="index">
<i></i>
<span :style="labelStyle">{{ item.key }}</span>
<p>{{ item.value }}</p>
</div>
</div>
</div>
</template>
<script>
export default {
props: ['ratio', 'value', 'labelStyle'],
data () {
return {
id: `DonutChart-${Math.ceil(Math.random() * 10000)}`,
canvasId: `DonutChartCanvas-${Math.ceil(Math.random() * 10000)}`,
canvasWidth: 90,
canvasHeight: 90
}
},
watch: {
ratio () {
this.init()
}
},
mounted () {
this.$nextTick(() => {
this.init()
})
},
methods: {
drawLine(ctx, options) {
const { beginX, beginY, endX, endY, lineColor, lineWidth } = options
ctx.lineWidth = lineWidth
ctx.strokeStyle = lineColor
ctx.beginPath()
ctx.moveTo(beginX, beginY)
ctx.lineTo(endX, endY)
ctx.closePath()
ctx.stroke()
},
angle (a, i, ox, oy, or) {
var hudu = (2 * Math.PI / 360) * a * i
var x = ox + Math.sin(hudu) * or
var y = oy - Math.cos(hudu) * or
return x + '_' + y
},
mapColor (value) {
if (value < 25) {
return '#FFC139'
}
if (value < 50) {
return '#21E03E'
}
return '#05C8FF'
},
init () {
const ctx = document.querySelector(`#${this.canvasId}`).getContext('2d')
const canvasWidth = document.querySelector(`#${this.id}`).offsetWidth
const canvasHeight = document.querySelector(`#${this.id}`).offsetHeight
const angle = this.ratio / 100 * 2
let radian = 0
ctx.width = canvasWidth
ctx.height = canvasHeight
const x = canvasWidth / 2
const y = canvasHeight / 2
ctx.lineWidth = 4
ctx.strokeStyle = 'rgba(102, 121, 138, 0.3)'
ctx.beginPath();
ctx.arc(x, y, x - 8, 0, 2 * Math.PI)
ctx.stroke()
ctx.beginPath()
ctx.lineWidth = 4
var g = ctx.createLinearGradient(0, 0, 0, 80)
g.addColorStop(0, 'rgba(44, 150, 231, 0.8)')
g.addColorStop(1, 'rgba(92, 255, 243, 1)')
ctx.strokeStyle = g
if (this.ratio < 25) {
radian = 3 / 2 + angle
ctx.arc(x, y, x - 8, Math.PI + Math.PI / 2, Math.PI * radian, false)
} else if (this.ratio === 100) {
ctx.arc(x, y, x - 8, 0, Math.PI * 2)
} else {
radian = (this.ratio - 25) / 100 * 2
ctx.arc(x, y, x - 8, Math.PI + Math.PI / 2, Math.PI * radian, false)
}
ctx.stroke()
ctx.beginPath()
ctx.strokeStyle = 'rgba(102, 121, 138, 0.4)'
ctx.lineWidth = 1
ctx.arc(x, y, x - 15, 0, 2 * Math.PI)
ctx.stroke()
}
}
}
</script>
<style lang="scss" scoped>
.DoughnutChart-wrapper {
display: flex;
align-items: center;
justify-content: space-between;
height: 100%;
padding-top: 12px;
.DoughnutChart-explain {
flex: 1;
margin-left: 10px;
.item {
display: flex;
align-items: center;
&:first-child {
margin-bottom: 10px;
}
i {
width: 8px;
height: 8px;
margin-right: 6px;
border-radius: 50%;
background: #5AF9F0;
}
span {
width: 78px;
font-weight: 400;
font-size: 14px;
color: #9BB7D4;
}
p {
font-size: 14px;
color: #FFFFFF;
}
&:last-child i {
background: rgba(102, 121, 138, 0.3);
}
}
}
.DoughnutChart {
position: relative;
width: 90px;
height: 90px;
overflow: hidden;
.DonutChart-text {
display: flex;
position: absolute;
justify-content: center;
top: 50%;
left: 50%;
z-index: 1;
transform: translate(-50%, -50%);
span {
font-size: 17px;
font-weight: bold;
color: #02FEFF;
}
}
}
}
</style>

View File

@@ -0,0 +1,386 @@
<template>
<div class="AiDvMap">
<div class="chart-map" :class="v" style="width: 100%; height: 100%"></div>
<transition name="fade">
<div class="info" v-if="isShowInfo">
<div class="info-mask" @click="isShowInfo = false"></div>
<div class="info-content">
<div class="info-title">
<h2>{{ title }}</h2>
</div>
<img src="https://cdn.cunwuyun.cn/dvcp/dv/qxn/close.png" @click="isShowInfo = false" />
<div class="info-wrapper" v-if="type === '0'">
<div class="info-wrapper__item">
<label>下属单位</label>
<span>{{ info['派出所数量'] }}个派出所</span>
</div>
<div class="info-wrapper__item">
<label>居民群</label>
<span>{{ info['群数量'] }}</span>
</div>
<div class="info-wrapper__item">
<label>成员人数</label>
<span>{{ info['成员总数'] }}</span>
</div>
<div class="info-wrapper__item">
<label>群人数</label>
<span>{{ info['群成员数量'] }}</span>
</div>
<div class="info-wrapper__item">
<label>激活比例</label>
<span>{{ rate }}</span>
</div>
<div class="info-wrapper__item">
<label>好友人数</label>
<span>{{ info['外部联系人数量'] }}</span>
</div>
<div class="info-wrapper__item">
<label>群主人数</label>
<span>{{ info['群主人数'] }}</span>
</div>
</div>
<div class="info-wrapper" v-else>
<div class="info-wrapper__item">
<label>负责人</label>
<span>{{ info['负责人'] }}</span>
</div>
<div class="info-wrapper__item">
<label>下属警格数</label>
<span>{{ info['下属警格数量'] }}</span>
</div>
<div class="info-wrapper__item">
<label>警格人数</label>
<span>{{ info['外部联系人数量'] }}</span>
</div>
<div class="info-wrapper__item">
<label>事件处理率</label>
<span>{{ rate }}</span>
</div>
<div class="info-wrapper__item">
<label>待处理</label>
<span>{{ info['待受理'] }}</span>
</div>
<div class="info-wrapper__item">
<label>处理中</label>
<span>{{ info['办理中'] }}</span>
</div>
<div class="info-wrapper__item">
<label>已办理</label>
<span>{{ info['已办结'] }}</span>
</div>
<div class="info-wrapper__item">
<label>事件总数</label>
<span>{{ info['事件总数'] }}</span>
</div>
</div>
</div>
</div>
</transition>
</div>
</template>
<script>
export default {
name: 'AiDvMap',
props: {
instance: Function,
type: String
},
data() {
return {
info: {},
timer: null,
title: '',
v: `AiDvMap-${new Date().getTime()}`,
chart: null,
isShowInfo: false,
geoJSON: require('./geoJSon/qxnGeoJSON.json')
}
},
computed: {
rate () {
if (!this.info['事件总数']) {
return '0%'
}
return ((this.info['事件总数'] - this.info['待受理']) / this.info['事件总数']).toFixed(4) * 100 + '%'
}
},
mounted() {
this.$nextTick(() => {
this.initChart()
})
},
methods: {
initChart() {
this.chart = echarts.init(document.querySelector(`.${this.v}`))
echarts.registerMap('黔西南', this.geoJSON)
let option = {
geo: [
{
map: "黔西南",
aspectScale: 1,
zoom: 0.65,
layoutCenter: ["50%", "50%"],
layoutSize: "180%",
show: true,
roam: false,
emphasis: {
show: true,
label: {
textStyle: {
color: "#FFFFFF"
},
},
itemStyle: {
// areaColor: '#fff'
}
},
label: {
normal: {
show: true,
color: '#fff',
fontSize: '14'
}
},
itemStyle: {
normal: {
borderColor: "rgba(2, 254, 255, 0.7)",
borderWidth: 2,
shadowColor: "rgba(2, 254, 255, 0.1)",
shadowOffsetY: 10,
shadowBlur: 120,
areaColor: "#0f7295",
},
}
},
// 重影
{
type: "map",
map: "黔西南",
zlevel: -1,
aspectScale: 1,
zoom: 0.65,
layoutCenter: ["50%", "51%"],
layoutSize: "180%",
roam: false,
silent: true,
itemStyle: {
normal: {
borderWidth: 1,
// borderColor:"rgba(17, 149, 216,0.6)",
borderColor: "rgba(2, 254, 255, 0.3)",
shadowColor: "rgba(2, 254, 255, 0.3)",
shadowOffsetY: 5,
shadowBlur: 15,
areaColor: "rgba(5,21,35,0.1)",
},
},
},
{
type: "map",
map: "黔西南",
zlevel: -2,
aspectScale: 1,
zoom: 0.65,
layoutCenter: ["50%", "52%"],
layoutSize: "180%",
roam: false,
silent: true,
itemStyle: {
normal: {
borderWidth: 1,
// borderColor: "rgba(57, 132, 188,0.4)",
borderColor: "rgba(2, 254, 255, 0.2)",
shadowColor: "rgba(2, 254, 255, 0.24)",
shadowOffsetY: 5,
shadowBlur: 15,
areaColor: "transpercent",
},
},
},
{
type: "map",
map: "黔西南",
zlevel: -3,
aspectScale: 1,
zoom: 0.65,
layoutCenter: ["50%", "53%"],
layoutSize: "180%",
roam: false,
silent: true,
itemStyle: {
normal: {
borderWidth: 1,
// borderColor: "rgba(11, 43, 97,0.8)",
borderColor: "rgba(2, 254, 255, 0.1)",
shadowColor: "rgba(2, 254, 255, 0.1)",
shadowOffsetY: 15,
shadowBlur: 10,
areaColor: "transpercent",
},
},
}
],
series: [
{
type: 'scatter',
map: "黔西南",
coordinateSystem: 'geo',
z: 3,
zlevel: 3,
// symbol: 'none',
symbolSize: 16,
rippleEffect: {
period: 2,
scale: 4,
brushType: 'fill'
},
label: {
show: false
},
roam: false,
itemStyle: {
normal: {
areaColor: '#000',
borderColor: '#a18a3a',
borderWidth: 1
},
emphasis: {
show: false,
areaColor: null
}
},
data: []
}
]
}
this.chart.setOption(option)
this.chart.on('click', e => {
this.getInfo(e.name)
})
},
getInfo (name) {
this.title = `${name}公安局`
this.instance.post(`/api/wxgridinfo/comprehensiveOverviewMap`, null, {
params: {
gridName: `${name}公安局`,
corpId: 'wwb182f88f0327b37f'
}
}).then(res => {
if (res.code === 0) {
this.info = res.data
this.isShowInfo = true
}
})
}
}
}
</script>
<style lang="scss" scoped>
.AiDvMap {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
.info {
position: fixed;
left: 0;
top: 0;
z-index: 111;
width: 100%;
height: 100%;
overflow: hidden;
.info-mask {
position: absolute;
left: 0;
top: 0;
z-index: 1;
width: 100%;
height: 100%;
background: rgba($color: #000000, $alpha: 0.1);
}
.info-content {
position: absolute;
top: 50%;
left: 50%;
z-index: 11;
width: 390px;
height: 262px;
padding: 15px 18px 0;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/qxn/info-bg.png);
background-size: 100% 100%;
transform: translate(-50%, -50%);
.info-wrapper {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-top: 40px;
.info-wrapper__item {
display: flex;
align-items: center;
width: 50%;
line-height: 1;
margin-bottom: 20px;
label {
width: 90px;
margin-right: 10px;
color: #fff;
text-align: right;
font-size: 14px;
font-weight: 500;
}
span {
flex: 1;
font-size: 14px;
color: #FF8533;
}
}
}
img {
position: absolute;
top: 30px;
right: 18px;
z-index: 1;
width: 24px;
height: 24px;
cursor: pointer;
transition: all ease 300ms;
&:hover {
opacity: 0.6;
}
}
.info-title {
display: flex;
align-items: center;
h2 {
font-size: 16px;
color: #fff;
}
}
}
}
}
</style>

View File

@@ -0,0 +1,334 @@
<template>
<div class="PlyGird">
<div class="pdgrid-title">
<h2>{{ currGird }}</h2>
</div>
<div class="pdgrid-body">
<div class="pdgrid-body__item" @click="isShowGrid2 = true">
<h2>{{ girdNum2 }}</h2>
<div class="bottom">
<i></i>
<p>{{ girdName2 }}</p>
<i class="right"></i>
</div>
</div>
</div>
<transition name="fade">
<div class="grid-dialog" v-show="isShowGrid2">
<div class="mask" @click="isShowGrid2 = false"></div>
<div class="grid-container">
<h2 :title="girdName2">{{ girdName2 }}</h2>
<div class="grid-list">
<div
:class="[currIndex2 === index ? 'grid-active' : '']"
v-for="(item, index) in girdInfoList2"
:key="index"
:title="item.girdName"
@click.stop="onGrid2Click(item, index)">
{{ item.girdName }}
</div>
</div>
</div>
</div>
</transition>
</div>
</template>
<script>
export default {
name: 'pdgrid',
props: ['instance'],
data () {
return {
isShowGrid2: false,
currIndex2: 0,
girdInfoList2: [],
girdName2: '',
girdNum2: 0,
currGird: ''
}
},
mounted () {
this.$nextTick(() => {
document.addEventListener('keydown', this.onKeyDown)
})
this.getInfo()
},
destroyed () {
document.removeEventListener('keydown', this.onKeyDown)
},
methods: {
onKeyDown (e) {
if (e.keyCode == 27) {
this.isShowGrid2 = false
}
},
onGrid2Click (item, index) {
this.currIndex2 = index
this.girdName2 = item.girdName
this.isShowGrid2 = false
this.$emit('nodeClick', item.id)
this.currGird = item.girdName
this.getInfo(item.id)
},
getInfo (id) {
this.instance.post(`/app/appgirdinfo/queryPlyDetailByGirdId?id=${id || ''}`).then(res => {
if (res.code === 0) {
res.data.girdInfoList2 && (this.girdInfoList2 = res.data.girdInfoList2)
res.data.girdName2 && (this.girdName2 = res.data.girdName2)
res.data.girdNum2 != null && (this.girdNum2 = res.data.girdNum2)
res.data.girdName1 && (this.currGird = res.data.girdName1)
if (!id) {
this.currIndex2 = res.data.girdInfoList2.findIndex(v => res.data.girdName2 === v.girdName)
}
}
})
}
}
}
</script>
<style lang="scss" scoped>
.PlyGird {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
box-sizing: border-box;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/middle-bg.png) no-repeat center;
background-size: contain;
.fade-enter-active, .fade-leave-active {
transition: opacity .3s ease-in-out;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
* {
box-sizing: border-box;
}
.pdgrid-grid__title {
position: absolute;
top: 40px;
left: 50%;
width: 271px;
height: 53px;
line-height: 53px;
text-align: center;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/grid-title-sbg.png) no-repeat center;
background-size: 100% 100%;
cursor: pointer;
transform: translateX(-50%);
transition: opacity ease 0.3s;
&:hover {
opacity: 0.8;
}
h2 {
width: 182px;
margin: 0 auto;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #FFFFFF;
font-size: 21px;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
.pdgrid-title {
position: absolute;
top: 200px;
left: 50%;
min-width: 640px;
height: 80px;
line-height: 80px;
text-align: center;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/middle-titlebg.png) no-repeat center;
background-size: 100% 100%;
transform: translateX(-50%);
h2 {
color: #FFFFFF;
font-size: 22px;
white-space: nowrap;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
.pdgrid-body {
display: flex;
position: absolute;
justify-content: center;
bottom: 133px;
left: 0;
width: 100%;
padding: 0 112px;
.pdgrid-body__item {
display: flex;
flex-direction: column;
width: 200px;
height: 187px;
align-items: center;
padding-top: 71px;
cursor: pointer;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/item-bg.png) no-repeat center;
background-size: 100% 100%;
transition: opacity ease 0.3s;
&:hover {
opacity: 0.8;
}
h2 {
font-size: 36px;
color: #FFFFFF;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
p {
max-width: 164px;
margin-top: 4px;
padding: 0 16px;
font-size: 16px;
color: #FFFFFF;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-webkit-text-fill-color: transparent;
}
.bottom {
display: flex;
align-items: center;
i {
width: 0px;
height: 0px;
border: 6px solid transparent;
border-top-color: transparent;
border-bottom-color: transparent;
border-left-color: transparent;
border-right-color: #FFCB42;
&.right {
width: 0px;
height: 0px;
border: 6px solid transparent;
border-top-color: transparent;
border-bottom-color: transparent;
border-left-color: #FFCB42;
border-right-color: transparent;
}
}
}
}
}
.grid-dialog {
position: fixed;
top: 0;
left: 0;
z-index: 111;
width: 100%;
height: 100%;
& > .mask {
position: absolute;
left: 0;
top: 0;
z-index: 1;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
}
.grid-container {
display: flex;
position: absolute;
flex-direction: column;
left: 50%;
top: 50%;
z-index: 2;
width: 640px;
height: 640px;
background: rgba(7,13,41,0.9);
border: 1px solid #144662;
transform: translate(-50%, -50%);
& > h2 {
width: 100%;
height: 67px;
line-height: 67px;
padding: 0 20px;
text-align: center;
color: #FFFFFF;
font-size: 24px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/grid-title-bg.png) no-repeat center;
background-size: 100% 100%;
}
.grid-list {
flex: 1;
overflow-y: auto;
& > div {
height: 67px;
line-height: 67px;
padding: 0 20px;
text-align: center;
color: #FFFFFF;
font-size: 27px;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
transition: all ease 0.5s;
&.grid-active {
background: linear-gradient(270deg, rgba(0,48,124,0) 0%, #00307C 16%, rgba(0,99,255,0.9100) 50%, rgba(0,48,124,0.8200) 87%, rgba(0,48,124,0) 100%);
box-shadow: inset 0px -1px 0px 0px rgba(16,34,54,1);
text-shadow: 0px 3px 5px rgba(0,0,0,0.5000);
}
&:hover {
background: linear-gradient(270deg, rgba(0,48,124,0) 0%, #00307C 16%, rgba(0,99,255,0.9100) 50%, rgba(0,48,124,0.8200) 87%, rgba(0,48,124,0) 100%);
box-shadow: inset 0px -1px 0px 0px rgba(16,34,54,1);
text-shadow: 0px 3px 5px rgba(0,0,0,0.5000);
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,498 @@
<template>
<div class="pdgrid">
<div class="pdgrid-title">
<h2>{{ currGird }}</h2>
</div>
<div class="pdgrid-grid__title" @click="isShowGrid2 = true">
<h2 :title="girdName2">{{ girdName2 }}</h2>
</div>
<div class="pdgrid-body">
<div class="pdgrid-body__item" @click="isShowGrid3 = true">
<h2>{{ girdNum3 || 0 }}</h2>
<div class="bottom">
<i></i>
<p>{{ girdName3 }}</p>
<i class="right"></i>
</div>
</div>
<div class="pdgrid-body__item" @click.stop="isShowGrid4 = true">
<h2>{{ girdNum4 || 0 }}</h2>
<div class="bottom">
<i></i>
<p>{{ girdName4 }}</p>
<i class="right"></i>
</div>
</div>
<div class="pdgrid-body__item" @click="isShowGrid5 = true">
<h2>{{ girdNum5 || 0 }}</h2>
<div class="bottom">
<i></i>
<p>{{ girdName5 }}</p>
<i class="right"></i>
</div>
</div>
</div>
<transition name="fade">
<div class="grid-dialog" v-show="isShowGrid2">
<div class="mask" @click="isShowGrid2 = false"></div>
<div class="grid-container">
<h2 :title="girdName2">{{ girdName2 }}</h2>
<div class="grid-list">
<div @click.stop="onGrid2Click(girdId1, girdName2)">{{ girdName2 }}</div>
<!-- <div
:class="[currIndex2 === index ? 'grid-active' : '']"
v-for="(item, index) in girdInfoList2"
:key="index"
:title="item.girdName"
@click.stop="onGrid2Click(item, index)">
{{ item.girdName }}
</div> -->
</div>
</div>
</div>
</transition>
<transition name="fade">
<div class="grid-dialog" v-show="isShowGrid3">
<div class="mask" @click="isShowGrid3 = false"></div>
<div class="grid-container">
<h2 :title="girdName3">{{ girdName3 }}</h2>
<div class="grid-list">
<div
:class="[currIndex3 === index ? 'grid-active' : '']"
v-for="(item, index) in girdInfoList3"
:key="index"
:title="item.girdName"
@click.stop="onGrid3Click(item, index)">
{{ item.girdName }}
</div>
</div>
</div>
</div>
</transition>
<transition name="fade">
<div class="grid-dialog" v-show="isShowGrid4">
<div class="mask" @click="isShowGrid4 = false"></div>
<div class="grid-container">
<h2 :title="girdName4">{{ girdName4 }}</h2>
<div class="grid-list">
<div
:class="[currIndex4 === index ? 'grid-active' : '']"
v-for="(item, index) in girdInfoList4"
:key="index"
:title="item.girdName"
@click.stop="onGrid4Click(item, index)">
{{ item.girdName }}
</div>
</div>
</div>
</div>
</transition>
<transition name="fade">
<div class="grid-dialog" v-show="isShowGrid5">
<div class="mask" @click="isShowGrid5 = false"></div>
<div class="grid-container">
<h2 :title="girdName5">{{ girdName5 }}</h2>
<div class="grid-list">
<div
:class="[currIndex5 === index ? 'grid-active' : '']"
v-for="(item, index) in girdInfoList5"
:key="index"
:title="item.girdName"
@click.stop="onGrid5Click(item, index)">
{{ item.girdName }}
</div>
</div>
</div>
</div>
</transition>
</div>
</template>
<script>
export default {
name: 'XyGrid',
props: ['instance'],
data () {
return {
isShowGrid2: false,
isShowGrid3: false,
isShowGrid4: false,
isShowGrid5: false,
currIndex2: 0,
girdId1: '',
currIndex3: 0,
currIndex4: 0,
currIndex5: 0,
girdInfoList2: [],
girdInfoList3: [],
girdInfoList4: [],
girdInfoList5: [],
girdName2: '',
girdName3: '',
girdName4: '',
girdName5: '',
girdNum3: 0,
girdNum4: 0,
girdNum5: 0,
currGird: '',
girdName1: ''
}
},
mounted () {
this.$nextTick(() => {
document.addEventListener('keydown', this.onKeyDown)
})
this.getInfo()
},
destroyed () {
document.removeEventListener('keydown', this.onKeyDown)
},
methods: {
onKeyDown (e) {
if (e.keyCode == 27) {
this.isShowGrid2 = false
this.isShowGrid3 = false
this.isShowGrid4 = false
this.isShowGrid5 = false
}
},
onGrid2Click (id, name) {
// this.currIndex2 = index
// this.girdName2 = item.girdName
this.currIndex3 = -1
this.currIndex4 = -1
this.currIndex5 = -1
this.isShowGrid2 = false
this.girdInfoList3 = []
this.girdInfoList4 = []
this.girdInfoList5 = []
this.$emit('nodeClick', id)
this.currGird = name
this.getInfo(id)
},
onGrid3Click (item, index) {
this.currIndex3 = index
this.girdName3 = item.girdName
this.currIndex4 = -1
this.currIndex5 = -1
this.girdNum3 = 1
this.isShowGrid3 = false
this.$emit('nodeClick', {
id: item.id,
level: 2
})
this.girdInfoList4 = []
this.girdInfoList5 = []
this.currGird = item.girdName
this.getInfo(item.id)
},
onGrid4Click (item, index) {
this.currIndex4 = index
this.girdName4 = item.girdName
this.currIndex5 = -1
this.girdNum4 = 1
this.isShowGrid4 = false
this.$emit('nodeClick', {
id: item.id,
level: 3
})
this.girdInfoList5 = []
this.currGird = item.girdName
this.getInfo(item.id)
},
onGrid5Click (item, index) {
this.currIndex5 = index
this.girdName5 = item.girdName
this.isShowGrid5 = false
this.girdNum5 = 1
this.$emit('nodeClick', {
id: item.id,
level: 4
})
this.currGird = item.girdName
this.getInfo(item.id)
},
getInfo (id) {
this.instance.post(`/app/qxn_appgirdinfo/queryGirdInfo?id=${id || ''}`).then(res => {
if (res.code === 0) {
res.data.girdInfoList2 && (this.girdInfoList3 = res.data.girdInfoList2)
res.data.girdInfoList3 && (this.girdInfoList4 = res.data.girdInfoList3)
res.data.girdInfoList4 && (this.girdInfoList5 = res.data.girdInfoList4)
res.data.girdName1 && (this.girdName2 = res.data.girdName1)
res.data.girdName2 && (this.girdName3 = res.data.girdName2)
res.data.girdName3 && (this.girdName4 = res.data.girdName3)
res.data.girdName4 && (this.girdName5 = res.data.girdName4)
if (this.girdId1) {
this.girdName2 = res.data.girdName1
this.girdId1 = res.data.girdId1
}
res.data.girdNum2 != null && (this.girdNum3 = res.data.girdNum2)
res.data.girdNum3 != null && (this.girdNum4 = res.data.girdNum3)
res.data.girdNum4 != null && (this.girdNum5 = res.data.girdNum4)
if (!id) {
this.currGird = res.data.girdName1
}
}
})
}
}
}
</script>
<style lang="scss">
.pdgrid {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
box-sizing: border-box;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/middle-bg.png) no-repeat center;
background-size: contain;
.fade-enter-active, .fade-leave-active {
transition: opacity .3s ease-in-out;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
* {
box-sizing: border-box;
}
.pdgrid-grid__title {
position: absolute;
top: 40px;
left: 50%;
width: 271px;
height: 53px;
line-height: 53px;
text-align: center;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/grid-title-sbg.png) no-repeat center;
background-size: 100% 100%;
cursor: pointer;
transform: translateX(-50%);
transition: opacity ease 0.3s;
&:hover {
opacity: 0.8;
}
h2 {
width: 182px;
margin: 0 auto;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #FFFFFF;
font-size: 21px;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
.pdgrid-title {
position: absolute;
top: 200px;
left: 50%;
min-width: 640px;
height: 80px;
line-height: 80px;
text-align: center;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/middle-titlebg.png) no-repeat center;
background-size: 100% 100%;
transform: translateX(-50%);
h2 {
color: #FFFFFF;
font-size: 22px;
white-space: nowrap;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
.pdgrid-body {
display: flex;
position: absolute;
justify-content: space-between;
bottom: 200px;
left: 0;
width: 100%;
padding: 0 112px;
.pdgrid-body__item {
display: flex;
flex-direction: column;
width: 200px;
height: 187px;
align-items: center;
padding-top: 71px;
cursor: pointer;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/item-bg.png) no-repeat center;
background-size: 100% 100%;
transition: opacity ease 0.3s;
&:hover {
opacity: 0.8;
}
&:nth-of-type(2) {
position: relative;
top: 67px;
}
h2 {
font-size: 36px;
color: #FFFFFF;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
p {
max-width: 164px;
margin-top: 4px;
padding: 0 16px;
font-size: 16px;
color: #FFFFFF;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-webkit-text-fill-color: transparent;
}
.bottom {
display: flex;
align-items: center;
i {
width: 0px;
height: 0px;
border: 6px solid transparent;
border-top-color: transparent;
border-bottom-color: transparent;
border-left-color: transparent;
border-right-color: #FFCB42;
&.right {
width: 0px;
height: 0px;
border: 6px solid transparent;
border-top-color: transparent;
border-bottom-color: transparent;
border-left-color: #FFCB42;
border-right-color: transparent;
}
}
}
}
}
.grid-dialog {
position: fixed;
top: 0;
left: 0;
z-index: 111;
width: 100%;
height: 100%;
& > .mask {
position: absolute;
left: 0;
top: 0;
z-index: 1;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
}
.grid-container {
display: flex;
position: absolute;
flex-direction: column;
left: 50%;
top: 50%;
z-index: 2;
width: 640px;
height: 640px;
background: rgba(7,13,41,0.9);
border: 1px solid #144662;
transform: translate(-50%, -50%);
& > h2 {
width: 100%;
height: 67px;
line-height: 67px;
padding: 0 20px;
text-align: center;
color: #FFFFFF;
font-size: 24px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/grid-title-bg.png) no-repeat center;
background-size: 100% 100%;
}
.grid-list {
flex: 1;
overflow-y: auto;
& > div {
height: 67px;
line-height: 67px;
padding: 0 20px;
text-align: center;
color: #FFFFFF;
font-size: 27px;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
transition: all ease 0.5s;
&.grid-active {
background: linear-gradient(270deg, rgba(0,48,124,0) 0%, #00307C 16%, rgba(0,99,255,0.9100) 50%, rgba(0,48,124,0.8200) 87%, rgba(0,48,124,0) 100%);
box-shadow: inset 0px -1px 0px 0px rgba(16,34,54,1);
text-shadow: 0px 3px 5px rgba(0,0,0,0.5000);
}
&:hover {
background: linear-gradient(270deg, rgba(0,48,124,0) 0%, #00307C 16%, rgba(0,99,255,0.9100) 50%, rgba(0,48,124,0.8200) 87%, rgba(0,48,124,0) 100%);
box-shadow: inset 0px -1px 0px 0px rgba(16,34,54,1);
text-shadow: 0px 3px 5px rgba(0,0,0,0.5000);
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,498 @@
<template>
<div class="pdgrid">
<div class="pdgrid-title">
<h2>{{ currGird }}</h2>
</div>
<div class="pdgrid-grid__title" @click="isShowGrid2 = true">
<h2 :title="girdName2">{{ girdName2 }}</h2>
</div>
<div class="pdgrid-body">
<div class="pdgrid-body__item" @click="isShowGrid3 = true">
<h2>{{ girdNum3 || 0 }}</h2>
<div class="bottom">
<i></i>
<p>{{ girdName3 }}</p>
<i class="right"></i>
</div>
</div>
<div class="pdgrid-body__item" @click.stop="isShowGrid4 = true">
<h2>{{ girdNum4 || 0 }}</h2>
<div class="bottom">
<i></i>
<p>{{ girdName4 }}</p>
<i class="right"></i>
</div>
</div>
<div class="pdgrid-body__item" @click="isShowGrid5 = true">
<h2>{{ girdNum5 || 0 }}</h2>
<div class="bottom">
<i></i>
<p>{{ girdName5 }}</p>
<i class="right"></i>
</div>
</div>
</div>
<transition name="fade">
<div class="grid-dialog" v-show="isShowGrid2">
<div class="mask" @click="isShowGrid2 = false"></div>
<div class="grid-container">
<h2 :title="girdName2">{{ girdName2 }}</h2>
<div class="grid-list">
<div @click.stop="onGrid2Click(girdId1, girdName2)">{{ girdName2 }}</div>
<!-- <div
:class="[currIndex2 === index ? 'grid-active' : '']"
v-for="(item, index) in girdInfoList2"
:key="index"
:title="item.girdName"
@click.stop="onGrid2Click(item, index)">
{{ item.girdName }}
</div> -->
</div>
</div>
</div>
</transition>
<transition name="fade">
<div class="grid-dialog" v-show="isShowGrid3">
<div class="mask" @click="isShowGrid3 = false"></div>
<div class="grid-container">
<h2 :title="girdName3">{{ girdName3 }}</h2>
<div class="grid-list">
<div
:class="[currIndex3 === index ? 'grid-active' : '']"
v-for="(item, index) in girdInfoList3"
:key="index"
:title="item.girdName"
@click.stop="onGrid3Click(item, index)">
{{ item.girdName }}
</div>
</div>
</div>
</div>
</transition>
<transition name="fade">
<div class="grid-dialog" v-show="isShowGrid4">
<div class="mask" @click="isShowGrid4 = false"></div>
<div class="grid-container">
<h2 :title="girdName4">{{ girdName4 }}</h2>
<div class="grid-list">
<div
:class="[currIndex4 === index ? 'grid-active' : '']"
v-for="(item, index) in girdInfoList4"
:key="index"
:title="item.girdName"
@click.stop="onGrid4Click(item, index)">
{{ item.girdName }}
</div>
</div>
</div>
</div>
</transition>
<transition name="fade">
<div class="grid-dialog" v-show="isShowGrid5">
<div class="mask" @click="isShowGrid5 = false"></div>
<div class="grid-container">
<h2 :title="girdName5">{{ girdName5 }}</h2>
<div class="grid-list">
<div
:class="[currIndex5 === index ? 'grid-active' : '']"
v-for="(item, index) in girdInfoList5"
:key="index"
:title="item.girdName"
@click.stop="onGrid5Click(item, index)">
{{ item.girdName }}
</div>
</div>
</div>
</div>
</transition>
</div>
</template>
<script>
export default {
name: 'XyGrid',
props: ['instance'],
data () {
return {
isShowGrid2: false,
isShowGrid3: false,
isShowGrid4: false,
isShowGrid5: false,
currIndex2: 0,
girdId1: '',
currIndex3: 0,
currIndex4: 0,
currIndex5: 0,
girdInfoList2: [],
girdInfoList3: [],
girdInfoList4: [],
girdInfoList5: [],
girdName2: '',
girdName3: '',
girdName4: '',
girdName5: '',
girdNum3: 0,
girdNum4: 0,
girdNum5: 0,
currGird: '',
girdName1: ''
}
},
mounted () {
this.$nextTick(() => {
document.addEventListener('keydown', this.onKeyDown)
})
this.getInfo()
},
destroyed () {
document.removeEventListener('keydown', this.onKeyDown)
},
methods: {
onKeyDown (e) {
if (e.keyCode == 27) {
this.isShowGrid2 = false
this.isShowGrid3 = false
this.isShowGrid4 = false
this.isShowGrid5 = false
}
},
onGrid2Click (id, name) {
// this.currIndex2 = index
// this.girdName2 = item.girdName
this.currIndex3 = -1
this.currIndex4 = -1
this.currIndex5 = -1
this.isShowGrid2 = false
this.girdInfoList3 = []
this.girdInfoList4 = []
this.girdInfoList5 = []
this.$emit('nodeClick', id)
this.currGird = name
this.getInfo(id)
},
onGrid3Click (item, index) {
this.currIndex3 = index
this.girdName3 = item.girdName
this.currIndex4 = -1
this.currIndex5 = -1
this.girdNum3 = 1
this.isShowGrid3 = false
this.$emit('nodeClick', {
id: item.id,
level: 2
})
this.girdInfoList4 = []
this.girdInfoList5 = []
this.currGird = item.girdName
this.getInfo(item.id)
},
onGrid4Click (item, index) {
this.currIndex4 = index
this.girdName4 = item.girdName
this.currIndex5 = -1
this.girdNum4 = 1
this.isShowGrid4 = false
this.$emit('nodeClick', {
id: item.id,
level: 3
})
this.girdInfoList5 = []
this.currGird = item.girdName
this.getInfo(item.id)
},
onGrid5Click (item, index) {
this.currIndex5 = index
this.girdName5 = item.girdName
this.isShowGrid5 = false
this.girdNum5 = 1
this.$emit('nodeClick', {
id: item.id,
level: 4
})
this.currGird = item.girdName
this.getInfo(item.id)
},
getInfo (id) {
this.instance.post(`/app/yyx_appgirdinfo/queryGirdInfo?id=${id || ''}`).then(res => {
if (res.code === 0) {
res.data.girdInfoList2 && (this.girdInfoList3 = res.data.girdInfoList2)
res.data.girdInfoList3 && (this.girdInfoList4 = res.data.girdInfoList3)
res.data.girdInfoList4 && (this.girdInfoList5 = res.data.girdInfoList4)
res.data.girdName1 && (this.girdName2 = res.data.girdName1)
res.data.girdName2 && (this.girdName3 = res.data.girdName2)
res.data.girdName3 && (this.girdName4 = res.data.girdName3)
res.data.girdName4 && (this.girdName5 = res.data.girdName4)
if (this.girdId1) {
this.girdName2 = res.data.girdName1
this.girdId1 = res.data.girdId1
}
res.data.girdNum2 != null && (this.girdNum3 = res.data.girdNum2)
res.data.girdNum3 != null && (this.girdNum4 = res.data.girdNum3)
res.data.girdNum4 != null && (this.girdNum5 = res.data.girdNum4)
if (!id) {
this.currGird = res.data.girdName1
}
}
})
}
}
}
</script>
<style lang="scss">
.pdgrid {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
box-sizing: border-box;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/middle-bg.png) no-repeat center;
background-size: contain;
.fade-enter-active, .fade-leave-active {
transition: opacity .3s ease-in-out;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
* {
box-sizing: border-box;
}
.pdgrid-grid__title {
position: absolute;
top: 40px;
left: 50%;
width: 271px;
height: 53px;
line-height: 53px;
text-align: center;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/grid-title-sbg.png) no-repeat center;
background-size: 100% 100%;
cursor: pointer;
transform: translateX(-50%);
transition: opacity ease 0.3s;
&:hover {
opacity: 0.8;
}
h2 {
width: 182px;
margin: 0 auto;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #FFFFFF;
font-size: 21px;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
.pdgrid-title {
position: absolute;
top: 200px;
left: 50%;
min-width: 640px;
height: 80px;
line-height: 80px;
text-align: center;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/middle-titlebg.png) no-repeat center;
background-size: 100% 100%;
transform: translateX(-50%);
h2 {
color: #FFFFFF;
font-size: 22px;
white-space: nowrap;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
.pdgrid-body {
display: flex;
position: absolute;
justify-content: space-between;
bottom: 200px;
left: 0;
width: 100%;
padding: 0 112px;
.pdgrid-body__item {
display: flex;
flex-direction: column;
width: 200px;
height: 187px;
align-items: center;
padding-top: 71px;
cursor: pointer;
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/item-bg.png) no-repeat center;
background-size: 100% 100%;
transition: opacity ease 0.3s;
&:hover {
opacity: 0.8;
}
&:nth-of-type(2) {
position: relative;
top: 67px;
}
h2 {
font-size: 36px;
color: #FFFFFF;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
p {
max-width: 164px;
margin-top: 4px;
padding: 0 16px;
font-size: 16px;
color: #FFFFFF;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: #fff;
-webkit-background-clip: text;
font-weight: 600;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-webkit-text-fill-color: transparent;
}
.bottom {
display: flex;
align-items: center;
i {
width: 0px;
height: 0px;
border: 6px solid transparent;
border-top-color: transparent;
border-bottom-color: transparent;
border-left-color: transparent;
border-right-color: #FFCB42;
&.right {
width: 0px;
height: 0px;
border: 6px solid transparent;
border-top-color: transparent;
border-bottom-color: transparent;
border-left-color: #FFCB42;
border-right-color: transparent;
}
}
}
}
}
.grid-dialog {
position: fixed;
top: 0;
left: 0;
z-index: 111;
width: 100%;
height: 100%;
& > .mask {
position: absolute;
left: 0;
top: 0;
z-index: 1;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
}
.grid-container {
display: flex;
position: absolute;
flex-direction: column;
left: 50%;
top: 50%;
z-index: 2;
width: 640px;
height: 640px;
background: rgba(7,13,41,0.9);
border: 1px solid #144662;
transform: translate(-50%, -50%);
& > h2 {
width: 100%;
height: 67px;
line-height: 67px;
padding: 0 20px;
text-align: center;
color: #FFFFFF;
font-size: 24px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-shadow: 0px 0px 13px rgb(59 182 255 / 80%);
background: url(https://cdn.cunwuyun.cn/dvcp/dv/pddv/grid-title-bg.png) no-repeat center;
background-size: 100% 100%;
}
.grid-list {
flex: 1;
overflow-y: auto;
& > div {
height: 67px;
line-height: 67px;
padding: 0 20px;
text-align: center;
color: #FFFFFF;
font-size: 27px;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
transition: all ease 0.5s;
&.grid-active {
background: linear-gradient(270deg, rgba(0,48,124,0) 0%, #00307C 16%, rgba(0,99,255,0.9100) 50%, rgba(0,48,124,0.8200) 87%, rgba(0,48,124,0) 100%);
box-shadow: inset 0px -1px 0px 0px rgba(16,34,54,1);
text-shadow: 0px 3px 5px rgba(0,0,0,0.5000);
}
&:hover {
background: linear-gradient(270deg, rgba(0,48,124,0) 0%, #00307C 16%, rgba(0,99,255,0.9100) 50%, rgba(0,48,124,0.8200) 87%, rgba(0,48,124,0) 100%);
box-shadow: inset 0px -1px 0px 0px rgba(16,34,54,1);
text-shadow: 0px 3px 5px rgba(0,0,0,0.5000);
}
}
}
}
}
}
</style>

View File

@@ -1,4 +1,4 @@
export default {
export const pieChart2 = {
legend: {
bottom: 0,
itemGap: 14,
@@ -94,3 +94,94 @@ export default {
)
}
}
export const barChart1 = {
legend: {
right: 0,
itemHeight: 5,
itemWidth: 16,
textStyle: { color: '#fff' }
},
yAxis: {
nameGap: 23,
minInterval: 1,
splitLine: { lineStyle: { color: 'rgba(255,255,255,.2)', type: 'dashed' } },
axisLabel: { color: '#fff' },
axisPointer: { show: false }
},
axisPointer: {
type: 'shadow',
triggerTooltip: false,
shadowStyle: { color: 'rgba(46, 153, 255, .2)' }
},
color: [
{
type: 'linear',
x: 0,
x2: 0,
y: 0,
y2: 1,
colorStops: [
{ offset: 0, color: 'rgba(66, 187, 255, 1)' },
{ offset: 1, color: 'rgba(37, 143, 255, 0.2)' }
]
},
{
type: 'linear',
x: 0,
x2: 0,
y: 0,
y2: 1,
colorStops: [
{ offset: 0, color: 'rgba(66, 255, 254, 1)' },
{ offset: 1, color: 'rgba(37, 255, 246, 0.2)' }
]
},
{
type: 'linear',
x: 0,
x2: 0,
y: 0,
y2: 1,
colorStops: [
{ offset: 0, color: 'rgba(97, 253, 185, 1)' },
{ offset: 1, color: 'rgba(97, 253, 185, 0.2)' }
]
},
{
type: 'linear',
x: 0,
x2: 0,
y: 0,
y2: 1,
colorStops: [
{ offset: 0, color: 'rgba(253, 108, 57, 1)' },
{ offset: 1, color: 'rgba(253, 108, 57, 0.2)' }
]
},
{
type: 'linear',
x: 0,
x2: 0,
y: 0,
y2: 1,
colorStops: [
{ offset: 0, color: 'rgba(248, 187, 25, 1)' },
{ offset: 1, color: 'rgba(55, 39, 5, 1)' }
]
}
],
daemon: {
type: 'bar',
label: {
show: true,
position: 'top',
color: '#fff',
formatter: e => {
return e.data[e.seriesName] || ''
}
},
barWidth: 16,
barCategoryGap: 40,
itemStyle: {}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -307,7 +307,7 @@ export default {
.addressBook-left__list--search {
flex: 1;
::v-deep input {
:deep( input ){
width: 100%;
}
}
@@ -324,7 +324,7 @@ export default {
font-size: 14px;
}
::v-deep .el-tree {
:deep( .el-tree ){
background: transparent;
.el-tree-node__expand-icon.is-leaf {
@@ -369,7 +369,7 @@ export default {
}
}
::v-deep .ai-list__content--left {
:deep( .ai-list__content--left ){
margin-right: 2px;
}
@@ -421,7 +421,7 @@ export default {
}
}
::v-deep .ai-list__content--right {
:deep( .ai-list__content--right ){
.ai-list__content--right-wrapper {
min-height: 100%;

View File

@@ -0,0 +1,55 @@
<template>
<section class="AppEventReporting">
<component ref="component" :is="currentPage" @change="onChange" :params="params" :instance="instance" :dict="dict" :menuName="menuName" />
</section>
</template>
<script>
import List from './components/List'
import Detail from './components/Detail'
import Setting from './components/Setting'
export default {
name: 'AppEventReporting',
label: '巡查上报',
props: {
instance: Function,
dict: Object,
menuName: {default: '巡查上报'}
},
data() {
return {
component: 'List',
params: {}
}
},
computed: {
currentPage() {
let {hash, query: {id}} = this.$route
return hash == "#Setting" ? Setting :
!!id ? Detail : List
}
},
components: {
List,
Detail,
Setting
},
methods: {
onChange(data) {
this.$router.push({query: data.params, hash: data.type == "Setting" ? "#Setting" : ""})
}
}
}
</script>
<style lang="scss">
.AppEventReporting {
height: 100%;
background: #F3F6F9;
overflow: auto;
}
</style>

View File

@@ -0,0 +1,592 @@
<template>
<ai-detail class="reportAtWillDetail" v-loading="isLoading">
<template #title>
<ai-title title="详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)">
<template #rightBtn>
<div class="title-btns">
<el-button type="primary" icon="iconfont iconPerson_Transfered" @click="isShowForward = true" v-if="detail.powerTransmit">指派事件</el-button>
<el-button type="primary" icon="iconfont iconRegister" @click="isShowAdd = true" v-if="detail.powerHandle">处理事件</el-button>
</div>
</template>
</ai-title>
</template>
<template #content>
<div class="detail-content__wrapper">
<div class="detail-content__wrapper--left">
<ai-card title="基础信息">
<template #content>
<ai-wrapper>
<ai-info-item label="上报人员" :value="detail.name"></ai-info-item>
<ai-info-item label="当前状态" :value="dict.getLabel('clapEventStatus', detail.eventStatus)"></ai-info-item>
<ai-info-item label="联系方式">{{ detail.phone }}</ai-info-item>
<ai-info-item label="上报时间">{{ detail.createTime }}</ai-info-item>
<ai-info-item label="事件来源">{{ dict.getLabel('residentEventSource', detail.eventSource) }}</ai-info-item>
<ai-info-item label="事件类型">{{ detail.groupName }}</ai-info-item>
<ai-info-item label="事件描述" isLine>{{ detail.content }}</ai-info-item>
<ai-info-item label="现场照片" isLine>
<ai-uploader :instance="instance" disabled v-model="detail.files"></ai-uploader>
</ai-info-item>
<ai-info-item label="所属网格">{{ detail.girdName }}</ai-info-item>
<ai-info-item label="事件位置" isLine>
<div id="map" style="width: 500px; height: 280px;"></div>
</ai-info-item>
</ai-wrapper>
</template>
</ai-card>
<ai-evaluation v-if="!!detail.id" :bid="detail.id" :info.sync="evaluation"/>
</div>
<div class="rightZone">
<ai-card title="办理进度">
<template #content>
<el-steps direction="vertical" :active="1">
<el-step
v-for="(item, i) in process"
:key="i"
:title="item.systemExplain"
:description="item.doTime">
<template #title>
<h2 class="step-title" style="font-weight: 500; font-size: 14px;">
{{ item.systemExplain }}
</h2>
</template>
<template #description>
<p style="color: #888; margin: 0 4px 10px 0; font-size: 14px;">{{ item.doTime }}</p>
<div style="color: #444;margin-bottom: 10px;" v-if="item.doExplain">{{ item.doExplain }}</div>
<ai-uploader :instance="instance" disabled v-model="item.files"></ai-uploader>
</template>
</el-step>
</el-steps>
</template>
</ai-card>
</div>
</div>
<ai-dialog
:visible.sync="isShowAdd"
width="800px"
title="事件处理"
@closed="onClose"
@onConfirm="handleEvent">
<el-form class="ai-form" label-width="120px" :model="form" ref="form">
<el-form-item label="事件分类" prop="groupId" style="width: 100%;" :rules="[{ required: true, message: '请选择事件分类' }]">
<ai-select
v-model="form.groupId"
placeholder="请选择事件分类"
:selectList="dictList">
</ai-select>
</el-form-item>
<el-form-item label="处理结果" prop="eventStatus" style="width: 100%;" :rules="[{ required: true, message: '请选择处理结果' }]">
<el-radio-group v-model="form.eventStatus">
<el-radio label="1">已办结</el-radio>
<el-radio label="0">已拒绝</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="处理意见" prop="content" style="width: 100%;" :rules="[{ required: true, message: '请输入处理意见' }]">
<el-input type="textarea" :rows="5" :maxlength="500" v-model="form.content" clearable placeholder="请输入处理意见" show-word-limit></el-input>
</el-form-item>
<el-form-item label="图片" prop="files" style="width: 100%;">
<ai-uploader
:instance="instance"
isShowTip
v-model="form.files"
:limit="9">
</ai-uploader>
</el-form-item>
</el-form>
</ai-dialog>
<ai-dialog
:visible.sync="isShowForward"
width="800px"
@close="onClose"
title="事件指派"
@onConfirm="onForwardConfirm">
<el-form class="ai-form" label-width="120px" :model="forwardForm" ref="forwardForm">
<el-form-item label="转交" prop="name" style="width: 100%;" :rules="[{ required: true, message: '请选择网格员或网格' }]">
<el-input disabled size="small" v-model="forwardForm.name" clearable placeholder="请选择网格员或网格">
<template slot="append">
<el-button @click="getGirdList().then(()=>isShowUser=true )">选择</el-button>
</template>
</el-input>
</el-form-item>
<el-form-item label="办理意见" prop="content" style="width: 100%;" :rules="[{ required: true, message: '请输入办理意见' }]">
<el-input type="textarea" :rows="5" :maxlength="500" v-model="forwardForm.content" clearable placeholder="请输入办理意见" show-word-limit></el-input>
</el-form-item>
<el-form-item label="图片" prop="files" style="width: 100%;">
<ai-uploader
:instance="instance"
v-model="forwardForm.files"
isShowTip
:limit="9">
</ai-uploader>
</el-form-item>
</el-form>
</ai-dialog>
<ai-dialog
:visible.sync="isShowUser"
width="800px"
title="选择网格员"
@onConfirm="onConfirm">
<div class="grid-wrapper">
<el-input
style="margin-bottom: 10px;"
size="small"
placeholder="请输入网格名称/网格员姓名/网格员电话"
v-model="name" @change="$refs.tree.filter(name)"
suffix-icon="iconfont iconSearch">
</el-input>
<el-tree
:filter-node-method="filterNode"
ref="tree"
:props="defaultProps"
node-key="id"
:data="tree"
highlight-current
@current-change="onTreeChange">
<div class="tree-container" slot-scope="{ data }">
<div class="tree-container__user">
<div class="tree-user__item">
<span v-if="!data.isUser">{{ data.girdName }}</span>
<span v-else>{{data.name}}<span v-if="data.phone">-{{data.phone}}</span></span>
</div>
</div>
</div>
</el-tree>
</div>
</ai-dialog>
</template>
</ai-detail>
</template>
<script>
import AMapLoader from '@amap/amap-jsapi-loader'
import {mapState} from 'vuex'
export default {
name: 'Detail',
props: ['dict', 'instance'],
data() {
return {
forwardForm: {
content: '',
girdId: '',
girdName: '',
girdMemberId: '',
girdMemberName: '',
name: ''
},
isLoading: true,
name: '',
detail: {},
isShowUser: false,
eventList: [],
isShowAdd: false,
userList: [],
processList: [],
dictList: [],
defaultProps: {
label: 'girdName'
},
isShowForward: false,
tree: [],
gridInfo: {},
form: {
files: [],
groupId: '',
groupName: '',
content: [],
eventStatus: '1'
},
evaluation: {}
}
},
computed: {
...mapState(['user']),
process: v => [v.evaluation.id ? {
systemExplain: `${v.evaluation.createUserName}完成评价 (${v.evaluation.score}星评价)`,
doTime: v.evaluation.createTime,
doExplain: v.evaluation.rateText,
} : null, v.processList].flat().filter(Boolean)
},
created() {
this.getDict()
this.dict.load('clapEventStatus', 'residentEventSource').then(() => {
this.getDetail()
})
},
methods: {
getDetail() {
this.instance.post('/app/apppatrolreportinfov2/queryDetailById', null, {
params: {id: this.$route.query.id}
}).then(res => {
if (res?.data) {
this.detail = res.data
this.processList = res.data.processList
this.form.groupId = res.data.groupId
this.$nextTick(() => {
this.initMap()
})
this.isLoading = false
}
}).catch(() => {
this.isLoading = false
})
},
getGirdList() {
return this.instance.post(`/app/apppatrolreportinfov2/listGirdInfoByTransfer?id=${this.$route.query.id}`).then(res => {
if (res?.data) {
// return this.tree = this.formatList([res.data])
this.tree = res.data
this.tree.map((item) => {
item.children = [item.girdMemberList?.map(e => ({
...e, isUser: true, girdName: item.girdName
})) || []].flat()
})
}
})
},
onClose() {
this.form.files = []
this.form.groupId = ''
this.form.groupName = ''
this.form.content = ''
this.form.eventStatus = ''
this.forwardForm.content = ''
this.forwardForm.girdId = ''
this.forwardForm.girdName = ''
this.forwardForm.girdMemberId = ''
this.forwardForm.girdMemberName = ''
this.forwardForm.name = ''
this.forwardForm.files = []
},
formatList(list) {
for (let item of list) {
item.children = [item.girdList, item.girdMemberList?.map(e => ({
...e, isUser: true, girdName: item.girdName,
girdId: item.id
})) || []].flat()
if (item.girdList?.length > 0) {
this.formatList(item.girdList)
}
}
return list
},
filterNode(value, data) {
if (!value) return true
return (data.girdName && data.girdName.indexOf(value) !== -1) || (data.name && data.name.indexOf(value) !== -1) || (data.name && data.phone.indexOf(value) !== -1)
},
onTreeChange(e) {
this.gridInfo = e
},
onForwardConfirm() {
this.$refs.forwardForm.validate(v => {
if (v) {
this.instance.post('/app/apppatrolreportinfov2/transfer', {
...this.forwardForm,
id: this.$route.query.id
}).then(res => {
if (res?.code == 0) {
this.isShowForward = false
this.onClose()
this.getDetail()
this.$message.success('转交成功!')
}
})
}
})
},
onConfirm() {
// if (this.gridInfo.userId) {
// this.forwardForm.girdId = this.gridInfo.girdId
// this.forwardForm.girdName = this.gridInfo.girdName
// this.forwardForm.girdMemberId = this.gridInfo.id
// this.forwardForm.girdMemberName = this.gridInfo.name
// } else {
// this.forwardForm.girdId = this.gridInfo.id
// }
// this.forwardForm.girdName = this.gridInfo.girdName
// this.forwardForm.name = `${this.gridInfo.girdName}${this.gridInfo.name ? '-' + this.gridInfo.name : ''}`
// this.isShowUser = false
if(!this.gridInfo.userId) {
return this.$message.error('请选择网格员!')
}
this.forwardForm.girdId = this.gridInfo.girdId
this.forwardForm.girdName = this.gridInfo.girdName
this.forwardForm.girdMemberId = this.gridInfo.id
this.forwardForm.girdMemberName = this.gridInfo.name
this.forwardForm.name = `${this.gridInfo.girdName}${this.gridInfo.name ? '-' + this.gridInfo.name : ''}`
this.isShowUser = false
},
getDict() {
this.instance.post(`/app/apppatrolreportgroupv2/list?current=1&size=100000`).then(res => {
if (res.code == 0) {
this.dictList = res.data.records.map(v => {
return {
dictValue: v.id,
dictName: v.groupName
}
})
}
})
},
close() {
this.$confirm('确定关闭该事件?').then(() => {
this.instance.post(`/app/apppatrolreportinfov2/delete?ids=${this.$route.query.id}`).then(res => {
if (res.code == 0) {
this.$message.success('删除成功!')
this.getList()
}
})
})
},
cancel(isRefresh) {
this.$emit('change', {
type: 'list',
isRefresh: !!isRefresh
})
},
initMap() {
let {lng, lat} = this.detail
let center = [lng, lat]
AMapLoader.load({
key: 'b553334ba34f7ac3cd09df9bc8b539dc',
version: '2.0'
}).then(AMap => {
let map = new AMap.Map('map', {
center,
zoom: 14
})
let marker = new AMap.Marker({
position: new AMap.LngLat(lng, lat),
title: this.detail.address
})
map.add(marker)
})
},
handleEvent() {
this.$refs.form.validate(v => {
if (v) {
this.instance.post('/app/apppatrolreportinfov2/finish', {
...this.form,
groupName: this.dictList.filter(v => v.dictValue === this.form.groupId)[0].dictName,
id: this.$route.query.id
}).then(res => {
if (res?.code == 0) {
this.isShowAdd = false
this.getDetail()
this.$message.success('处理成功!')
}
})
}
})
}
}
}
</script>
<style lang="scss" scoped>
.reportAtWillDetail {
height: 100%;
.grid-wrapper {
min-height: 360px;
}
.title-btns {
display: flex;
align-items: center;
}
:deep( .el-tree ) {
background: transparent;
.el-tree-node__expand-icon.is-leaf {
color: transparent !important;
}
.el-tree-node__content > .el-tree-node__expand-icon {
padding: 4px;
}
.el-tree-node__content {
height: 32px;
}
.el-tree__empty-text {
color: #222;
font-size: 14px;
}
.el-tree-node__children .el-tree-node__content {
height: 32px;
}
.el-tree-node__content:hover {
background: #E8EFFF;
color: #222222;
border-radius: 2px;
}
.is-current > .el-tree-node__content {
&:hover {
background: #2266FF;
color: #fff;
}
background: #2266FF;
span {
color: #fff;
}
}
}
.el-steps {
:deep( .el-step__icon ) {
font-size: 12px;
color: #555555;
border-color: #d0d4dc;
}
:deep( .el-step__head.is-finish ) {
.el-step__icon.is-text {
border: none;
color: #fff;
font-size: 12px;
background: #2266ff;
}
}
:deep( .el-step__line ) {
background-color: #d0d4dc;
}
}
.imgs {
font-size: 0;
img {
width: 108px;
height: 108px;
margin-right: 4px;
margin-bottom: 4px;
cursor: pointer;
user-select: none;
&:hover {
opacity: 0.8;
}
&:nth-of-type(2n) {
margin-right: 0;
}
}
}
:deep( .report-dialog ) {
.el-select {
width: 100%;
}
}
:deep( .el-step__head.is-process ) {
color: #555;
border-color: #555;
}
:deep( .is-finish h2 ) {
color: #2266ff;
}
.step-title {
color: #555;
}
.detail-content__wrapper {
display: flex;
width: 100%;
flex-wrap: wrap;
.detail-content__wrapper--left {
flex: 1;
margin-right: 20px;
}
}
:deep( .ai-detail__content ) {
background: #f3f6f9;
.ai-detail__content--wrapper {
display: flex;
gap: 16px;
width: 100%;
max-width: 100%;
padding: 16px;
box-sizing: border-box;
& > .el-card {
flex: 1;
min-width: 0;
}
.rightZone {
width: 400px;
flex-shrink: 0;
display: flex;
flex-direction: column;
gap: 16px;
}
}
}
:deep( .el-card ) {
.el-card__header {
padding: 12px 16px;
font-weight: bold;
}
.el-card__body {
padding: 8px;
}
#amap {
width: 466px;
height: 232px;
}
.el-steps {
margin-left: 8px;
}
.imgFormItem > .el-form-item__content {
display: flex;
gap: 16px;
flex-wrap: wrap;
&:before {
content: none;
}
.el-image__inner {
width: 82px;
height: 82px;
}
}
}
}
</style>

View File

@@ -0,0 +1,249 @@
<template>
<ai-list>
<template #title>
<ai-title :title="menuName" isShowBottomBorder>
<el-button type="primary" slot="rightBtn" @click="toSetting">事件类型设置</el-button>
</ai-title>
</template>
<template #content>
<ai-search-bar>
<template #left>
<ai-select
v-model="search.eventStatus"
clearable
placeholder="处理状态"
:selectList="dict.getDict('clapEventStatus')"
@change="search.current = 1, getList()">
</ai-select>
<ai-select
v-model="search.eventSource"
clearable
placeholder="事件来源"
:selectList="dict.getDict('residentEventSource')"
@change="search.current = 1, getList()">
</ai-select>
<ai-select
v-model="search.groupId"
clearable
placeholder="事件类型"
:selectList="typeList"
@change="search.current = 1, getList()">
</ai-select>
<el-cascader ref="cascader1" v-model="girdArr" :options="girdOptions" placeholder="所属网格" size="small"
:props="defaultProps" :show-all-levels="false" @change="gridChange" clearable></el-cascader>
<el-date-picker size="small" v-model="searchDotime" type="daterange" range-separator="至" @change="timeChange"
start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" format="yyyy-MM-dd"></el-date-picker>
</template>
<template #right>
<ai-download :instance="instance" url="/app/apppatrolreportinfov2/export" :params="search" fileName="巡查上报"
:disabled="tableData.length == 0">
<el-button icon="iconfont iconExported" :disabled="tableData.length == 0">导出</el-button>
</ai-download>
<el-input
v-model="search.content"
class="search-input"
size="small"
v-throttle="() => {search.current = 1, getList()}"
placeholder="请输入内容描述/上报人员/联系方式"
clearable
@change="getList"
@clear="search.current = 1, search.content = '', getList()"
suffix-icon="iconfont iconSearch">
</el-input>
</template>
</ai-search-bar>
<ai-table :tableData="tableData" :colConfigs="colConfigs" :total="total" :current.sync="search.current" :size.sync="search.size" @getList="getList">
<el-table-column slot="options" label="操作" fixed="right" width="120" align="center">
<div class="table-options" slot-scope="{row}">
<el-button type="text" title="详情" @click="toDetail(row.id)">详情</el-button>
<el-button type="text" title="删除" @click="handleDelete(row.id)">删除</el-button>
</div>
</el-table-column>
</ai-table>
</template>
</ai-list>
</template>
<script>
import {mapState} from 'vuex'
export default {
name: 'List',
label: "巡查上报",
props: {
instance: Function,
dict: Object,
menuName: String
},
data() {
return {
userList: [],
search: {
current: 1,
size: 10,
eventStatus: '',
content: '',
eventSource: '',
groupId: '',
createTimeStart: '',
createTimeEnd: '',
girdId: ''
},
total: 0,
tableData: [],
content: '',
id: '',
girdId: '',
girdArr: [],
girdOptions: [],
defaultProps: {
label: 'girdName',
value: 'id',
children: 'children',
checkStrictly: true,
},
searchDotime: [],
typeList: []
}
},
computed: {
...mapState(['user']),
colConfigs() {
return [
{prop: 'content', label: '内容描述', width: '300px'},
{prop: 'eventSource', label: '事件来源', align: 'center', dict: 'residentEventSource'},
{prop: 'groupName', label: '事件类型', align: 'center'},
{prop: 'girdName', label: '所属网格', align: 'center'},
{prop: 'createTime', label: '上报时间', align: 'center'},
{prop: 'name', label: '上报人员', align: 'center'},
{prop: 'phone', label: '联系方式', align: 'center'},
{prop: 'eventStatus', label: '处理状态', align: 'center', format: v => this.dict.getLabel('clapEventStatus', v)},
{prop: 'processTime', label: '处理时长', align: 'center'},
{slot: 'options'}
]
},
handleStatusOps() {
return this.dict.getDict("reportAtWillHandleStatus").map(e => ({label: e.dictName, value: e.dictValue}))
}
},
created() {
this.dict.load('clapEventStatus', 'residentEventSource').then(() => {
this.getList()
this.getGridList()
this.getTypeList()
})
},
methods: {
timeChange() {
if (this.searchDotime) {
this.search.createTimeStart = this.searchDotime[0]
this.search.createTimeEnd = this.searchDotime[1]
} else {
this.search.createTimeStart = null
this.search.createTimeEnd = null
}
this.search.current = 1
this.getList()
},
// 所有网格
getGridList() {
this.instance.post(`/app/appgirdinfo/listAll3`).then((res) => {
if (res?.code == 0) {
this.girdOptions = this.toTree(res.data)
}
})
},
// 转树形结构
toTree(data) {
let result = [];
if (!Array.isArray(data)) {
return result
}
let map = {};
data.forEach(item => {
map[item.id] = item;
});
data.forEach(item => {
let parent = map[item.parentGirdId];
if (parent) {
(parent.children || (parent.children = [])).push(item);
} else {
result.push(item);
}
});
return result;
},
gridChange(val) {
this.girdArr = val
this.search.girdId = val?.[val.length - 1]
this.$refs.cascader1.dropDownVisible = false;
this.search.current = 1
this.getList()
},
getList() {
this.instance.post(`/app/apppatrolreportinfov2/list`, null, {
params: {
...this.search
}
}).then(res => {
if (res.code == 0) {
this.tableData = res.data.records
this.total = res.data.total
}
})
},
toDetail(id) {
this.$emit('change', {
type: 'Detail',
params: {
id: id || ''
}
})
},
toSetting() {
this.$emit('change', {
type: 'Setting',
params: {
id: ''
}
})
},
handleDelete(ids) {
this.$confirm("是否要进行删除?").then(() => {
this.instance.post("/app/apppatrolreportinfov2/delete", null, {
params: {ids}
}).then(res => {
if (res?.code == 0) {
this.$message.success("删除成功!")
this.getList()
}
})
}).catch(() => 0)
},
getTypeList() {
this.instance.post(`/app/apppatrolreportgroupv2/list?size=10000`).then(res => {
if (res.code == 0) {
res.data.records.map((item) => {
item.dictName = item.groupName
item.dictValue = item.id
})
this.typeList = res.data.records
}
})
}
},
}
</script>
<style lang="scss" scoped>
</style>

View File

@@ -0,0 +1,178 @@
<template>
<ai-list class="notice">
<template slot="title">
<ai-title isShowBack isShowBottomBorder title="事件类型" @onBackClick="cancel(false)"></ai-title>
</template>
<template slot="content">
<ai-search-bar class="search-bar">
<template #left>
<el-button size="small" type="primary" icon="iconfont iconAdd" @click="isShowAdd = true">添加事件类型</el-button>
</template>
<template slot="right">
<el-input
v-model="search.groupName"
class="search-input"
size="small"
v-throttle="() => {search.current = 1, getList()}"
placeholder="请输入事件类型名称"
clearable
@change="getList"
@clear="search.current = 1, search.groupName = '', getList()"
suffix-icon="iconfont iconSearch">
</el-input>
</template>
</ai-search-bar>
<ai-table
:tableData="tableData"
:col-configs="colConfigs"
:total="total"
style="margin-top: 6px;"
:current.sync="search.current"
:size.sync="search.size"
@getList="getList">
<el-table-column slot="tags" label="标签">
<template slot-scope="{ row }">
<div class="table-tags">
<el-tag type="info" v-for="(item, index) in row.tags" size="small" :key="index">{{ item }}</el-tag>
</div>
</template>
</el-table-column>
<el-table-column slot="options" width="120px" fixed="right" label="操作" align="center">
<div class="table-options" slot-scope="{ row }">
<el-button type="text" @click="edit(row)">编辑</el-button>
<el-button type="text" @click="remove(row.id)">删除</el-button>
</div>
</el-table-column>
</ai-table>
<ai-dialog
:visible.sync="isShowAdd"
width="780px"
height="580px"
:title="id ? '编辑事件类型' : '添加事件类型'"
@close="onClose"
@onConfirm="onConfirm">
<el-form ref="form" class="ai-form" :model="form" label-width="110px" label-position="right">
<el-form-item label="事件类型" prop="groupName" style="width: 100%;" :rules="[{ required: true, message: '请输入事件类型名称', trigger: 'blur' }]">
<el-input size="small" :maxlength="10" show-word-limit placeholder="请输入事件类型名称" v-model="form.groupName"></el-input>
</el-form-item>
<el-form-item label="排序" prop="showIndex" style="width: 100%;" :rules="[{ required: true, message: '请输入排序', trigger: 'blur' }]">
<el-input-number size="small" v-model="form.showIndex" :min="1" :max="100" label="请输入排序"></el-input-number>
</el-form-item>
</el-form>
</ai-dialog>
</template>
</ai-list>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: 'List',
props: {
instance: Function,
dict: Object
},
data() {
return {
search: {
current: 1,
size: 10,
groupName: ''
},
form: {
groupName: '',
showIndex: ''
},
id: '',
isShowAdd: false,
total: 0,
colConfigs: [
{prop: 'groupName', label: '事件类型', align: 'left'},
{prop: 'showIndex', label: '排序', align: 'center'},
{slot: 'options', label: '操作'}
],
tableData: []
}
},
computed: {
...mapState(['user'])
},
mounted() {
this.getList()
},
methods: {
getList() {
this.instance.post(`/app/apppatrolreportgroupv2/list`, null, {
params: {
...this.search
}
}).then(res => {
if (res.code == 0) {
this.tableData = res.data.records
this.total = res.data.total
}
})
},
edit (e) {
this.id = e.id
this.form.groupName = e.groupName
this.form.showIndex = ''
this.$nextTick(() => {
this.isShowAdd = true
})
},
onClose () {
this.id = ''
this.form.showIndex = ''
this.form.groupName = ''
},
onConfirm () {
this.$refs.form.validate((valid) => {
if (valid) {
this.instance.post(`/app/apppatrolreportgroupv2/addOrUpdate`, {
...this.form,
id: this.id || null
}).then(res => {
if (res.code === 0) {
this.$message.success('添加成功')
this.isShowAdd = false
this.getList()
}
})
}
})
},
cancel (isRefresh) {
this.$emit('change', {
type: 'list',
isRefresh: !!isRefresh
})
},
remove(id) {
this.$confirm('确定删除该数据?').then(() => {
this.instance.post(`/app/apppatrolreportgroupv2/delete?ids=${id}`).then(res => {
if (res.code == 0) {
this.$message.success('删除成功!')
this.getList()
}
})
})
}
}
}
</script>
<style lang="scss" scoped>
</style>

View File

@@ -185,7 +185,7 @@
recordList: [],
colConfigs: [
{prop: 'createTime', label: '上报日期', align: 'center', dateFormat: 'YYYY-MM-DD'},
{prop: 'status', label: '健康状态', align: 'center', formart: v => v === '0' ? '异常' : '正常' }
{prop: 'status', label: '健康状态', align: 'center', format: v => v === '0' ? '异常' : '正常' }
],
tabList: ['基本信息', '每日上报', '异常处理']
}

View File

@@ -119,7 +119,7 @@
{ prop: 'name', label: '姓名' },
{ prop: 'phone', align: 'center', label: '手机号码' },
{ prop: 'areaName', align: 'center', label: '所属地区', width: '200px' },
{ prop: 'reportTime', align: 'center', label: '上报时间', width: '200px' },
{ prop: 'reportTime', align: 'center', label: '上报时间', width: '200px' },
{
prop: 'vaccine',
align: 'center',
@@ -130,10 +130,10 @@
}
}, row.today === '0' ? '-' : (row.vaccine || 0 + '次'))
}
},
{ prop: 'healthCode', align: 'center', label: '健康码', formart: v => v ? this.dict.getLabel('epidemicHealthCode', v) : '-' },
{ prop: 'checkTime', align: 'center', label: '核酸日期', formart: v => v ? v.split(' ')[0] : '-' },
{ prop: 'checkResult', align: 'center', label: '检测结果', formart: v => v ? this.dict.getLabel('epidemicRecentTestResult', v) : '-' },
},
{ prop: 'healthCode', align: 'center', label: '健康码', format: v => v ? this.dict.getLabel('epidemicHealthCode', v) : '-' },
{ prop: 'checkTime', align: 'center', label: '核酸日期', format: v => v ? v.split(' ')[0] : '-' },
{ prop: 'checkResult', align: 'center', label: '检测结果', format: v => v ? this.dict.getLabel('epidemicRecentTestResult', v) : '-' },
{
prop: 'status',
align: 'center',
@@ -146,7 +146,7 @@
}, row.today === '0' ? '-' : (row.status === '0' ? '异常' : '正常'))
}
},
{ prop: 'today', align: 'center', label: '今日上报', formart: v => v === '0' ? '未上报' : '已上报' },
{ prop: 'today', align: 'center', label: '今日上报', format: v => v === '0' ? '未上报' : '已上报' },
],
tableData: [],
total: 0,
@@ -191,7 +191,7 @@
}).catch(() => {
this.loading = false
})
this.getTotalInfo()
},
@@ -242,7 +242,7 @@
<style scoped lang="scss">
.list {
::v-deep .ai-list__content {
:deep( .ai-list__content ){
padding: 0!important;
.ai-list__content--right-wrapper {

View File

@@ -0,0 +1,397 @@
<template>
<ai-detail class="AppPatrolReportSet">
<ai-title slot="title" title="巡查上报设置" isShowBottomBorder>
<el-button size="small" type="primary" icon="iconfont iconAdd" slot="rightBtn" @click="add">添加节点</el-button>
</ai-title>
<template slot="content">
<div class="list" v-if="list.length">
<div class="item" v-for="(item, index) in list" :key="index">
<div class="btn">
<el-button type="text" @click="edit(index)">编辑</el-button>
<el-button type="text" @click="del(index)">删除</el-button>
</div>
<div class="index">{{index < 9 ? `0${index+1}` : `${index+1}`}}</div>
<div class="info">
<div class="label">节点类型</div>
<div class="value">{{item.nodeType == 0 ? '首节点' : $dict.getLabel('prfcNodeType', item.nodeType)}}</div>
</div>
<div class="info">
<div class="label">上级节点网络</div>
<div class="value">{{item.girdName}}<span class="span" v-if="item.nodeType == 2 && item.onlyCoordination == '1'">仅协同部门</span></div>
</div>
<div class="flex">
<div class="info">
<div class="label">生效功能</div>
<div class="value">
<span v-if="item.functionAdd == 1">添加</span>
<span v-if="item.functionHandle == 1">办理</span>
<span v-if="item.functionTransmit == 1">转交</span>
</div>
</div>
<div class="info">
<div class="label">生效身份</div>
<div class="value">
<span v-if="item.roleMember == 1">网格员</span>
<span v-if="item.roleAdmin == 1">网格长</span>
</div>
</div>
</div>
<div v-if="item.nodeType == 3">
<div class="info">
<div class="label">同级节点网络</div>
<div class="value">{{item.girdName2}}<span class="span" v-if="item.nodeType == 3 && item.onlyCoordination == '1'">仅协同部门</span></div>
</div>
<div class="flex">
<div class="info">
<div class="label">生效功能</div>
<div class="value">
<span v-if="item.functionAdd2 == 1">添加</span>
<span v-if="item.functionHandle2 == 1">办理</span>
<span v-if="item.functionTransmit2 == 1">转交</span>
</div>
</div>
<div class="info">
<div class="label">生效身份</div>
<div class="value">
<span v-if="item.roleMember2 == 1">网格员</span>
<span v-if="item.roleAdmin2 == 1">网格长</span>
</div>
</div>
<!-- <div class="info">
<div class="label">条件约束</div>
<div class="value">名称约束</div>
</div> -->
</div>
</div>
</div>
</div>
<ai-empty v-else>暂无数据</ai-empty>
<ai-dialog :visible.sync="dialog" :title="dialogTitle" @closed="$refs.form.resetFields()" @onConfirm="onConfirm" width="70%">
<el-form ref="form" :rules="rules" size="small" :model="form" label-width="110px">
<el-form-item label="节点类型" prop="nodeType" v-if="form.nodeType === '0'">
<ai-select disabled
v-model="form.nodeType"
clearable
placeholder="请选择..."
:selectList="nodeTypeDictList">
</ai-select>
</el-form-item>
<el-form-item label="节点类型" prop="nodeType" v-else>
<ai-select :disabled="getGirdList.length == 1 && form.nodeType == '1'"
v-model="form.nodeType"
clearable
placeholder="请选择..."
:selectList="dict.getDict('prfcNodeType')" @change="changeNodeType">
</ai-select>
</el-form-item>
<el-form-item label="选择节点网格" prop="girdId" >
<ai-picker v-if="form.nodeType === '0'"
:ops="{label: 'girdName'}"
dialogTitle="选择节点网格"
action="/app/appgirdinfo/girdList"
:instance="instance"
@pick="onGirdChange"
v-model="form.girdIdList">
<div class="userSelcet">
<span style="color: #606266;" v-if="form.girdIdList.length">{{ form.girdName }}</span>
<span v-else>选择节点网格</span>
<i class="el-icon-arrow-down"></i>
</div>
</ai-picker>
<el-input placeholder="节点网格" v-model="form.girdName" disabled v-else></el-input>
<el-checkbox v-model="sameLevelUsed" disabled>当前选中网格层级生效</el-checkbox>
<el-checkbox v-model="form.onlyCoordination" v-if="form.nodeType == '2'" true-label="1" false-label="0">仅协同部门</el-checkbox>
</el-form-item>
<el-form-item label="生效功能">
<el-checkbox v-model="form.functionAdd" true-label="1" false-label="0">添加</el-checkbox>
<el-checkbox v-model="form.functionHandle" true-label="1" false-label="0">办理</el-checkbox>
<el-checkbox v-model="form.functionTransmit" true-label="1" false-label="0">转交</el-checkbox>
</el-form-item>
<el-form-item label="生效身份">
<el-checkbox v-model="form.roleMember" true-label="1" false-label="0">网格员</el-checkbox>
<el-checkbox v-model="form.roleAdmin" true-label="1" false-label="0">网格长</el-checkbox>
</el-form-item>
<div v-if="form.nodeType == 3">
<el-form-item label="同级节点网格" prop="girdId2">
<el-input placeholder="节点网格" v-model="form.girdName2" disabled></el-input>
<el-checkbox v-model="sameLevelUsed" disabled>当前选中网格层级生效</el-checkbox>
<el-checkbox v-model="form.onlyCoordination" v-if="form.nodeType == '3'" true-label="1" false-label="0">仅协同部门</el-checkbox>
</el-form-item>
<el-form-item label="生效功能">
<el-checkbox v-model="form.functionAdd2" true-label="1" false-label="0">添加</el-checkbox>
<el-checkbox v-model="form.functionHandle2" true-label="1" false-label="0">办理</el-checkbox>
<el-checkbox v-model="form.functionTransmit2" true-label="1" false-label="0">转交</el-checkbox>
</el-form-item>
<el-form-item label="生效身份">
<el-checkbox v-model="form.roleMember2" true-label="1" false-label="0">网格员</el-checkbox>
<el-checkbox v-model="form.roleAdmin2" true-label="1" false-label="0">网格长</el-checkbox>
</el-form-item>
</div>
</el-form>
</ai-dialog>
</template>
<template slot="footer">
<el-button @click="getList">返回</el-button>
<el-button type="primary" @click="confirm">提交</el-button>
</template>
</ai-detail>
</template>
<script>
export default {
name: 'AppPatrolReportSet',
label: '巡查上报设置',
props: {
instance: Function,
dict: Object,
permissions: Function
},
data () {
return {
dialog: false,
dialogTitle: '',
form: {
nodeType: '', //0首节点、1上级、2同级、3混合
girdIdList: [],
girdId: '',
girdCode: '',
girdLevel: '',
girdName: '',
functionAdd: '1',
functionHandle: '1',
functionTransmit: '1',
roleAdmin: '1',
roleMember: '1',
girdId2: '',
girdCode2: '',
girdLevel2: '',
girdName2: '',
functionAdd2: '1',
functionHandle2: '1',
functionTransmit2: '1',
roleAdmin2: '1',
roleMember2: '1',
onlyCoordination: '1'
},
list: [],
nodeTypeDictList: [{dictName: '首节点', dictValue: '0'}],
sameLevelUsed: true,
getGirdList: [],
editIndex: ''
}
},
computed: {
rules() {
return {
nodeType: [{ required: true, message: '请选择节点类型', trigger: 'change'}],
girdId: [{ required: true, message: '请选择节点网络', trigger: 'change'}],
girdId2: [{ required: true, message: '请选择同级节点网格', trigger: 'change'}],
}
},
},
created() {
this.dict.load('prfcNodeType').then(() => {
this.getList()
})
},
methods: {
add() {
this.form = {
nodeType: '', //0首节点、1上级、2同级、3混合
girdIdList: [],
girdId: '',
girdCode: '',
girdLevel: '',
girdName: '',
functionAdd: '1',
functionHandle: '1',
functionTransmit: '1',
roleAdmin: '1',
roleMember: '1',
girdId2: '',
girdCode2: '',
girdLevel2: '',
girdName2: '',
functionAdd2: '1',
functionHandle2: '1',
functionTransmit2: '1',
roleAdmin2: '1',
roleMember2: '1',
onlyCoordination: '1'
}
if(this.list.length > 0) {
this.getGird(this.list.length-1)
}else { //首节点
this.form.nodeType = '0'
}
this.dialogTitle = '添加节点'
this.dialog = true
this.$refs.form.resetFields()
},
del(index) {
this.$confirm('确定删除该节点?').then(() => {
this.list.splice(index, 1)
})
},
edit(index) {
this.editIndex = index
this.form = {...this.list[index]}
if(this.form.nodeType != '0') {
this.getGird(index-1)
}
this.dialogTitle = '编辑节点'
this.dialog = true
},
onConfirm() {
this.$refs.form.validate((valid) => {
if (valid) {
if(this.dialogTitle == '添加节点') {
this.list.push(this.form)
}else {
this.list.splice(this.editIndex, 1, this.form)
}
this.dialog = false
}
})
},
getList() {
this.instance.post(`/app/apppatrolreportflowconfigv2/queryNew`).then(res => {
if (res.code == 0) {
this.list = res.data
}
})
},
onGirdChange(e) {
this.form.girdId = e[0].id
this.form.girdCode = e[0].girdCode
this.form.girdLevel = e[0].girdLevel
this.form.girdName = e[0].girdName
},
changeNodeType(e) { //1 上下级节点取数组02同级节点选择数组1; 3混合节点主取数组0同级选择数组1
console.log(e)
var arr = []
if(e == 1) {
arr.push(this.getGirdList[0])
}
if(e == 2) {
arr.push(this.getGirdList[1])
}
if(e == 3) {
arr.push(this.getGirdList[0])
this.form.girdId2 = this.getGirdList[1].id
this.form.girdCode2 = this.getGirdList[1].girdCode
this.form.girdLevel2 = this.getGirdList[1].girdLevel
this.form.girdName2 = this.getGirdList[1].girdName
}
this.onGirdChange(arr)
},
getGird(index) {
var girdCode = this.list[index].girdCode
this.instance.post(`app/apppatrolreportflowconfigv2/choiseGird?previousGirdCode=${girdCode}`).then(res => {
if (res.code == 0) {
this.getGirdList = res.data
if(res.data.length == 1 && this.dialogTitle == '添加节点') { //返回数据一条表示nodeType 1 上下级节点混合节点主去数组0同级选择数组1同级节点选择数组1
this.form.nodeType = '1'
this.onGirdChange(res.data)
}
}
})
},
confirm() {
this.instance.post(`/app/apppatrolreportflowconfigv2/addOrUpdate`, this.list).then(res => {
if (res.code == 0) {
this.$message.success('提交成功')
this.getList()
}
})
}
}
}
</script>
<style lang="scss" scoped>
.AppPatrolReportSet {
height: 100%;
.list {
padding: 0 16px 16px;
background-color: #fff;
}
.item {
padding: 16px 0 4px 26px;
position: relative;
border-bottom: 1px solid #F2F2F2;
.info {
height: 22px;
font-family: MicrosoftYaHei;
font-size: 14px;
color: #888;
line-height: 22px;
margin-bottom: 16px;
.label {
display: inline-block;
width: 112px;
color: #888;
}
.value {
display: inline-block;
width: calc(100% - 112px);
color: #222;
span {
display: inline-block;
margin-right: 24px;
}
.span {
margin-left: 16px;
}
}
}
.index {
position: absolute;
top: 16px;
left: 0;
height: 21px;
font-family: DINAlternate-Bold;
font-weight: 700;
font-size: 18px;
color: #666;
}
.btn {
position: absolute;
right: 0;
top: 16px;
}
.flex {
display: flex;
.info {
width: 33.3%;
}
}
}
:deep(.ai-select),
:deep(.el-input) {
display: inline-block;
width: 50%;
margin-right: 16px;
}
:deep(.AiPicker) {
display: inline-block;
width: 50%;
margin-right: 16px;
border: 1px solid #d0d4dc;
padding-left: 16px;
box-sizing: border-box;
border-radius: 4px;
position: relative;
.el-icon-arrow-down {
position: absolute;
top: 8px;
right: 8px;
}
}
}
</style>

View File

@@ -1,6 +1,6 @@
<template>
<section class="AppReportAtWill">
<component ref="component" :is="currentPage" @change="onChange" :params="params" :instance="instance" :dict="dict"/>
<component ref="component" :is="currentPage" @change="onChange" :params="params" :instance="instance" :dict="dict" :menuName="menuName" />
</section>
</template>
@@ -15,7 +15,8 @@ export default {
props: {
instance: Function,
dict: Object
dict: Object,
menuName: {default: '随手拍'}
},
data() {

View File

@@ -1,7 +1,7 @@
<template>
<ai-detail class="reportAtWillDetail" v-loading="isLoading">
<template #title>
<ai-title title="随手拍详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)">
<ai-title title="详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)">
<template #rightBtn>
<div class="title-btns">
<el-button type="primary" icon="iconfont iconPerson_Transfered" @click="isShowForward = true" v-if="detail.eventStatus < 2">指派事件</el-button>
@@ -12,31 +12,34 @@
</template>
<template #content>
<div class="detail-content__wrapper">
<ai-card class="detail-content__wrapper--left" title="基础信息">
<template #content>
<ai-wrapper>
<ai-info-item label="上报人员" :value="detail.name"></ai-info-item>
<ai-info-item label="当前状态" :value="dict.getLabel('clapEventStatus', detail.eventStatus)"></ai-info-item>
<ai-info-item label="联系方式">{{ detail.phone }}</ai-info-item>
<ai-info-item label="上报时间">{{ detail.createTime }}</ai-info-item>
<ai-info-item label="事件类型">{{ detail.groupName }}</ai-info-item>
<ai-info-item label="事件描述" isLine>{{ detail.content }}</ai-info-item>
<ai-info-item label="现场照片" isLine>
<ai-uploader :instance="instance" disabled v-model="detail.files"></ai-uploader>
</ai-info-item>
<ai-info-item label="所属网格">{{ detail.girdName }}</ai-info-item>
<ai-info-item label="事件位置" isLine>
<div id="map" style="width: 500px; height: 280px;"></div>
</ai-info-item>
</ai-wrapper>
</template>
</ai-card>
<div class="detail-content__wrapper--left">
<ai-card title="基础信息">
<template #content>
<ai-wrapper>
<ai-info-item label="上报人员" :value="detail.name"></ai-info-item>
<ai-info-item label="当前状态" :value="dict.getLabel('clapEventStatus', detail.eventStatus)"></ai-info-item>
<ai-info-item label="联系方式">{{ detail.phone }}</ai-info-item>
<ai-info-item label="上报时间">{{ detail.createTime }}</ai-info-item>
<ai-info-item label="事件类型">{{ detail.groupName }}</ai-info-item>
<ai-info-item label="事件描述" isLine>{{ detail.content }}</ai-info-item>
<ai-info-item label="现场照片" isLine>
<ai-uploader :instance="instance" disabled v-model="detail.files"></ai-uploader>
</ai-info-item>
<ai-info-item label="所属网格">{{ detail.girdName }}</ai-info-item>
<ai-info-item label="事件位置" isLine>
<div id="map" style="width: 500px; height: 280px;"></div>
</ai-info-item>
</ai-wrapper>
</template>
</ai-card>
<ai-evaluation v-if="!!detail.id" :bid="detail.id" :info.sync="evaluation"/>
</div>
<div class="rightZone">
<ai-card title="办理进度">
<template #content>
<el-steps direction="vertical" :active="1">
<el-step
v-for="(item, i) in processList"
v-for="(item, i) in process"
:key="i"
:title="item.systemExplain"
:description="item.doTime">
@@ -190,12 +193,18 @@ export default {
groupName: '',
content: [],
eventStatus: '2'
}
},
evaluation: {}
}
},
computed: {
...mapState(['user'])
...mapState(['user']),
process: v => [v.evaluation.id ? {
systemExplain: `${v.evaluation.createUserName}完成评价 (${v.evaluation.score}星评价)`,
doTime: v.evaluation.createTime,
doExplain: v.evaluation.rateText
} : null, v.processList].flat().filter(Boolean)
},
created() {
@@ -260,10 +269,9 @@ export default {
return list
},
filterNode(value, data) {
filterNode(value, data = {}) {
if (!value) return true
return (data.girdName && data.girdName.indexOf(value) !== -1) || (data.name && data.name.indexOf(value) !== -1) || (data.name && data.phone.indexOf(value) !== -1)
return ["girdName", "name", "phone"].some(e => data[e]?.includes(value))
},
onTreeChange(e) {
@@ -393,7 +401,7 @@ export default {
align-items: center;
}
::v-deep .el-tree {
:deep( .el-tree ) {
background: transparent;
.el-tree-node__expand-icon.is-leaf {
@@ -438,13 +446,13 @@ export default {
}
.el-steps {
::v-deep .el-step__icon {
:deep( .el-step__icon ) {
font-size: 12px;
color: #555555;
border-color: #d0d4dc;
}
::v-deep .el-step__head.is-finish {
:deep( .el-step__head.is-finish ) {
.el-step__icon.is-text {
border: none;
color: #fff;
@@ -453,7 +461,7 @@ export default {
}
}
::v-deep .el-step__line {
:deep( .el-step__line ) {
background-color: #d0d4dc;
}
}
@@ -479,18 +487,18 @@ export default {
}
}
::v-deep .report-dialog {
:deep( .report-dialog ) {
.el-select {
width: 100%;
}
}
::v-deep .el-step__head.is-process {
:deep( .el-step__head.is-process ) {
color: #555;
border-color: #555;
}
::v-deep .is-finish h2 {
:deep( .is-finish h2 ) {
color: #2266ff;
}
@@ -501,6 +509,7 @@ export default {
.detail-content__wrapper {
display: flex;
width: 100%;
flex-wrap: wrap;
.detail-content__wrapper--left {
flex: 1;
@@ -508,7 +517,7 @@ export default {
}
}
::v-deep .ai-detail__content {
:deep( .ai-detail__content ) {
background: #f3f6f9;
.ai-detail__content--wrapper {
@@ -534,7 +543,7 @@ export default {
}
}
::v-deep .el-card {
:deep( .el-card ) {
.el-card__header {
padding: 12px 16px;
font-weight: bold;

View File

@@ -1,7 +1,7 @@
<template>
<ai-list>
<template #title>
<ai-title title="随手拍" isShowBottomBorder>
<ai-title :title="menuName" isShowBottomBorder>
<el-button type="primary" slot="rightBtn" @click="toSetting">设置</el-button>
</ai-title>
</template>
@@ -51,7 +51,8 @@ export default {
props: {
instance: Function,
dict: Object
dict: Object,
menuName: String
},
data() {
@@ -81,7 +82,7 @@ export default {
{prop: 'createTime', label: '上报时间', align: 'center'},
{prop: 'name', label: '上报居民', align: 'center'},
{prop: 'phone', label: '联系方式', align: 'center'},
{prop: 'eventStatus', label: '处理状态', align: 'center', formart: v => this.dict.getLabel('clapEventStatus', v)},
{prop: 'eventStatus', label: '处理状态', align: 'center', format: v => this.dict.getLabel('clapEventStatus', v)},
{prop: 'processTime', label: '处理时长', align: 'center'},
{slot: 'options'}
]

View File

@@ -78,19 +78,19 @@
colConfigs: [
{ prop: 'name', label: '姓名' },
{ prop: 'phone', align: 'center', label: '手机号码' },
{ prop: 'startTime', align: 'center', label: '出发时间', formart: v => v.substr(0, v.length - 3) },
{ prop: 'startTime', align: 'center', label: '出发时间', format: v => v.substr(0, v.length - 3) },
{
prop: 'startAreaName',
align: 'center',
label: '出发地区'
},
{ prop: 'arriveTime', align: 'center', label: '到达时间', formart: v => v.substr(0, v.length - 3) },
{ prop: 'arriveTime', align: 'center', label: '到达时间', format: v => v.substr(0, v.length - 3) },
{
prop: 'arriveAreaName',
align: 'center',
label: '到达地区'
},
{ prop: 'checkTime', align: 'center', label: '核酸日期', formart: v => v.split(' ')[0] },
{ prop: 'checkTime', align: 'center', label: '核酸日期', format: v => v.split(' ')[0] },
{
prop: 'status',
align: 'center',
@@ -146,7 +146,7 @@
}).catch(() => {
this.loading = false
})
this.getTotalInfo()
},

View File

@@ -16,7 +16,7 @@
<ai-info-item label="身份证号" :value="info.idNumber"></ai-info-item>
<ai-info-item label="手机号码" :value="info.phone"></ai-info-item>
<ai-info-item label="人员类别" isLine>
<span :style="info.type == 0 ? 'color:#42D784;' : 'color:#f46;'">{{dict.getLabel('epidemicMemberType', info.type)}}</span>
<span :style="(info.type == 0 || info.type == 3 || info.type ==6 || info.type == 9)? 'color:#42D784;' : 'color:#f46;'">{{dict.getLabel('epidemicRecentPersonType', info.type)}}</span>
</ai-info-item>
</ai-wrapper>
</template>
@@ -87,7 +87,7 @@
<ai-info-item label="填报时间" :value="info.createTime"></ai-info-item>
<ai-info-item label="身份证号" :value="info.idNumber"></ai-info-item>
<ai-info-item label="手机号码" :value="info.phone"></ai-info-item>
<ai-info-item label="人员类别" isLine :value="dict.getLabel('epidemicMemberType', info.type)"></ai-info-item>
<ai-info-item label="人员类别" isLine :value="dict.getLabel('epidemicRecentPersonType', info.type)"></ai-info-item>
<ai-info-item label="异常状况" isLine>
<span :style="{color: info.unusual ? 'red' : '#333'}">{{ info.unusual || '-' }}</span>
</ai-info-item>
@@ -172,7 +172,7 @@
created () {
if (this.params && this.params.id) {
this.id = this.params.id
this.$dict.load(['epidemicRecentHealth', 'epidemicRecentTravel', 'epidemicTouchInFourteen', 'epidemicMemberType', 'epidemicRecentTestResult']).then(() => {
this.$dict.load(['epidemicRecentHealth', 'epidemicRecentTravel', 'epidemicTouchInFourteen', 'epidemicRecentPersonType', 'epidemicRecentTestResult']).then(() => {
this.getInfo(this.params.id)
})

View File

@@ -102,19 +102,19 @@
colConfigs: [
{ prop: 'name', label: '姓名' },
{ prop: 'phone', align: 'center', label: '手机号码' },
{ prop: 'startTime', align: 'center', label: '出发时间', formart: v => v.substr(0, v.length - 3) },
{ prop: 'startTime', align: 'center', label: '出发时间', format: v => v.substr(0, v.length - 3) },
{
prop: 'startAreaName',
align: 'center',
label: '出发地区'
},
{ prop: 'arriveTime', align: 'center', label: '到达时间', formart: v => v.substr(0, v.length - 3) },
{ prop: 'arriveTime', align: 'center', label: '到达时间', format: v => v.substr(0, v.length - 3) },
{
prop: 'arriveAreaName',
align: 'center',
label: '到达地区'
},
{ prop: 'checkTime', align: 'center', label: '核酸日期', formart: v => v.split(' ')[0] },
{ prop: 'checkTime', align: 'center', label: '核酸日期', format: v => v.split(' ')[0] },
{
prop: 'status',
align: 'center',
@@ -170,7 +170,7 @@
}).catch(() => {
this.loading = false
})
this.getTotalInfo()
},
@@ -222,7 +222,7 @@
<style scoped lang="scss">
.list {
::v-deep .ai-list__content {
:deep( .ai-list__content ){
padding: 0!important;
.ai-list__content--right-wrapper {

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