forked from integrated_whb/integrated_whb_vue
				
			init
							parent
							
								
									29b4c7d2ba
								
							
						
					
					
						commit
						1fc7e96f0d
					
				|  | @ -8,10 +8,10 @@ | ||||||
|       "name": "vue3_template", |       "name": "vue3_template", | ||||||
|       "version": "0.0.0", |       "version": "0.0.0", | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@element-plus/icons-vue": "^2.1.0", |         "@element-plus/icons-vue": "^2.3.1", | ||||||
|         "@icon-park/vue-next": "^1.4.2", |         "@icon-park/vue-next": "^1.4.2", | ||||||
|         "@vueuse/core": "^9.13.0", |         "@vueuse/core": "^9.13.0", | ||||||
|         "@vueuse/integrations": "^10.7.0", |         "@vueuse/integrations": "^10.7.1", | ||||||
|         "animate.css": "^4.1.1", |         "animate.css": "^4.1.1", | ||||||
|         "axios": "^1.6.3", |         "axios": "^1.6.3", | ||||||
|         "dayjs": "^1.11.10", |         "dayjs": "^1.11.10", | ||||||
|  | @ -20,40 +20,41 @@ | ||||||
|         "mitt": "^3.0.1", |         "mitt": "^3.0.1", | ||||||
|         "normalize.css": "^8.0.1", |         "normalize.css": "^8.0.1", | ||||||
|         "pinia": "^2.1.7", |         "pinia": "^2.1.7", | ||||||
|         "pinia-plugin-persistedstate": "^3.2.0", |         "pinia-plugin-persistedstate": "^3.2.1", | ||||||
|         "qrcode": "^1.5.3", |         "qrcode": "^1.5.3", | ||||||
|         "qs": "^6.11.2", |         "qs": "^6.11.2", | ||||||
|         "throttle-debounce": "^5.0.0", |         "throttle-debounce": "^5.0.0", | ||||||
|         "v-viewer": "^3.0.11", |         "v-viewer": "^3.0.11", | ||||||
|         "vue": "^3.3.13", |         "vue": "^3.4.3", | ||||||
|         "vue-router": "^4.2.5", |         "vue-router": "^4.2.5", | ||||||
|  |         "vue3-pdfjs": "^0.1.6", | ||||||
|         "vue3-print-nb": "^0.1.4", |         "vue3-print-nb": "^0.1.4", | ||||||
|         "vue3-puzzle-vcode": "^1.0.16" |         "vue3-puzzle-vcode": "^1.1.5" | ||||||
|       }, |       }, | ||||||
|       "devDependencies": { |       "devDependencies": { | ||||||
|         "@our-patches/postcss-px-to-viewport": "^1.2.0", |         "@our-patches/postcss-px-to-viewport": "^1.2.0", | ||||||
|         "@types/node": "^18.18.4", |         "@types/node": "^18.19.4", | ||||||
|         "@vitejs/plugin-basic-ssl": "^1.0.1", |         "@vitejs/plugin-basic-ssl": "^1.0.2", | ||||||
|         "@vitejs/plugin-vue": "^4.4.0", |         "@vitejs/plugin-vue": "^4.6.2", | ||||||
|         "@vue/eslint-config-prettier": "^7.1.0", |         "@vue/eslint-config-prettier": "^7.1.0", | ||||||
|         "autoprefixer": "^10.4.16", |         "autoprefixer": "^10.4.16", | ||||||
|         "eslint": "^8.51.0", |         "eslint": "^8.56.0", | ||||||
|         "eslint-config-prettier": "^8.10.0", |         "eslint-config-prettier": "^8.10.0", | ||||||
|         "eslint-config-standard": "^17.1.0", |         "eslint-config-standard": "^17.1.0", | ||||||
|         "eslint-plugin-import": "^2.28.1", |         "eslint-plugin-import": "^2.29.1", | ||||||
|         "eslint-plugin-n": "^15.7.0", |         "eslint-plugin-n": "^15.7.0", | ||||||
|         "eslint-plugin-prettier": "^4.2.1", |         "eslint-plugin-prettier": "^4.2.1", | ||||||
|         "eslint-plugin-promise": "^6.1.1", |         "eslint-plugin-promise": "^6.1.1", | ||||||
|         "eslint-plugin-vue": "^9.17.0", |         "eslint-plugin-vue": "^9.19.2", | ||||||
|         "prettier": "^2.8.8", |         "prettier": "^2.8.8", | ||||||
|         "sass": "^1.69.0", |         "sass": "^1.69.0", | ||||||
|         "unplugin-auto-import": "^0.12.2", |         "unplugin-auto-import": "^0.12.2", | ||||||
|         "unplugin-vue-components": "^0.22.12", |         "unplugin-vue-components": "^0.22.12", | ||||||
|         "vite": "^4.4.11", |         "vite": "^4.5.1", | ||||||
|         "vite-plugin-enhance-log": "^0.5.2", |         "vite-plugin-enhance-log": "^0.5.2", | ||||||
|         "vite-plugin-eslint": "^1.8.1", |         "vite-plugin-eslint": "^1.8.1", | ||||||
|         "vite-plugin-remove-console": "^2.1.1", |         "vite-plugin-remove-console": "^2.2.0", | ||||||
|         "vue-eslint-parser": "^9.3.1" |         "vue-eslint-parser": "^9.3.2" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/@aashutoshrathi/word-wrap": { |     "node_modules/@aashutoshrathi/word-wrap": { | ||||||
|  | @ -2323,6 +2324,12 @@ | ||||||
|         "node": ">=6.0.0" |         "node": ">=6.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/dommatrix": { | ||||||
|  |       "version": "1.0.3", | ||||||
|  |       "resolved": "https://registry.npmmirror.com/dommatrix/-/dommatrix-1.0.3.tgz", | ||||||
|  |       "integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==", | ||||||
|  |       "deprecated": "dommatrix is no longer maintained. Please use @thednp/dommatrix." | ||||||
|  |     }, | ||||||
|     "node_modules/electron-to-chromium": { |     "node_modules/electron-to-chromium": { | ||||||
|       "version": "1.4.617", |       "version": "1.4.617", | ||||||
|       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.617.tgz", |       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.617.tgz", | ||||||
|  | @ -4326,6 +4333,23 @@ | ||||||
|       "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", |       "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/pdfjs-dist": { | ||||||
|  |       "version": "2.16.105", | ||||||
|  |       "resolved": "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-2.16.105.tgz", | ||||||
|  |       "integrity": "sha512-J4dn41spsAwUxCpEoVf6GVoz908IAA3mYiLmNxg8J9kfRXc2jxpbUepcP0ocp0alVNLFthTAM8DZ1RaHh8sU0A==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "dommatrix": "^1.0.3", | ||||||
|  |         "web-streams-polyfill": "^3.2.1" | ||||||
|  |       }, | ||||||
|  |       "peerDependencies": { | ||||||
|  |         "worker-loader": "^3.0.8" | ||||||
|  |       }, | ||||||
|  |       "peerDependenciesMeta": { | ||||||
|  |         "worker-loader": { | ||||||
|  |           "optional": true | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/picocolors": { |     "node_modules/picocolors": { | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", | ||||||
|  | @ -5546,6 +5570,18 @@ | ||||||
|         "vue": "^3.2.0" |         "vue": "^3.2.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/vue3-pdfjs": { | ||||||
|  |       "version": "0.1.6", | ||||||
|  |       "resolved": "https://registry.npmmirror.com/vue3-pdfjs/-/vue3-pdfjs-0.1.6.tgz", | ||||||
|  |       "integrity": "sha512-7UaWbsp8wNqB0y/rRlyo5yRb0S+XOkkSpmdUuS267Dhi07Pt4RFEetQ8inrpf/aTFJwGnW0Uc/UE4p376s+Zmw==", | ||||||
|  |       "dependencies": { | ||||||
|  |         "pdfjs-dist": "^2.10.377", | ||||||
|  |         "vue": "^3.2.19" | ||||||
|  |       }, | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">=10.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/vue3-print-nb": { |     "node_modules/vue3-print-nb": { | ||||||
|       "version": "0.1.4", |       "version": "0.1.4", | ||||||
|       "resolved": "https://registry.npmjs.org/vue3-print-nb/-/vue3-print-nb-0.1.4.tgz", |       "resolved": "https://registry.npmjs.org/vue3-print-nb/-/vue3-print-nb-0.1.4.tgz", | ||||||
|  | @ -5559,6 +5595,14 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/vue3-puzzle-vcode/-/vue3-puzzle-vcode-1.1.5.tgz", |       "resolved": "https://registry.npmjs.org/vue3-puzzle-vcode/-/vue3-puzzle-vcode-1.1.5.tgz", | ||||||
|       "integrity": "sha512-JesxfEucupQYDHXcywVx5BGQ1Wjybtlj4dAeNw2tC1jfHt1FXoG0bpBSlLUS4TPyS+pHp++4zmTfBQZLf9ldXw==" |       "integrity": "sha512-JesxfEucupQYDHXcywVx5BGQ1Wjybtlj4dAeNw2tC1jfHt1FXoG0bpBSlLUS4TPyS+pHp++4zmTfBQZLf9ldXw==" | ||||||
|     }, |     }, | ||||||
|  |     "node_modules/web-streams-polyfill": { | ||||||
|  |       "version": "3.3.2", | ||||||
|  |       "resolved": "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", | ||||||
|  |       "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", | ||||||
|  |       "engines": { | ||||||
|  |         "node": ">= 8" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "node_modules/webpack-sources": { |     "node_modules/webpack-sources": { | ||||||
|       "version": "3.2.3", |       "version": "3.2.3", | ||||||
|       "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", |       "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", | ||||||
|  |  | ||||||
|  | @ -29,6 +29,7 @@ | ||||||
|     "v-viewer": "^3.0.11", |     "v-viewer": "^3.0.11", | ||||||
|     "vue": "^3.4.3", |     "vue": "^3.4.3", | ||||||
|     "vue-router": "^4.2.5", |     "vue-router": "^4.2.5", | ||||||
|  |     "vue3-pdfjs": "^0.1.6", | ||||||
|     "vue3-print-nb": "^0.1.4", |     "vue3-print-nb": "^0.1.4", | ||||||
|     "vue3-puzzle-vcode": "^1.1.5" |     "vue3-puzzle-vcode": "^1.1.5" | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|  | @ -73,6 +73,11 @@ export default [ | ||||||
|           }, |           }, | ||||||
|         ], |         ], | ||||||
|       }, |       }, | ||||||
|  |       { | ||||||
|  |         path: "/enterprise_management/department", | ||||||
|  |         meta: { title: "组织机构", isSubMenu: false }, | ||||||
|  |         component: "enterprise_management/department/index", | ||||||
|  |       }, | ||||||
|     ], |     ], | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ import { | ||||||
|   getLevels, |   getLevels, | ||||||
|   getLevelsAndChildrenNumber, |   getLevelsAndChildrenNumber, | ||||||
|   getRegulatoryType, |   getRegulatoryType, | ||||||
|  |   getDepartmentTree, | ||||||
| } from "@/request/data_dictionary.js"; | } from "@/request/data_dictionary.js"; | ||||||
| import { ref } from "vue"; | import { ref } from "vue"; | ||||||
| 
 | 
 | ||||||
|  | @ -67,6 +68,11 @@ export const layoutFnGetRiskLevel = async () => { | ||||||
|   }); |   }); | ||||||
|   return ref(resData.list); |   return ref(resData.list); | ||||||
| }; | }; | ||||||
|  | // 部门树
 | ||||||
|  | export const layoutFnGetDepartmentTree = async () => { | ||||||
|  |   const resData = await getDepartmentTree(); | ||||||
|  |   return ref(JSON.parse(resData.zTreeNodes)); | ||||||
|  | }; | ||||||
| // 无法确定DICTIONARIES_ID的数据字典
 | // 无法确定DICTIONARIES_ID的数据字典
 | ||||||
| export const layoutFnGetLevels = async (DICTIONARIES_ID) => { | export const layoutFnGetLevels = async (DICTIONARIES_ID) => { | ||||||
|   const resData = await getLevels({ DICTIONARIES_ID }); |   const resData = await getLevels({ DICTIONARIES_ID }); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,65 @@ | ||||||
|  | <template> | ||||||
|  |   <el-tree-select | ||||||
|  |     v-model="modelValue" | ||||||
|  |     :data="departmentTree" | ||||||
|  |     node-key="id" | ||||||
|  |     :props="{ | ||||||
|  |       children: 'nodes', | ||||||
|  |       label: 'name', | ||||||
|  |     }" | ||||||
|  |     :render-after-expand="false" | ||||||
|  |     accordion | ||||||
|  |     :check-strictly="checkStrictly" | ||||||
|  |     :clearable="clearable" | ||||||
|  |     :show-checkbox="showCheckbox" | ||||||
|  |     :multiple="multiple" | ||||||
|  |     :collapse-tags="collapseTags" | ||||||
|  |   /> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script setup> | ||||||
|  | import { layoutFnGetDepartmentTree } from "@/assets/js/data_dictionary"; | ||||||
|  | import { useVModel } from "@vueuse/core"; | ||||||
|  | 
 | ||||||
|  | defineOptions({ | ||||||
|  |   name: "LayoutDepartment", | ||||||
|  | }); | ||||||
|  | const props = defineProps({ | ||||||
|  |   modelValue: { | ||||||
|  |     type: [String, Array], | ||||||
|  |     required: true, | ||||||
|  |     default: "", | ||||||
|  |   }, | ||||||
|  |   checkStrictly: { | ||||||
|  |     type: Boolean, | ||||||
|  |     default: true, | ||||||
|  |   }, | ||||||
|  |   showCheckbox: { | ||||||
|  |     type: Boolean, | ||||||
|  |     default: false, | ||||||
|  |   }, | ||||||
|  |   multiple: { | ||||||
|  |     type: Boolean, | ||||||
|  |     default: false, | ||||||
|  |   }, | ||||||
|  |   collapseTags: { | ||||||
|  |     type: Boolean, | ||||||
|  |     default: false, | ||||||
|  |   }, | ||||||
|  |   clearable: { | ||||||
|  |     type: Boolean, | ||||||
|  |     default: true, | ||||||
|  |   }, | ||||||
|  |   rootDisable: { | ||||||
|  |     type: String, | ||||||
|  |     default: "Y", | ||||||
|  |   }, | ||||||
|  | }); | ||||||
|  | const emits = defineEmits(["update:modelValue"]); | ||||||
|  | const modelValue = useVModel(props, "modelValue", emits); | ||||||
|  | const departmentTree = await layoutFnGetDepartmentTree({ | ||||||
|  |   ROOT_DISABLE: props.rootDisable, | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped></style> | ||||||
|  | @ -0,0 +1,52 @@ | ||||||
|  | <template> | ||||||
|  |   <el-dialog title="文档" v-model="visible"> | ||||||
|  |     <div v-if="visible"> | ||||||
|  |       <vue-pdf | ||||||
|  |         ref="pdfRef" | ||||||
|  |         v-for="page in numOfPages" | ||||||
|  |         :key="page" | ||||||
|  |         :src="src" | ||||||
|  |         :page="page" | ||||||
|  |       /> | ||||||
|  |     </div> | ||||||
|  |   </el-dialog> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script setup> | ||||||
|  | import { watchEffect, ref } from "vue"; | ||||||
|  | import { VuePdf, createLoadingTask } from "vue3-pdfjs/esm"; | ||||||
|  | import { ElMessage } from "element-plus"; | ||||||
|  | import { useVModel } from "@vueuse/core"; | ||||||
|  | 
 | ||||||
|  | defineOptions({ | ||||||
|  |   name: "LayoutPdf", | ||||||
|  | }); | ||||||
|  | const props = defineProps({ | ||||||
|  |   src: { | ||||||
|  |     type: String, | ||||||
|  |     required: true, | ||||||
|  |   }, | ||||||
|  |   visible: { | ||||||
|  |     type: Boolean, | ||||||
|  |     default: false, | ||||||
|  |     required: true, | ||||||
|  |   }, | ||||||
|  | }); | ||||||
|  | const emits = defineEmits(["update:visible"]); | ||||||
|  | const visible = useVModel(props, "visible", emits); | ||||||
|  | const pdfRef = ref(null); | ||||||
|  | const numOfPages = ref(0); | ||||||
|  | watchEffect(() => { | ||||||
|  |   if (props.visible) { | ||||||
|  |     const loadingTask = createLoadingTask(props.src); | ||||||
|  |     loadingTask.promise | ||||||
|  |       .then((pdf) => { | ||||||
|  |         numOfPages.value = pdf.numPages; | ||||||
|  |       }) | ||||||
|  |       .catch(() => { | ||||||
|  |         visible.value = false; | ||||||
|  |         ElMessage.error("文件加载失败"); | ||||||
|  |       }); | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | @ -0,0 +1,35 @@ | ||||||
|  | <template> | ||||||
|  |   <el-dialog title="文本文档" v-model="visible"> | ||||||
|  |     <el-input autosize :model-value="value" readonly type="textarea" /> | ||||||
|  |   </el-dialog> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script setup> | ||||||
|  | import { useVModel } from "@vueuse/core"; | ||||||
|  | import { ref, watchEffect } from "vue"; | ||||||
|  | import { readTxtDocument } from "@/assets/js/utils.js"; | ||||||
|  | 
 | ||||||
|  | defineOptions({ | ||||||
|  |   name: "LayoutTxt", | ||||||
|  | }); | ||||||
|  | const props = defineProps({ | ||||||
|  |   visible: { | ||||||
|  |     type: Boolean, | ||||||
|  |     required: true, | ||||||
|  |     default: false, | ||||||
|  |   }, | ||||||
|  |   src: { | ||||||
|  |     type: String, | ||||||
|  |     required: true, | ||||||
|  |     default: "", | ||||||
|  |   }, | ||||||
|  | }); | ||||||
|  | const value = ref(""); | ||||||
|  | const emits = defineEmits(["update:visible"]); | ||||||
|  | const visible = useVModel(props, "visible", emits); | ||||||
|  | watchEffect(async () => { | ||||||
|  |   if (props.src) value.value = await readTxtDocument(props.src); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style lang="scss" scoped></style> | ||||||
|  | @ -30,3 +30,9 @@ export const getUserListAllByCorp = (params) => | ||||||
|     loading: false, |     loading: false, | ||||||
|     ...params, |     ...params, | ||||||
|   }); |   }); | ||||||
|  | // 部门树
 | ||||||
|  | export const getDepartmentTree = (params) => | ||||||
|  |   post("/department/listTree", { | ||||||
|  |     loading: false, | ||||||
|  |     ...params, | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,5 @@ | ||||||
|  | import { post } from "@/request/axios.js"; | ||||||
|  | 
 | ||||||
|  | export const getDepartmentList = (params) => post("/department/list", params); // 组织机构列表
 | ||||||
|  | export const setDepartmentDelete = (params) => | ||||||
|  |   post("/department/delete", params); // 组织机构删除
 | ||||||
|  | @ -148,10 +148,10 @@ const stateList = [ | ||||||
|   { ID: "-6", NAME: "待验收打回" }, |   { ID: "-6", NAME: "待验收打回" }, | ||||||
| ]; | ]; | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
| const listData = useListData(getBlindPlatePluggingList, { | const { list, pagination, searchForm, fnGetData, fnResetPagination } = | ||||||
|  |   useListData(getBlindPlatePluggingList, { | ||||||
|     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, |     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, | ||||||
|   }); |   }); | ||||||
| const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData; |  | ||||||
| const data = reactive({ | const data = reactive({ | ||||||
|   flowChartDialog: { |   flowChartDialog: { | ||||||
|     visible: false, |     visible: false, | ||||||
|  |  | ||||||
|  | @ -129,10 +129,10 @@ const stateList = [ | ||||||
|   { ID: "-98", NAME: "已作废(未进行气体检测)" }, |   { ID: "-98", NAME: "已作废(未进行气体检测)" }, | ||||||
| ]; | ]; | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
| const listData = useListData(getConfinedSpaceList, { | const { list, pagination, searchForm, fnGetData, fnResetPagination } = | ||||||
|  |   useListData(getConfinedSpaceList, { | ||||||
|     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, |     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, | ||||||
|   }); |   }); | ||||||
| const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData; |  | ||||||
| const data = reactive({ | const data = reactive({ | ||||||
|   flowChartDialog: { |   flowChartDialog: { | ||||||
|     visible: false, |     visible: false, | ||||||
|  |  | ||||||
|  | @ -0,0 +1,164 @@ | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <layout-card> | ||||||
|  |       <el-row :gutter="12"> | ||||||
|  |         <el-col :span="5"> | ||||||
|  |           <el-input | ||||||
|  |             v-model="filterText" | ||||||
|  |             placeholder="输入关键字进行过滤" | ||||||
|  |             class="mb-10" | ||||||
|  |           /> | ||||||
|  |           <el-tree | ||||||
|  |             ref="treeRef" | ||||||
|  |             :props="{ | ||||||
|  |               children: 'nodes', | ||||||
|  |               label: 'name', | ||||||
|  |             }" | ||||||
|  |             accordion | ||||||
|  |             :data="data.treeData" | ||||||
|  |             :filter-node-method="fnFilterNode" | ||||||
|  |             @node-click="fnResetPagination({ DEPARTMENT_ID: $event.id })" | ||||||
|  |           /> | ||||||
|  |         </el-col> | ||||||
|  |         <el-col :span="19"> | ||||||
|  |           <el-button class="mb-10">结构图</el-button> | ||||||
|  |           <layout-table | ||||||
|  |             :data="list" | ||||||
|  |             v-model:pagination="pagination" | ||||||
|  |             @get-data="fnGetDataTransfer" | ||||||
|  |           > | ||||||
|  |             <el-table-column label="序号" width="70"> | ||||||
|  |               <template v-slot="{ $index }"> | ||||||
|  |                 {{ serialNumber(pagination, $index) }} | ||||||
|  |               </template> | ||||||
|  |             </el-table-column> | ||||||
|  |             <el-table-column label="名称"> | ||||||
|  |               <template v-slot="{ row }"> | ||||||
|  |                 <el-button | ||||||
|  |                   type="primary" | ||||||
|  |                   text | ||||||
|  |                   link | ||||||
|  |                   @click=" | ||||||
|  |                     router.push({ | ||||||
|  |                       path: '/enterprise_management/department', | ||||||
|  |                       query: { | ||||||
|  |                         DEPARTMENT_ID: row.DEPARTMENT_ID, | ||||||
|  |                         DEPARTMENT_NAME: row.NAME, | ||||||
|  |                       }, | ||||||
|  |                     }) | ||||||
|  |                   " | ||||||
|  |                 > | ||||||
|  |                   {{ row.NAME }}<el-icon><ArrowRight /></el-icon> | ||||||
|  |                 </el-button> | ||||||
|  |               </template> | ||||||
|  |             </el-table-column> | ||||||
|  |             <template v-if="DEPARTMENT_ID !== '0'"> | ||||||
|  |               <el-table-column prop="HEADMAN" label="负责人" /> | ||||||
|  |               <el-table-column prop="leName" label="部门级别" /> | ||||||
|  |               <el-table-column prop="DEP_ORDER" label="排序" width="100" /> | ||||||
|  |               <el-table-column label="操作" width="100"> | ||||||
|  |                 <template v-slot="{ row }"> | ||||||
|  |                   <el-button | ||||||
|  |                     type="primary" | ||||||
|  |                     text | ||||||
|  |                     link | ||||||
|  |                     @click="fnAddOrEdit(row.DEPARTMENT_ID, 'edit')" | ||||||
|  |                   > | ||||||
|  |                     编辑 | ||||||
|  |                   </el-button> | ||||||
|  |                   <el-button | ||||||
|  |                     type="primary" | ||||||
|  |                     text | ||||||
|  |                     link | ||||||
|  |                     @click="fnDelete(row.DEPARTMENT_ID, row.NAME)" | ||||||
|  |                   > | ||||||
|  |                     删除 | ||||||
|  |                   </el-button> | ||||||
|  |                 </template> | ||||||
|  |               </el-table-column> | ||||||
|  |             </template> | ||||||
|  |             <template #button> | ||||||
|  |               <el-button type="primary" @click="fnAddOrEdit('', 'add')"> | ||||||
|  |                 新增 | ||||||
|  |               </el-button> | ||||||
|  |             </template> | ||||||
|  |           </layout-table> | ||||||
|  |         </el-col> | ||||||
|  |       </el-row> | ||||||
|  |     </layout-card> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script setup> | ||||||
|  | import { serialNumber } from "@/assets/js/utils.js"; | ||||||
|  | import useListData from "@/assets/js/useListData.js"; | ||||||
|  | import { | ||||||
|  |   getDepartmentList, | ||||||
|  |   setDepartmentDelete, | ||||||
|  | } from "@/request/department.js"; | ||||||
|  | import { layoutFnGetDepartmentTree } from "@/assets/js/data_dictionary.js"; | ||||||
|  | import { reactive, ref, watch } from "vue"; | ||||||
|  | import { onBeforeRouteUpdate, useRoute, useRouter } from "vue-router"; | ||||||
|  | import { ArrowRight } from "@element-plus/icons-vue"; | ||||||
|  | import { debounce } from "throttle-debounce"; | ||||||
|  | import { ElMessage, ElMessageBox } from "element-plus"; | ||||||
|  | 
 | ||||||
|  | const router = useRouter(); | ||||||
|  | const route = useRoute(); | ||||||
|  | const parentIdDefault = "0"; | ||||||
|  | const parentNameDefault = "(无)此项为顶级部门"; | ||||||
|  | const DEPARTMENT_ID = ref(route.query.DEPARTMENT_ID || parentIdDefault); | ||||||
|  | const DEPARTMENT_NAME = ref(route.query.DEPARTMENT_NAME || parentNameDefault); | ||||||
|  | const treeRef = ref(null); | ||||||
|  | const filterText = ref(""); | ||||||
|  | const { list, pagination, fnGetData, fnResetPagination } = useListData( | ||||||
|  |   getDepartmentList, | ||||||
|  |   { | ||||||
|  |     otherParams: { | ||||||
|  |       DEPARTMENT_ID: DEPARTMENT_ID.value, | ||||||
|  |     }, | ||||||
|  |   } | ||||||
|  | ); | ||||||
|  | const data = reactive({ | ||||||
|  |   treeData: [], | ||||||
|  | }); | ||||||
|  | watch(filterText, (val) => { | ||||||
|  |   treeRef.value.filter(val); | ||||||
|  | }); | ||||||
|  | const fnFilterNode = (value, data) => { | ||||||
|  |   if (!value) return true; | ||||||
|  |   return data.name.includes(value); | ||||||
|  | }; | ||||||
|  | const fnGetTreeData = async () => { | ||||||
|  |   const treeData = await layoutFnGetDepartmentTree(); | ||||||
|  |   data.treeData = treeData.value; | ||||||
|  | }; | ||||||
|  | fnGetTreeData(); | ||||||
|  | const fnGetDataTransfer = () => { | ||||||
|  |   fnGetData({ | ||||||
|  |     DEPARTMENT_ID: DEPARTMENT_ID.value, | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | const fnResetPaginationTransfer = () => { | ||||||
|  |   fnResetPagination({ | ||||||
|  |     DEPARTMENT_ID: DEPARTMENT_ID.value, | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | onBeforeRouteUpdate((to) => { | ||||||
|  |   DEPARTMENT_ID.value = to.query.DEPARTMENT_ID || parentIdDefault; | ||||||
|  |   DEPARTMENT_NAME.value = to.query.DEPARTMENT_NAME || parentNameDefault; | ||||||
|  |   fnResetPaginationTransfer(); | ||||||
|  | }); | ||||||
|  | const fnDelete = debounce( | ||||||
|  |   1000, | ||||||
|  |   async (DEPARTMENT_ID, NAME) => { | ||||||
|  |     await ElMessageBox.confirm(`确定要删除[${NAME}]吗?`, { type: "warning" }); | ||||||
|  |     await setDepartmentDelete({ DEPARTMENT_ID }); | ||||||
|  |     ElMessage.success("删除成功"); | ||||||
|  |     await fnResetPaginationTransfer(); | ||||||
|  |   }, | ||||||
|  |   { atBegin: true } | ||||||
|  | ); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped lang="scss"></style> | ||||||
|  | @ -141,16 +141,16 @@ import useListData from "@/assets/js/useListData.js"; | ||||||
| 
 | 
 | ||||||
| const FILE_URL = import.meta.env.VITE_FILE_URL; | const FILE_URL = import.meta.env.VITE_FILE_URL; | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
| const listData = useListData(getIndustryQualificationsList); | const { list, pagination, searchForm, fnGetData, fnResetPagination } = | ||||||
| const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData; |   useListData(getIndustryQualificationsList); | ||||||
| const fnGetDataTransfer = async () => { | const fnGetDataTransfer = () => { | ||||||
|   await fnGetData({ |   fnGetData({ | ||||||
|     STARTTIME: searchForm.value.dates?.[0], |     STARTTIME: searchForm.value.dates?.[0], | ||||||
|     ENDTIME: searchForm.value.dates?.[1], |     ENDTIME: searchForm.value.dates?.[1], | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
| const fnResetPaginationTransfer = async () => { | const fnResetPaginationTransfer = () => { | ||||||
|   await fnResetPagination({ |   fnResetPagination({ | ||||||
|     STARTTIME: searchForm.value.dates?.[0], |     STARTTIME: searchForm.value.dates?.[0], | ||||||
|     ENDTIME: searchForm.value.dates?.[1], |     ENDTIME: searchForm.value.dates?.[1], | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|  | @ -154,10 +154,10 @@ const stateList = [ | ||||||
|   { ID: "-6", NAME: "验收打回" }, |   { ID: "-6", NAME: "验收打回" }, | ||||||
| ]; | ]; | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
| const listData = useListData(getGroundbreakingList, { | const { list, pagination, searchForm, fnGetData, fnResetPagination } = | ||||||
|  |   useListData(getGroundbreakingList, { | ||||||
|     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, |     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, | ||||||
|   }); |   }); | ||||||
| const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData; |  | ||||||
| const data = reactive({ | const data = reactive({ | ||||||
|   flowChartDialog: { |   flowChartDialog: { | ||||||
|     visible: false, |     visible: false, | ||||||
|  |  | ||||||
|  | @ -152,10 +152,10 @@ const stateList = [ | ||||||
|   { ID: "-6", NAME: "验收打回" }, |   { ID: "-6", NAME: "验收打回" }, | ||||||
| ]; | ]; | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
| const listData = useListData(getHighList, { | const { list, pagination, searchForm, fnGetData, fnResetPagination } = | ||||||
|  |   useListData(getHighList, { | ||||||
|     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, |     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, | ||||||
|   }); |   }); | ||||||
| const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData; |  | ||||||
| const data = reactive({ | const data = reactive({ | ||||||
|   flowChartDialog: { |   flowChartDialog: { | ||||||
|     visible: false, |     visible: false, | ||||||
|  |  | ||||||
|  | @ -152,10 +152,10 @@ const stateList = [ | ||||||
|   { ID: "-6", NAME: "验收打回" }, |   { ID: "-6", NAME: "验收打回" }, | ||||||
| ]; | ]; | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
| const listData = useListData(getHoistingList, { | const { list, pagination, searchForm, fnGetData, fnResetPagination } = | ||||||
|  |   useListData(getHoistingList, { | ||||||
|     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, |     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, | ||||||
|   }); |   }); | ||||||
| const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData; |  | ||||||
| const data = reactive({ | const data = reactive({ | ||||||
|   flowChartDialog: { |   flowChartDialog: { | ||||||
|     visible: false, |     visible: false, | ||||||
|  |  | ||||||
|  | @ -151,10 +151,10 @@ const stateList = [ | ||||||
|   { ID: "-98", NAME: "已作废(未进行气体检测)" }, |   { ID: "-98", NAME: "已作废(未进行气体检测)" }, | ||||||
| ]; | ]; | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
| const listData = useListData(getHotWorkList, { | const { list, pagination, searchForm, fnGetData, fnResetPagination } = | ||||||
|  |   useListData(getHotWorkList, { | ||||||
|     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "8" } : {}, |     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "8" } : {}, | ||||||
|   }); |   }); | ||||||
| const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData; |  | ||||||
| const data = reactive({ | const data = reactive({ | ||||||
|   flowChartDialog: { |   flowChartDialog: { | ||||||
|     visible: false, |     visible: false, | ||||||
|  |  | ||||||
|  | @ -156,10 +156,10 @@ const stateList = [ | ||||||
|   { ID: "-6", NAME: "验收打回" }, |   { ID: "-6", NAME: "验收打回" }, | ||||||
| ]; | ]; | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
| const listData = useListData(getOpenCircuitList, { | const { list, pagination, searchForm, fnGetData, fnResetPagination } = | ||||||
|  |   useListData(getOpenCircuitList, { | ||||||
|     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, |     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "6" } : {}, | ||||||
|   }); |   }); | ||||||
| const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData; |  | ||||||
| const data = reactive({ | const data = reactive({ | ||||||
|   flowChartDialog: { |   flowChartDialog: { | ||||||
|     visible: false, |     visible: false, | ||||||
|  |  | ||||||
|  | @ -131,10 +131,10 @@ const stateList = [ | ||||||
|   { ID: "-99", NAME: "已作废" }, |   { ID: "-99", NAME: "已作废" }, | ||||||
| ]; | ]; | ||||||
| const router = useRouter(); | const router = useRouter(); | ||||||
| const listData = useListData(getTemporaryElectricityUsageList, { | const { list, pagination, searchForm, fnGetData, fnResetPagination } = | ||||||
|  |   useListData(getTemporaryElectricityUsageList, { | ||||||
|     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "5" } : {}, |     otherParams: props.entrance === "archive" ? { APPLY_STATUS: "5" } : {}, | ||||||
|   }); |   }); | ||||||
| const { list, pagination, searchForm, fnGetData, fnResetPagination } = listData; |  | ||||||
| const data = reactive({ | const data = reactive({ | ||||||
|   flowChartDialog: { |   flowChartDialog: { | ||||||
|     visible: false, |     visible: false, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue