diff --git a/api/index.js b/api/index.js index 0ce4690..a84dcc7 100644 --- a/api/index.js +++ b/api/index.js @@ -108,3 +108,34 @@ export const getPromiseView = (params) => post("/app/corppromise/goEdit", params export const setPromiseIsRead = (params) => post("/app/corppromise/editIsRead", params); // 承诺书设置阅读状态 export const editHiddenIspunish = (params) => post("/app/keyprojectcheck/editHiddenIspunish", params); // 修改隐患信息 export const getPERSONNELMANAGEMENTID = (params) => post("/app/keyProjects/goEdit", params); // 重点工程默认回显负责人 +// 以下接口八项作业流程使用 +export const getCorpList = (params) => post("/app/util/getCorp", params) //获取公司列表 +export const getConfinedSpaceSelectList = (params) => post("/app/csSpe/getSpace", params) //获取受限空间名称选择列表 +export const getConfinedSpaceGasInfo = (params) => post("/app/csSpe/getGasInfo",params) //获取受限空间气体检测详情 +export const setConfinedSpaceGasInfoSave = (params) => post("/app/csSpe/initGas", params) //受限空间气体检测详情保存 +export const setConfinedSpaceGasDelete = (params) => post("/app/csSpe/deleteGas", params) //保存受限空间气体检测删除 +export const getHotWorkGasAll = (params) => post("/app/elSpe/getAll", params) // 获取动火作业的所有受限空间气体检测数据 +export const getHotWorkGasInfo = (params) => post("/app/elSpe/getInfo", params) //获取动火作业的受限空间气体检测详情 +export const getHotWorkGasInfoSave = (params) => post("/app/elSpe/init", params) //获取动火作业的受限空间气体检测详情保存 +export const getHotWorkGasDelete = (params) => post("/app/elSpe/delete", params) // 动火作业的受限空间气体检测删除 +export const setHotWorkRecord = (params) => post("/app/deHw/initRecord", params) // 动火作业延迟监火保存记录 +export const deleteHotWorkRecord = (params) => post("/app/deHw/deleteRecord", params) //获取动火作业的受限空间气体检测详情 +export const getHotWorkRecord = (params) => post("/app/deHw/getRecords", params) //获取动火作业的受限空间气体检测详情保存 +export const getOtherAssignmentsSelectList = (params) => post("/app/Task/getAllUnEndList", params) //关联的其他特殊作业及安全作业票编号选择列表 +export const getRiskIdentificationResultsSelectList = (params) => post("/app/eightWork/getInfo", params) //风险辨识结果选择列表 +export const getHotWorkMethodSelectList = (params) => post("/app/util/getDicList", params) // 动火方法选择列表 +export const getQyDicList = (params) => post("/app/util/otherSysDic", params) // 动火方法选择列表 +export const setTaskSave = (params) => post("/app/Task/init", params) //八项作业、隐患整改、安全环保检查任务保存更新接口 +export const getCurrentNextOperation = (params) => post("/app/Task/getSupplementInfo", params) //获取当前任务的下一步操作 +export const addFormInfo = (params) => post("/app/Task/addSupplementInfo", params) //审批过程中添加其他信息 +export const getDepartmentTree = (params) => post("/app/util/getDepartmentTree", params) //获取部门树 +export const getUserList = (params) => post("/app/util/getUserList", params) //获取人员 +export const getToDoTaskList = (params) => post("/app/Task/getAllList", params) //获取待办列表 +export const getTaskTechnologicalProcess = (params) => post("/app/Task/getAgencyList", params) //获取流程 +export const getTaskInfo = (params) => post("/app/Task/getInfo", params) //查看信息 +export const setTaskFile = (params) => upload("/app/util/uploadFile", params) //上传文件 +export const setTaskSign = (params) => post("/app/Task/sign", params) //审批意见签字提交 +export const setSecurityMeasuresSave = (params) => post("/app/Task/setQues", params) //安全措施提交 +export const setOtherSecurityMeasuresSave = (params) => post("/app/Task/setOtherQues", params) //其它安全措施提交 +export const getHistoricalApprovalRecords = (params) => post("/app/Task/getHis", params); // 历史审批记录 +// 结束 diff --git a/components/other-select/index.vue b/components/other-select/index.vue new file mode 100644 index 0000000..c71159f --- /dev/null +++ b/components/other-select/index.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/pages/eight_assignments/blind_board/apply.vue b/pages/eight_assignments/blind_board/apply.vue new file mode 100644 index 0000000..ba30b93 --- /dev/null +++ b/pages/eight_assignments/blind_board/apply.vue @@ -0,0 +1,367 @@ + + + + + diff --git a/pages/eight_assignments/break_ground/apply.vue b/pages/eight_assignments/break_ground/apply.vue new file mode 100644 index 0000000..4615a3a --- /dev/null +++ b/pages/eight_assignments/break_ground/apply.vue @@ -0,0 +1,259 @@ + + + + + diff --git a/pages/eight_assignments/completed_list.vue b/pages/eight_assignments/completed_list.vue new file mode 100644 index 0000000..bbc141b --- /dev/null +++ b/pages/eight_assignments/completed_list.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/pages/eight_assignments/confined_space/apply.vue b/pages/eight_assignments/confined_space/apply.vue new file mode 100644 index 0000000..e446473 --- /dev/null +++ b/pages/eight_assignments/confined_space/apply.vue @@ -0,0 +1,248 @@ + + + + + diff --git a/pages/eight_assignments/confined_space/gas/add.vue b/pages/eight_assignments/confined_space/gas/add.vue new file mode 100644 index 0000000..2093eb4 --- /dev/null +++ b/pages/eight_assignments/confined_space/gas/add.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/pages/eight_assignments/confined_space/gas/list.vue b/pages/eight_assignments/confined_space/gas/list.vue new file mode 100644 index 0000000..0a711de --- /dev/null +++ b/pages/eight_assignments/confined_space/gas/list.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/pages/eight_assignments/confined_space/gas/name.vue b/pages/eight_assignments/confined_space/gas/name.vue new file mode 100644 index 0000000..0a4df94 --- /dev/null +++ b/pages/eight_assignments/confined_space/gas/name.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/pages/eight_assignments/cut_road/apply.vue b/pages/eight_assignments/cut_road/apply.vue new file mode 100644 index 0000000..9b0f9f7 --- /dev/null +++ b/pages/eight_assignments/cut_road/apply.vue @@ -0,0 +1,259 @@ + + + + + diff --git a/pages/eight_assignments/electricity/apply.vue b/pages/eight_assignments/electricity/apply.vue new file mode 100644 index 0000000..c39fec9 --- /dev/null +++ b/pages/eight_assignments/electricity/apply.vue @@ -0,0 +1,273 @@ + + + + + diff --git a/pages/eight_assignments/high_work/apply.vue b/pages/eight_assignments/high_work/apply.vue new file mode 100644 index 0000000..0d1de51 --- /dev/null +++ b/pages/eight_assignments/high_work/apply.vue @@ -0,0 +1,247 @@ + + + + + diff --git a/pages/eight_assignments/historical_approval_records.vue b/pages/eight_assignments/historical_approval_records.vue new file mode 100644 index 0000000..1ce49f1 --- /dev/null +++ b/pages/eight_assignments/historical_approval_records.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/pages/eight_assignments/hoisting/apply.vue b/pages/eight_assignments/hoisting/apply.vue new file mode 100644 index 0000000..50ba805 --- /dev/null +++ b/pages/eight_assignments/hoisting/apply.vue @@ -0,0 +1,266 @@ + + + + + diff --git a/pages/eight_assignments/hot_work/apply.vue b/pages/eight_assignments/hot_work/apply.vue new file mode 100644 index 0000000..61428e9 --- /dev/null +++ b/pages/eight_assignments/hot_work/apply.vue @@ -0,0 +1,276 @@ + + + + + diff --git a/pages/eight_assignments/hot_work/delay_fire_monitoring/add.vue b/pages/eight_assignments/hot_work/delay_fire_monitoring/add.vue new file mode 100644 index 0000000..234e782 --- /dev/null +++ b/pages/eight_assignments/hot_work/delay_fire_monitoring/add.vue @@ -0,0 +1,122 @@ + + + + diff --git a/pages/eight_assignments/hot_work/delay_fire_monitoring/delay.vue b/pages/eight_assignments/hot_work/delay_fire_monitoring/delay.vue new file mode 100644 index 0000000..95f6351 --- /dev/null +++ b/pages/eight_assignments/hot_work/delay_fire_monitoring/delay.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/pages/eight_assignments/hot_work/delay_fire_monitoring/detail.vue b/pages/eight_assignments/hot_work/delay_fire_monitoring/detail.vue new file mode 100644 index 0000000..41ebe4f --- /dev/null +++ b/pages/eight_assignments/hot_work/delay_fire_monitoring/detail.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/pages/eight_assignments/hot_work/delay_fire_monitoring/list.vue b/pages/eight_assignments/hot_work/delay_fire_monitoring/list.vue new file mode 100644 index 0000000..3fcb746 --- /dev/null +++ b/pages/eight_assignments/hot_work/delay_fire_monitoring/list.vue @@ -0,0 +1,125 @@ + + + + + + diff --git a/pages/eight_assignments/hot_work/delay_fire_monitoring/task_forward.vue b/pages/eight_assignments/hot_work/delay_fire_monitoring/task_forward.vue new file mode 100644 index 0000000..2d22251 --- /dev/null +++ b/pages/eight_assignments/hot_work/delay_fire_monitoring/task_forward.vue @@ -0,0 +1,95 @@ + + + + + + diff --git a/pages/eight_assignments/hot_work/gas/add.vue b/pages/eight_assignments/hot_work/gas/add.vue new file mode 100644 index 0000000..97a2d8e --- /dev/null +++ b/pages/eight_assignments/hot_work/gas/add.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/pages/eight_assignments/hot_work/gas/list.vue b/pages/eight_assignments/hot_work/gas/list.vue new file mode 100644 index 0000000..c197ea8 --- /dev/null +++ b/pages/eight_assignments/hot_work/gas/list.vue @@ -0,0 +1,94 @@ + + + diff --git a/pages/eight_assignments/hot_work/gas/name.vue b/pages/eight_assignments/hot_work/gas/name.vue new file mode 100644 index 0000000..a45b337 --- /dev/null +++ b/pages/eight_assignments/hot_work/gas/name.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/pages/eight_assignments/hot_work/select_operator.vue b/pages/eight_assignments/hot_work/select_operator.vue new file mode 100644 index 0000000..3580f00 --- /dev/null +++ b/pages/eight_assignments/hot_work/select_operator.vue @@ -0,0 +1,174 @@ + + + + + diff --git a/pages/eight_assignments/index.vue b/pages/eight_assignments/index.vue new file mode 100644 index 0000000..2864168 --- /dev/null +++ b/pages/eight_assignments/index.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/pages/eight_assignments/other_security_measures.vue b/pages/eight_assignments/other_security_measures.vue new file mode 100644 index 0000000..1bb658b --- /dev/null +++ b/pages/eight_assignments/other_security_measures.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/pages/eight_assignments/security_measures.vue b/pages/eight_assignments/security_measures.vue new file mode 100644 index 0000000..ce33c72 --- /dev/null +++ b/pages/eight_assignments/security_measures.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/pages/eight_assignments/select_corp_info.vue b/pages/eight_assignments/select_corp_info.vue new file mode 100644 index 0000000..7c49f20 --- /dev/null +++ b/pages/eight_assignments/select_corp_info.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/pages/eight_assignments/select_department.vue b/pages/eight_assignments/select_department.vue new file mode 100644 index 0000000..155a9b1 --- /dev/null +++ b/pages/eight_assignments/select_department.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/pages/eight_assignments/select_review_personnel.vue b/pages/eight_assignments/select_review_personnel.vue new file mode 100644 index 0000000..a01b4fe --- /dev/null +++ b/pages/eight_assignments/select_review_personnel.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/pages/eight_assignments/sign.vue b/pages/eight_assignments/sign.vue new file mode 100644 index 0000000..ddc8d3d --- /dev/null +++ b/pages/eight_assignments/sign.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/pages/eight_assignments/subordinate_index.vue b/pages/eight_assignments/subordinate_index.vue new file mode 100644 index 0000000..5a6ee3e --- /dev/null +++ b/pages/eight_assignments/subordinate_index.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/pages/eight_assignments/technological_process.vue b/pages/eight_assignments/technological_process.vue new file mode 100644 index 0000000..b508ae0 --- /dev/null +++ b/pages/eight_assignments/technological_process.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/pages/eight_assignments/to_do_list.vue b/pages/eight_assignments/to_do_list.vue new file mode 100644 index 0000000..338ac6b --- /dev/null +++ b/pages/eight_assignments/to_do_list.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/pages/eight_assignments/view_info.vue b/pages/eight_assignments/view_info.vue new file mode 100644 index 0000000..56e562c --- /dev/null +++ b/pages/eight_assignments/view_info.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/pages/index/index.vue b/pages/index/index.vue index 4c74163..df9a0be 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -178,6 +178,11 @@ title: '秦港站内信', url: '/pages/information/index/index' }, + { + img: require('../../static/icon-apps/app_icons6.png'), + title: '高危作业', + url: '/pages/eight_assignments/index' + }, ], isPromiseUnsigned: false } diff --git a/pages/map/index.vue b/pages/map/index.vue new file mode 100644 index 0000000..e3d2479 --- /dev/null +++ b/pages/map/index.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/static/icon-apps/app_icons6.png b/static/icon-apps/app_icons6.png new file mode 100644 index 0000000..14d581e Binary files /dev/null and b/static/icon-apps/app_icons6.png differ diff --git a/static/icon-apps/i1.png b/static/icon-apps/i1.png new file mode 100644 index 0000000..e554051 Binary files /dev/null and b/static/icon-apps/i1.png differ diff --git a/static/icon-apps/i10.png b/static/icon-apps/i10.png new file mode 100644 index 0000000..c80f00c Binary files /dev/null and b/static/icon-apps/i10.png differ diff --git a/static/icon-apps/i11.png b/static/icon-apps/i11.png new file mode 100644 index 0000000..b50446c Binary files /dev/null and b/static/icon-apps/i11.png differ diff --git a/static/icon-apps/i12.png b/static/icon-apps/i12.png new file mode 100644 index 0000000..10fb431 Binary files /dev/null and b/static/icon-apps/i12.png differ diff --git a/static/icon-apps/i13.png b/static/icon-apps/i13.png new file mode 100644 index 0000000..47c253d Binary files /dev/null and b/static/icon-apps/i13.png differ diff --git a/static/icon-apps/i14.png b/static/icon-apps/i14.png new file mode 100644 index 0000000..7a882b6 Binary files /dev/null and b/static/icon-apps/i14.png differ diff --git a/static/icon-apps/i15.png b/static/icon-apps/i15.png new file mode 100644 index 0000000..0b2a1ad Binary files /dev/null and b/static/icon-apps/i15.png differ diff --git a/static/icon-apps/i2.png b/static/icon-apps/i2.png new file mode 100644 index 0000000..700886b Binary files /dev/null and b/static/icon-apps/i2.png differ diff --git a/static/icon-apps/i3.png b/static/icon-apps/i3.png new file mode 100644 index 0000000..87f1ba6 Binary files /dev/null and b/static/icon-apps/i3.png differ diff --git a/static/icon-apps/i4.png b/static/icon-apps/i4.png new file mode 100644 index 0000000..5654535 Binary files /dev/null and b/static/icon-apps/i4.png differ diff --git a/static/icon-apps/i5.png b/static/icon-apps/i5.png new file mode 100644 index 0000000..bff4090 Binary files /dev/null and b/static/icon-apps/i5.png differ diff --git a/static/icon-apps/i6.png b/static/icon-apps/i6.png new file mode 100644 index 0000000..29ccb09 Binary files /dev/null and b/static/icon-apps/i6.png differ diff --git a/static/icon-apps/i7.png b/static/icon-apps/i7.png new file mode 100644 index 0000000..4bd9b37 Binary files /dev/null and b/static/icon-apps/i7.png differ diff --git a/static/icon-apps/i8.png b/static/icon-apps/i8.png new file mode 100644 index 0000000..993bf41 Binary files /dev/null and b/static/icon-apps/i8.png differ diff --git a/static/icon-apps/i9.png b/static/icon-apps/i9.png new file mode 100644 index 0000000..20e98f2 Binary files /dev/null and b/static/icon-apps/i9.png differ diff --git a/uni_modules/next-tree/changelog.md b/uni_modules/next-tree/changelog.md new file mode 100644 index 0000000..0e31f4b --- /dev/null +++ b/uni_modules/next-tree/changelog.md @@ -0,0 +1,173 @@ +## 1.8.9(2024-06-28) +完善说明文件 +## 1.8.8(2024-06-21) +更新插件 +## 1.8.7(2024-05-08) +fix bug +## 1.8.6(2024-04-07) +功能更新 +## 1.8.5(2024-04-07) +修复bug +## 1.8.3(2024-04-06) +update +## 1.8.2(2024-04-06) +update +## 1.8.1(2024-04-06) +fix bug +## 1.8.0(2024-04-03) +优化 +## 1.7.9(2024-04-03) +优化编辑tree功能 +## 1.7.8(2024-04-02) +超集功能上线 +## 1.7.7(2024-03-26) +增加expandedMode=singe +## 1.7.6(2024-02-27) +修复特殊字符的处理方法 +## 1.7.5(2024-02-26) +增加无子节点的父节点配置 +## 1.7.4(2024-02-05) +修复vue2,语法使用问题 +## 1.7.3(2024-02-05) +修复vue2,插槽不显示bug +## 1.7.2(2024-02-05) +优化大数据的性能 +## 1.7.1(2024-01-25) +优化功能说明 +## 1.7.0(2024-01-24) +增加expandedKeys默认展开项目,配置 +## 1.6.9(2024-01-23) +增加change事件 +## 1.6.8(2024-01-22) +搜索模式下,不再响应展开收起逻辑 +## 1.6.7(2024-01-04) +修复异步加载节点搜索展示bug +## 1.6.6(2023-12-29) +修复next-tree异步加载节点关闭bug +## 1.6.5(2023-12-21) +fix bug +## 1.6.4(2023-12-21) +fix bug +## 1.6.3(2023-12-21) +更新vue2版本说明文档 +## 1.6.2(2023-12-21) +修复说明文档 +## 1.6.1(2023-12-18) +增加empty插槽 +## 1.6.0(2023-12-18) +增加empty插槽 +## 1.5.9(2023-12-15) +修改说明文件 +## 1.5.8(2023-12-15) +修复changeVerify函数单选时,返回参数bug +## 1.5.7(2023-12-14) +修复checkStrictlyModel === 'strong'的bug +## 1.5.6(2023-12-13) +代码优化 +## 1.5.5(2023-12-13) +优化changeVerify的使用 +## 1.5.4(2023-12-12) +修复提示层级问题 +## 1.5.3(2023-12-12) +优化uiMode=page模式下的使用 +## 1.5.2(2023-12-11) +增加uiMode配置,实现页面模式展示 +## 1.5.1(2023-12-06) +更新说明 +## 1.5.0(2023-12-06) +更新插件使用注意事项 +## 1.4.9(2023-12-01) +增加topBar插槽 +## 1.4.8(2023-11-30) +增加changeVerify验证函数,实现change的各种控制 +## 1.4.7(2023-11-30) +增加弹层容器高度可配置 +## 1.4.6(2023-11-28) +修复bug +## 1.4.5(2023-11-28) +修复disabled是,需要显示灰色不可操作 +## 1.4.4(2023-11-28) +增加说明 +## 1.4.3(2023-11-28) +增加主题配置 +## 1.4.2(2023-11-28) +增加异步加载时,子节点说明 +## 1.4.1(2023-11-27) +修复说明bug +## 1.4.0(2023-11-27) +next-tree 全面说明文档 +## 1.3.6(2023-11-27) +增加远程加载loadData,全面实现全功能覆盖 +## 1.3.5(2023-11-27) +增加title的定义 +## 1.3.4(2023-11-27) +增加title支持自定义定制 +## 1.3.3(2023-11-21) +增加搜索模式searchModel=depHighlight模式,从属高亮显示模式 +## 1.3.2(2023-11-20) +修复valueKey设置bug +## 1.3.1(2023-11-17) +增加说明文件,和demo +## 1.3.0(2023-11-17) +修复clear时不支持关联模式的设置 +## 1.2.9(2023-11-17) +增加checkStrictlyModel模式设置,强关联,和弱关联 +## 1.2.8(2023-11-16) +增加next-tree的辅助线模式 +## 1.2.7(2023-11-16) +优化next-tree +## 1.2.6(2023-11-16) +修复搜索时,隐藏未打开的数据 +## 1.2.5(2023-11-16) +修复搜索无法点击,和级联半选不生效问题 +## 1.2.4(2023-11-16) +更新新功能插件使用说明 +## 1.2.3(2023-11-16) +增加插槽模式,只是高ui要求定制 +## 1.2.2(2023-11-15) +修复checkStrictly配置下,子关联父的选择状态 +## 1.2.1(2023-11-15) +增加半选提示功能配置showHalfCheckedTips +## 1.2.0(2023-11-14) +修复disabled配置状态下,父子级联,不需要改变disabled设置项的选择状态 +## 1.1.9(2023-11-13) +增强大数据量体验交互,增加筛选搜索模式 +## 1.1.8(2023-11-13) +增加清除clear和取消cancel事件 +## 1.1.7(2023-11-08) +更新next-tree插件功能清单说明 +## 1.1.6(2023-11-07) +update说明文档 +## 1.1.5(2023-11-07) +update +## 1.1.4(2023-11-07) +更新readme.md说明 +## 1.1.3(2023-11-07) +更新说明demo +## 1.1.2(2023-11-07) +增加子节点按需渲染演示demo +## 1.1.1(2023-11-07) +增加清空功能 +## 1.1.0(2023-11-07) +增加子孙节点按需渲染,扩展本插件支持大数据量渲染; +## 1.0.9(2023-10-26) +增加文件说明 +## 1.0.8(2023-09-14) +增加禁用节点属性配置disabledKey +## 1.0.7(2023-09-06) +增加checkStrictly,实现父子节点关联 +## 1.0.6(2023-09-06) +更新vue2使用过程视图不更新的技术说明 +## 1.0.5(2023-09-06) +修复说明文档 +## 1.0.4(2023-06-19) +修改demo +## 1.0.3(2023-06-19) +更新vue2的使用demo +## 1.0.2(2023-06-19) +修复说明文档 + +## 1.0.1(2023-05-10) +更新说明文件 +## 1.0.0(2023-05-09) +初始化项目 diff --git a/uni_modules/next-tree/components/next-tree/next-tree.vue b/uni_modules/next-tree/components/next-tree/next-tree.vue new file mode 100644 index 0000000..e31d073 --- /dev/null +++ b/uni_modules/next-tree/components/next-tree/next-tree.vue @@ -0,0 +1,1043 @@ + + + + + diff --git a/uni_modules/next-tree/components/next-tree/style.css b/uni_modules/next-tree/components/next-tree/style.css new file mode 100644 index 0000000..3ae61fc --- /dev/null +++ b/uni_modules/next-tree/components/next-tree/style.css @@ -0,0 +1,272 @@ +@font-face { + font-family: 'iconfont'; + src: url('//at.alicdn.com/t/c/font_4110624_qs48wckazsh.ttf?t=1712479573821') format('truetype'); +} +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.iconfont { + font-family: iconfont; + font-style: normal; +} +.iconfont-loading { + font-family: iconfont; + display: inline-block; + font-style: normal; + animation: spin 1s linear infinite; +} +.next-tree-mask { + position: fixed; + top: 0rpx; + right: 0rpx; + bottom: 0rpx; + left: 0rpx; + z-index: 997; + background-color: rgba(0, 0, 0, 0.6); + opacity: 0; + transition: all 0.3s ease; + visibility: hidden; +} +.next-tree-mask.show { + visibility: visible; + opacity: 1; +} +.next-tree-cnt { + position: fixed; + top: 0rpx; + right: 0rpx; + bottom: 0rpx; + left: 0rpx; + z-index: 997; + top: 360rpx; + transition: all 0.3s ease; + transform: translateY(100%); +} +.next-tree-cnt.next-tree-cnt-page { + transition: none; +} +.next-tree-cnt.show { + transform: translateY(0); +} +.next-tree-bar { + background-color: #fff; + height: 72rpx; + padding-left: 20rpx; + padding-right: 20rpx; + display: flex; + justify-content: space-between; + align-items: center; + box-sizing: border-box; + border-bottom-width: 1rpx !important; + border-bottom-style: solid; + border-bottom-color: #f5f5f5; + font-size: 32rpx; + color: #757575; + line-height: 1; +} +.next-tree-bar-btns { + display: inline-block; + display: flex; + flex-direction: row; +} +.btn-divid { + display: inline-block; + width: 1px; + margin: 0 10px; + background-color: #ccc; +} +.next-tree-bar-confirm { + color: #f9ae3d; +} +.next-tree-view { + position: absolute; + top: 0rpx; + right: 0rpx; + bottom: 0rpx; + left: 0rpx; + top: 72rpx; + background-color: #fff; + padding-top: 20rpx; + padding-right: 20rpx; + padding-bottom: 20rpx; + padding-left: 20rpx; +} +.next-tree-view-sc { + height: 100%; + overflow: hidden; +} +.next-tree-view-sc .empty { + text-align: center; + color: #757575; + padding: 30rpx; +} +.next-tree-item-block { + +} +.next-tree-item { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 26rpx; + color: #757575; + line-height: 1; + height: 0; + opacity: 0; + transition: 0.2s; + position: relative; + overflow: hidden; +} +.next-tree-item .icon-btn { + font-size: 30rpx; + margin-right: 20rpx; +} +.next-tree-item .left-line { + position: relative; + width: 1rpx; + height: 100%; + box-sizing: border-box; +} +.next-tree-item .left-line::before { + position: absolute; + content: ""; + width: 1rpx; + height: 100%; + background-color: rgba(204,204,204,0.9); + box-sizing: border-box; + + left: -18rpx; +} +.next-tree-item .parent-horizontal-line { + width: 1rpx; + height: 100%; + position: absolute; + top: 0; + left: 0rpx; + box-sizing: border-box; + background-color: rgba(204,204,204,0.9); +} +.next-tree-item .left-line .horizontal-line { + width: 20rpx; + height: 1rpx; + position: absolute; + top: 40rpx; + left: 0rpx; + background-color: rgba(204,204,204,0.9); + box-sizing: border-box; +} + +.next-tree-item.show { + min-height: 80rpx; + margin-top: 10rpx; + height: 100%; + opacity: 1; +} +.next-tree-item.showchild:before { + transform: rotate(90deg); +} +.next-tree-item.border { + border-bottom: 1rpx solid rgba(204,204,204,0.2); +} +.next-tree-item.last:before { + opacity: 0; +} +.next-tree-item.disabled { + color: #ccc!important; +} + +.next-tree-icon { + width: 26rpx; + height: 26rpx; + margin-right: 8rpx; +} +.next-tree-label { + flex: 1; + display: flex; + align-items: center; + height: 100%; + line-height: 1.2; +} +.next-tree-label .label-input { + border: 1rpx solid #f0f0f0; + border-radius: 10rpx; + width: 100%; + padding: 12rpx 18rpx; + margin-right: 30rpx; +} +.next-tree-check { + width: 40px; + height: 40px; + display: flex; + justify-content: center; + align-items: center; +} +.next-tree-check-yes, +.next-tree-check-no { + width: 20px; + height: 20px; + border-top-left-radius: 20%; + border-top-right-radius: 20%; + border-bottom-right-radius: 20%; + border-bottom-left-radius: 20%; + border-top-width: 1rpx; + border-left-width: 1rpx; + border-bottom-width: 1rpx; + border-right-width: 1rpx; + border-style: solid; + border-color: #f9ae3d; + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; +} +.next-tree-check-yes-b { + border-top-left-radius: 20%; + border-top-right-radius: 20%; + border-bottom-right-radius: 20%; + border-bottom-left-radius: 20%; + background-color: #f9ae3d; + color: #fff; +} +.next-tree-check-yes-b .icon-text { + font-size: 14px; + font-weight: normal; + font-family: uicon-iconfont; + display: flex; + flex-direction: row; + align-items: center; +} +.next-tree-check .radio { + border-top-left-radius: 50%; + border-top-right-radius: 50%; + border-bottom-right-radius: 50%; + border-bottom-left-radius: 50%; +} +.next-tree-check .radio .next-tree-check-yes-b { + border-top-left-radius: 50%; + border-top-right-radius: 50%; + border-bottom-right-radius: 50%; + border-bottom-left-radius: 50%; +} + +.next-tree-item.disabled .next-tree-check-no { + color: #ccc!important; +} +.next-tree-item.disabled .next-tree-check-yes-b { + background-color: #ccc!important; +} +.hover-c { + opacity: 0.6; +} + +.fixed-bottom-bar { + border-top: 1px solid #ccc; + position: fixed; + bottom: 0rpx; + left: 0rpx; + right: 0rpx; + z-index: 998; +} + + diff --git a/uni_modules/next-tree/package.json b/uni_modules/next-tree/package.json new file mode 100644 index 0000000..aa676f8 --- /dev/null +++ b/uni_modules/next-tree/package.json @@ -0,0 +1,84 @@ +{ + "id": "next-tree", + "displayName": "next-tree(超强树选择器、树组件、树插件、无限级联树、单选树、多选树、自定义样式树、树形选择器)", + "version": "1.8.9", + "description": "next-tree 弹窗树形选择器,支持多选,支持大数据, 无限级联,单选,父子级级联,远程/ajax加载,子节点增量/异步渲染,自定义样式定制,具名插槽等;支持h5/小程序/APP,全端通用", + "keywords": [ + "树选择", + "tree", + "弹窗树选择器", + "多选树", + "单选树" +], +"engines": { + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "修改版本说明", + "permissions": "无" + }, + "npmurl": "", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["next-search-more"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "n", + "Edge": "y", + "Firefox": "y", + "Safari": "u" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "u", + "QQ": "y", + "钉钉": "y", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} diff --git a/uni_modules/next-tree/readme.md b/uni_modules/next-tree/readme.md new file mode 100644 index 0000000..3d6d61d --- /dev/null +++ b/uni_modules/next-tree/readme.md @@ -0,0 +1,843 @@ + +## next-tree --下拉树 + +> 遇到问题或有建议可以加入QQ群(455948571)反馈 +> 如果觉得组件不错,给五星鼓励鼓励咯! + +## 亮点功能说明(打造你不得不用的好插件) + +### 本插件自1.5.0版本后支持一下功能 + + > 1.大数据量渲染(本插件智能判断,如果子孙集数据量大于50时,会响应等待渲染视图;) + > 2.子节点按需渲染(自动启用,无需配置) + > 3.父子级联选择设置 + > 4.单选多选设置 + > 5.父节点是否可选设置 + > 6.回显默认选中值 + > 7.不可选项disabled设置 + > 8.增强大数据量体验交互,增加筛选搜索模式 + > 9.增强样式定制,提供自定义插槽,实现高要求样式定制 + > 10.增加辅助线模式,外观更加精美 + > 11.支持动态配置title + > 12.支持搜索模式searchModel=depHighlight模式,从属高亮显示模式 + > 13.支持异步加载子节点,ajax加载子节点 + > 14.增加可配置主题,自由定制插件主题颜色 + > 15.支持动态校验,可以进行提示控制校验 + > 16.支持页面模式/弹层模式,可以进行单页面展示或者弹层展示 + > 17.支持半选提示状态显示 + > 18.支持展开项expandedKeys配置 + > 19.全面支持vue2/vue3 + > 20.增加无子节点的父节点配置支持(当item[childrenKey]为null时,代表无子节点的父节点) + > 21.终极支持超数据量使用,增加展开模式配置单链路配置使用expandedMode=singe,使得ui组件使用进一步不在限制与数据量 + > 22.功能模式再次增强,支持单选tree,多选tree,编辑tree,展示tree; + +## 注意 + +### 作者不介意你对组件源码进行改造使用,为了开源更加高效,谢谢你的配合;为了节省不必要的沟通浪费,以下情况请不要再反馈给作者,请自行解决; +### 在这感各位的理解,我支持开源,但是作者时间有限;谢谢各位的配合;在这里期望我写的小小插件能为你提供便捷; + + > 1.如果你对源码进行了修改使用,请不需要对作者做任何的反馈,作者确实没有空陪你做技术分析解答; + > 2.如果你引入插件,连插件是否有正常被uniapp框架识别解析都不清楚,请你换个插件使用; + > 3.如果你引入插件,针对自己项目进行功能改造的,请自行仔细阅读源码并了解其原理,自行改造;这里作者不愿意浪费过多时间进行技术解答; + > 4.如果你不想进行全局加载next-tree,需要按需加载;next-tree中有相关依赖的组件,需要你自行在组件内部单独引入;依赖组件可以在package.json中找到; + > 5.理论上作者不再解决由于本地开发环境问题所导致的插件使用问题,请自行到uniapp官网学习解决; + +## 使用 +### 超集功能即将不对外开源; + +>[从uniapp插件市场导入](https://ext.dcloud.net.cn/plugin?name=next-tree) + +## 关注作者的动态 +[点击进入主页,关注作者](https://ask.dcloud.net.cn/people/ponder_7464) + +## 关注作者其他开源 + +npm开源包:[npm](https://www.npmjs.com/~lixueshiaa); +github开源项目:[github](https://github.com/lixueshiaa); + + +```html + +``` + +### vue3 + ts 使用 + +```ts + + + +``` + +### vue2 使用 +```html + +``` + +```js + + + +``` + +### 个性化自定义样式渲染 + +如果你的需求对样式需求比较高,请使用插槽模式渲染,本组件提供label插槽供你自定义定制; + +```js + +``` + +### 预览 +### +*** + +| 功能预览 | 父子级关联演示 | 全面支持大数据量,子孙节点ui按需渲染(按需渲染数据) | +| :------------------------------------------------------------------: | :------------------------------------------------------------------: | :------------------------------------------------------------------: | +| ![](https://lixueshiaa.github.io/webtest/www/static/next-tree.gif) | ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-b.gif) | ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-d.gif) | + + + +| 增强控件交互能力,增加筛选search模式,全面支持大数据量交互 | 超强的样式定制能力,满足你高精美组件的需求 | 打开精美的辅助线模式,让你的控件更加友好 | +| :------------------------------------------------------------------: | :------------------------------------------------------------------: | :------------------------------------------------------------------: | +| ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-e.gif) | ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-f.gif) | ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-u.gif) | + + +| 增加搜索模式searchModel=depHighlight模式,从属高亮显示模式 | 支持异步加载子节点,子树集,ajax远程加载数据等 | 支持不同主题的切换,ui定制更简单 | +| :------------------------------------------------------------------: | :------------------------------------------------------------------: | :------------------------------------------------------------------: | +| ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-p.gif) | ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-k.gif) | ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-n.gif) | + +| 增加验证函数和topBar插槽使得更加容易和组件进行交互 | 增加页面模式,支持整页ui展示模式 | 增加展开模式expandedMode配置,支持单链路展开,理论上支持几万数据量 | +| :------------------------------------------------------------------: | :------------------------------------------------------------------: | :------------------------------------------------------------------: | +| ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-cc.gif)| ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-uu.gif)| ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-aab.gif) | + + + +### 超集功能预览(增值功能) +### +| 实现tree的功能模式扩展,让你的tree组件实现可编辑态 | +| :--------------------------------------------------------------------: | +| ![](https://lixueshiaa.github.io/webtest/www/static/next-tree-eeee.gif)| + +## 参数 +可选参数属性列表 + +|参数名 |说明 |类型 |是否必填 |默认值 |可选值 | +|---- |---- |---- |---- |---- |----------------------- | +|uiMode |ui表现方式;popup<弹窗>, page<页面>;默认是 popup |String |是 |popup |page | +|funcMode |功能模式配置;display<展示模式>, edit<编辑模式>,checkbox<多选模式>, radio<单选模式>;默认是 radio |String |是 |radio |dispaly,edit,checkbox | +|treeData |树源数据列表 |Array |是 |[] |- | +|valueKey |绑定value的键属性(项的唯一key标识) |String |否 |id |- | +|labelKey |用于显示的字段 |String |否 |label |- | +|disabledKey |禁用节点绑定属性 |String |否 |disabled |- | +|childrenKey |子节点绑定属性 (注意:当item[childrenKey]的值设为null时,代表是无下级数据的父节点,即非叶子节点) |String |否 |children |- | +|title | 弹出标题(如果是函数时会返回所选项的值作为回调参数如;title: (checked):String => {}) |String, Function |否 |'' |- | +|selectParent |作用于funcMode=display模式下;是否可以选父级 |Boolean |否 |false |true | +|foldAll| 折叠时关闭所有已经打开的子集,再次打开时需要一级一级打开 |Boolean |否 |false |true | +|themeColor |主题颜色 |String |否 |#f9ae3d |- | +|cancelColor |取消按钮颜色 |String |否 |#757575 |- | +|titleColor |标题颜色 |String |否 |#757575 |- | +|border |是否有分割线 |Boolean |否 |false |true | +|checkStrictly|作用于funcMode=checkbox模式下; 状态下节点选择完全受控(父子节点选中状态不再关联) |Boolean |否 |false |true | +|checkStrictlyModel|作用于funcMode=checkbox模式下;父子节点关联模式:strong:强关联(不再受限节点的disabled控制),weak:弱关联(节点关联受disabled控制) |String |是 |weak |strong | +|showHalfCheckedTips|作用于funcMode=checkbox模式下; checkStrictly为false的状态下生效;父子节点选中状态不再关联,是否展示半选提示; |Boolean |否 |false |true | +|ifSearch| 筛选search模式 |Boolean |否 |true |false | +|searchModel| 搜索模式配置 depHighlight: 从属高亮(显示层级并高亮显示);common: 一般;remote: 远程 |String |否 |common |depHighlight | +|showAuxiliaryLine| 是否打开辅助线 |Boolean |否 |false |true | +|loadData| 异步加载函数 (node):Promise([childData]) => {} // demo有说明 |Function |否 |- |- | +|height| 只在uiMode=popup时生效;弹层容器的高度,默认是500 |Number |否 |500 |- | +|changeVerify|作用于funcMode=display模式下; 验证函数 (current as any, chooseList as any []):String => {} // 验证函数会把当前控件的选择值作为参数返给函数体,demo有说明 |Function |否 |- |- | +|expandedKeys| (Controlled) Specifies the keys of the expanded treeNodes 展开配置项,格式为[valueKey] |Array |否 |[] |- | +|expandedMode| 展开模式配置: common: 一般模式;singe: 单一模式; |String |否 |common |singe | + + +# Event 事件 +|事件名 |说明 |类型 |回调参数 | +|---- |---- |---- |---- | +|confirm|菜单收起时返回的筛选结果 |emit |array | +|clear|点击清除按钮时触发 |emit |- | +|cancel|关闭弹层和点击取消时触发 |emit |- | +|change|选项改变时触发 |emit |array | + +## Slot 插槽 + +|名称 |说明 |参数 | +|---- |---- |---- | +|label |label插槽 |data(当前项对于treeData里面的数据) | +|topBar |topBar插槽 |----滚动区域顶部topBar插槽 | +|bottomBar |bottomBar插槽 |----滚动区域底部bottomBar插槽 | +|fixedBottomBar |fixedBottomBar插槽 |----固定在页面的底部,使用fixed进行定位 | +|empty |empty插槽 |----数据为空的插槽 | + diff --git a/utils/gcoord.js b/utils/gcoord.js new file mode 100644 index 0000000..9c7bdaf --- /dev/null +++ b/utils/gcoord.js @@ -0,0 +1,216 @@ +/* @preserve + * gcoord 0.2.2, geographic coordinate library + * Copyright (c) 2019 Jiulong Hu + */ +!function (e, t) { + "object" == typeof exports && "undefined" != typeof module ? t(exports) : "function" == typeof define && define.amd ? define(["exports"], t) : t(e.gcoord = {}) +}(this, function (e) { + "use strict"; + var t = "WGS84", r = t, n = t, o = "GCJ02", a = o, i = "BD09", u = i, f = i, c = i, s = "BD09MC", l = s, + M = "EPSG3857", g = M, h = M, v = M, d = M; + + function m(e) { + throw new Error(e) + } + + function G(e) { + return !isNaN(e) && null !== e && !S(e) + } + + function S(e) { + return !!e && "[object Array]" === Object.prototype.toString.call(e) + } + + function P() { + for (var o = [], e = 0; e < arguments.length; e++) o[e] = arguments[e]; + var a = o.length - 1; + return function () { + for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; + for (var r = a, n = o[a].apply(null, e); r--;) n = o[r].call(null, n); + return n + } + } + + var b = Math.sin, y = Math.cos, p = Math.sqrt, B = Math.abs, D = Math.PI, C = 6378245, E = .006693421622965823; + + function W(e) { + var t = e[0], r = e[1]; + if (!J(t, r)) return [t, r]; + for (var n = [t, r], o = n[0], a = n[1], i = x([o, a]), u = i[0] - t, f = i[1] - r; 1e-6 < B(u) || 1e-6 < B(f);) u = (i = x([o -= u, a -= f]))[0] - t, f = i[1] - r; + return [o, a] + } + + function x(e) { + var t = e[0], r = e[1]; + if (!J(t, r)) return [t, r]; + var n = function (e, t) { + var r = function (e, t) { + var r = 300 + e + 2 * t + .1 * e * e + .1 * e * t + .1 * p(B(e)); + return r += 2 * (20 * b(6 * e * D) + 20 * b(2 * e * D)) / 3, r += 2 * (20 * b(e * D) + 40 * b(e / 3 * D)) / 3, r += 2 * (150 * b(e / 12 * D) + 300 * b(e / 30 * D)) / 3 + }(e - 105, t - 35), n = function (e, t) { + var r = 2 * e - 100 + 3 * t + .2 * t * t + .1 * e * t + .2 * p(B(e)); + return r += 2 * (20 * b(6 * e * D) + 20 * b(2 * e * D)) / 3, r += 2 * (20 * b(t * D) + 40 * b(t / 3 * D)) / 3, r += 2 * (160 * b(t / 12 * D) + 320 * b(t * D / 30)) / 3 + }(e - 105, t - 35), o = t / 180 * D, a = b(o), i = p(a = 1 - E * a * a); + return [r = 180 * r / (C / i * y(o) * D), n = 180 * n / (C * (1 - E) / (a * i) * D)] + }(t, r); + return [t + n[0], r + n[1]] + } + + function J(e, t) { + return 72.004 <= e && e <= 137.8347 && .8293 <= t && t <= 55.8271 + } + + var k = Math.sin, L = Math.cos, j = Math.atan2, I = Math.sqrt, q = 3e3 * Math.PI / 180; + + function w(e) { + var t = e[0] - .0065, r = e[1] - .006, n = I(t * t + r * r) - 2e-5 * k(r * q), o = j(r, t) - 3e-6 * L(t * q); + return [n * L(o), n * k(o)] + } + + function N(e) { + var t = e[0], r = e[1], n = I(t * t + r * r) + 2e-5 * k(r * q), o = j(r, t) + 3e-6 * L(t * q); + return [n * L(o) + .0065, n * k(o) + .006] + } + + var O = 180 / Math.PI, A = Math.PI / 180, F = 6378137, _ = 20037508.342789244; + + function z(e) { + return [e[0] * O / F, (.5 * Math.PI - 2 * Math.atan(Math.exp(-e[1] / F))) * O] + } + + function T(e) { + var t = Math.abs(e[0]) <= 180 ? e[0] : e[0] - 360 * (e[0] < 0 ? -1 : 1), + r = [F * t * A, F * Math.log(Math.tan(.25 * Math.PI + .5 * e[1] * A))]; + return r[0] > _ && (r[0] = _), r[0] < -_ && (r[0] = -_), r[1] > _ && (r[1] = _), r[1] < -_ && (r[1] = -_), r + } + + var U = Math.abs, H = Math.pow, K = [12890594.86, 8362377.87, 5591021, 3481989.83, 1678043.12, 0], + Q = [75, 60, 45, 30, 15, 0], + R = [[1.410526172116255e-8, 898305509648872e-20, -1.9939833816331, 200.9824383106796, -187.2403703815547, 91.6087516669843, -23.38765649603339, 2.57121317296198, -.03801003308653, 17337981.2], [-7.435856389565537e-9, 8983055097726239e-21, -.78625201886289, 96.32687599759846, -1.85204757529826, -59.36935905485877, 47.40033549296737, -16.50741931063887, 2.28786674699375, 10260144.86], [-3.030883460898826e-8, 898305509983578e-20, .30071316287616, 59.74293618442277, 7.357984074871, -25.38371002664745, 13.45380521110908, -3.29883767235584, .32710905363475, 6856817.37], [-1.981981304930552e-8, 8983055099779535e-21, .03278182852591, 40.31678527705744, .65659298677277, -4.44255534477492, .85341911805263, .12923347998204, -.04625736007561, 4482777.06], [3.09191371068437e-9, 8983055096812155e-21, 6995724062e-14, 23.10934304144901, -.00023663490511, -.6321817810242, -.00663494467273, .03430082397953, -.00466043876332, 2555164.4], [2.890871144776878e-9, 8983055095805407e-21, -3.068298e-8, 7.47137025468032, -353937994e-14, -.02145144861037, -1234426596e-14, .00010322952773, -323890364e-14, 826088.5]], + V = [[-.0015702102444, 111320.7020616939, 0x60e374c3105a3, -0x24bb4115e2e164, 0x5cc55543bb0ae8, -0x7ce070193f3784, 0x5e7ca61ddf8150, -0x261a578d8b24d0, 0x665d60f3742ca, 82.5], [.0008277824516172526, 111320.7020463578, 647795574.6671607, -4082003173.641316, 10774905663.51142, -15171875531.51559, 12053065338.62167, -5124939663.577472, 913311935.9512032, 67.5], [.00337398766765, 111320.7020202162, 4481351.045890365, -23393751.19931662, 79682215.47186455, -115964993.2797253, 97236711.15602145, -43661946.33752821, 8477230.501135234, 52.5], [.00220636496208, 111320.7020209128, 51751.86112841131, 3796837.749470245, 992013.7397791013, -1221952.21711287, 1340652.697009075, -620943.6990984312, 144416.9293806241, 37.5], [-.0003441963504368392, 111320.7020576856, 278.2353980772752, 2485758.690035394, 6070.750963243378, 54821.18345352118, 9540.606633304236, -2710.55326746645, 1405.483844121726, 22.5], [-.0003218135878613132, 111320.7020701615, .00369383431289, 823725.6402795718, .46104986909093, 2351.343141331292, 1.58060784298199, 8.77738589078284, .37238884252424, 7.45]]; + + function X(e, t, r) { + var n = U(t) / r[9], o = r[0] + r[1] * U(e), + a = r[2] + r[3] * n + r[4] * H(n, 2) + r[5] * H(n, 3) + r[6] * H(n, 4) + r[7] * H(n, 5) + r[8] * H(n, 6); + return [o *= e < 0 ? -1 : 1, a *= t < 0 ? -1 : 1] + } + + function Y(e) { + for (var t = e[0], r = e[1], n = [], o = 0; o < Q.length; o++) if (U(r) > Q[o]) { + n = V[o]; + break + } + return X(t, r, n) + } + + function Z(e) { + for (var t = e[0], r = e[1], n = [], o = 0; o < K.length; o++) if (K[o] <= r) { + n = R[o]; + break + } + return X(t, r, n) + } + + var $ = {to: {GCJ02: x, BD09: P(N, x), BD09MC: P(Y, N, x), EPSG3857: T}}, + ee = {to: {WGS84: W, BD09: N, BD09MC: P(Y, N), EPSG3857: P(T, W)}}, + te = {to: {WGS84: P(W, w), GCJ02: w, EPSG3857: P(T, W, w), BD09MC: Y}}, + re = {to: {WGS84: z, GCJ02: P(x, z), BD09: P(N, x, z), BD09MC: P(Y, N, x, z)}}, + ne = {to: {WGS84: P(W, w, Z), GCJ02: P(w, Z), EPSG3857: P(T, W, w, Z), BD09: Z}}, + oe = Object.freeze({WGS84: $, GCJ02: ee, BD09: te, EPSG3857: re, BD09MC: ne}); + + function ae(e, t, r) { + e || m("coordinate is required"), t || m("original coordinate system is required"), r || m("target coordinate system is required"); + var n = oe[t]; + if (n || m("original coordinate system is invalid"), t === r) return e; + var o = n.to[r]; + o || m("target coordinate system is invalid"); + var a = typeof e; + if ("string" != a && "object" != a && m("coordinate must be an geojson or an array of position"), "string" == a) try { + e = JSON.parse(e) + } catch (e) { + m("input is not a legal JSON string") + } + var i = !1; + S(e) && (e.length < 2 && m("position must be at 2 numbers long"), G(e[0]) && G(e[1]) || m("position must contain numbers"), e = e.map(Number), i = !0); + var u = o; + return i ? u(e) : (function e(t, r, n) { + if (void 0 === n && (n = !1), null !== t) for (var o, a, i, u, f, c, s, l, M = 0, g = 0, h = t.type, v = "FeatureCollection" === h, d = "Feature" === h, G = v ? t.features.length : 1, S = 0; S < G; S++) { + f = (l = !!(s = v ? t.features[S].geometry : d ? t.geometry : t) && "GeometryCollection" === s.type) ? s.geometries.length : 1; + for (var P = 0; P < f; P++) { + var b = 0, y = 0; + if (null !== (u = l ? s.geometries[P] : s)) { + var p = u.type; + switch (M = !n || "Polygon" !== p && "MultiPolygon" !== p ? 0 : 1, p) { + case null: + break; + case"Point": + if (!1 === r(c = u.coordinates, g, S, b, y)) return !1; + g++, b++; + break; + case"LineString": + case"MultiPoint": + for (c = u.coordinates, o = 0; o < c.length; o++) { + if (!1 === r(c[o], g, S, b, y)) return !1; + g++, "MultiPoint" === p && b++ + } + "LineString" === p && b++; + break; + case"Polygon": + case"MultiLineString": + for (c = u.coordinates, o = 0; o < c.length; o++) { + for (a = 0; a < c[o].length - M; a++) { + if (!1 === r(c[o][a], g, S, b, y)) return !1; + g++ + } + "MultiLineString" === p && b++, "Polygon" === p && y++ + } + "Polygon" === p && b++; + break; + case"MultiPolygon": + for (c = u.coordinates, o = 0; o < c.length; o++) { + for (a = y = 0; a < c[o].length; a++) { + for (i = 0; i < c[o][a].length - M; i++) { + if (!1 === r(c[o][a][i], g, S, b, y)) return !1; + g++ + } + y++ + } + b++ + } + break; + case"GeometryCollection": + for (o = 0; o < u.geometries.length; o++) if (!1 === e(u.geometries[o], r, n)) return !1; + break; + default: + m("Unknown Geometry Type") + } + } + } + } + }(e, function (e) { + var t; + t = u(e), e[0] = t[0], e[1] = t[1] + }), e) + } + + var ie = { + WGS84: t, + WGS1984: r, + EPSG4326: n, + GCJ02: o, + AMap: a, + BD09: i, + BD09LL: u, + Baidu: f, + BMap: c, + BD09MC: s, + BD09Meter: l, + EPSG3857: M, + EPSG900913: g, + EPSG102100: h, + WebMercator: v, + WM: d, + transform: ae + }; + e.WGS84 = t, e.WGS1984 = r, e.EPSG4326 = n, e.GCJ02 = o, e.AMap = a, e.BD09 = i, e.BD09LL = u, e.Baidu = f, e.BMap = c, e.BD09MC = s, e.BD09Meter = l, e.EPSG3857 = M, e.EPSG900913 = g, e.EPSG102100 = h, e.WebMercator = v, e.WM = d, e.transform = ae, e.default = ie, Object.defineProperty(e, "__esModule", {value: !0}) +}); diff --git a/utils/submitHomeworkProcess.js b/utils/submitHomeworkProcess.js new file mode 100644 index 0000000..5b512dd --- /dev/null +++ b/utils/submitHomeworkProcess.js @@ -0,0 +1,287 @@ +import { + getCurrentNextOperation, getTaskInfo, + setOtherSecurityMeasuresSave, + setSecurityMeasuresSave, + setTaskFile, + setTaskSave +} from "@/api"; +import {addFormInfo} from "../api"; + +// 处理表单数据 +// TYPE 0 纯文本 1 图片 2 视频 3 divider标签 4 动态添加 5 签字 +const processFormData = async (formData, formItems) => { + const form = [] + for (let i = 0; i < formItems.length; i++) { + const formItem = formItems[i] + const obj = { + ITEM: formItem.name || '', + ITEM_NAME: formItem.key_name || '', + ITEM_VALUE: formData[formItem.key_name] || '', + FK_NAME: formItem.key_id || '', + FK_VALUE: formData[formItem.key_id] || '', + TYPE: formItem.type, + SORT: i + 1 + } + if (formItem.type === 1 || formItem.type === 2) { + if (typeof formData[formItem.key_name] === 'object') { + const currentItem = uni.$u.deepClone(formData[formItem.key_name]) + const codeList = [] + for (let j = 0; j < currentItem.length; j++) { + const {CODE} = await setTaskFile({formData: {type: 0}, name: 'files', filePath: currentItem[j].url}) + codeList.push(CODE) + } + obj.ITEM_VALUE = '' + obj.picList = codeList + } else { + throw Error('图片和视频只支持数组') + } + } + if (formItem.type === 4) { + if (typeof formData[formItem.key_name] === 'object') { + const currentItem = uni.$u.deepClone(formData[formItem.key_name]) + const itemList = [] + for (let j = 0; j < currentItem.length; j++) { + itemList.push(await processFormData(currentItem[j], formItem.listStructure)) + } + obj.ITEM_VALUE = '' + obj.list = itemList + } else { + throw Error('动态表单只支持数组') + } + } + if (formItem.type === 5) { + if (typeof formData[formItem.key_name] === 'string') { + const {CODE} = await setTaskFile({formData: {type: 0}, name: 'files', filePath: formData[formItem.key_name]}) + obj.ITEM_VALUE = CODE + } else { + throw Error('签字只支持字符串') + } + } + form.push(obj) + } + return form +} +// 提交表单基础信息 +export const setSubmitForm = async ({form, formItems, TYPE, CORP_ID, EW_RU_TASK_ID}) => { + const {taskIds} = await setTaskSave({ + data: [{form: await processFormData(form, formItems),task:{EW_RU_TASK_ID:EW_RU_TASK_ID}}], + TYPE, + postMethod: 'application/json', + }) + await resolveNextOperation({ + EW_RU_TASK_ID: taskIds[0], + CORP_ID, + TYPE + }) +} +// 处理选择人员数据 +const processSelectedPersonnelData = (formData, list) => { + const form = [] + for (let i = 0; i < list.length; i++) { + for (let j = 0; j < list[i].list.length; j++) { + const item = list[i].list[j] + const link = item.key_id.substring(item.key_id.indexOf('&&') + 2) + form.push({ + TYPE_NAME: item.value, + TYPE: item.code, + TYPE_DESCRIBE: item.desc, + DEPARTMENT_ID: item.type === '1' ? formData[item.key_id] : '', + DEPARTMENT_NAME: item.type === '1' ? formData[item.key_name] : '', + USER_ID: item.type === '0' ? formData[item.key_id] : '', + USER_NAME: item.type === '0' ? formData[item.key_name] : '', + isDepartment: item.type, + link: list[i].multiple === '1' ? link : '', + }) + } + } + return form +} +// 提交人员信息 +export const setPersonnelForm = async ({form, list, taskId, CORP_ID, TYPE,vernier}) => { + await addFormInfo({ + job: processSelectedPersonnelData(form,list), + EW_RU_TASK_ID: taskId, + TYPE, + postMethod: 'application/json' + } + ) + await resolveNextOperation({ + EW_RU_TASK_ID: taskId, + CORP_ID, + TYPE, + vernier + }) +} +// 提交安全措施 +export const setSecurityMeasures = async ({questionnaires, questionnaireInfo, taskId, EW_RU_JOB_ID, CORP_ID, TYPE, vernier}) => { + await setSecurityMeasuresSave({ + questionnaires: [{items: questionnaires, questionnaire: questionnaireInfo}], + EW_RU_JOB_ID, + EW_RU_TASK_ID: taskId, + postMethod: 'application/json', + }) + await resolveNextOperation({ + EW_RU_TASK_ID: taskId, + CORP_ID, + TYPE, + EW_RU_JOB_ID, + vernier + }) +} +// 提交其它安全措施 +export const setOtherSecurityMeasures = async ({value, taskId, EW_RU_JOB_ID, CORP_ID, TYPE, vernier}) => { + const ADDITIONAL_COMMENT = value.map(item => item.value) + await setOtherSecurityMeasuresSave({ + ADDITIONAL_COMMENT, + EW_RU_JOB_ID, + EW_RU_TASK_ID: taskId, + postMethod: 'application/json', + }) + await resolveNextOperation({ + EW_RU_TASK_ID: taskId, + CORP_ID, + TYPE, + EW_RU_JOB_ID, + vernier + }) +} +// 结束当前操作人流程提交 +const endCurrentPersonnelTechnologicalProcess = async ({EW_RU_TASK_ID}) => { + await setTaskSave({ + COMPLETE_FLAG: '1', + data: [{task: {EW_RU_TASK_ID}}], + postMethod: 'application/json', + }) +} +// 在审批过程中指定下一节点人 +export const addFlowInfo = async ({form,list, taskId,EW_RU_JOB_ID, TYPE,CORP_ID, vernier}) => { + // 在审批过程中添加节点信息 + await addFormInfo({ + job: processSelectedPersonnelData(form,list), + EW_RU_TASK_ID: taskId, + TYPE, + postMethod: 'application/json' + } + ) + // 结束后续流程 + await resolveNextOperation({ + EW_RU_TASK_ID: taskId, + CORP_ID, + TYPE, + EW_RU_JOB_ID, + vernier + }) +} +// 决定下一步操作 +// EW_RU_TASK_ID当前任务id +// CORP_ID选择的企业id +// TYPE作业类型 +// EW_RU_JOB_ID当前操作节点的人员id +// isLastStep是否还有下一步,纯前端确定,不去后台获取 +export const resolveNextOperation = async ({EW_RU_TASK_ID = '', CORP_ID = '', TYPE = '', EW_RU_JOB_ID = '',vernier = ''}, isLastStep = true) => { + let stepNum = 0 + if (isLastStep) { + const {info} = await getCurrentNextOperation({EW_RU_TASK_ID, EW_RU_JOB_ID, VERNIER: vernier}) + // 选人 + if (info.chooseNextFlag === '1') { + uni.navigateTo({ + url: '/pages/eight_assignments/select_review_personnel?vernier='+ info.vernier, + success: ({eventChannel}) => { + eventChannel.emit('nextNodes', { + nextNodes: info.nextNodes, + initFlag: info.initFlag, + taskId: EW_RU_TASK_ID, + EW_RU_JOB_ID: EW_RU_JOB_ID, + CORP_ID, + TYPE + }) + } + }) + return + } + // 填写安全措施 + if (info.completeFlag === '1') { + uni.navigateTo({ + url: '/pages/eight_assignments/security_measures?vernier=' + info.vernier, + success: ({eventChannel}) => { + eventChannel.emit('questionnaire', { + questionnaire: info.questionnaire[0], + taskId: EW_RU_TASK_ID, + EW_RU_JOB_ID, + TYPE, + CORP_ID, + vernier: info.vernier + }) + } + }) + return + } + // 填写其它安全措施 + if (info.canAddFlag === '1') { + uni.$u.route({ + url: '/pages/eight_assignments/other_security_measures', + params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE, CORP_ID,vernier: info.vernier} + }) + return + } + // 签字 + if (info.submitFlag === '1') { + uni.$u.route({ + url: '/pages/eight_assignments/sign', + params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE,vernier: info.vernier} + }) + return + } + // 流程特殊权限校验 + if (info.otherFlag !== null && info.otherFlag.redirectFlag === '1') { + uni.$u.route({ + url: info.otherFlag.url, + params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE,vernier: info.vernier} + }) + return + } + // 根据后端返回的页数退回到指定页面 + stepNum = info.stepNum + } + + uni.$u.toast('提交成功') + setTimeout(() => { + uni.navigateBack( + { + delta: stepNum + } + ) + }, 1500) +} + +export const getData = async (taskId) => { + const resData = await getTaskInfo({ EW_RU_TASK_ID: taskId }); + if (resData.list.fromTrans && resData.list.fromTrans.length > 0) { + const form = {}; + resData.list.fromTrans.forEach((item) => { + form[item.ITEM_NAME] = item.ITEM_VALUE; + if (item.FK_NAME) { + form[item.FK_NAME] = item.FK_VALUE; + } + if (item.TYPE === 1) { + form[item.ITEM_NAME] = item.list.map((item) => ({ + url: this.$filePath + item.ITEM_VALUE, + })); + } + if (item.TYPE === 4) { + form[item.ITEM_NAME] = []; + for (let i = 0; i < item.list.length; i++) { + form[item.ITEM_NAME].push({}); + for (let j = 0; j < item.list[i].list.length; j++) { + form[item.ITEM_NAME][i][item.list[i].list[j].ITEM_NAME] = + item.list[i].list[j].ITEM_VALUE; + } + } + } + if (item.TYPE === 5) { + form[item.ITEM_NAME] = this.$filePath + item.ITEM_VALUE; + } + }); + return form; + } +}; diff --git a/utils/tools.js b/utils/tools.js new file mode 100644 index 0000000..9a801e8 --- /dev/null +++ b/utils/tools.js @@ -0,0 +1,27 @@ +export function formatDate(date, fmt) { + if(null != JSON.stringify(date) && 'null' != JSON.stringify(date) && undefined != JSON.stringify(date) && 'undefined' != JSON.stringify(date) && JSON.stringify(date) != '' && JSON.stringify(date).length > 0){ + if (/(y+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) + } + let o = { + 'M+': date.getMonth() + 1, + 'd+': date.getDate(), + 'h+': date.getHours(), + 'm+': date.getMinutes(), + 's+': date.getSeconds() + } + for (let k in o) { + if (new RegExp(`(${k})`).test(fmt)) { + let str = o[k] + '' + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str)) + } + } + return fmt + } else { + return '' + } +} + +function padLeftZero(str) { + return ('00' + str).substr(str.length) +} diff --git a/utils/useFormValidate.js b/utils/useFormValidate.js new file mode 100644 index 0000000..c9b24c8 --- /dev/null +++ b/utils/useFormValidate.js @@ -0,0 +1,15 @@ +const useFormValidate = (ref, message = "请补全必填项!") => { + return new Promise((resolve) => { + ref.value + .validate() + .then(() => { + resolve(true); + }) + .catch(() => { + // eslint-disable-next-line prefer-promise-reject-errors + resolve(false); + uni.$u.toast(message); + }); + }); +}; +export default useFormValidate;