2429 Commits

Author SHA1 Message Date
aixianling
ba8dc41c83 refactor(ui): 更新 CDN 域名并统一资源路径格式
- 将 CDN 域名从 https://cdn.cunwuyun.cn/ 更改为 https://cdn.sinoecare.com/
- 统一资源路径格式,移除多余的斜杠
- 更新了多个样式类中的背景图片 URL
2025-01-21 09:15:50 +08:00
aixianling
6744b18240 feat(xumu): 新增保险产品类型字典
- 在 AppClaimApply 和 AppClaimAudit 组件中添加 productType 字典加载
- 在 add.vue 组件中使用 productType 字典获取保险产品类型标签
2025-01-17 11:09:53 +08:00
aixianling
a3ea6d9c51 fix(xumu): 修复理赔申请页面的耳标选择和数据加载问题
- 优化耳标选择功能,将选中的耳标数据格式化后赋值给 detail.detailList
- 初始化 detail 对象时添加 list 属性,确保数据结构一致性
- 优化数据加载逻辑,处理可能的空值情况
- 调整页面布局和样式,提高可读性
2025-01-17 11:07:20 +08:00
aixianling
5fa30a0e0e refactor(xumu): 优化 AppLoanApply 添加页面代码
- 在 submit 方法中添加 earNumberList 数组,用于存储生物芯片耳号
- 优化代码结构,提高可读性和可维护性
2025-01-17 10:46:51 +08:00
aixianling
6b030791bb feat(AppInsuranceAudit): 优化耳标号选择和养殖场查询功能
- 在 add.vue 中增加 targetUser 字段,用于查询养殖场
- 修改 AiEartagPicker 组件,增加 valueKey 属性默认值
- 优化代码格式和样式
2025-01-17 10:36:41 +08:00
aixianling
d0922c5309 feat(AppLoanAudit): 优化审核页面功能和样式
- 新增 AiAudit 组件用于审批状态选择
- 调整审批状态字段的验证规则
- 优化页面布局和样式,统一代码格式
- 引入新的组件和 API 接口
2025-01-17 10:17:55 +08:00
aixianling
d46bb82086 refactor(xumu): 解除 AppInsuranceAudit 页面的代码注释
- 移除了 handleAudit 方法中对 API 提交逻辑的注释
- 恢复了代码的原始功能,允许用户提交保险审核申请
2025-01-17 10:11:21 +08:00
aixianling
1ead1b2e9a refactor(xumu): 优化保险申请和审核功能
- 修改保险产品显示逻辑,使用字典标签展示
- 临时注释审计提交功能
- 优化审计状态选择器配置
- 条件渲染保单订单号输入框
2025-01-17 10:10:54 +08:00
aixianling
c5f4f9b356 feat(AppInsuranceAudit): 新增产品类型字典支持
- 在 AppInsuranceAudit 组件中加载 productType 字典
- 在 add 组件中使用 productType 字典显示投保产品名称
- 优化 add 组件中的表单布局
2025-01-17 09:51:05 +08:00
aixianling
3fbde7f193 feat(AppInsuranceAudit): 添加审批组件并优化投保页面
- 新增 AiAudit 组件用于审批操作
- 在投保页面引入并使用 AiAudit 组件
- 优化投保页面布局和样式
2025-01-17 09:25:50 +08:00
aixianling
e5abd1514b feat(AppInsuranceAudit): 添加保险资料审批功能
- 在保险资料卡片中增加审批选项
- 添加审批状态选择框,包括"同意"和"不同意"两个选项
- 审批选项为必选项,增加了验证规则
2025-01-17 09:13:17 +08:00
aixianling
33ed4fe5d5 style(xumu): 格式化 AppInsuranceAudit/add.vue 文件
- 使用 ESLint 规则格式化了代码
- 调整了缩进、空格和换行
- 修复了一些小的语法问题
2025-01-17 09:10:23 +08:00
aixianling
4051b31101 refactor(xumu): 优化理赔申请列表展示逻辑
- 根据 remarks 字段判断是否可申请理赔,而非拼接 status 和 auditStatus
- 简化 permit 字段的使用,直接用于判断是否显示理赔按钮
2025-01-16 10:49:13 +08:00
aixianling
94b1788e8c refactor(xumu): 更新保险申请审核状态字典
- 将审核状态字典从 'auditStatus' 修改为 'insuranceAuditStatus'- 在 add.vue、AppInsuranceApply.vue 和 list.vue 文件中进行了相应更新
2025-01-16 09:58:18 +08:00
aixianling
7944a1a8e3 refactor(xumu): 优化保险申请和审核功能
- 修改身份证和营业执照等文件的上传规则,要求在添加或编辑时必须上传
- 在保险申请提交时添加耳号列表参数
- 修改保险审核列表的审批按钮显示逻辑,仅当状态为"01"时显示
2025-01-16 09:36:38 +08:00
aixianling
17b28025d8 fix(AiEartagPicker): 修复确认选择后原始数据丢失的问题
- 添加 origin 数组以保存初始获取的数据
- 修改 handleConfirm 方法,确保选中的数据来自原始数据
2025-01-15 15:59:58 +08:00
aixianling
0a6b77943f feat(xumu): 优化耳标号选择功能
- 在 AppInsuranceApply 和 AppLoanApply 组件中添加 value-key 属性
- 在 AiEartagPicker 组件中增加对 valueKey 属性的支持- 优化 AiEartagPicker 组件的样式和布局
2025-01-15 15:51:09 +08:00
aixianling
a599566b20 refactor(535): 调整耳标照片上传逻辑
- 将 earPhoto 属性改为 picture
- 添加 upload 配置项,限制上传数量为 1- 优化 columns 数据结构,移除冗余定义
2025-01-14 11:58:59 +08:00
aixianling
1a7031342f refactor(536): 优化 AiTable 组件的输入框使用
- 将 el-input 替换为 ai-input 组件,统一输入框样式
- 为数字类型输入框添加 type="number" 属性,提高输入准确性
2025-01-14 11:55:14 +08:00
aixianling
516a8edb5e refactor(537): 优化体重输入框类型
- 将体重输入框的类型从默认改为 number,确保只能输入数字
-移除 v-model.number 修饰符,因 type="number" 已
2025-01-14 11:52:50 +08:00
aixianling
f4e2100882 fix(542): 修复添加页面接口参数和布局
- 在 AppDeathManage 和 AppOutManage 的 add.vue 文件中,为 ai-eartag-remote 组件添加 class="row",优化布局
- 在 AppOutManage 的 add.vue 文件中,修正出栏接口参数 outTime 之前错误使用 deathTime
- 在 AiEartagRemote 组件中,简化 API 请求参数结构
2025-01-14 11:50:45 +08:00
aixianling
9f6998e042 refactor(BUG 541): 优化治疗时间初始化
- 在 AppImmunityManage 和 AppTreatmentManage 组件中,移除了治疗时间的自动初始化
- 在 AppTreatmentManage 组件中,将治疗时间初始化为当前时间的字符串格式
2025-01-14 11:37:19 +08:00
aixianling
f730850d93 feat(BUG 540): 新增免疫登记功能
- 添加免疫登记对话框和相关表单
- 实现免疫信息的添加和更新功能
- 优化表单样式,调整标签宽度和对齐方式
2025-01-14 11:28:46 +08:00
aixianling
0ef83a945f refactor(BUG 538): 调整字典数据加载时机
- 移除 add.vue 中的 created 钩子中的字典加载逻辑
- 在 AppWeightManage.vue 中添加 created 钩子,统一处理字典加载
2025-01-14 11:26:01 +08:00
aixianling
cbfd68f50c refactor(BUG 539): 为药物和疫苗的剂量添加单位 ml- 在 AppBreedArchive、AppImmunityManage 和 AppTreatmentManage组件中
- 将"药量"列的标题修改为"药量(ml)"
- 此修改提高了数据的准确性和可读性
2025-01-14 11:10:02 +08:00
aixianling
7762eb6d24 fix(xumu): 修复死亡管理和出栏管理中的图片无法回显的问题
- 在 AppDeathManage 和 AppOutManage 组件中,将图片数据转换为 JSON 字符串后提交
- 修复了后端接口对图片数据的接收问题
2025-01-09 16:43:02 +08:00
aixianling
db1a323921 refactor(xumu): 移除表单照片的验证规则
移除了 AppDeathManage 和 AppOutManage 组件中照片上传的验证规则。这个改动统一了照片上传的规则,提高了代码的一致性和可维护性。

受影响的主要文件:
- project/xumu/AppDeathManage/add.vue
- project/xumu/AppOutManage/add.vue

具体改动:
- 删除了 formImages 数组中每个对象的 rules 属性
- 优化了部分代码格式,如空格和换行
2025-01-09 16:39:23 +08:00
aixianling
1a61475f57 fix(xumu): 修复耳标号查询接口的参数传递方式- 将参数从第三个参数移到第二个参数位置,以符合 Axios库的正确用法
-这个修改可以解决耳标号查询功能不工作的问题
2025-01-09 16:36:36 +08:00
aixianling
356e6438e0 fix(xumu): 修复保险申请和治疗管理页面的数据加载问题- 在 AppInsuranceApply 组件中,将 detailList 的默认值改为 detailList || [],以确保数据正确加载
- 在 AppTreatmentManage 组件中,将 detailList 的
2025-01-09 15:48:02 +08:00
aixianling
5fe82a68ef fix(xumu): 修复耳标号查询功能
- 更新 API 请求参数,添加 pageSize 和 pageNum
- 修改数据处理逻辑,使用 records[0] 而不是直接使用 data
- 优化代码格式,删除多余的空格和换行
2025-01-09 15:41:39 +08:00
aixianling
9b6e02810a fix(xumu): 修复死亡管理和淘汰管理页面的查看模式显示逻辑
- 在 AppDeathManage 和 AppOutManage 组件中,为死亡日期、死亡原因、淘汰日期和淘汰原因字段添加 v-else指令
- 这样在查看模式下只显示文本,而不显示输入框
2025-01-09 15:11:27 +08:00
aixianling
f0a32ad868 feat(xumu): 添加远程耳标号查询功能
- 在 AppDeathManage 和 AppOutManage 组件中集成 AiEartagRemote 组件
- 实现耳标号远程查询和自动填充功能
-优化用户输入体验,提高数据准确性
2025-01-09 15:09:28 +08:00
aixianling
ce64bfd54d style(xumu): 优化 AppTreatmentManage 组件中的表单项
- 为 formItems 循环渲染的表单项添加 key 属性,以提高渲染性能和稳定性
2025-01-09 14:51:58 +08:00
aixianling
a53d25fae2 refactor(xumu): 为 el-date-picker 组件添加 value-format 属性
- 在多个组件中,为 el-date-picker 组件添加 value-format="yyyy-MM-dd HH:mm:ss" 属性
- 这样做可以确保日期时间的格式一致性,避免潜在的时间格式问题
2025-01-09 14:39:56 +08:00
aixianling
08d5e0e4fd fix(AiEartagPicker): 修复耳标选择器组件
- 优化代码格式和缩进
- 修复 penId 属性未使用的问题
- 改进 getEartag 方法,确保正确处理返回数据
- 更新模板中的点击事件和样式
2025-01-09 11:55:59 +08:00
aixianling
b23f8325f4 refactor(xumu): 优化字典数据加载和组件结构
- 移动字典数据加载到父组件 AppDeathManage
- 修复死亡日期和死亡原因的验证规则
- 优化死亡原因的显示逻辑
- 移除子组件中的重复字典数据加载
2025-01-09 11:43:16 +08:00
aixianling
0adb2b1486 feat(AppWeightManage): 更新体重信息显示逻辑
- 在"最近称重时间"字段中,优先显示 todayCreateTime,若为空则显示 lastCreateTime
- 在"最新体重(公斤)"字段中,优先显示 todayWeight,若为空则显示 lastWeight
2025-01-09 11:37:26 +08:00
aixianling
38082397a9 style(xumu): 将只读属性改为禁用
- 在 AppInsuranceAudit 和 AppLoanAudit 组件
2025-01-09 10:40:12 +08:00
aixianling
4d527dc8ec feat(BUG 534 533): 添加身份证远程查询功能
- 在 AppInsuranceAudit 和 AppLoanAudit 组件中集成 AiIdcardRemote 组件
- 实现身份证信息查询和自动填充功能
- 优化用户信息获取逻辑,提高用户体验
2025-01-09 10:38:41 +08:00
aixianling
d90aca62e4 feat(AppAccountManage): 添加身份证号输入框
- 在表单中新增身份证号字段,设置为必填项
- 使用 ai-input组件替代 el-input 组件,以适应特殊输入需求
2025-01-09 09:16:12 +08:00
aixianling
44f11be05c fix(BUG 517): 修改账号管理对话框标题
- 将编辑状态下的对话框标题从"功能分配"改为"编辑账号"
- 优化用户体验,使对话框标题与操作内容更加匹配
2025-01-08 16:27:59 +08:00
aixianling
7a21ab3804 feat(AppAccountConfigManage):BUG 519 修改对话框标题
- 将对话框标题从"认证材料"修改为"场地配置"
- 此修改提高了界面文案的准确性,更好地反映了对话框内容的主题
2025-01-08 16:24:22 +08:00
aixianling
6bb4802f15 refactor(store):BUG 524 530 重构 signOut 逻辑
- 移除了 state 中的冗余代码
-优化了 signOut mutation 的逻辑结构
- 使用 Promise 处理异步操作,提高了代码可读性
- 简化了登录页面 URL 的拼接方式
2025-01-08 16:22:44 +08:00
aixianling
cfc8f3c8e0 feat(AppSign):BUG 525 添加登录失败错误提示
- 在登录接口返回数据中增加错误信息展示
- 使用 $message.error 方法显示错误提示
2025-01-08 16:01:46 +08:00
aixianling
3f26b8b6df refactor(AppRoleRightsManager): BUG 526 优化角色用户展示和编辑功能- 重新设计角色用户列表的展示方式,使用标签替代原有格式
- 调整角色名称列宽,提高可读性- 编辑角色时增加角色类型参数,可能为后续流程使用
2025-01-08 16:00:05 +08:00
aixianling
350ca644cf refactor(AppAccountManage):BUG 527 将“账户”改为“账号”
- 修改了 AppAccountManage 组件中的一个字段标签
- 将“账户”改为“账号”,以更准确地描述用户登录凭证
2025-01-08 15:43:20 +08:00
aixianling
99b507657f refactor(xumu): 优化基础信息输入逻辑
- 将耳标号输入框的 v-model绑定到新的 filter 属性- 在输入框中添加 @keyup.enter.native 事件,调用 getDetail(filter) 方法
- 优化了数据结构和事件处理方式,提高了用户体验
2025-01-08 15:23:26 +08:00
aixianling
2e93f1465f refactor(xumu): 重构耳标选择器组件
- 新增计算属性 api,用于生成请求 URL
- 将 watch 目标从 action 改为 api
- 优化 getEartag 方法,使用计算属性 api 替代手动构建 URL
2025-01-08 15:18:37 +08:00
aixianling
07a4d0637f refactor(xumu): 优化体重录入对话框样式和功能
- 调整对话框宽度为 50vw,提高可读性和美观性
- 为日期选择器添加 value-format 属性,确保日期格式一致性
- 将普通输入框替换为自定义的 ai-input 组件,提升用户体验
2025-01-08 15:05:55 +08:00
aixianling
66a721c1eb feat(xumu): 优化耳标编辑功能
- 在提交时,如果处于编辑状态,将当前详情数据构建成 detailList 数组- 保留原有逻辑,确保新增和编辑操作都能正常进行
2025-01-08 15:02:37 +08:00
aixianling
5efd2a1d3f fix(AppEarTag): 修复耳标添加页面品种和类别显示问题
- 在 etAdd.vue 文件中,将品种和类别的显示逻辑从直接显示值改为通过字典获取标签
- 使用 dict.getLabel 方法确保在非编辑模式下正确显示品种和类别的中文名称
2025-01-08 14:57:03 +08:00
aixianling
d0c447bb41 feat(xumu): 新增死亡审核功能
- 添加死亡审核列表页面,支持筛选、搜索和导出功能
- 实现死亡审核详情页面,包括基础信息、死亡信息和审核信息
- 集成字典加载和用户信息获取
- 优化表格展示和表单验证
2025-01-08 14:51:39 +08:00
aixianling
ebc143a052 refactor(xumu): 修改死亡录入表单字段
- 将 "createTime" 字段重命名为 "deathTime",以更准确地表示死亡日期
- 更新相应的标签、规则和数据显示
2025-01-08 14:51:18 +08:00
aixianling
70b77669ab refactor(xumu): 移除未使用的组件导入
- 删除了 AiEartagPicker 组件的导入语句
- 移除了 components 中的 AiEartagPicker 注册
2025-01-08 14:42:40 +08:00
aixianling
7393bcbc6e refactor(xumu): 优化列表组件的列定义
- 移除了 AppDeathManage 列表中不必要的 prop 属性
- 为 AppOutAudit 列表添加了序号列
- 统一了两个列表中养殖场列的格式
2025-01-08 14:37:45 +08:00
aixianling
2abdab1b20 refactor(xumu): 修正 AppOutAudit 组件的名称
- 将组件名称从 AppSellAudit 修改为 AppOutAudit
- 更新相应的样式类名和模板选择器
2025-01-08 14:33:49 +08:00
aixianling
d1a8800a9b feat(AppBreedArchive): 优化档案查询页面
- 新增免疫记录、治疗记录、淘汰记录、死亡记录、设备检测、贷款信息、保险信息等模块
-优化列表展示方式,使用 tabs进行分类展示
-调整列表列宽和对齐
2025-01-08 10:14:51 +08:00
aixianling
ced505b585 feat(xumu): 新增电子档案功能
- 添加 AppBreedArchive 组件作为电子档案的主入口
- 实现档案列表页面,包括筛选、搜索和导出功能
- 实现档案详细信息页面,展示基础信息和记录
- 集成 vuex 状态管理,支持用户信息和字典数据的全局共享
2025-01-07 18:02:42 +08:00
aixianling
25010984f9 feat(AppOutAudit): 增加字典加载项
- 在 created 钩子中添加了 "outReason" 字典加载项
- 此修改扩展了 AppOutAudit 组件的字典加载功能,支持新的审核原因字典
2025-01-07 17:02:22 +08:00
aixianling
75d5971e42 feat(xumu): 新增淘汰审核功能
- 添加 AppOutAudit组件作为淘汰审核的主入口- 实现 add.vue 页面,用于展示和编辑淘汰审核详情
- 创建 list.vue 页面,用于展示淘汰审核列表
- 在 AppOutManage 中将淘汰日期字段从 createTime改为 outTime
2025-01-07 16:50:48 +08:00
aixianling
f5085b1cb3 style(AiEartagPicker): 调整选择器样式- 为 el-select 添加相对定位,以修复潜在的样式问题- 调整 el-input__prefix 的 z-index,以确保正确的层级关系 2025-01-07 16:29:12 +08:00
aixianling
baa5c3124a refactor(xumu): 优化 AppWeightManage 添加接口调用方式- 修改了 AppWeightManage/add.vue 文件中的 submit 方法
- 将 post 请求的参数传递方式从 body 改为 params
- 这种改动可能会影响后端接口的处理逻辑,需要相应调整
2025-01-07 16:24:00 +08:00
aixianling
d1ae5ff2c7 feat(AppEarTag): 添加养殖场、养殖舍和养殖栏的必填验证
- 在 etAdd.vue 文件中,为养殖场、养殖舍和养殖栏的表单项添加了必填验证规则
- 验证规则仅在 isAdd 变量为真时生效,确保在添加模式下进行验证
- 此修改提高了数据输入的完整性和用户体验
2025-01-07 16:22:31 +08:00
aixianling
962d2a4068 fix(xumu): 修复删除功能使用错误的 HTTP 方法
-将 handleDelete 方法中的 HTTP 请求从 delete 改为 post
-此修改确保了删除操作使用正确的 HTTP 方法,提高了代码的正确性和安全性
2025-01-07 16:20:22 +08:00
aixianling
3adbb68466 refactor(AppDeployCustom): 重构新增页面布局和样式
-优化了表单布局,使用 grid 系统替代原有的 el-row 和 el-col
- 移除了多余的模板代码,简化了结构
- 统一了表单项的样式和间距
- 调整了部分组件的属性,提高了代码可读性
2025-01-07 10:36:29 +08:00
aixianling
7f086f8b83 refactor(xumu): 优化 AppAccountConfigManage 组件中对话框关闭逻辑
- 在对话框关闭事件中添加了 getTableData 方法调用
- 优化了数据重载和状态重置的逻辑
2025-01-07 10:19:26 +08:00
aixianling
95689baff9 feat(AppAccountConfigManage): 优化认证材料对话框样式和功能- 调整对话框宽度为 50vw,使界面更加响应式
- 为删除按钮添加 v-if 指令,仅在没有子节点时显示
- 为删除按钮添加 del 类,以应用特定样式
- 在 utils.js 中添加 $isEmpty函数,用于检查对象是否为空
2025-01-07 10:17:59 +08:00
aixianling
d39650eca5 feat(authList): 添加搜索功能并优化表格数据获取
- 移除了未使用的 AiSelect 组件导入
- 新增了 search 属性的监听器,实现深度监听- 当搜索条件变化时,自动重置页码并重新获取表格数据
2025-01-07 10:05:34 +08:00
aixianling
4f44f50db5 refactor(AppAccountManage): 优化账号删除功能
- 修改 handleDelete 方法,使其接收 row 参数
- 根据账号认证和配置状态,动态显示删除确认提示
- 提升用户体验,减少误操作风险
2025-01-07 10:04:23 +08:00
aixianling
27a2052241 feat(AppAccountManage): 重置密码功能并优化账号管理页面- 在操作列中添加重置密码按钮
- 优化表格列配置,提高可读性
- 调整表单字段名称,提高用户体验
- 移除不必要的密码输入框
2025-01-07 09:55:05 +08:00
aixianling
072390dc13 refactor(ui): 修改导航栏下拉菜单选项文字
- 将"只留当前页"选项修改为"关闭其他",以提升用户体验和可理解性
2025-01-07 09:37:23 +08:00
aixianling
385447d3b4 refactor(AppRoleRightsManager):优化角色标记选择和编辑功能- 在编辑角色时添加 type 参数,确保角色类型正确保存
- 在新增角色页面将角色标记设置为必选项,提高数据完整性- 优化角色保存逻辑,移除冗余的 if 语句
- 重构 back 方法,增加可选参数以提高灵活性
2025-01-07 09:20:48 +08:00
aixianling
532ceeb5e7 feat(AppMenuManager): 优化菜单配置功能
- 修改添加下级菜单的条件,仅当数据没有 component 时显示
- 移除菜单类型选择,简化配置界面
- 调整菜单图标、应用和路径为必填项
- 优化权限码和排序字段的显示逻辑
2025-01-07 09:05:48 +08:00
aixianling
2275590461 feat(scanApps): 增加扫描 core 工程的功能
- 在 start 函数中添加了对 VUE_APP_CORE 环境变量的检查
- 如果 VUE_APP_CORE 存在,将 'packages/core' 添加到扫描范围中
2025-01-07 08:57:23 +08:00
aixianling
d25b082eff fix(AppMenuManager): 修复添加下级菜单显示逻辑
-将添加下级菜单的显示条件从 data.type<2 修改为 data
2025-01-03 18:01:53 +08:00
aixianling
6feaeb22bf feat(x): 新增出栏审核功能
- 添加出栏审核相关的三个子页面:add、list 和 AppSellAudit
- 实现出umu栏审核的添加、列表展示和审批功能
- 集成字典加载、权限控制和用户信息获取
- 优化表格数据加载和搜索过滤
2025-01-03 17:35:41 +08:00
aixianling
dad169496c feat(xumu): 新增出栏申请功能
- 添加 AppSellApply 组件作为出栏申请的主入口
- 实现出栏申请列表页面,包括筛选、导出等功能
- 实现出栏申请详情和编辑页面,包括基础信息、标的信息、解押材料等
- 集成耳标选择器组件,用于选择投保标的
2025-01-03 17:12:03 +08:00
aixianling
3eef1eeb3c feat(x): 新增贷款审核和页面
- 实现贷款申请功能

- 添加贷款审核相关的组件、审批和查看功能
-umu集成养殖场、贷款银行和产品选择
- 支持耳标号扫描和选择
- 添加贷款合同号和资料上传功能- 实现审核状态和结果的展示
2025-01-03 16:35:38 +08:00
aixianling
f108a61293 feat(loan): 适配贷款业务流程
- 修改投保单号为贷款合同号
- 更新相关 API 路径
-调整表格列和搜索条件以适应贷款业务
- 优化耳标号筛选功能
- 更新字典加载项
2025-01-03 14:52:43 +08:00
aixianling
e1231d408c refactor(xumu): 重构理赔审核页面
- 修改页面布局和样式
- 优化理赔材料上传功能
- 添加审核信息相关字段
- 调整投保对象和审核记录的展示方式
- 优化搜索和筛选功能
2025-01-03 11:18:15 +08:00
aixianling
c073c8d0bd feat(xumu): 新增理赔审核功能
- 添加理赔审核页面组件 AppClaimAudit
- 实现理赔申请列表页面,包括搜索、导出和查看功能
- 新增理赔申请详情页面,支持理赔材料上传和提交
- 集成耳标选择器组件,用于选择理赔标的
- 优化页面样式和布局,提升用户体验
2025-01-02 18:00:48 +08:00
aixianling
437ae1425c feat(xumu): 新增理赔申请和贷款申请功能
- 添加理赔申请和贷款申请的路由、页面组件和相关逻辑
- 实现理赔申请和贷款申请的数据获取、表单提交和审核流程
- 优化耳标选择器组件,支持在不同场景下的使用
- 调整图片上传组件,增加只读模式和预览功能
2025-01-02 15:30:44 +08:00
aixianling
b6dcddac6f feat(xumu): 新增投保审批功能
- 添加投保审批相关的页面和组件
- 实现投保审批的新增、编辑和审核功能- 集成投保审批的列表展示和搜索功能
-优化投保审批表单的验证和提交逻辑
2024-12-31 15:18:45 +08:00
aixianling
e283d6a650 refactor(xumu): 移除 AppInsuranceApply 组件中的 AiCard 引用
- 删除了 AiCard 组件的导入语句- 从 components 中移除了 AiCard 的注册

这个改动减少了组件的依赖,如果页面中没有使用 AiCard,这个改动是有益的。如果有使用 AiCard,需要检查并恢复相关功能。
2024-12-31 10:46:01 +08:00
aixianling
230f8c3b80 feat(AppInsuranceApply): 更新投保申请功能
- 修改证件信息上传要求,增加身份证、营业执照等照片- 添加审核信息查看功能,包括审核状态、时间和审核人等信息
- 增加保单订单号和保单资料查看功能
- 优化表单布局,使用 el-form 组件
- 添加保存草稿和保存并提交按钮
- 引入 AiCard组件,提升用户体验
2024-12-31 09:54:14 +08:00
aixianling
382be3d32f feat(AppInsuranceApply): 添加保险申请材料上传功能
- 移除了未使用的组件导入
- 新增了 formImages 数组,定义了需要上传的图片类型和验证规则
- 在证件信息卡片中添加了图片上传功能
- 使用 ai-uploader 组件实现图片上传- 添加了图片预览功能
2024-12-30 18:04:01 +08:00
aixianling
a7c3b22f87 feat(xumu): 新增投保申请功能
- 添加投保申请列表和新增页面
- 实现养殖场、承保公司、保险产品等选择功能
- 添加投保对象选择功能,支持耳标号选择
- 实现投保申请数据的查询、新增、编辑和删除
-优化表格组件,增加隐藏操作列的功能
- 更新耳标号选择组件,支持自定义请求地址
2024-12-30 18:01:13 +08:00
aixianling
3585cceca8 refactor(ui): 优化搜索栏组件的样式和布局
-移除了 AiPullDown 组件的绝对定位样式
- 调整了 AiSearchBar 组件的网格布局和样式
- 优化了展开和收缩功能的实现方式
- 修复了一些潜在的样式冲突和显示问题
2024-12-30 10:29:07 +08:00
aixianling
908e65f136 feat(xumu): 新增死亡登记功能
- 添加死亡登记列表页面和新增/编辑页面
- 实现死亡登记数据的查询、新增、编辑和删除功能
-集成审批流,支持再次提交审批
- 优化搜索功能,支持多条件筛选
2024-12-27 18:06:36 +08:00
aixianling
7828af24fd feat(xumu): 新增淘汰登记功能
- 添加 AppOutManage组件,包含新增和列表页面- 实现淘汰登记的新增、编辑、审核等功能
-集成字典加载、表格展示、搜索筛选等模块
-优化表单验证和图片上传功能
2024-12-27 18:00:52 +08:00
aixianling
185630ad2c refactor(xumu): 移除 AppTreatmentManage 列表页搜索框中不必要的字典属性
- 删除了原场耳标号、生物芯片耳标号和电子耳标号输入框中的 dict 属性
- 优化了代码结构,
2024-12-27 16:49:04 +08:00
aixianling
67c4c8032e style(layout): 调整搜索栏左侧区域高度
- 将 .left 类的 height 属性从3px
- 此调整旨在 32px 修改为 3优化搜索栏的视觉效果和布局
2024-12-27 16:48:33 +08:00
aixianling
39ce5404c1 feat(ui): 优化搜索栏布局和功能
- 为 AiInput 组件添加 placeholder 属性
- 重构 AiSearchBar 组件布局,使用 grid 替代 flex- 调整搜索栏样式
2024-12-27 16:45:43 +08:00
aixianling
9f02c2d011 feat(xumu): 新增治疗登记功能
- 添加治疗登记管理模块,包括新增、编辑和查看治疗记录
- 实现治疗登记列表页面,支持筛选和导出功能
- 优化牲畜选择界面布局
- 初始化治疗登记日期为当前日期
2024-12-27 15:18:47 +08:00
aixianling
9d369e9a0f refactor(xumu): 修改免疫导出表名称
- 将导出表名称从"称重导出表"修改为"免疫登记导出表"
- 优化导出文件命名,使其更加准确地反映内容
2024-12-27 14:31:09 +08:00
aixianling
19a9486f48 feat(xumu): 新增免疫登记功能
- 添加免疫登记管理页面登记的新增、编辑和删除功能
- 集成耳标和相关组件
- 实现免疫号选择器组件
- 优化称重管理功能,修复相关问题
2024-12-27 12:12:02 +08:00
aixianling
ab9ec446c7 fixumu(x导出接口 URL 从 "/api导出接口错误
- 将): 修复称重
2024-12-27 09:49:40 +08:00
aixianling
0d3d8f23bb feat(AppWeightManage): 添加删除功能
- 重构 handleDelete 方法,通过 API 删除数据
- 更新删除按钮点击事件,传入正确的 id 参数
- 删除成功后重新获取数据,保持列表同步
2024-12-26 18:16:00 +08:00
aixianling
971742b392 refactor(xumu): 优化体重录入表单
- 移除冗余的 el-form 标签
- 调整编辑按钮样式
- 优化体重录入对话框布局
- 添加表单验证规则
2024-12-26 18:13:37 +08:00
aixianling
63a425cf77 feat(AppWeightManage): 新增体重录入功能
- 在 AppWeightManage 模块中添加体重录入功能
- 新增表单字段:办理时间、体重(公斤)
- 实现编辑功能,点击编辑按钮弹出对话框,预填当前行数据
- 优化删除按钮,移除冗余的 @click 事件
- 在对话框关闭时重置表单数据
2024-12-26 18:11:19 +08:00
aixianling
e11d504f18 feat(xumu): 新增体重管理功能
- 添加体重管理列表和新增页面
- 实现体重数据的查询、新增和编辑功能- 优化表格展示和搜索过滤
2024-12-26 18:01:44 +08:00
aixianling
0e35945d4a refactor(xumu): 移除未使用的组件导入
- 删除了未使用的 AiDownload 组件导入- 移除了 components 中的 AiDownload 注册
- 优化了代码结构,提高了代码的可读性和维护性
2024-12-26 17:16:19 +08:00
aixianling
0762067bec feat(AppEarTag): 添加耳标登记导出功能
- 在 etList 组件中引入 AiDownload组件
- 在搜索栏中添加导出按钮,实现耳标登记数据导出功能
2024-12-26 17:15:57 +08:00
aixianling
290ecb6823 (xfeatumu): 优化耳标登记功能
- 修改 etAdd组件,增加耳标录入的增删功能
- 更新 etList
- 重构 AiTable 组件组件,使机构选择框只读,优化表格列的渲染逻辑
2024-12-26 11:57:58 +08:00
aixianling
ee15427e88 feat(ear-tag): 新增耳标登记功能
- 添加耳标登记页面,支持新增和编辑功能
- 实现养殖场、养殖舍、养殖栏的级联选择- 添加耳标信息的详细录入,包括生物芯片耳标号、电子耳标号等
-优化列表页面,增加搜索和筛选功能
- 重构表格组件,支持更多列类型和操作
2024-12-25 12:12:47 +08:00
aixianling
06fa7b636e feat(xumu): 新增耳标 组件作为耳标登记的主登记功能
- 添加 AppEarTag入口
- 实现 etAdd组件用于耳标添加和编辑- 创建 etList 组件用于显示耳标列表
- 集成搜索栏、表格和分页组件
- 添加用户认证状态和耳标信息的获取及展示- 实现耳标添加、编辑
2024-12-24 18:01:24 +08:00
aixianling
225c0088e1 feat(ui): 重构高级搜索组件并优化布局
- 重构 AiPullDown 组件,使用 v-model 实现双向绑定
- 优化 AiSearchBar 组件样式和布局
- 调整 AiPage 组件中的滚动条样式
2024-12-24 17:08:43 +08:00
aixianling
ae83152271 refactor(xumu): 重构 AppAuthManage 组件
- 移除 certificates 常量的单独定义
- 将 certificates 数据移至 data 函数内部
-优化代码结构,提高组件的可维护性
2024-12-24 16:15:04 +08:00
aixianling
b1c0beb8f6 feat(AppAuthManage): 新增认证审核功能
- 添加认证审核列表和详细页面组件
- 实现认证材料上传和审核功能
- 优化页面布局和样式
- 增加审核状态和备注说明功能
2024-12-24 16:04:18 +08:00
aixianling
4d96417661 refactor(components): 修改用户中心路由名称
- 将路由名称从 "个人中心" 修改为 "AppUserInfo"
- 保持了代码的逻辑不变,仅更新了路由的名称
2024-12-23 14:39:40 +08:00
aixianling
711db33df3 refactor(home): 重构首页配置和路由处理
- 修改首页路由动态加载逻辑
- 优化滑动导航组件中的菜单处理
- 调整 Vuex store 中的 mods 数据处理方式
- 重构 main.js 中的 HomePage 配置
2024-12-23 14:38:32 +08:00
aixianling
b7c0350134 feat(config): 添加自定义首页配置并优化导航功能
-增加自定义首页配置项,支持设置不同的首页组件
-优化导航功能,添加固定首页到导航栏
- 重构路由生成逻辑,支持自定义签到页和首页
- 更新组件以适应新的导航结构
2024-12-23 14:19:00 +08:00
aixianling
9ff89c19f3 feat(build): 优化路由配置并添加 404 页面
- 在主路由中添加 mainEntry组件作为主入口
- 在主入口下添加所有扫描路由作为子路由
- 添加 404 页面作为未匹配路由的处理- 修改 mainEntry 组件,使用 router-view 替代动态组件
2024-12-23 10:45:38 +08:00
aixianling
4684952973 refactor(router): 优化路由生成逻辑和导航组件
- 修改路由生成逻辑,使用 name 作为 path,解决 path 未定义问题- 更新 sliderNav 组件中的路由跳转逻辑,使用 path 方式跳转
- 优化 url 参数处理,支持查询字符串
-调整路由配置模板,统一格式
2024-12-23 10:20:19 +08:00
aixianling
4ead05b251 refactor(xumu): 调整 API 请求路径和端口- 移除了 axios.js 中对 xumu 环境的特殊处理逻辑
- 更新了 .env.xumu 文件中的 API 地址和端口号
2024-12-23 09:48:13 +08:00
aixianling
cf62d2f508 fix(router): 修复首页未获取用户信息的问题
- 在路由守卫中增加判断,当进入 Home 页面时,如果用户已登录但未获取用户信息,则自动获取用户信息
- 优化了用户体验,确保用户在访问首页时能够及时加载个人相关数据
2024-12-23 09:20:05 +08:00
aixianling
a894db0144 fix(AppSign): 更新 OAuth 令牌请求 URL
- 将请求 URL 从 "/oauth/token" 修改为 "/api/oauth/token"
- 此修改可能是为了适应后端 API路径的更改
2024-12-23 08:46:31 +08:00
aixianling
a748a8b337 refactor(xumu): 统一接口添加 /api 前缀
- 在多个组件中,将请求路径从 "/user/config/page" 修改为 "/api/user/config/page"- 将请求路径从 "/siteUser/querySiteByUserId" 修改为 "/api/siteUser/querySiteByUserId"
- 将请求路径从 "/siteUser/del" 修改为 "/api/siteUser/del"
-将请求路径从 "/siteUser/add" 修改为 "/api/siteUser/add"
- 将请求路径从 "/user/auth/page" 修改为 "/api/user/auth/page"
- 将请求路径从 "/user/auth/update" 修改为 "/api/user/auth/update"
- 将请求路径从 "/user/update-status" 修改为 "/api/user/update-status"

通过添加 /api前缀,统一了接口请求路径的格式,提高了代码的一致性和可维护性。
2024-12-20 16:54:24 +08:00
aixianling
37a6cb3457 build(xumu): 更新 API 服务器地址
- 将 VUE_APP_API 的值从 http://192.168.1.251:19998 修改为 http://192.168.1.87:19998- 此修改更新了与前端应用通信的后端服务器地址
2024-12-20 10:58:02 +08:00
aixianling
045449331f feat(xumu): 完善认证材料页面并优化相关功能
- 新增认证材料页面,支持查看和审核用户提交的认证信息- 优化 axios 配置,修复 URL 替换逻辑
- 更新表格操作按钮,根据认证状态显示不同选项
- 重构页面布局组件,增加返回按钮和内容字符串属性
2024-12-19 18:04:12 +08:00
aixianling
4c72bd2ac9 refactor(xumu): 优化 AppAccountConfigManage 组件中对话框关闭逻辑
- 在关闭对话框按钮的点击事件中添加 getTableData() 方法调用
-这样可以在关闭对话框后立即刷新表格数据,确保界面显示与实际数据保持同步
2024-12-19 16:28:55 +08:00
aixianling
b3942f5822 feat(xumu): 添加认证审核功能
- 新增 AppAuthManage组件作为认证审核的路由组件- 添加 authAdd 和 authList两个子组件分别用于添加认证和认证列表
- 实现了认证列表的展示、搜索和分页功能
- 添加了认证材料的查看和上传功能
- 优化了表单布局,增加了 row 类样式
2024-12-19 16:28:24 +08:00
aixianling
0b6bc910c4 feat(xumu): 添加认证审核功能
- 新增 AppAuthManage组件作为认证审核的路由组件- 添加 authAdd 和 authList两个子组件分别用于添加认证和认证列表
- 实现了认证列表的展示、搜索和分页功能
- 添加了认证材料的查看和上传功能
- 优化了表单布局,增加了 row 类样式
2024-12-18 18:03:35 +08:00
aixianling
a4233d5f2c feat(xumu): 添加数据字典 2024-12-18 15:09:42 +08:00
aixianling
31c874e1ba refactor(core): 重构数据字典组件
- 将 AppDictionary 组件拆分为 dictList 和 DictDetail 两个子组件
-优化数据字典列表的渲染逻辑
2024-12-18 15:08:55 +08:00
aixianling
d40830188d feat(AppSystemAccount): 优化账号管理功能
- 添加禁用/启用账号功能
- 编辑账号信息
- 优化账号列表展示
- 移除不必要的功能
- 调整表单验证规则
2024-12-18 12:01:46 +08:00
aixianling
e789570a1b feat(xumu): 新增应用角色权限管理功能
- 添加 AppRoleRightsManager 组件,实现角色管理、权限分配等功能
- 新增 rightsAdd 组件,用于添加和编辑应用角色
- 新增 rightsGraph 组件,用于展示权限关系图
- 集成 ECharts 实现复杂的权限关系可视化
2024-12-18 10:16:27 +08:00
aixianling
0de94d76ee feat(xumu): 实现畜牧平台登录页面
- 新增登录页面组件 AppSign
- 添加用户名和密码登录功能
- 集成二维码登录
- 优化页面样式和布局
2024-12-17 17:55:58 +08:00
aixianling
536f579523 feat(utils): 重构路由生成逻辑
- 移除 autoRoutes.js 文件,改为使用 apps.js 存储路由信息
- 新增 createRoutes 函数,用于动态生成应用路由
- 更新 build.js,增加路由生成步骤
- 修改 router.js,使用新的路由配置
- 更新 .gitignore,忽略新的 apps.js 文件
2024-12-17 09:34:57 +08:00
aixianling
c8d75ab72a feat(project): 添加 AppSign 组件
- 实现了一个新的登录页面组件,包含左侧背景和右侧登录表单
- 集成了 logo、系统名称、描述等动态内容
- 添加了微信扫码登录功能
- 优化了响应式布局,适配不同屏幕尺寸
2024-12-16 16:58:21 +08:00
aixianling
ad9676c040 style(develop): 格式化 AppDeployCustom 组件代码
- 使用 ESLint 规则格式化了组件代码
- 调整了缩进、空格和换行
- 修复了一些小的语法问题
2024-12-16 16:30:19 +08:00
aixianling
29bd119ff4 refactor(oms): 优化 AppDeployCustom 组件默认值和样式
- 为 form 属性设置默认值,避免 undefined
- 优化输入框和标签的样式
- 调整部分 UI 样式,如换行和间距
2024-12-16 16:17:31 +08:00
aixianling
b07cca9bcf feat(AppDeployCustom): 添加指定登录页配置项
- 在 webConfig.vue 文件中增加"指定登录页"表单项
- 新增 form.signPage 字段用于填写应用的登录页文件名
2024-12-16 15:39:32 +08:00
aixianling
1c2364574d refactor: 删除 webConfig.vue 中的空样式块
- 移除了 webConfig.vue 文件中未使用的空样式块
- 简化了代码结构,提高了代码的可读性和维护性
2024-12-16 15:36:39 +08:00
aixianling
528082fc6b style(xumu): 格式化 AppSystemAccount 组件代码
- 使用 ESLint 规则格式化了代码结构
- 调整了缩进、空格和换行
- 修复了一些小的语法问题
2024-12-16 10:44:19 +08:00
aixianling
823c327894 账号界面 2024-12-12 15:40:27 +08:00
aixianling
39f6275e31 增加畜牧的开发环境 2024-12-11 18:02:24 +08:00
aixianling
44d971998a 优化wxmpConfig组件mod处理逻辑 2024-11-28 10:24:09 +08:00
aixianling
6d7769e61a 优化wxmpConfig组件表单处理及tabBar初始化逻辑 2024-11-28 10:23:15 +08:00
aixianling
afe1df98f3 优化webConfig和wxmpConfig组件的表单处理逻辑 2024-11-28 09:24:32 +08:00
aixianling
97bd799b6d 优化wxmpConfig组件tabBar过滤逻辑 2024-11-27 17:59:55 +08:00
aixianling
3316b73450 优化wxmpConfig组件tabBar配置更新逻辑 2024-11-27 17:55:08 +08:00
aixianling
eee06c837d Merge remote-tracking branch 'origin/devops' into devops 2024-11-27 16:45:17 +08:00
aixianling
c4ae782195 添加appList属性到wxmpConfig组件并传递给add.vue 2024-11-27 16:45:02 +08:00
liuye
2b22db2bf3 审核状态 2024-11-21 10:15:47 +08:00
liuye
30cf69df04 审核 2024-11-18 15:17:23 +08:00
liuye
54352ece58 test 2024-11-18 14:36:04 +08:00
liuye
daffd10bce 邻里互助审核 2024-11-18 10:52:48 +08:00
liuye
a22b574614 积分规则 2024-11-06 09:12:44 +08:00
liuye
e3c79f232d 网格动态 2024-11-05 17:13:45 +08:00
liuye
1ae371cb30 积分规则 2024-11-05 17:05:59 +08:00
aixianling
96d24a8b22 修复默认值给定错误的问题 2024-10-31 11:34:32 +08:00
aixianling
34eb7320fa 给定默认值 2024-10-31 11:30:09 +08:00
aixianling
9fa56ad890 Merge remote-tracking branch 'origin/devops' into devops 2024-10-29 10:56:32 +08:00
aixianling
263dd9ea37 清理favicon.ico 2024-10-29 10:56:10 +08:00
liuye
85de031db2 积分任务 2024-10-29 08:39:15 +08:00
liuye
a6f11e56a7 积分任务 2024-10-24 16:12:41 +08:00
liuye
15f6dc6499 lianhua-名额 2024-10-24 14:04:59 +08:00
aixianling
b64b102682 Merge remote-tracking branch 'origin/build' into devops 2024-10-18 09:31:36 +08:00
aixianling
576553e962 为了保证jenkins的顺利执行 2024-10-17 17:19:49 +08:00
aixianling
ff5e2d4fe2 为了保证jenkins的顺利执行 2024-10-17 15:54:07 +08:00
liuye
3f41df22a9 店铺 2024-10-17 14:18:33 +08:00
aixianling
043aaf8399 在仓库制作打包脚本 2024-10-12 16:17:37 +08:00
aixianling
a5e0f3a6c5 优化代码 2024-10-12 14:27:26 +08:00
liuye
f9123942ca AppGridReview 2024-10-11 17:47:02 +08:00
liuye
b67e30ce25 地址 2024-10-11 16:52:20 +08:00
aixianling
5a2762a7c6 导航条修复一下 2024-10-11 12:04:44 +08:00
liuye
c43a8992fd 网格动态 2024-10-11 11:23:01 +08:00
liuye
705a252618 网格动态 2024-10-11 11:10:28 +08:00
aixianling
e2e957880b 针对oms专项进行启动和页面优化 2024-10-11 10:10:06 +08:00
aixianling
104f5d1049 修复接口,模块引用等一些问题 2024-10-10 17:35:04 +08:00
aixianling
b3f11698f2 清理一下工程 2024-10-10 16:29:07 +08:00
aixianling
285e242e9e Merge branch 'build' into devops 2024-10-10 16:21:44 +08:00
aixianling
00b2dbb4a4 持续集成分支 2024-10-10 16:04:11 +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
yanran200830
68a7c57e0b 工作任务 2022-11-21 11:54:03 +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
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
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
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
aixianling
9ea39b1386 Merge remote-tracking branch 'origin/dev' into build 2022-09-08 16:17:08 +08:00
aixianling
6e98d28b88 Merge remote-tracking branch 'origin/dev' into build 2022-09-08 13:23:39 +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
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
aixianling
2e2c38848a BUG 30994 2022-09-05 17:28:27 +08:00
aixianling
617ef4b9c9 企业微信设置调整,系统信息科在修改调整 2022-09-05 11:11:10 +08:00
aixianling
efc537a45b 慧治理设置完毕 2022-09-05 11:08:44 +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
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
aixianling
37c6f38354 Merge remote-tracking branch 'origin/dev' into build 2022-09-02 09:20:59 +08:00
aixianling
68b8c4f43d Merge remote-tracking branch 'origin/dev' into build 2022-09-01 16:06:13 +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
aixianling
e8b49517e2 Merge remote-tracking branch 'origin/dev' into build 2022-09-01 09:02:27 +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
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
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
aixianling
33a5d975ce Merge remote-tracking branch 'origin/dev' into build 2022-08-30 16:22:31 +08:00
aixianling
ee91eeb7c5 Merge branch 'dev' into build 2022-08-30 11:00:57 +08:00
aixianling
c85c6f85fa 控制样式,当前节点,当前节点model 2022-08-29 17:20:12 +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
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
aixianling
e5591db83a 头部导航增加埋点设置 2022-08-24 17:50:15 +08:00
aixianling
af298ca17e Merge branch 'dev' into build 2022-08-24 16:35:06 +08:00
aixianling
c112e7cde8 允许一级菜单为应用且可设置图标 2022-08-24 15:13:23 +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
be15c94417 Merge branch 'dev' into build 2022-08-24 10:51:00 +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
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
1631 changed files with 252856 additions and 11936 deletions

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

5
.env.xumu Normal file
View File

@@ -0,0 +1,5 @@
VUE_APP_SCOPE=xumu
VUE_APP_API=http://192.168.1.87:12413
VUE_APP_IS_SIMPLE_SERVER=1
VUE_APP_PORT=12413
VUE_APP_OMS_ID=2cd70a15-a3cf-4b4d-9a22-0f3b3a888b08 # oms定制方案的ID

6
.gitignore vendored
View File

@@ -25,3 +25,9 @@ yarn-error.log*
/oms/dist/
/project/*/index.js
/project/*/dist
/ui/package-lock.json
/examples/modules.json
/examples/router/apps.js
/src/apps/
/src/config.json
/src/utils/apps.js

View File

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

6
.npmrc
View File

@@ -1,6 +1,4 @@
registry=http://cli.sinoecare.net/
email=aixianling@sinoecare.com
always-auth=true
_auth="YWRtaW46YWRtaW4xMjM="
package-lock=false
registry=http://registry.npmmirror.com
legacy-peer-deps=true

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()

99
bin/build.js Normal file
View File

@@ -0,0 +1,99 @@
const axios = require('axios')
const {fsExtra, copyFiles, findApp, chalkTag, fs} = require("./tools");
const compiler = require('vue-template-compiler')
const getBuildConfig = id => {
axios.post('http://192.168.1.87:12525/node/custom/detail', null, {params: {id}}).then(res => {
if (res?.data) {
const config = res.data.data
fsExtra.outputJson('src/config.json', config.extra)
createPages(config)
}
})
}
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: file.replace(/[\\\/]/g, '/').substring(4),
name
})
}
}
/**
* 根据配置生成应用路由
* @param {Object} config - 配置对象,用于定制化路由生成过程
* @returns {Promise} - 返回一个Promise对象表示路由生成完成
*/
const createRoutes = (config = {}) => {
// 初始化路由数组
const routes = []
// 获取签到页面的路径,如果未指定,则使用默认路径
let signPage = '../views/sign'
let {signPage: sign, homePage: home = "console"} = config.extra || {}
if (config.extra?.signPage) {
signPage = `../apps/custom/${sign}/${sign}`
}
let homePage = `../views/console`
if (config.extra?.homePage) {
homePage = `../apps/custom/${home}/${home}`
}
// 查找并处理所有应用,将它们的信息添加到路由中
return findApp("src/apps", app => getAppInfo(app, routes)).then(() => {
// 生成并输出apps.js文件定义所有应用的路由
fsExtra.outputFile('src/utils/apps.js', `export default [
{path: "/login", name: "登录", component: () => import('${signPage}')},
{path: '/dv', name: '数据大屏入口', component: () => import('../views/dvIndex')},
{path: '/v', name: 'Home', component: () => import('../views/home'), children: [
{path:'/',name:'mainEntry', component:()=>import('../views/mainEntry'),children:[
{name: "${home}", path: "${home}", component: () => import('${homePage}')},
${routes.filter(e => ![sign, home].includes(e.name)).map(e => {
// 解构每个路由的属性,用于生成路由配置
const {name, label, esm} = e
// 生成单个路由配置的字符串表示
return `{name:"${name}",label:"${label}",path:"${name}",component:()=>import("../${esm}")}`
}).join(',\n')},
{path: '*',name: '404',component: ()=>import('../views/building')},
]}
]},
{path: '/', name: "init"},
]`)
// 扫描完毕使用chalkTag标记任务完成
chalkTag.done("扫描完毕")
})
}
const createPages = (config = {}) => {
fsExtra.emptyDir("src/apps", err => {
if (!err) {
const {customPath, appList} = config
const stdApps = {}
appList.filter(e => !/project/.test(e.id))?.forEach(e => {
const paths = e.libPath.split('/').filter(Boolean) || []
paths.pop()
stdApps[paths.join("/")] = 1
})
Promise.all([
copyFiles("src/apps/core", "packages/core"),
copyFiles("src/apps/custom", `project/${customPath}`),
...Object.keys(stdApps).map(e => copyFiles(`src/apps/${e.replace(/^packages[\\\/]/, '')}`, e)),
]).then(() => createRoutes(config)).then(() => fsExtra.ensureFile("src/apps/actions.js"))
}
})
}
const start = () => {
const buildId = process.argv[2] || process.env.VUE_APP_OMS_ID || 'f670cc46-7cf7-4a0f-86ee-3077044c0b17'
getBuildConfig(buildId)
}
start()

37
bin/scanApps.js Normal file
View File

@@ -0,0 +1,37 @@
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: file.replace(/[\\\/]/g, '/'),
name
})
}
}
const start = () => {
chalkTag.info("开始扫描库工程...")
const {VUE_APP_SCOPE, VUE_APP_CORE} = process.env
const list = []
let scanScope = ['packages', 'project']
if (VUE_APP_SCOPE) scanScope = [`project/${VUE_APP_SCOPE}`]
if (VUE_APP_CORE) scanScope.push('packages/core')
Promise.all(scanScope.map(e => findApp(e, app => getAppInfo(app, list)))).then(() => {
fsExtra.outputFile('examples/router/apps.js', `export default [${list.map(e => {
const {name, label, path, esm} = e
return `{name:"${name}",label:"${label}",path:"${path}",component:()=>import("@${esm}")}`
}).join(',\n')}]`)
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"/>
<main-content class="fill"/>
<ai-dv-wrapper class="fill" v-if="dvDev">
<router-view v-bind="commonAttrs"/>
</ai-dv-wrapper>
<el-row v-else-if="showTools" class="fill mar-t48" type="flex">
<slider-nav/>
<main-content class="fill" :commonAttrs="commonAttrs"/>
</el-row>
<router-view class="fill" v-else v-bind="commonAttrs"/>
<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() {
@@ -34,16 +42,29 @@ export default {
/project\/sass/g.test(location.pathname) && (url += "?corpId=ww596787bb70f08288")
return url
},
commonAttrs() {
return {
instance: this.$request,
dict: this.$dict,
permissions: this.$permissions
}
}
},
data() {
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 +79,15 @@ export default {
this.dialog = true
})
},
handleMock() {
}
},
created() {
wx = jWeixin
if (this.user.token) this.getUserInfo().then(() => {
const {jWeixin} = window
window.wx = jWeixin
if (this.user.token) this.getUserInfo().finally(() => {
if (/^\/project\/xiushan/.test(location.pathname)) {
this.setFinanceUser()
this.getFinanceUser()
}
})
}
@@ -97,6 +121,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,22 @@
<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 v-bind="$attrs.commonAttrs"/>
<ai-empty v-if="isHome">欢迎使用村微产品库</ai-empty>
</div>
</section>
</template>
<script>
import {mapState} from "vuex";
import AiNavTab from "dui/packages/basic/AiNavTab";
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 +24,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%;
}
}
}
}
</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

@@ -39,25 +39,22 @@ export default {
}
},
computed: {
...mapState(['user', 'apps']),
...mapState(['user']),
navs() {
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 => {
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)
let paths = [], current = this.$apps?.find(e => e.name == this.$route.name)
const findParent = name => {
let menu = this.apps?.find(e => e.name == name)
let menu = this.$apps?.find(e => e.name == name)
if (menu) {
paths.push(menu.name)
if (!!menu.parentId) findParent(menu.parentId)
@@ -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

@@ -1,20 +1,18 @@
import Vue from 'vue';
import App from './App.vue';
import ui from 'element-ui';
import router from './router/router';
import router from './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/packages';
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]));
@@ -24,12 +22,14 @@ const app = new Vue({
store,
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,48 +0,0 @@
import store from "../store";
import {waiting} from "../utils";
import appEntry from "../views/apps/appEntry";
import router from "./router";
import axios from "./axios";
export default {
routes: () => store.state.apps,
init() {
//约束正则式
store.commit("cleanApps")
// 自动化本工程应用
this.loadApps()
},
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
}
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()
})
}
}

View File

@@ -1,5 +1,5 @@
import instance from 'dvcp-ui/lib/js/request'
import { Message } from 'element-ui'
import instance from 'dui/lib/js/request'
let baseURLs = {
production: "/",
@@ -8,20 +8,10 @@ let baseURLs = {
instance.defaults.baseURL = baseURLs[process.env.NODE_ENV]
instance.interceptors.request.use(config => {
if (config.url.startsWith("/node")) {
config.baseURL = "/ns"
} else if (/\/project\/beta/.test(location.pathname)) {
config.baseURL = "/wg"
} else if (/\/project\/sass/.test(location.pathname)) {
config.baseURL = "/saas"
} else if (/\/xiushan/.test(location.pathname)) {
config.baseURL = "/xsjr"
} else if (/project\/oms/.test(location.pathname)) {
config.baseURL = "/omsapi"
} else if (/#url-/.test(location.hash)) {
config.baseURL = location.hash.replace(/#url-/, '/')
config.url = "/ns" + config.url
}
if (["/xsjr", "/omsapi"].includes(config.baseURL)) {
config.url = config.url.replace(/(app|auth|admin)\//, "")
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,13 +1,13 @@
import Vue from 'vue'
import VueRouter from 'vue-router'
import autoRoutes from './autoRoutes'
import apps from "./apps";
Vue.use(VueRouter)
autoRoutes.init()
Vue.prototype.$apps = apps
export default new VueRouter({
mode: 'history',
hashbang: false,
routes: autoRoutes.routes(),
routes: apps,
scrollBehavior(to) {
if (to.hash) {
return {

View File

@@ -1,28 +1,12 @@
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)
export default new Vuex.Store({
state: {
apps: []
},
mutations: {
addApp(state, app) {
state.apps.push(app)
},
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

@@ -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,36 +1,44 @@
{
"name": "cw-webapps",
"version": "2.0.0",
"name": "dvcp-web-apps",
"version": "4.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",
"oms": "vue-cli-service serve examples/main.js --mode oms",
"xumu": "vue-cli-service serve examples/main.js --mode xumu",
"sync": "node bin/appsSync.js",
"preview": "node bin/build.js && vue-cli-service serve",
"predev": "node bin/scanApps.js",
"preoms": "dotenv -e .env.oms node bin/scanApps.js",
"prexumu": "dotenv -e .env.xumu node bin/scanApps.js",
"view:xumu": "vue-cli-service serve --mode xumu",
"preview:xumu": "dotenv -e .env.xumu node bin/build.js"
},
"workspaces": [
"project/*"
],
"dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
"@jiaminghi/c-render": "^0.4.3",
"@jiaminghi/charts": "^0.2.18",
"@ckeditor/ckeditor5-vue2": "^3.0.1",
"@jiaminghi/data-view": "^2.10.0",
"bin-code-editor": "^0.9.0",
"@logicflow/core": "^1.2.1",
"bin-ace-editor": "^3.2.0",
"crypto-js": "^4.2.0",
"dayjs": "^1.8.35",
"dvcp-ui": "^1.42.2",
"echarts": "^5.1.2",
"echarts": "^5.5.1",
"echarts-wordcloud": "^2.0.0",
"hash.js": "^1.1.7",
"html2canvas": "^1.4.1",
"jspdf": "^2.5.2",
"mp4box": "^0.4.1",
"print-js": "^1.0.63",
"serialize-javascript": "^6.0.0",
"sortablejs": "^1.12.0",
"vue-carousel": "^0.18.0",
"vue-cropper": "^0.6.5",
"vue-draggable-resizable": "^2.3.0",
"vue-json-editor": "^1.4.3",
"vue-qr": "^4.0.9",
"vue-ruler-tool": "^1.2.4",
"vue-style-loader": "^4.1.3",
"vuedraggable": "^2.24.3"
},
"devDependencies": {
@@ -43,40 +51,27 @@
"axios": "^0.19.2",
"babel-eslint": "^10.1.0",
"core-js": "^2.6.11",
"dotenv-cli": "^7.4.2",
"element-ui": "^2.15.9",
"eslint": "^5.16.0",
"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": {}
@@ -86,5 +81,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

@@ -210,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,316 +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
if (!id) 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
}).then(res => {
if (res.code == 0) {
}
})
}
})
},
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"
<vue-ruler-tool v-model="dashboard.presetLine" v-if="resizeWrapper"
class="vueRuler"
:step-length="50"
:parent="true"
:position="'relative'"
:is-scale-revise="true"
parent
is-scale-revise
position="relative"
:visible.sync="dashboard.presetLineVisible">
<div
id="workbench"
<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">
<div style="width: 100%; height: 100%">
<AiDvBackground
<ai-dv-wrapper
style="height: 100%"
:type="dashboard.style"
:title="$route.query.name"
:titleSize="dashboard.titleSize"
: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>
: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%">
<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">
@@ -100,181 +106,44 @@
</div>
</div>
<div class="layout-right" @click.stop>
<div class="layout-tab" v-if="activeIndex > -1">
<!-- 选中组件面板-->
<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" 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>
</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 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>
</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">
<!--未选中组件,页面设置-->
<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">
<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>
</div>
</div>
</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]
currLayout: {
set(v) {
this.setCurLayer(v)
},
get() {
return this.activeIndex > -1 ? this.componentList[this.activeIndex] : {}
}
},
widget() {
if (this.components.length && this.components[this.parentIndex].list.length) {
return this.components[this.parentIndex].list[this.subIndex].list
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()
})
},
watch: {
leftHide: {
handler(v) {
this.middleWidth = document.querySelector('.layout-wrapper').offsetWidth - (v ? 340 : 670)
this.initCanvas()
this.resizeWrapper = false
this.$nextTick(() => this.resizeWrapper = true)
}
}
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(() => {
this.initCanvas()
})
},
...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))
})
return newData
} else {
newObj[key] = this.deepClone(value)
}
} else {
newObj[key] = value
}
}
}
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;
@@ -920,6 +824,7 @@ export default {
padding: 0 10px;
background: #0A0B0D;
overflow-y: auto;
overflow-x: hidden;
.layout-left__right--item {
margin-top: 10px;
@@ -931,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 {
@@ -1008,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;
@@ -1024,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);
}
@@ -1048,7 +957,7 @@ export default {
}
}
::v-deep .handle {
:deep( .handle ) {
border-radius: 100%;
border: none;
background-color: #09f;
@@ -1063,6 +972,7 @@ export default {
.draggable {
position: absolute;
border: none;
transition: none;
&::after {
position: absolute;
@@ -1096,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;
@@ -1118,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 {
@@ -1145,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;
@@ -1188,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: []
}
},
@@ -291,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 => {
@@ -655,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;
}

View File

@@ -45,7 +45,7 @@
<div class="item-top jmq">
<div class="header">
<span>居民群</span>
<span>{{ isChoose ? '派出所' : '公安局' }}</span>
<span>{{ isChoose ? '乡镇派出所' : '县级公安局' }}</span>
<span>群成员</span>
</div>
<div class="item-top__list">
@@ -139,7 +139,7 @@
<div class="item-wrapper">
<div class="item-top__item">
<h2>{{ girdInfo['村民警员'] || 0 }}</h2>
<p>村民警</p>
<p>民警</p>
</div>
<div class="item-top__item">
<h2>{{ girdInfo['居民群'] || 0 }}</h2>
@@ -201,11 +201,11 @@
<script>
import DonutChart from './components/DonutChart'
import XyGrid from './components/XyGrid'
import * as echarts from 'echarts'
export default {
name: 'AppXyDv',
label: '兴义大屏',
label: '黔西南大屏',
props: {
instance: Function,
@@ -246,7 +246,7 @@
},
mounted () {
document.title = '兴义大屏'
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)'
@@ -344,7 +344,7 @@
this.initLineChart('.chart2', {
x: res.data['群成员数'].map(v => v.month),
value: res.data['群成员数'].map(v => v.totalNumber),
name: '居民群'
name: '群成员'
})
}
})
@@ -427,10 +427,12 @@
this.list = list.map(v => {
return {
...v,
rate1: (v['居民群'] / v1 * 100).toFixed(0) + '%',
rate2: (v['群成员'] / v2 * 100).toFixed(0) + '%'
rate1: v1 === 0 ? '0%' : (v['居民群'] / v1 * 100).toFixed(0) + '%',
rate2: v2 === 0 ? '0%' : (v['群成员'] / v2 * 100).toFixed(0) + '%'
}
})
} else {
this.list = []
}
}
})
@@ -440,7 +442,7 @@
if (res.code === 0) {
this.girdInfo = res.data.countInfo
this.gridList = res.data.groupList
if (res.data.typeInfo) {
if (res.data.typeInfo.length) {
this.total = res.data.typeInfo.map(v => v.c).reduce((x, y) => x + y)
this.typeList = res.data.typeInfo.map(v => {
return {
@@ -449,6 +451,9 @@
}
})
this.initChart5('.chart10', this.typeList)
} else {
this.total = 0
this.typeList = []
}
}
})

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

@@ -3,9 +3,9 @@
<div class="pdgrid-title">
<h2>{{ currGird }}</h2>
</div>
<!-- <div class="pdgrid-grid__title" @click="isShowGrid2 = true">
<div class="pdgrid-grid__title" @click="isShowGrid2 = true">
<h2 :title="girdName2">{{ girdName2 }}</h2>
</div> -->
</div>
<div class="pdgrid-body">
<div class="pdgrid-body__item" @click="isShowGrid3 = true">
<h2>{{ girdNum3 || 0 }}</h2>
@@ -38,14 +38,15 @@
<div class="grid-container">
<h2 :title="girdName2">{{ girdName2 }}</h2>
<div class="grid-list">
<div
<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>
</div>
@@ -120,6 +121,7 @@
isShowGrid4: false,
isShowGrid5: false,
currIndex2: 0,
girdId1: '',
currIndex3: 0,
currIndex4: 0,
currIndex5: 0,
@@ -134,7 +136,8 @@
girdNum3: 0,
girdNum4: 0,
girdNum5: 0,
currGird: ''
currGird: '',
girdName1: ''
}
},
@@ -159,9 +162,9 @@
}
},
onGrid2Click (item, index) {
this.currIndex2 = index
this.girdName2 = item.girdName
onGrid2Click (id, name) {
// this.currIndex2 = index
// this.girdName2 = item.girdName
this.currIndex3 = -1
this.currIndex4 = -1
this.currIndex5 = -1
@@ -169,10 +172,10 @@
this.girdInfoList3 = []
this.girdInfoList4 = []
this.girdInfoList5 = []
this.$emit('nodeClick', item.id)
this.$emit('nodeClick', id)
this.currGird = item.girdName
this.getInfo(item.id)
this.currGird = name
this.getInfo(id)
},
onGrid3Click (item, index) {
@@ -234,6 +237,11 @@
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)

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

@@ -131,9 +131,9 @@
}, 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,
@@ -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,7 +12,8 @@
</template>
<template #content>
<div class="detail-content__wrapper">
<ai-card class="detail-content__wrapper--left" title="基础信息">
<div class="detail-content__wrapper--left">
<ai-card title="基础信息">
<template #content>
<ai-wrapper>
<ai-info-item label="上报人员" :value="detail.name"></ai-info-item>
@@ -31,12 +32,14 @@
</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',

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',
@@ -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 {

View File

@@ -77,7 +77,7 @@
{ prop: 'district', label: '区级', align: 'center' },
{ prop: 'town', label: '镇级', align: 'center' },
{ prop: 'village', label: '村级', align: 'center' },
{ prop: 'level', label: '等级', align: 'center', formart: v => this.dict.getLabel('epidemicDangerousAreaLevel', v) },
{ prop: 'level', label: '等级', align: 'center', format: v => this.dict.getLabel('epidemicDangerousAreaLevel', v) },
{ prop: 'createTime', label: '设置时间', align: 'center' },
{ prop: 'createUserName', label: '添加人', align: 'center' },
{ slot: 'options', label: '操作', align: 'center' }

View File

@@ -62,6 +62,7 @@
<script>
import {mapState} from "vuex";
import AddVaccination from "./addVaccination";
import {ID} from "dui/lib/js/utils";
export default {
name: "AppVaccination",
@@ -108,7 +109,7 @@ export default {
{label: "出生日期", prop: "birthday", align: 'center'},
{
label: "身份证号", width: "160px", align: 'center',
render: (h, {row}) => h('span', null, this.idCardNoUtil.hideId(row.idNumber))
render: (h, {row}) => h('span', null, ID.hideId(row.idNumber))
},
{label: "所属地区", prop: "areaName", align: 'center'},
{label: "住址", prop: "address", width: "200px", align: 'center'},
@@ -170,7 +171,7 @@ export default {
.AppVaccination {
height: 100%;
::v-deep .dataPane {
:deep( .dataPane ){
flex: 1;
min-width: 0;
background: #FFFFFF;
@@ -188,7 +189,7 @@ export default {
}
}
::v-deep .mainPane {
:deep( .mainPane ){
background: #fff;
padding: 12px 16px;
box-shadow: 0 4px 6px -2px rgba(15, 15, 21, 0.15);

View File

@@ -82,6 +82,7 @@
<script>
import {mapState} from "vuex";
import {ID} from "dui/lib/js/utils";
export default {
name: "addVaccination",
@@ -183,9 +184,9 @@ export default {
this.form = {...this.form, name, idNumber, phone, areaId, address}
},
getInfoByIdNumber(code) {
if (this.idCardNoUtil.checkIdCardNo(code)) {
let info = this.idCardNoUtil.getIdCardInfo(code)
this.form.sex = this.dict.getValue('sex', info.gender)
if (ID.check(code)) {
let info = new ID(code)
this.form.sex = info.sex
this.form.birthday = info.birthday
this.$forceUpdate()
}
@@ -205,7 +206,7 @@ export default {
.addVaccination {
height: 100%;
::v-deep .ai-card__body, .el-form {
:deep( .ai-card__body), .el-form {
display: flex;
flex-wrap: wrap;
}
@@ -226,7 +227,7 @@ export default {
}
}
::v-deep .el-button {
:deep( .el-button ){
.iconfont {
color: inherit
}

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