From fd285d6245ddd54c2eef8237eb878f573d665f94 Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期四, 07 七月 2022 18:27:39 +0800 Subject: [PATCH] lct --- src/utils/getStyleSheets.ts | 202 +- src/api/user/index.ts | 16 src/api/role/index.ts | 11 src/utils/directive.ts | 15 src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts | 21 src/utils/throttle.ts | 36 src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/index.vue | 417 +++-- src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue | 349 ++-- src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/components/riskControlMeasureDialog.vue | 390 +++-- vite.config.ts | 130 src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/components/safetyRiskAnalyseUnitDialog.vue | 334 ++-- src/api/department/index.ts | 11 .idea/prettier.xml | 7 src/api/doublePreventSystem/riskControlMeasure/index.ts | 22 src/api/login/index.ts | 34 src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue | 429 ++--- src/utils/request.ts | 130 src/api/doublePreventSystem/productionDevice/index.ts | 21 .idea/codeStyles/Project.xml | 10 src/main.ts | 10 src/views/doublePreventSystem/riskLevelManage/safetyRiskSpaceImg/index.vue | 14 .env.development | 2 /dev/null | 25 src/assets/style/index.scss | 7 src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue | 360 ++-- src/api/menu/index.ts | 75 .idea/codeStyles/codeStyleConfig.xml | 5 src/views/doublePreventSystem/riskLevelManage/productionDevice/components/productionDeviceDialog.vue | 289 ++- src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/components/safetyRiskEventDialog.vue | 234 +- .prettierrc.js | 74 src/api/doublePreventSystem/safetyRiskEvent/index.ts | 23 src/views/system/menu/component/menuDialog.vue | 518 +++--- 32 files changed, 2,185 insertions(+), 2,036 deletions(-) diff --git a/.env.development b/.env.development index 5d83d16..ea1c589 100644 --- a/.env.development +++ b/.env.development @@ -2,6 +2,6 @@ ENV = 'development' # 本地环境接口地址 -VITE_API_URL = 'http://192.168.0.8:8008' +VITE_API_URL = 'http://192.168.0.14:8008' # VITE_API_URL = 'http://192.168.0.8:8008' diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..5e08509 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,10 @@ +<component name="ProjectCodeStyleConfiguration"> + <code_scheme name="Project" version="173"> + <codeStyleSettings language="TypeScript"> + <indentOptions> + <option name="USE_TAB_CHARACTER" value="true" /> + <option name="SMART_TABS" value="true" /> + </indentOptions> + </codeStyleSettings> + </code_scheme> +</component> \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ +<component name="ProjectCodeStyleConfiguration"> + <state> + <option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" /> + </state> +</component> \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 0000000..4c1591e --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="PrettierConfiguration"> + <option name="myRunOnSave" value="true" /> + <option name="myFilesPattern" value="{**/*,*}.{js,ts,jsx,tsx,vue}" /> + </component> +</project> \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js index cff490a..4223d15 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,39 +1,39 @@ module.exports = { - // 一行最多多少个字符 - printWidth: 150, - // 指定每个缩进级别的空格数 - tabWidth: 2, - // 使用制表符而不是空格缩进行 - useTabs: true, - // 在语句末尾打印分号 - semi: true, - // 使用单引号而不是双引号 - singleQuote: true, - // 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>" - quoteProps: 'as-needed', - // 在JSX中使用单引号而不是双引号 - jsxSingleQuote: false, - // 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none - trailingComma: 'es5', - // 在对象文字中的括号之间打印空格 - bracketSpacing: true, - // jsx 标签的反尖括号需要换行 - jsxBracketSameLine: false, - // 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x - arrowParens: 'always', - // 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码 - rangeStart: 0, - rangeEnd: Infinity, - // 指定要使用的解析器,不需要写文件开头的 @prettier - requirePragma: false, - // 不需要自动在文件开头插入 @prettier - insertPragma: false, - // 使用默认的折行标准 always\never\preserve - proseWrap: 'preserve', - // 指定HTML文件的全局空格敏感度 css\strict\ignore - htmlWhitespaceSensitivity: 'css', - // Vue文件脚本和样式标签缩进 - vueIndentScriptAndStyle: false, - // 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>" - endOfLine: 'lf', + // 一行最多多少个字符 + printWidth: 150, + // 指定每个缩进级别的空格数 + tabWidth: 4, + // 使用制表符而不是空格缩进行 + useTabs: false, + // // 在语句末尾打印分号 + // semi: true, + // 使用单引号而不是双引号 + singleQuote: true, + // // 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>" + // quoteProps: 'as-needed', + // // 在JSX中使用单引号而不是双引号 + // jsxSingleQuote: false, + // // 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none + trailingComma: 'none', + // 在对象文字中的括号之间打印空格 + // bracketSpacing: true, + // // jsx 标签的反尖括号需要换行 + // jsxBracketSameLine: false, + // // 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x + // arrowParens: 'always', + // // 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码 + // rangeStart: 2, + // rangeEnd: Infinity, + // // 指定要使用的解析器,不需要写文件开头的 @prettier + // requirePragma: false, + // // 不需要自动在文件开头插入 @prettier + // insertPragma: false, + // // 使用默认的折行标准 always\never\preserve + // proseWrap: 'preserve', + // // 指定HTML文件的全局空格敏感度 css\strict\ignore + // htmlWhitespaceSensitivity: 'css', + // // Vue文件脚本和样式标签缩进 + // vueIndentScriptAndStyle: false, + // 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>" + endOfLine: 'lf' }; diff --git a/src/api/department/index.ts b/src/api/department/index.ts index 0ed427c..6f43002 100644 --- a/src/api/department/index.ts +++ b/src/api/department/index.ts @@ -2,25 +2,28 @@ export function departmentApi() { return { + // v1 getDepartmentList: () => { return request({ url: `/department/list`, - method: 'post', + method: 'post' }); }, + // v1 addDepartment: (data: object) => { return request({ url: `/department/add`, method: 'post', - data:data + data: data }); }, + // v1 modDepartment: (data: object) => { return request({ url: `/department/mod`, method: 'post', - data:data + data: data }); - }, + } }; } diff --git a/src/api/doublePreventSystem/productionDevice/index.ts b/src/api/doublePreventSystem/productionDevice/index.ts index 11acf60..4f59f32 100644 --- a/src/api/doublePreventSystem/productionDevice/index.ts +++ b/src/api/doublePreventSystem/productionDevice/index.ts @@ -1,40 +1,45 @@ -import request from '/@/utils/request' +import request from '/@/utils/request'; export function productionDeviceApi() { return { + // v1 getProductionDeviceList: (data: object) => { return request({ url: `/prevent/device/select/getDevicePage`, method: 'post', - data:data + data: data }); }, + // v1 addProductionDevice: (data: object) => { return request({ url: `/prevent/device/insert/saveDevice`, method: 'post', - data:data + data: data }); }, + // v1 modProductionDevice: (data: object) => { return request({ url: `/prevent/device/update/updateDevice`, method: 'post', - data:data + data: data }); }, + // v1 deleteProductionDevice: (data: object) => { return request({ url: `/prevent/device/delete/deleteDevice`, method: 'post', - data:data + data: data }); }, + // v1 getAllProductionDeviceList: () => { return request({ url: `/prevent/device/select/listDevices`, - method: 'post', + method: 'post' }); - }, - } + } + }; } diff --git a/src/api/doublePreventSystem/riskControlMeasure/index.ts b/src/api/doublePreventSystem/riskControlMeasure/index.ts index 0996093..01d190d 100644 --- a/src/api/doublePreventSystem/riskControlMeasure/index.ts +++ b/src/api/doublePreventSystem/riskControlMeasure/index.ts @@ -1,34 +1,44 @@ -import request from '/@/utils/request' +import request from '/@/utils/request'; export function riskControlMeasureApi() { return { + // v1 getRiskControlMeasureList: (data: object) => { return request({ url: `/prevent/riskControlMeasure/select/getRiskControlMeasurePage`, method: 'post', - data:data + data: data }); }, + // v1 addRiskControlMeasure: (data: object) => { return request({ url: `/prevent/riskControlMeasure/insert/saveRiskControlMeasure`, method: 'post', - data:data + data: data }); }, + // v1 modRiskControlMeasure: (data: object) => { return request({ url: `/prevent/riskControlMeasure/update/updateRiskControlMeasure`, method: 'post', - data:data + data: data }); }, + // v1 deleteRiskControlMeasure: (data: object) => { return request({ url: `/prevent/riskControlMeasure/delete/deleteRiskControlMeasure`, method: 'post', - data:data + data: data }); }, - } + getClassifyData: () => { + return request({ + url: `/prevent/riskControlMeasure/select/listMeasures`, + method: 'post' + }); + } + }; } diff --git a/src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts b/src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts index d036bfa..8f93426 100644 --- a/src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts +++ b/src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts @@ -1,40 +1,45 @@ -import request from '/@/utils/request' +import request from '/@/utils/request'; export function safetyRiskAnalyseUnitApi() { return { + // v1 getSafetyRiskAnalyseUnitList: (data: object) => { return request({ url: `/prevent/riskAnaUnit/select/getRiskUnitPage`, method: 'post', - data:data + data: data }); }, + // v1 addSafetyRiskAnalyseUnit: (data: object) => { return request({ url: `/prevent/riskAnaUnit/insert/saveRiskAnaUnit`, method: 'post', - data:data + data: data }); }, + // v1 modSafetyRiskAnalyseUnit: (data: object) => { return request({ url: `/prevent/riskAnaUnit/update/updateRiskAnaUnit`, method: 'post', - data:data + data: data }); }, + // v1 deleteSafetyRiskAnalyseUnit: (data: object) => { return request({ url: `/prevent/riskAnaUnit/delete/deleteRiskAnaUnit`, method: 'post', - data:data + data: data }); }, + // v1 getAllSafetyRiskAnalyseUnitList: () => { return request({ url: `/prevent/riskEvent/select/listRiskUnits`, - method: 'post', + method: 'post' }); - }, - } + } + }; } diff --git a/src/api/doublePreventSystem/safetyRiskEvent/index.ts b/src/api/doublePreventSystem/safetyRiskEvent/index.ts index 4e28e6a..0aa7087 100644 --- a/src/api/doublePreventSystem/safetyRiskEvent/index.ts +++ b/src/api/doublePreventSystem/safetyRiskEvent/index.ts @@ -1,34 +1,45 @@ -import request from '/@/utils/request' +import request from '/@/utils/request'; export function safetyRiskEventApi() { return { + // v1 getSafetyRiskEventList: (data: object) => { return request({ url: `/prevent/riskEvent/select/getRiskEventPage`, method: 'post', - data:data + data: data }); }, + // v1 addSafetyRiskEvent: (data: object) => { return request({ url: `/prevent/riskEvent/insert/saveRiskEvent`, method: 'post', - data:data + data: data }); }, + // v1 modSafetyRiskEvent: (data: object) => { return request({ url: `/prevent/riskEvent/update/updateRiskEvent`, method: 'post', - data:data + data: data }); }, + // v1 deleteSafetyRiskEvent: (data: object) => { return request({ url: `/prevent/riskEvent/delete/deleteRiskEvent`, method: 'post', - data:data + data: data }); }, - } + // v1 + getAllSafetyRiskEventList: () => { + return request({ + url: `/prevent/riskEvent/select/getListEvents`, + method: 'post' + }); + } + }; } diff --git a/src/api/login/index.ts b/src/api/login/index.ts index ca48515..0d27058 100644 --- a/src/api/login/index.ts +++ b/src/api/login/index.ts @@ -6,20 +6,22 @@ * @method signOut 用户退出登录 */ export function useLoginApi() { - return { - signIn: (params: object) => { - return request({ - url: '/auth/login', - method: 'post', - data: params, - }); - }, - signOut: (params: object) => { - return request({ - url: '/user/signOut', - method: 'post', - data: params, - }); - }, - }; + return { + // v1 + signIn: (params: object) => { + return request({ + url: '/auth/login', + method: 'post', + data: params + }); + }, + // v1 + signOut: (params: object) => { + return request({ + url: '/user/signOut', + method: 'post', + data: params + }); + } + }; } diff --git a/src/api/menu/index.ts b/src/api/menu/index.ts index e6b136c..d92bc29 100644 --- a/src/api/menu/index.ts +++ b/src/api/menu/index.ts @@ -7,39 +7,44 @@ * @method getMenuTest 获取后端动态路由菜单(test) */ export function useMenuApi() { - return { - getMenuAdmin: (value?: string) => { - return request({ - url: `/auth/menu?projectId= ${value}`, - method: 'post', - }); - }, - addMenu: (value?: object) => { - return request({ - url: `/menu/add`, - method: 'post', - data:value - }); - }, - modMenu: (value?: object) => { - return request({ - url: `/menu/mod`, - method: 'post', - data:value - }); - }, - deleteMenu: (value?: object) => { - return request({ - url: `/menu/del`, - method: 'post', - data:value, - }); - }, - getProjectList: () => { - return request({ - url: `/project/list`, - method: 'post', - }); - }, - }; + return { + // v1 + getMenuAdmin: (value?: string) => { + return request({ + url: `/auth/menu?projectId= ${value}`, + method: 'post' + }); + }, + // v1 + addMenu: (value?: object) => { + return request({ + url: `/menu/add`, + method: 'post', + data: value + }); + }, + // v1 + modMenu: (value?: object) => { + return request({ + url: `/menu/mod`, + method: 'post', + data: value + }); + }, + // v1 + deleteMenu: (value?: object) => { + return request({ + url: `/menu/del`, + method: 'post', + data: value + }); + }, + // v1 + getProjectList: () => { + return request({ + url: `/project/list`, + method: 'post' + }); + } + }; } diff --git a/src/api/role/index.ts b/src/api/role/index.ts index 1d1ac38..e0b9151 100644 --- a/src/api/role/index.ts +++ b/src/api/role/index.ts @@ -2,25 +2,28 @@ export function useRoleApi() { return { + // v1 getRoleList: () => { return request({ url: `/role/list`, - method: 'post', + method: 'post' }); }, + // v1 addRole: (data: object) => { return request({ url: `/role/add`, method: 'post', - data:data + data: data }); }, + // v1 modRole: (data: object) => { return request({ url: `/role/mod`, method: 'post', - data:data + data: data }); - }, + } }; } diff --git a/src/api/user/index.ts b/src/api/user/index.ts index 7e4889a..8959ea7 100644 --- a/src/api/user/index.ts +++ b/src/api/user/index.ts @@ -2,32 +2,36 @@ export function userApi() { return { + // v1 getUserList: (data: any) => { return request({ url: `/account/page/list`, method: 'post', - data:data + data: data }); }, + // v1 addUser: (data: object) => { return request({ url: `/account/add`, method: 'post', - data:data + data: data }); }, + // v1 modUser: (data: object) => { return request({ url: `/account/mod`, method: 'post', - data:data + data: data }); }, - getUserLByDepartment: (depId : number | null) => { + // v1 + getUserLByDepartment: (depId: number | null) => { return request({ url: `/account/dep/list?depId=${depId}`, - method: 'get', + method: 'get' }); - }, + } }; } diff --git a/src/assets/style/index.scss b/src/assets/style/index.scss new file mode 100644 index 0000000..13bff85 --- /dev/null +++ b/src/assets/style/index.scss @@ -0,0 +1,7 @@ +.input-box{ + width: 200px !important; +} +.basic-line{ + display: inline-block; + padding-left: 10px; +} diff --git a/src/main.ts b/src/main.ts index bc84b4a..d8ef740 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,22 +5,22 @@ import { directive } from '/@/utils/directive'; import { i18n } from '/@/i18n/index'; import other from '/@/utils/other'; - +import '/@/assets/style/index.scss'; import ElementPlus from 'element-plus'; -import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import * as ElementPlusIconsVue from '@element-plus/icons-vue'; import 'element-plus/dist/index.css'; import '/@/theme/index.scss'; import mitt from 'mitt'; import VueGridLayout from 'vue-grid-layout'; -import locale from 'element-plus/lib/locale/lang/zh-cn' +import locale from 'element-plus/lib/locale/lang/zh-cn'; const app = createApp(App); for (const [key, component] of Object.entries(ElementPlusIconsVue)) { - app.component(key, component) + app.component(key, component); } directive(app); other.elSvg(app); -app.use(pinia).use(router).use(ElementPlus, { i18n: i18n.global.t,locale }).use(i18n).use(VueGridLayout).mount('#app'); +app.use(pinia).use(router).use(ElementPlus, { i18n: i18n.global.t, locale }).use(i18n).use(VueGridLayout).mount('#app'); app.config.globalProperties.mittBus = mitt(); diff --git a/src/utils/debounce.ts b/src/utils/debounce.ts deleted file mode 100644 index e6f754d..0000000 --- a/src/utils/debounce.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { App } from 'vue' - -export function preventClick(app: App){ - app.directive('debounce', { - mounted(el, binding) { - let timer : NodeJS.Timeout | null = null - el.addEventListener('click', () => { - debugger - let firstClick: Boolean = !timer; - if(firstClick){ - binding.value - } - if(timer){ - clearTimeout(timer) - } - timer = setTimeout(() => { - timer = null - if(!firstClick){ - binding.value - } - },3000); - }) - } - }) -} diff --git a/src/utils/directive.ts b/src/utils/directive.ts index a75b187..ccac511 100644 --- a/src/utils/directive.ts +++ b/src/utils/directive.ts @@ -1,6 +1,7 @@ import type { App } from 'vue'; import { authDirective } from '/@/utils/authDirective'; import { wavesDirective, dragDirective } from '/@/utils/customDirective'; +import { preventClick } from '/@/utils/throttle'; /** * 导出指令方法:v-xxx @@ -9,10 +10,12 @@ * @methods dragDirective 自定义拖动指令,用法:v-drag */ export function directive(app: App) { - // 用户权限指令 - authDirective(app); - // 按钮波浪指令 - wavesDirective(app); - // 自定义拖动指令 - dragDirective(app); + // 用户权限指令 + authDirective(app); + // 按钮波浪指令 + wavesDirective(app); + // 自定义拖动指令 + dragDirective(app); + + preventClick(app); } diff --git a/src/utils/getStyleSheets.ts b/src/utils/getStyleSheets.ts index 90252c3..79144d7 100644 --- a/src/utils/getStyleSheets.ts +++ b/src/utils/getStyleSheets.ts @@ -1,101 +1,101 @@ -import { nextTick } from 'vue'; -import * as svg from '@element-plus/icons-vue'; - -// 获取阿里字体图标 -const getAlicdnIconfont = () => { - return new Promise((resolve, reject) => { - nextTick(() => { - const styles: any = document.styleSheets; - let sheetsList = []; - let sheetsIconList = []; - for (let i = 0; i < styles.length; i++) { - if (styles[i].href && styles[i].href.indexOf('at.alicdn.com') > -1) { - sheetsList.push(styles[i]); - } - } - for (let i = 0; i < sheetsList.length; i++) { - for (let j = 0; j < sheetsList[i].cssRules.length; j++) { - if (sheetsList[i].cssRules[j].selectorText && sheetsList[i].cssRules[j].selectorText.indexOf('.icon-') > -1) { - sheetsIconList.push( - `${sheetsList[i].cssRules[j].selectorText.substring(1, sheetsList[i].cssRules[j].selectorText.length).replace(/\:\:before/gi, '')}` - ); - } - } - } - if (sheetsIconList.length > 0) resolve(sheetsIconList); - else reject('未获取到值,请刷新重试'); - }); - }); -}; - -// 初始化获取 css 样式,获取 element plus 自带 svg 图标,增加了 ele- 前缀,使用时:ele-Aim -const getElementPlusIconfont = () => { - return new Promise((resolve, reject) => { - nextTick(() => { - const icons = svg as any; - const sheetsIconList = []; - for (const i in icons) { - sheetsIconList.push(`ele-${icons[i].name}`); - } - if (sheetsIconList.length > 0) resolve(sheetsIconList); - else reject('未获取到值,请刷新重试'); - }); - }); -}; - -// 初始化获取 css 样式,这里使用 fontawesome 的图标 -const getAwesomeIconfont = () => { - return new Promise((resolve, reject) => { - nextTick(() => { - const styles: any = document.styleSheets; - let sheetsList = []; - let sheetsIconList = []; - for (let i = 0; i < styles.length; i++) { - if (styles[i].href && styles[i].href.indexOf('netdna.bootstrapcdn.com') > -1) { - sheetsList.push(styles[i]); - } - } - for (let i = 0; i < sheetsList.length; i++) { - for (let j = 0; j < sheetsList[i].cssRules.length; j++) { - if ( - sheetsList[i].cssRules[j].selectorText && - sheetsList[i].cssRules[j].selectorText.indexOf('.fa-') === 0 && - sheetsList[i].cssRules[j].selectorText.indexOf(',') === -1 - ) { - if (/::before/.test(sheetsList[i].cssRules[j].selectorText)) { - sheetsIconList.push( - `${sheetsList[i].cssRules[j].selectorText.substring(1, sheetsList[i].cssRules[j].selectorText.length).replace(/\:\:before/gi, '')}` - ); - } - } - } - } - if (sheetsIconList.length > 0) resolve(sheetsIconList.reverse()); - else reject('未获取到值,请刷新重试'); - }); - }); -}; - -/** - * 获取字体图标 `document.styleSheets` - * @method ali 获取阿里字体图标 `<i class="iconfont 图标类名"></i>` - * @method ele 获取 element plus 自带图标 `<i class="图标类名"></i>` - * @method ali 获取 fontawesome 的图标 `<i class="fa 图标类名"></i>` - */ -const initIconfont = { - // iconfont - ali: () => { - return getAlicdnIconfont(); - }, - // element plus - ele: () => { - return getElementPlusIconfont(); - }, - // fontawesome - awe: () => { - return getAwesomeIconfont(); - }, -}; - -// 导出方法 -export default initIconfont; +// import { nextTick } from 'vue'; +// import * as svg from '@element-plus/icons-vue'; +// +// // 获取阿里字体图标 +// const getAlicdnIconfont = () => { +// return new Promise((resolve, reject) => { +// nextTick(() => { +// const styles: any = document.styleSheets; +// let sheetsList = []; +// let sheetsIconList = []; +// for (let i = 0; i < styles.length; i++) { +// if (styles[i].href && styles[i].href.indexOf('at.alicdn.com') > -1) { +// sheetsList.push(styles[i]); +// } +// } +// for (let i = 0; i < sheetsList.length; i++) { +// for (let j = 0; j < sheetsList[i].cssRules.length; j++) { +// if (sheetsList[i].cssRules[j].selectorText && sheetsList[i].cssRules[j].selectorText.indexOf('.icon-') > -1) { +// sheetsIconList.push( +// `${sheetsList[i].cssRules[j].selectorText.substring(1, sheetsList[i].cssRules[j].selectorText.length).replace(/\:\:before/gi, '')}` +// ); +// } +// } +// } +// if (sheetsIconList.length > 0) resolve(sheetsIconList); +// else reject('未获取到值,请刷新重试'); +// }); +// }); +// }; +// +// // 初始化获取 css 样式,获取 element plus 自带 svg 图标,增加了 ele- 前缀,使用时:ele-Aim +// const getElementPlusIconfont = () => { +// return new Promise((resolve, reject) => { +// nextTick(() => { +// const icons = svg as any; +// const sheetsIconList = []; +// for (const i in icons) { +// sheetsIconList.push(`ele-${icons[i].name}`); +// } +// if (sheetsIconList.length > 0) resolve(sheetsIconList); +// else reject('未获取到值,请刷新重试'); +// }); +// }); +// }; +// +// // 初始化获取 css 样式,这里使用 fontawesome 的图标 +// const getAwesomeIconfont = () => { +// return new Promise((resolve, reject) => { +// nextTick(() => { +// const styles: any = document.styleSheets; +// let sheetsList = []; +// let sheetsIconList = []; +// for (let i = 0; i < styles.length; i++) { +// if (styles[i].href && styles[i].href.indexOf('netdna.bootstrapcdn.com') > -1) { +// sheetsList.push(styles[i]); +// } +// } +// for (let i = 0; i < sheetsList.length; i++) { +// for (let j = 0; j < sheetsList[i].cssRules.length; j++) { +// if ( +// sheetsList[i].cssRules[j].selectorText && +// sheetsList[i].cssRules[j].selectorText.indexOf('.fa-') === 0 && +// sheetsList[i].cssRules[j].selectorText.indexOf(',') === -1 +// ) { +// if (/::before/.test(sheetsList[i].cssRules[j].selectorText)) { +// sheetsIconList.push( +// `${sheetsList[i].cssRules[j].selectorText.substring(1, sheetsList[i].cssRules[j].selectorText.length).replace(/\:\:before/gi, '')}` +// ); +// } +// } +// } +// } +// if (sheetsIconList.length > 0) resolve(sheetsIconList.reverse()); +// else reject('未获取到值,请刷新重试'); +// }); +// }); +// }; +// +// /** +// * 获取字体图标 `document.styleSheets` +// * @method ali 获取阿里字体图标 `<i class="iconfont 图标类名"></i>` +// * @method ele 获取 element plus 自带图标 `<i class="图标类名"></i>` +// * @method ali 获取 fontawesome 的图标 `<i class="fa 图标类名"></i>` +// */ +// const initIconfont = { +// // iconfont +// ali: () => { +// return getAlicdnIconfont(); +// }, +// // element plus +// ele: () => { +// return getElementPlusIconfont(); +// }, +// // fontawesome +// awe: () => { +// return getAwesomeIconfont(); +// }, +// }; +// +// // 导出方法 +// export default initIconfont; diff --git a/src/utils/request.ts b/src/utils/request.ts index 16c6f38..c1b68b5 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,94 +1,88 @@ import axios from 'axios'; -import { ElMessage, ElMessageBox } from 'element-plus'; +import { ElMessage } from 'element-plus'; import { Session } from '/@/utils/storage'; -import {useUserInfo} from "/@/stores/userInfo"; -import {storeToRefs} from "pinia"; -import JSONbig from 'json-bigint' +import JSONbig from 'json-bigint'; // var jsonBig = require('json-bigint')({ "storeAsString": true }); // 配置新建一个 axios 实例 const service = axios.create({ - baseURL: import.meta.env.VITE_API_URL as any, - timeout: 50000, - headers: { 'Content-Type': 'application/json' }, + baseURL: import.meta.env.VITE_API_URL as any, + timeout: 50000, + headers: { 'Content-Type': 'application/json' } }); service.interceptors.request.use( - (config) => { - // 在发送请求之前做些什么 token - if (Session.get('token')) { - const userInfo = useUserInfo() - const { userInfos } = storeToRefs(userInfo); - (<any>config.headers).common['Authorization'] = `${Session.get('token')}`; - (<any>config.headers).common['uid'] = `${Session.get('uid')}`; - } - return config; - }, - (error) => { - // 对请求错误做些什么 - return Promise.reject(error); - } + (config) => { + // 在发送请求之前做些什么 token + if (Session.get('token')) { + (<any>config.headers).common['Authorization'] = `${Session.get('token')}`; + (<any>config.headers).common['uid'] = `${Session.get('uid')}`; + } + return config; + }, + (error) => { + // 对请求错误做些什么 + return Promise.reject(error); + } ); service.defaults.transformResponse = [ - function(data) { - + function (data) { try { // 正常同通过return JSON.parse(data)对数据进行转换 // 但是转化完成的数据可能超出安全数据长度 // 因此我们定制使用第三包来转化 - return JSONbig.parse(data) + return JSONbig.parse(data); } catch (err) { console.log(err); // 转换失败返回一个空对象 - return {} + return {}; } } -] +]; service.interceptors.response.use( - - (response) => { - // 对响应数据做点什么 - if(response.data.code && (response.data.code ==='A0215' || response.data.code === 'A0214' || response.data.code === 'A0213')){ - Session.clear() - window.location.href = '/' - return Promise.reject(response) - } - // if(response.data.code && response.data.code !== '200'){ - return Promise.resolve(response) - // } - // Session.clear() - // window.location.href = '/' - // return Promise.reject(response) - // const res = response.data; - // debugger - // if (res.code && res.code !== 0) { - // // `token` 过期或者账号已在别处登录 - // if (res.code === 401 || res.code === 4001) { - // Session.clear(); // 清除浏览器全部临时缓存 - // window.location.href = '/'; // 去登录页 - // ElMessageBox.alert('你已被登出,请重新登录', '提示', {}) - // .then(() => {}) - // .catch(() => {}); - // } - // return Promise.reject(service.interceptors.response); - // } else { - // return response.data; - // } - }, - (error) => { - // 对响应错误做点什么 - if (error.message.indexOf('timeout') != -1) { - ElMessage.error('网络超时'); - } else if (error.message == 'Network Error') { - ElMessage.error('网络连接错误'); - } else { - if (error.response.data) ElMessage.error(error.response.statusText); - else ElMessage.error('接口路径找不到'); - } - return Promise.reject(error); - } + (response) => { + // 对响应数据做点什么 + if (response.data.code && (response.data.code === 'A0215' || response.data.code === 'A0214' || response.data.code === 'A0213')) { + Session.clear(); + window.location.href = '/'; + return Promise.reject(response); + } + // if(response.data.code && response.data.code !== '200'){ + return Promise.resolve(response); + // } + // Session.clear() + // window.location.href = '/' + // return Promise.reject(response) + // const res = response.data; + // debugger + // if (res.code && res.code !== 0) { + // // `token` 过期或者账号已在别处登录 + // if (res.code === 401 || res.code === 4001) { + // Session.clear(); // 清除浏览器全部临时缓存 + // window.location.href = '/'; // 去登录页 + // ElMessageBox.alert('你已被登出,请重新登录', '提示', {}) + // .then(() => {}) + // .catch(() => {}); + // } + // return Promise.reject(service.interceptors.response); + // } else { + // return response.data; + // } + }, + (error) => { + // 对响应错误做点什么 + if (error.message.indexOf('timeout') != -1) { + ElMessage.error('网络超时'); + } else if (error.message == 'Network Error') { + ElMessage.error('网络连接错误'); + } else { + if (error.response.data) ElMessage.error(error.response.statusText); + else ElMessage.error('接口路径找不到'); + } + return Promise.reject(error); + } ); export default service; diff --git a/src/utils/throttle.ts b/src/utils/throttle.ts new file mode 100644 index 0000000..52e9528 --- /dev/null +++ b/src/utils/throttle.ts @@ -0,0 +1,36 @@ +import { App } from 'vue'; + +export function preventClick(app: App) { + app.directive('throttle', { + mounted(el: any, binding: any) { + el.addEventListener('click', () => { + if (!el.disabled) { + el.disabled = true; + setTimeout(() => { + el.disabled = false; + }, binding.value || 2000); + } + }); + } + + // mounted(el, binding) { + // let timer : NodeJS.Timeout | null = null + // el.addEventListener('click', () => { + // debugger + // let firstClick: Boolean = !timer; + // if(firstClick){ + // binding.value + // } + // if(timer){ + // clearTimeout(timer) + // } + // timer = setTimeout(() => { + // timer = null + // if(!firstClick){ + // binding.value + // } + // },3000); + // }) + // } + }); +} diff --git a/src/views/doublePreventSystem/riskLevelManage/productionDevice/components/productionDeviceDialog.vue b/src/views/doublePreventSystem/riskLevelManage/productionDevice/components/productionDeviceDialog.vue index 8c0a980..5fa3450 100644 --- a/src/views/doublePreventSystem/riskLevelManage/productionDevice/components/productionDeviceDialog.vue +++ b/src/views/doublePreventSystem/riskLevelManage/productionDevice/components/productionDeviceDialog.vue @@ -1,189 +1,200 @@ <template> <div class="system-add-menu-container"> <el-dialog :title="title" v-model="isShowProductionDeviceDialog" width="600px"> - <el-form :model="productionDeviceForm" :rules="productionDeviceFormRules" ref="productionDeviceFormRef" size="default" label-width="120px"> + <el-form + :model="productionDeviceForm" + :rules="productionDeviceFormRules" + ref="productionDeviceFormRef" + size="default" + label-width="120px" + > <el-row :gutter="35"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="生产装置名称" prop="produceDeviceName"> - <el-input class="input-length" v-model="productionDeviceForm.produceDeviceName" placeholder="请输入生产装置名称" clearable></el-input> + <el-input + class="input-length" + v-model="productionDeviceForm.produceDeviceName" + placeholder="请输入生产装置名称" + clearable + ></el-input> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="所属部门" prop="depId"> <el-cascader - :options="departmentList" - :props="{ emitPath: false, checkStrictly: true, value: 'id', label: 'name' }" - placeholder="请选择部门" - clearable - filterable - style="width:85%" - v-model="productionDeviceForm.depId" + :options="departmentList" + :props="{ emitPath: false, checkStrictly: true, value: 'id', label: 'name' }" + placeholder="请选择部门" + clearable + filterable + style="width: 85%" + v-model="productionDeviceForm.depId" > </el-cascader> -<!-- <el-select class="input-length" v-model="productionDeviceForm.depName" placeholder="请选择所属部门" clearable filterable></el-select>--> + <!-- <el-select class="input-length" v-model="productionDeviceForm.depName" placeholder="请选择所属部门" clearable filterable></el-select>--> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="风险等级" prop="riskLevel"> - <el-select class="input-length" v-model="productionDeviceForm.riskLevel" placeholder="请选择风险等级" clearable filterable> - <el-option - v-for="item in levelList" - :key="item.id" - :label="item.name" - :value="item.id" - ></el-option> + <el-select + class="input-length" + v-model="productionDeviceForm.riskLevel" + placeholder="请选择风险等级" + clearable + filterable + > + <el-option v-for="item in levelList" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="区域位置" prop="location"> - <el-input class="input-length" v-model="productionDeviceForm.location" type="textarea" placeholder="请输入区域位置" maxlength="150"></el-input> + <el-input + class="input-length" + v-model="productionDeviceForm.location" + type="textarea" + placeholder="请输入区域位置" + maxlength="150" + ></el-input> </el-form-item> </el-col> </el-row> </el-form> <template #footer> - <span class="dialog-footer"> - <el-button @click="isShowProductionDeviceDialog = !isShowProductionDeviceDialog" size="default">取 消</el-button> - <el-button type="primary" @click="submitProductionDevice" size="default">确 实</el-button> - </span> + <span class="dialog-footer"> + <el-button @click="isShowProductionDeviceDialog = !isShowProductionDeviceDialog" size="default">取 消</el-button> + <el-button type="primary" @click="submitProductionDevice" v-throttle size="default">确 实</el-button> + </span> </template> </el-dialog> </div> </template> <script lang="ts"> - interface stateType{ - isShowProductionDeviceDialog:Boolean, - productionDeviceForm:{ - produceDeviceName: string, - depId: number | null, - riskLevel: number | null, - location: string, - }, - title: string, - departmentList: [], - levelList: Array<levelListState>, - productionDeviceFormRules:{} - } - interface levelListState { +interface stateType { + isShowProductionDeviceDialog: Boolean; + productionDeviceForm: { + produceDeviceName: string; + depId: number | null; + riskLevel: number | null; + location: string; + }; + title: string; + departmentList: []; + levelList: Array<levelListState>; + productionDeviceFormRules: {}; +} +interface levelListState {} +import { reactive, toRefs, ref } from 'vue'; +import { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice'; +import { ElMessage } from 'element-plus'; +export default { + name: 'productionDeviceDialog', + setup(props: any, context: any) { + const productionDeviceFormRef = ref(); + const state = reactive<stateType>({ + title: '', + departmentList: [], + isShowProductionDeviceDialog: false, + levelList: [ + { id: 1, name: '低风险' }, + { id: 2, name: '一般风险' }, + { id: 3, name: '较大风险' }, + { id: 4, name: '重大风险' } + ], + productionDeviceForm: { + produceDeviceName: '', + depId: null, + riskLevel: null, + location: '' + }, + productionDeviceFormRules: { + produceDeviceName: [{ required: true, message: '请填写生产装置名称', trigger: 'blur' }], + depId: [{ required: true, message: '请选择部门', trigger: 'change' }], + riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }], + location: [{ required: true, message: '请填写区域位置', trigger: 'blur' }] + } + }); - } - import { reactive, toRefs, ref} from 'vue' - import { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice'; - import { ElMessage } from 'element-plus'; - export default { - name: "productionDeviceDialog", - setup(props, context) { - const productionDeviceFormRef = ref(); - const state = reactive<stateType>({ - title:'', - departmentList: [], - isShowProductionDeviceDialog: false, - levelList:[{id:1,name:'低风险'},{id:2,name:'一般风险'},{id:3,name:'较大风险'},{id:4,name:'重大风险'},], - productionDeviceForm: { + //打开模态框 + const openProductionDeviceDialog = (type: string, value: object, department: []) => { + state.isShowProductionDeviceDialog = true; + state.departmentList = department; + setTimeout(() => { + productionDeviceFormRef.value.clearValidate(); + }); + if (type === '新增') { + state.title = '新增生产装置'; + state.productionDeviceForm = { produceDeviceName: '', depId: null, riskLevel: null, - location: '', - }, - productionDeviceFormRules:{ - produceDeviceName: [ - { required: true, message: '请填写生产装置名称', trigger: 'blur' }, - ], - depId: [ - { required: true, message: '请选择部门', trigger: 'change' }, - ], - riskLevel: [ - { required: true, message: '请选择风险等级', trigger: 'change' }, - ], - location: [ - { required: true, message: '请填写区域位置', trigger: 'blur' }, - ], - } + location: '' + }; + } else { + state.title = '修改生产装置'; + state.productionDeviceForm = JSON.parse(JSON.stringify(value)); + } + }; - }); - - //打开模态框 - const openProductionDeviceDialog = (type: string, value: object, department: []) => { - state.isShowProductionDeviceDialog = true; - state.departmentList = department; - setTimeout(() => { - productionDeviceFormRef.value.clearValidate() - }) - if(type === '新增'){ - state.title = '新增生产装置'; - state.productionDeviceForm = { - produceDeviceName: '', - depId: null, - riskLevel: null, - location: '', - }; - }else{ - state.title = '修改生产装置'; - state.productionDeviceForm = JSON.parse(JSON.stringify(value)); - } - }; - - //新增修改提交 - const submitProductionDevice = async () => { - productionDeviceFormRef.value.validate( async (valid: Boolean) => { - if(valid){ - if(state.title === '新增生产装置'){ - let res = await productionDeviceApi().addProductionDevice(state.productionDeviceForm); - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'生产装置新增成功', - duration:2000 - }); - state.isShowProductionDeviceDialog = false; - context.emit('refreshProductionDevice'); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - }else{ - let res = await productionDeviceApi().modProductionDevice(state.productionDeviceForm); - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'生产装置修改成功', - duration:2000 + //新增修改提交 + const submitProductionDevice = async () => { + productionDeviceFormRef.value.validate(async (valid: Boolean) => { + if (valid) { + if (state.title === '新增生产装置') { + let res = await productionDeviceApi().addProductionDevice(state.productionDeviceForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '生产装置新增成功', + duration: 2000 }); state.isShowProductionDeviceDialog = false; context.emit('refreshProductionDevice'); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); } - }else{ - ElMessage({ - type:'warning', - message:'请完善基本信息', - }); + } else { + let res = await productionDeviceApi().modProductionDevice(state.productionDeviceForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '生产装置修改成功', + duration: 2000 + }); + state.isShowProductionDeviceDialog = false; + context.emit('refreshProductionDevice'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } } - }) - - } + } else { + ElMessage({ + type: 'warning', + message: '请完善基本信息' + }); + } + }); + }; - return{ - ...toRefs(state), - productionDeviceFormRef, - submitProductionDevice, - openProductionDeviceDialog, - }; - } + return { + ...toRefs(state), + productionDeviceFormRef, + submitProductionDevice, + openProductionDeviceDialog + }; } +}; </script> <style scoped> -.input-length{ - width:85%; +.input-length { + width: 85%; } </style> diff --git a/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue b/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue index 63d591b..c240e35 100644 --- a/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue +++ b/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue @@ -2,36 +2,32 @@ <div class="system-role-container"> <el-card shadow="hover"> <div class="system-user-search mb15"> - <div class="basic-search"> + <div class="basic-line"> <span>风险等级:</span> - <el-select v-model="productionDeviceData.params.riskLevel" clearable filterable class="ml10" placeholder="请选择风险等级"> - <el-option - v-for="item in levelList" - :key="item.id" - :label="item.name" - :value="item.id" - ></el-option> + <el-select v-model="productionDeviceData.params.riskLevel" clearable filterable class="input-box" placeholder="请选择风险等级"> + <el-option v-for="item in levelList" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </div> - <div class="basic-search"> + <div class="basic-line"> <span>部门:</span> <el-cascader - :options="departmentList" - :props="{ emitPath: false, checkStrictly: true, value: 'id', label: 'name' }" - placeholder="请选择部门" - clearable - filterable - v-model="productionDeviceData.params.depId" + :options="departmentList" + :props="{ emitPath: false, checkStrictly: true, value: 'id', label: 'name' }" + placeholder="请选择部门" + clearable + filterable + class="input-box" + v-model="productionDeviceData.params.depId" > </el-cascader> </div> - <el-button size="default" type="primary" class="ml10" @click="handleSearch"> + <el-button size="default" type="primary" class="ml10" v-throttle @click="handleSearch"> <el-icon> <ele-Search /> </el-icon> 查询 </el-button> - <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增','')"> + <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增', '')"> <el-icon> <ele-FolderAdd /> </el-icon> @@ -44,191 +40,187 @@ <el-table-column prop="depName" label="所属部门" show-overflow-tooltip></el-table-column> <el-table-column prop="riskLevel" label="风险等级" show-overflow-tooltip></el-table-column> <el-table-column prop="location" label="区域位置" show-overflow-tooltip></el-table-column> - <el-table-column prop="status" label="状态" show-overflow-tooltip> - - </el-table-column> + <el-table-column prop="status" label="状态" show-overflow-tooltip> </el-table-column> <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="gtmCreate" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="lastEditByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column prop="gtmCreate" label="最后修改时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="lastEditUserName" label="最后修改人" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtModitify" label="最后修改时间" show-overflow-tooltip></el-table-column> <el-table-column label="操作" width="150"> <template #default="scope"> - <el-button size="small" text type="primary" @click="onOpenDialogRef('修改',scope.row)">修改</el-button> + <el-button size="small" text type="primary" @click="onOpenDialogRef('修改', scope.row)">修改</el-button> <el-button size="small" text type="danger" @click="onDelProductionDevice(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <el-pagination - @size-change="onHandleSizeChange" - @current-change="onHandleCurrentChange" - class="mt15" - :pager-count="5" - :page-sizes="[10, 20, 30]" - v-model:current-page="productionDeviceData.params.pageIndex" - background - v-model:page-size="productionDeviceData.params.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="productionDeviceData.total" - > - </el-pagination> + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + class="mt15" + :pager-count="5" + :page-sizes="[10, 20, 30]" + v-model:current-page="productionDeviceData.params.pageIndex" + background + v-model:page-size="productionDeviceData.params.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="productionDeviceData.total" + > + </el-pagination> </el-card> - <productionDeviceDialog ref="productionDeviceDialogRef" @refreshProductionDevice ="initProductionDeviceTableData"/> + <productionDeviceDialog ref="productionDeviceDialogRef" @refreshProductionDevice="initProductionDeviceTableData" /> </div> </template> <script lang="ts"> - import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'; - import { ElMessageBox, ElMessage } from 'element-plus'; - import productionDeviceDialog from './components/productionDeviceDialog.vue'; - import {productionDeviceApi} from "/@/api/doublePreventSystem/productionDevice/index.ts"; - import { departmentApi } from '/@/api/department'; +import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'; +import { ElMessageBox, ElMessage } from 'element-plus'; +import productionDeviceDialog from './components/productionDeviceDialog.vue'; +import { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice/index.ts'; +import { departmentApi } from '/@/api/department'; - // 定义接口来定义对象的类型 - interface TableData { - roleName: string; - roleSign: string; - describe: string; - sort: number; - status: boolean; - createTime: string; - } - interface TableDataState { - productionDeviceData: { - data: Array<TableData>; - total: number; - loading: boolean; - params: { - pageIndex: number; - pageSize: number; - riskLevel: number | null; - status: number; - depId: number | null; - location: string | null; - produceDeviceName: string | null; - }; +// 定义接口来定义对象的类型 +interface TableData { + roleName: string; + roleSign: string; + describe: string; + sort: number; + status: boolean; + createTime: string; +} +interface TableDataState { + productionDeviceData: { + data: Array<TableData>; + total: number; + loading: boolean; + params: { + pageIndex: number; + pageSize: number; + riskLevel: number | null; + status: number; + depId: number | null; + location: string | null; + produceDeviceName: string | null; }; - departmentList:Array<DepartmentState>; - levelList:Array<levelListState>; - } - interface levelListState { + }; + departmentList: Array<DepartmentState>; + levelList: Array<levelListState>; +} +interface levelListState {} +interface DepartmentState {} - } - interface DepartmentState { - - } - - export default defineComponent({ - name: 'productionDevice', - components: { productionDeviceDialog }, - setup() { - const productionDeviceDialogRef = ref(); - const state = reactive<TableDataState>({ - productionDeviceData: { - data: [], - total: 0, - loading: false, - params: { - pageIndex: 1, - pageSize: 10, - riskLevel: null, - status: 1, - depId: null, - location: null, - produceDeviceName: null - }, - }, - departmentList:[], - levelList:[{id:1,name:'低风险'},{id:2,name:'一般风险'},{id:3,name:'较大风险'},{id:4,name:'重大风险'},] - }); - // 初始化表格数据 - const initProductionDeviceTableData = async () => { - let res = await productionDeviceApi().getProductionDeviceList(state.productionDeviceData.params) - if(res.data.code === '200'){ - state.productionDeviceData.data = res.data.data; - state.productionDeviceData.total = res.data.count; - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) +export default defineComponent({ + name: 'productionDevice', + components: { productionDeviceDialog }, + setup() { + const productionDeviceDialogRef = ref(); + const state = reactive<TableDataState>({ + productionDeviceData: { + data: [], + total: 0, + loading: false, + params: { + pageIndex: 1, + pageSize: 10, + riskLevel: null, + status: 1, + depId: null, + location: null, + produceDeviceName: null } - }; - - const getDepartmentData = async () => { - let res = await departmentApi().getDepartmentList() - if(res.data.code === '200'){ - state.departmentList = res.data.data - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) - } - } - - // 打开生产装置弹窗 - const onOpenDialogRef = (type: string, value: any) => { - productionDeviceDialogRef.value.openProductionDeviceDialog(type, value, state.departmentList); - }; - // 删除角色 - const onDelProductionDevice = (row: any) => { - ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.produceDeviceName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', + }, + departmentList: [], + levelList: [ + { id: 1, name: '低风险' }, + { id: 2, name: '一般风险' }, + { id: 3, name: '较大风险' }, + { id: 4, name: '重大风险' } + ] + }); + // 初始化表格数据 + const initProductionDeviceTableData = async () => { + let res = await productionDeviceApi().getProductionDeviceList(state.productionDeviceData.params); + if (res.data.code === '200') { + state.productionDeviceData.data = res.data.data; + state.productionDeviceData.total = res.data.count; + } else { + ElMessage({ type: 'warning', - }).then(async () => { - let res = await productionDeviceApi().deleteProductionDevice({id:row.id}) - if(res.data.code ==='200'){ - ElMessage({ - type:'success', - duration:2000, - message:'删除成功' - }) - await initProductionDeviceTableData() - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) - } - }).catch(() => {}); - }; - const handleSearch = () => { - initProductionDeviceTableData() + message: res.data.msg + }); } - // 分页改变 - const onHandleSizeChange = (val: number) => { - state.productionDeviceData.params.pageSize = val; - initProductionDeviceTableData() - }; - // 分页改变 - const onHandleCurrentChange = (val: number) => { - state.productionDeviceData.params.pageIndex = val; - initProductionDeviceTableData() - }; - // 页面加载时 - onMounted(() => { - initProductionDeviceTableData(); - getDepartmentData(); - }); - return { - handleSearch, - onOpenDialogRef, - onHandleSizeChange, - onDelProductionDevice, - onHandleCurrentChange, - productionDeviceDialog, - productionDeviceDialogRef, - initProductionDeviceTableData, - ...toRefs(state), - }; - }, - }); + }; + + const getDepartmentData = async () => { + let res = await departmentApi().getDepartmentList(); + if (res.data.code === '200') { + state.departmentList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 打开生产装置弹窗 + const onOpenDialogRef = (type: string, value: any) => { + productionDeviceDialogRef.value.openProductionDeviceDialog(type, value, state.departmentList); + }; + // 删除角色 + const onDelProductionDevice = (row: any) => { + ElMessageBox.confirm(`此操作将永久删除该条生产装置:“${row.produceDeviceName}”,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + let res = await productionDeviceApi().deleteProductionDevice({ id: row.id }); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + duration: 2000, + message: '删除成功' + }); + await initProductionDeviceTableData(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + .catch(() => {}); + }; + const handleSearch = () => { + initProductionDeviceTableData(); + }; + // 分页改变 + const onHandleSizeChange = (val: number) => { + state.productionDeviceData.params.pageSize = val; + initProductionDeviceTableData(); + }; + // 分页改变 + const onHandleCurrentChange = (val: number) => { + state.productionDeviceData.params.pageIndex = val; + initProductionDeviceTableData(); + }; + // 页面加载时 + onMounted(() => { + initProductionDeviceTableData(); + getDepartmentData(); + }); + return { + handleSearch, + onOpenDialogRef, + onHandleSizeChange, + onDelProductionDevice, + onHandleCurrentChange, + productionDeviceDialog, + productionDeviceDialogRef, + initProductionDeviceTableData, + ...toRefs(state) + }; + } +}); </script> -<style scoped> -.basic-search{ - display:inline-block; - padding-left: 10px; -} -</style> +<style scoped></style> diff --git a/src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/components/riskControlMeasureDialog.vue b/src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/components/riskControlMeasureDialog.vue index 466935b..71b95a8 100644 --- a/src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/components/riskControlMeasureDialog.vue +++ b/src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/components/riskControlMeasureDialog.vue @@ -1,198 +1,264 @@ <template> <div class="system-add-menu-container"> <el-dialog :title="title" v-model="isRiskControlMeasureDialog" width="600px"> - <el-form :model="riskControlMeasureForm" :rules="riskControlMeasureFormRules" ref="riskControlMeasureFormRef" size="default" label-width="160px"> + <el-form + :model="riskControlMeasureForm" + :rules="riskControlMeasureFormRules" + ref="riskControlMeasureFormRef" + size="default" + label-width="160px" + > <el-row :gutter="35"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="安全风险分析对象编码" prop="riskCode"> - <el-input class="input-length" v-model="riskControlMeasureForm.riskCode" placeholder="请输入安全风险分析对象编码"></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="安全风险分析单元名称" prop="riskUnitName"> - <el-input class="input-length" v-model="riskControlMeasureForm.riskUnitName" placeholder="请输入安全风险分析单元名称"></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="生产装置名称" prop="produceDeviceId"> - <el-input class="input-length" v-model="riskControlMeasureForm.produceDeviceId" placeholder="请输入生产装置名称" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="责任部门" prop="liableDepId"> - <el-cascader - :options="departmentList" - :props="{ emitPath: false, checkStrictly: true, value: 'id', label: 'name' }" - placeholder="请选择部门" - clearable - filterable - style="width:85%" - v-model="riskControlMeasureForm.liableDepId" - > - </el-cascader> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="责任人" prop="liablePersonId"> - <el-select class="input-length" v-model="riskControlMeasureForm.liablePersonId" placeholder="请选择风险等级" clearable filterable> + <el-form-item label="风险事件名称" prop="riskEventId"> + <el-select class="input-length" v-model="riskControlMeasureForm.riskEventId" placeholder="请选择风险事件" clearable> <el-option - v-for="item in levelList" - :key="item.id" - :label="item.name" - :value="item.id" + v-for="item in allSafetyRiskEventData" + :key="item.id" + :label="item.riskEventName" + :value="item.id" ></el-option> </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="风险措施编码" prop="controlMeasureCode"> + <el-input + class="input-length" + v-model="riskControlMeasureForm.controlMeasureCode" + placeholder="请输入风险措施编码" + ></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="管控方式" prop="controlType"> + <el-select class="input-length" v-model="riskControlMeasureForm.controlType" placeholder="请选择管控方式" clearable> + <el-option v-for="item in controlTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="管控内容" prop="checkContent"> + <el-input + class="input-length" + type="textarea" + :rows="3" + v-model="riskControlMeasureForm.checkContent" + placeholder="请输入管控内容" + clearable + > + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="管控措施分类1" prop="classify1"> + <el-select + class="input-length" + v-model="riskControlMeasureForm.classify1" + @change="changeClassifyTwoList" + placeholder="请选择管控方式" + clearable + > + <el-option v-for="item in classifyOneList" :key="item.id" :label="item.riskMeasureName" :value="item.id"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="管控措施分类2" prop="classify2"> + <el-select class="input-length" v-model="riskControlMeasureForm.classify2" placeholder="请选择管控方式" clearable> + <el-option v-for="item in classifyTwoList" :key="item.id" :label="item.riskMeasureName" :value="item.id"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="管控措施分类3" prop="classify3"> + <el-input class="input-length" v-model="riskControlMeasureForm.classify3" placeholder="请选择管控方式" clearable> + </el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="措施说明" prop="measureDesc"> + <el-input + class="input-length" + type="textarea" + :rows="3" + v-model="riskControlMeasureForm.measureDesc" + placeholder="请输入措施说明" + clearable + > + </el-input> </el-form-item> </el-col> </el-row> </el-form> <template #footer> - <span class="dialog-footer"> - <el-button @click="isRiskControlMeasureDialog = !isRiskControlMeasureDialog" size="default">取 消</el-button> - <el-button type="primary" @click="submitRiskControlMeasureDialog" size="default">确 实</el-button> - </span> + <span class="dialog-footer"> + <el-button @click="isRiskControlMeasureDialog = !isRiskControlMeasureDialog" size="default">取 消</el-button> + <el-button type="primary" @click="submitRiskControlMeasureDialog" v-throttle size="default">确 实</el-button> + </span> </template> </el-dialog> </div> </template> <script lang="ts"> - interface stateType{ - isRiskControlMeasureDialog:Boolean, - riskControlMeasureForm:{ - riskCode: string | null, - riskUnitName: string | null, - liablePersonId: number | null, - liableDepId: number | null, - produceDeviceId: number | null, - }, - title: string, - departmentList: [], - levelList: Array<levelListState>, - riskControlMeasureFormRules:{} - } - interface levelListState { +interface stateType { + isRiskControlMeasureDialog: Boolean; + riskControlMeasureForm: { + riskEventId: number | null; + controlMeasureCode: string | null; + controlType: number | null; + checkContent: string | null; + classify1: number | null; + classify2: number | null; + classify3: string | null; + measureDesc: string | null; + }; + title: string; + controlTypeList: Array<controlTypeListType>; + classifyOneList: []; + classifyTwoList: Array<classifyTwoType>; + classifyTwoListAll: []; + allSafetyRiskEventData: []; + riskControlMeasureFormRules: {}; +} +interface classifyTwoType { + id: number; + riskMeasureName: string; +} +interface controlTypeListType {} - } - import { reactive, toRefs, ref} from 'vue' - import { riskControlMeasureApi } from '/@/api/doublePreventSystem/riskControlMeasure'; - import { ElMessage } from 'element-plus'; - export default { - name: "riskControlMeasureDialog", - setup(props, context) { - const riskControlMeasureFormRef = ref(); - const state = reactive<stateType>({ - title:'', - departmentList: [], - isRiskControlMeasureDialog: false, - levelList:[{id:1,name:'低风险'},{id:2,name:'一般风险'},{id:3,name:'较大风险'},{id:4,name:'重大风险'},], - riskControlMeasureForm: { - riskCode: null, - riskUnitName: null, - liablePersonId: null, - liableDepId: null, - produceDeviceId: null, - }, - riskControlMeasureFormRules:{ - riskCode: [ - { required: true, message: '请填写安全风险分析对象编码', trigger: 'blur' }, - ], - riskUnitName: [ - { required: true, message: '请填写安全风险分析单元名称', trigger: 'blur' }, - ], - liableDepId: [ - { required: true, message: '请选择责任部门', trigger: 'change' }, - ], - liablePersonId: [ - { required: true, message: '请选择责任人', trigger: 'change' }, - ], - produceDeviceId: [ - { required: true, message: '请选择生产装置', trigger: 'change' }, - ], - } +import { reactive, toRefs, ref } from 'vue'; +import { riskControlMeasureApi } from '/@/api/doublePreventSystem/riskControlMeasure'; +import { ElMessage } from 'element-plus'; +export default { + name: 'riskControlMeasureDialog', + setup(props: any, context: any) { + const riskControlMeasureFormRef = ref(); + const state = reactive<stateType>({ + title: '', + controlTypeList: [ + { id: 1, name: '自动化监控' }, + { id: 2, name: '隐患排查' } + ], + classifyOneList: [], + classifyTwoList: [], + classifyTwoListAll: [], + allSafetyRiskEventData: [], + isRiskControlMeasureDialog: false, + riskControlMeasureForm: { + riskEventId: null, + controlMeasureCode: null, + controlType: null, + checkContent: null, + classify1: null, + classify2: null, + classify3: null, + measureDesc: null + }, + riskControlMeasureFormRules: { + riskCode: [{ required: true, message: '请填写安全风险分析对象编码', trigger: 'blur' }], + riskUnitName: [{ required: true, message: '请填写安全风险分析单元名称', trigger: 'blur' }], + liableDepId: [{ required: true, message: '请选择责任部门', trigger: 'change' }], + liablePersonId: [{ required: true, message: '请选择责任人', trigger: 'change' }], + produceDeviceId: [{ required: true, message: '请选择生产装置', trigger: 'change' }] + } + }); + //打开模态框 + const openSafetyRiskEventDialog = (type: string, value: object, allSafetyRiskEventData: [], classifyOneList: [], classifyTwoList: []) => { + state.isRiskControlMeasureDialog = true; + state.allSafetyRiskEventData = JSON.parse(JSON.stringify(allSafetyRiskEventData)); + state.classifyOneList = JSON.parse(JSON.stringify(classifyOneList)); + state.classifyTwoListAll = JSON.parse(JSON.stringify(classifyTwoList)); + state.classifyTwoList = []; + setTimeout(() => { + riskControlMeasureFormRef.value.clearValidate(); }); + if (type === '新增') { + state.title = '新增风险管控措施'; + state.riskControlMeasureForm = { + riskEventId: null, + controlMeasureCode: null, + controlType: null, + checkContent: null, + classify1: null, + classify2: null, + classify3: null, + measureDesc: null + }; + } else { + state.title = '修改风险管控措施'; + state.riskControlMeasureForm = JSON.parse(JSON.stringify(value)); + } + }; - //打开模态框 - const openSafetyRiskEventDialog = (type: string, value: object, department: []) => { - state.isRiskControlMeasureDialog = true; - state.departmentList = department; - setTimeout(() => { - riskControlMeasureFormRef.value.clearValidate() - }) - if(type === '新增'){ - state.title = '新增生产装置'; - state.riskControlMeasureForm = { - riskCode: null, - riskUnitName: null, - liablePersonId: null, - liableDepId: null, - produceDeviceId: null, - }; - }else{ - state.title = '修改生产装置'; - state.riskControlMeasureForm = JSON.parse(JSON.stringify(value)); - } - }; + const changeClassifyTwoList = () => { + debugger; + state.riskControlMeasureForm.classify2 = null; + state.classifyTwoList = []; + state.classifyTwoList = state.classifyTwoListAll.filter((item: any) => item.parentId === state.riskControlMeasureForm.classify1); + }; - //新增修改提交 - const submitRiskControlMeasureDialog = async () => { - riskControlMeasureFormRef.value.validate( async (valid: Boolean) => { - if(valid){ - if(state.title === '新增生产装置'){ - let res = await riskControlMeasureApi().addRiskControlMeasure(state.riskControlMeasureForm); - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'生产装置新增成功', - duration:2000 - }); - state.isRiskControlMeasureDialog = false; - context.emit('refreshRiskControlMeasure'); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - }else{ - let res = await riskControlMeasureApi().modRiskControlMeasure(state.riskControlMeasureForm); - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'生产装置修改成功', - duration:2000 + //新增修改提交 + const submitRiskControlMeasureDialog = async () => { + riskControlMeasureFormRef.value.validate(async (valid: Boolean) => { + if (valid) { + if (state.title === '新增风险管控措施') { + let res = await riskControlMeasureApi().addRiskControlMeasure(state.riskControlMeasureForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '风险管控措施新增成功', + duration: 2000 }); state.isRiskControlMeasureDialog = false; context.emit('refreshRiskControlMeasure'); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); } - }else{ - ElMessage({ - type:'warning', - message:'请完善基本信息', - }); + } else { + let res = await riskControlMeasureApi().modRiskControlMeasure(state.riskControlMeasureForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '风险管控措施修改成功', + duration: 2000 + }); + state.isRiskControlMeasureDialog = false; + context.emit('refreshRiskControlMeasure'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } } - }) - } + } else { + ElMessage({ + type: 'warning', + message: '请完善基本信息' + }); + } + }); + }; - return{ - ...toRefs(state), - riskControlMeasureFormRef, - submitRiskControlMeasureDialog, - openSafetyRiskEventDialog, - }; - } + return { + ...toRefs(state), + riskControlMeasureFormRef, + changeClassifyTwoList, + submitRiskControlMeasureDialog, + openSafetyRiskEventDialog + }; } +}; </script> <style scoped> -.input-length{ - width:85%; +.input-length { + width: 85%; } </style> diff --git a/src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/index.vue b/src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/index.vue index 080b81c..6d79aa1 100644 --- a/src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/index.vue +++ b/src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/index.vue @@ -2,235 +2,270 @@ <div class="system-role-container"> <el-card shadow="hover"> <div class="system-user-search mb15"> - <div class="basic-search"> - <span>风险等级:</span> - <el-select v-model="riskControlMeasureData.params.riskLevel" clearable filterable class="ml10" placeholder="请选择风险等级"> - <el-option - v-for="item in levelList" - :key="item.id" - :label="item.name" - :value="item.id" - ></el-option> + <div class="basic-line"> + <span>管控方式:</span> + <el-select class="input-box" v-model="riskControlMeasureData.params.controlType" placeholder="管控方式" clearable> + <el-option v-for="item in controlTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </div> - <div class="basic-search"> - <span>部门:</span> - <el-cascader - :options="departmentList" - :props="{ emitPath: false, checkStrictly: true, value: 'id', label: 'name' }" - placeholder="请选择部门" - clearable - filterable - v-model="riskControlMeasureData.params.depId" - > - </el-cascader> + <div class="basic-line"> + <span>安全风险事件:</span> + <el-select class="input-box" v-model="riskControlMeasureData.params.riskEventId" placeholder="安全风险事件" clearable> + <el-option v-for="item in allSafetyRiskEventData" :key="item.id" :label="item.riskEventName" :value="item.id"></el-option> + </el-select> </div> - <el-button size="default" type="primary" class="ml10" @click="handleSearch"> + <el-button size="default" type="primary" class="ml10" v-throttle @click="handleSearch"> <el-icon> <ele-Search /> </el-icon> 查询 </el-button> - <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增','')"> + <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增', '')"> <el-icon> <ele-FolderAdd /> </el-icon> - 新增单元 + 新增措施 </el-button> </div> <el-table :data="riskControlMeasureData.data" style="width: 100%"> <el-table-column type="index" label="序号" width="60" /> - <el-table-column prop="produceDeviceName" label="生产装置名称" show-overflow-tooltip></el-table-column> - <el-table-column prop="riskUnitName" label="安全风险分析单元名称" width="180" show-overflow-tooltip></el-table-column> - <el-table-column prop="riskCode" label="安全风险分析对象编码" width="180" show-overflow-tooltip></el-table-column> - <el-table-column prop="location" label="责任部门" show-overflow-tooltip></el-table-column> - <el-table-column prop="status" label="责任人" show-overflow-tooltip></el-table-column> + <el-table-column prop="riskEventName" label="安全风险事件名称" show-overflow-tooltip></el-table-column> + <el-table-column prop="controlMeasureCode" label="风控措施编码" show-overflow-tooltip></el-table-column> + <el-table-column prop="controlType" label="管控方式" show-overflow-tooltip></el-table-column> + <el-table-column prop="checkContent" label="管控内容" show-overflow-tooltip></el-table-column> + <el-table-column prop="classify1" label="管控措施分类1" show-overflow-tooltip></el-table-column> + <el-table-column prop="classify2" label="管控措施分类2" show-overflow-tooltip></el-table-column> + <el-table-column prop="classify3" label="管控措施分类3" show-overflow-tooltip></el-table-column> + <el-table-column prop="measureDesc" label="措施说明" show-overflow-tooltip></el-table-column> <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="gtmCreate" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="lastEditByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column prop="gtmCreate" label="最后修改时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip> + <template #default="scope"> + <span>{{ dateFormat('YYYY-mm-dd HH:MM:SS', '2022-07-07T08:00:00') }}</span> + </template> + </el-table-column> + <el-table-column prop="lastEditUserName" label="最后修改人" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtModitify" label="最后修改时间" show-overflow-tooltip></el-table-column> <el-table-column label="操作" width="150"> <template #default="scope"> - <el-button size="small" text type="primary" @click="onOpenDialogRef('修改',scope.row)">修改</el-button> + <el-button size="small" text type="primary" @click="onOpenDialogRef('修改', scope.row)">修改</el-button> <el-button size="small" text type="danger" @click="onDelRiskControlMeasure(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <el-pagination - @size-change="onHandleSizeChange" - @current-change="onHandleCurrentChange" - class="mt15" - :pager-count="5" - :page-sizes="[10, 20, 30]" - v-model:current-page="riskControlMeasureData.params.pageIndex" - background - v-model:page-size="riskControlMeasureData.params.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="riskControlMeasureData.total" - > - </el-pagination> + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + class="mt15" + :pager-count="5" + :page-sizes="[10, 20, 30]" + v-model:current-page="riskControlMeasureData.params.pageIndex" + background + v-model:page-size="riskControlMeasureData.params.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="riskControlMeasureData.total" + > + </el-pagination> </el-card> - <riskControlMeasureDialog ref="riskControlMeasureDialogRef" @refreshRiskControlMeasure ="initRiskControlMeasureData"/> + <riskControlMeasureDialog ref="riskControlMeasureDialogRef" @refreshRiskControlMeasure="initRiskControlMeasureData" /> </div> </template> <script lang="ts"> - import { toRefs, reactive, onMounted, ref } from 'vue'; - import { ElMessageBox, ElMessage } from 'element-plus'; - import riskControlMeasureDialog from './components/riskControlMeasureDialog.vue'; - import { riskControlMeasureApi } from '/@/api/doublePreventSystem/riskControlMeasure/index.ts'; - import { departmentApi } from '/@/api/department'; +import { toRefs, reactive, onMounted, ref } from 'vue'; +import { ElMessageBox, ElMessage } from 'element-plus'; +import riskControlMeasureDialog from './components/riskControlMeasureDialog.vue'; +import { riskControlMeasureApi } from '/@/api/doublePreventSystem/riskControlMeasure/index.ts'; +import { safetyRiskEventApi } from '/@/api/doublePreventSystem/safetyRiskEvent'; - // 定义接口来定义对象的类型 - interface TableData { - roleName: string; - roleSign: string; - describe: string; - sort: number; - status: boolean; - createTime: string; - } - interface TableDataState { - riskControlMeasureData: { - data: Array<TableData>; - total: number; - loading: boolean; - params: { - pageIndex: number; - pageSize: number; - riskUnitName: string | null; - liableDep: number | null; - liablePerson: number | null; - }; +// 定义接口来定义对象的类型 +interface TableData { + roleName: string; + roleSign: string; + describe: string; + sort: number; + status: boolean; + createTime: string; +} +interface TableDataState { + riskControlMeasureData: { + data: Array<TableData>; + total: number; + loading: boolean; + params: { + pageIndex: number; + pageSize: number; + controlType: number | null; + riskEventId: number | null; }; - departmentList:Array<DepartmentState>; - levelList:Array<levelListState>; - } - interface levelListState { + }; + controlTypeList: Array<controlTypeType>; + classifyOneList: Array<classifyOneType>; + classifyTwoList: Array<classifyTwoType>; + allSafetyRiskEventData: Array<SafetyRiskEventDataState>; +} +interface controlTypeType {} +interface classifyOneType {} +interface classifyTwoType {} +interface SafetyRiskEventDataState {} - } - interface DepartmentState { - - } - - export default ({ - name: 'riskControlMeasure', - components: { riskControlMeasureDialog }, - setup() { - const riskControlMeasureDialogRef = ref(); - const state = reactive<TableDataState>({ - riskControlMeasureData: { - data: [], - total: 0, - loading: false, - params: { - pageIndex: 1, - pageSize: 10, - riskUnitName: null, - liableDep: null, - liablePerson: null, - }, - }, - departmentList:[], - levelList:[{id:1,name:'低风险'},{id:2,name:'一般风险'},{id:3,name:'较大风险'},{id:4,name:'重大风险'},] - }); - - // 初始化表格数据 - const initRiskControlMeasureData = async () => { - let res = await riskControlMeasureApi().getRiskControlMeasureList(state.riskControlMeasureData.params) - if(res.data.code === '200'){ - state.riskControlMeasureData.data = res.data.data; - state.riskControlMeasureData.total = res.data.count; - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) +export default { + name: 'riskControlMeasure', + components: { riskControlMeasureDialog }, + setup() { + const riskControlMeasureDialogRef = ref(); + const state = reactive<TableDataState>({ + riskControlMeasureData: { + data: [], + total: 0, + loading: false, + params: { + pageIndex: 1, + pageSize: 10, + controlType: null, + riskEventId: null } - }; + }, + controlTypeList: [ + { id: 1, name: '自动化监控' }, + { id: 2, name: '隐患排查' } + ], + classifyOneList: [], + classifyTwoList: [], + allSafetyRiskEventData: [] + }); - //获取部门列表 - const getDepartmentData = async () => { - let res = await departmentApi().getDepartmentList() - if(res.data.code === '200'){ - state.departmentList = res.data.data - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) - } - } - - // 打开生产装置弹窗 - const onOpenDialogRef = (type: string, value: any) => { - riskControlMeasureDialogRef.value.openSafetyRiskEventDialog(type, value, state.departmentList); - }; - - // 删除角色 - const onDelRiskControlMeasure = (row: any) => { - ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.produceDeviceName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', + // 初始化表格数据 + const initRiskControlMeasureData = async () => { + let res = await riskControlMeasureApi().getRiskControlMeasureList(state.riskControlMeasureData.params); + if (res.data.code === '200') { + state.riskControlMeasureData.data = res.data.data; + state.riskControlMeasureData.total = res.data.count; + } else { + ElMessage({ type: 'warning', - }).then(async () => { - let res = await riskControlMeasureApi().deleteRiskControlMeasure({id:row.id}) - if(res.data.code ==='200'){ - ElMessage({ - type:'success', - duration:2000, - message:'删除成功' - }) - await initRiskControlMeasureData() - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) - } - }).catch(() => {}); - }; - - const handleSearch = () => { - initRiskControlMeasureData() + message: res.data.msg + }); } + }; - // 分页改变 - const onHandleSizeChange = (val: number) => { - state.riskControlMeasureData.params.pageSize = val; - initRiskControlMeasureData() - }; + const dateFormat = (fmt: any, date: any) => { + date = new Date(date); + fmt = + date.getFullYear() + + '-' + + (date.getMonth() + 1) + + '-' + + date.getDate() + + ' ' + + date.getHours().toString() + + ':' + + (date.getMinutes().toString() === '0' ? '00' : date.getMinutes().toString()) + + ':' + + (date.getSeconds().toString() === '0' ? '00' : date.getMinutes().toString()); + return fmt; + }; - // 分页改变 - const onHandleCurrentChange = (val: number) => { - state.riskControlMeasureData.params.pageIndex = val; - initRiskControlMeasureData() - }; + //获取安全风险事件 + const getAllSafetyRiskEvent = async () => { + let res = await safetyRiskEventApi().getAllSafetyRiskEventList(); + if (res.data.code === '200') { + state.allSafetyRiskEventData = JSON.parse(JSON.stringify(res.data.data)); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 页面加载时 - onMounted(() => { - initRiskControlMeasureData(); - getDepartmentData(); - }); + //获取管控措施分类 + const getClassify = async () => { + let res = await riskControlMeasureApi().getClassifyData(); + if (res.data.code === '200') { + state.classifyOneList = res.data.data.filter((item: any) => item.parentId === null); + state.classifyTwoList = res.data.data.filter((item: any) => item.parentId !== null); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - return { - handleSearch, - onOpenDialogRef, - onHandleSizeChange, - onDelRiskControlMeasure, - onHandleCurrentChange, - riskControlMeasureDialog, - riskControlMeasureDialogRef, - initRiskControlMeasureData, - ...toRefs(state), - }; - }, - }); + // 打开生产装置弹窗 + const onOpenDialogRef = (type: string, value: any) => { + riskControlMeasureDialogRef.value.openSafetyRiskEventDialog( + type, + value, + state.allSafetyRiskEventData, + state.classifyOneList, + state.classifyTwoList + ); + }; + + // 删除角色 + const onDelRiskControlMeasure = (row: any) => { + ElMessageBox.confirm(`此操作将永久删除该条风险管控措施:“${row.produceDeviceName}”,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + let res = await riskControlMeasureApi().deleteRiskControlMeasure({ id: row.id }); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + duration: 2000, + message: '删除成功' + }); + await initRiskControlMeasureData(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + .catch(() => {}); + }; + + const handleSearch = () => { + initRiskControlMeasureData(); + }; + + // 分页改变 + const onHandleSizeChange = (val: number) => { + state.riskControlMeasureData.params.pageSize = val; + initRiskControlMeasureData(); + }; + + // 分页改变 + const onHandleCurrentChange = (val: number) => { + state.riskControlMeasureData.params.pageIndex = val; + initRiskControlMeasureData(); + }; + + // 页面加载时 + onMounted(() => { + initRiskControlMeasureData(); + getAllSafetyRiskEvent(); + getClassify(); + }); + + return { + dateFormat, + handleSearch, + onOpenDialogRef, + onHandleSizeChange, + onDelRiskControlMeasure, + onHandleCurrentChange, + riskControlMeasureDialog, + riskControlMeasureDialogRef, + initRiskControlMeasureData, + ...toRefs(state) + }; + } +}; </script> -<style scoped> -.basic-search{ - display:inline-block; - padding-left: 10px; -} -</style> +<style scoped></style> diff --git a/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/components/safetyRiskAnalyseUnitDialog.vue b/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/components/safetyRiskAnalyseUnitDialog.vue index 5117a2e..117e9b5 100644 --- a/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/components/safetyRiskAnalyseUnitDialog.vue +++ b/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/components/safetyRiskAnalyseUnitDialog.vue @@ -1,26 +1,45 @@ <template> <div class="system-add-menu-container"> <el-dialog :title="title" v-model="isSafetyRiskAnalyseUnitDialog" width="600px"> - <el-form :model="safetyRiskAnalyseUnitForm" :rules="safetyRiskAnalyseUnitFormRules" ref="safetyRiskAnalyseUnitFormRef" size="default" label-width="180px"> + <el-form + :model="safetyRiskAnalyseUnitForm" + :rules="safetyRiskAnalyseUnitFormRules" + ref="safetyRiskAnalyseUnitFormRef" + size="default" + label-width="180px" + > <el-row :gutter="35"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="安全风险分析对象编码" prop="riskCode"> - <el-input class="input-length" v-model="safetyRiskAnalyseUnitForm.riskCode" placeholder="请输入安全风险分析对象编码"></el-input> + <el-input + class="input-length" + v-model="safetyRiskAnalyseUnitForm.riskCode" + placeholder="请输入安全风险分析对象编码" + ></el-input> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="安全风险分析单元名称" prop="riskUnitName"> - <el-input class="input-length" v-model="safetyRiskAnalyseUnitForm.riskUnitName" placeholder="请输入安全风险分析单元名称"></el-input> + <el-input + class="input-length" + v-model="safetyRiskAnalyseUnitForm.riskUnitName" + placeholder="请输入安全风险分析单元名称" + ></el-input> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="生产装置名称" prop="produceDeviceId"> - <el-select class="input-length" v-model="safetyRiskAnalyseUnitForm.produceDeviceId" placeholder="请输入生产装置名称" clearable> + <el-select + class="input-length" + v-model="safetyRiskAnalyseUnitForm.produceDeviceId" + placeholder="请输入生产装置名称" + clearable + > <el-option - v-for="item in allProduceDeviceData" - :key="item.id" - :label="item.produceDeviceName" - :value="item.id" + v-for="item in allProduceDeviceData" + :key="item.id" + :label="item.produceDeviceName" + :value="item.id" ></el-option> </el-select> </el-form-item> @@ -28,13 +47,13 @@ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="责任部门" prop="liableDepId"> <el-cascader - @change="achiveUserList" + @change="achieveUserList" :options="departmentList" :props="{ emitPath: false, checkStrictly: true, value: 'id', label: 'name' }" placeholder="请选择部门" clearable filterable - style="width:85%" + style="width: 85%" v-model="safetyRiskAnalyseUnitForm.liableDepId" > </el-cascader> @@ -42,190 +61,177 @@ </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="责任人" prop="liablePersonId"> - <el-select class="input-length" v-model="safetyRiskAnalyseUnitForm.liablePersonId" placeholder="请选择责任人" clearable filterable> - <el-option - v-for="item in userList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - ></el-option> + <el-select + class="input-length" + v-model="safetyRiskAnalyseUnitForm.liablePersonId" + placeholder="请选择责任人" + clearable + filterable + > + <el-option v-for="item in userList" :key="item.uid" :label="item.realName" :value="item.uid"></el-option> </el-select> </el-form-item> </el-col> </el-row> </el-form> <template #footer> - <span class="dialog-footer"> - <el-button @click="isSafetyRiskAnalyseUnitDialog = !isSafetyRiskAnalyseUnitDialog" size="default">取 消</el-button> - <el-button type="primary" @click="submitSafetyRiskAnalyseUnitDialog" size="default">确 实</el-button> - </span> + <span class="dialog-footer"> + <el-button @click="isSafetyRiskAnalyseUnitDialog = !isSafetyRiskAnalyseUnitDialog" size="default">取 消</el-button> + <el-button type="primary" @click="submitSafetyRiskAnalyseUnitDialog" v-throttle size="default">确 实</el-button> + </span> </template> </el-dialog> </div> </template> <script lang="ts"> - interface stateType{ - isSafetyRiskAnalyseUnitDialog:Boolean, - safetyRiskAnalyseUnitForm:{ - riskCode: string | null, - riskUnitName: string | null, - liablePersonId: number | null, - liableDepId: number | null, - produceDeviceId: number | null, - }, - title: string, - userList:[], - departmentList: [], - allProduceDeviceData: [], - safetyRiskAnalyseUnitFormRules:{} - } - interface levelListState { - - } - import { reactive, toRefs, ref} from 'vue' - import { safetyRiskAnalyseUnitApi } from '/@/api/doublePreventSystem/safetyRiskAnalyseUnit'; - import { ElMessage } from 'element-plus'; +interface stateType { + isSafetyRiskAnalyseUnitDialog: Boolean; + safetyRiskAnalyseUnitForm: { + riskCode: string | null; + riskUnitName: string | null; + liablePersonId: number | null; + liableDepId: number | null; + produceDeviceId: number | null; + }; + title: string; + userList: []; + departmentList: []; + allProduceDeviceData: []; + safetyRiskAnalyseUnitFormRules: {}; +} +import { reactive, toRefs, ref } from 'vue'; +import { safetyRiskAnalyseUnitApi } from '/@/api/doublePreventSystem/safetyRiskAnalyseUnit'; +import { ElMessage } from 'element-plus'; import { userApi } from '/@/api/user'; - export default { - name: "productionDeviceDialog", - setup(props, context) { - const safetyRiskAnalyseUnitFormRef = ref(); - const state = reactive<stateType>({ - title:'', - userList:[], - departmentList: [], - allProduceDeviceData: [], - isSafetyRiskAnalyseUnitDialog: false, - safetyRiskAnalyseUnitForm: { +export default { + name: 'productionDeviceDialog', + setup(props: any, context: any) { + const safetyRiskAnalyseUnitFormRef = ref(); + const state = reactive<stateType>({ + title: '', + userList: [], + departmentList: [], + allProduceDeviceData: [], + isSafetyRiskAnalyseUnitDialog: false, + safetyRiskAnalyseUnitForm: { + riskCode: null, + riskUnitName: null, + liablePersonId: null, + liableDepId: null, + produceDeviceId: null + }, + safetyRiskAnalyseUnitFormRules: { + riskCode: [{ required: true, message: '请填写安全风险分析对象编码', trigger: 'blur' }], + riskUnitName: [{ required: true, message: '请填写安全风险分析单元名称', trigger: 'blur' }], + liableDepId: [{ required: true, message: '请选择责任部门', trigger: 'change' }], + liablePersonId: [{ required: true, message: '请选择责任人', trigger: 'change' }], + produceDeviceId: [{ required: true, message: '请选择生产装置', trigger: 'change' }] + } + }); + + //打开模态框 + const openSafetyRiskAnalyseUnitDialog = (type: string, value: object, department: [], allProduceDeviceData: []) => { + // console.log(jsonBig.stringify(123124124124214123131)) + state.isSafetyRiskAnalyseUnitDialog = true; + state.allProduceDeviceData = JSON.parse(JSON.stringify(allProduceDeviceData)); + state.departmentList = department; + setTimeout(() => { + safetyRiskAnalyseUnitFormRef.value.clearValidate(); + }); + if (type === '新增') { + state.title = '新增风险分析单元'; + state.safetyRiskAnalyseUnitForm = { riskCode: null, riskUnitName: null, liablePersonId: null, liableDepId: null, - produceDeviceId: null, - }, - safetyRiskAnalyseUnitFormRules:{ - riskCode: [ - { required: true, message: '请填写安全风险分析对象编码', trigger: 'blur' }, - ], - riskUnitName: [ - { required: true, message: '请填写安全风险分析单元名称', trigger: 'blur' }, - ], - liableDepId: [ - { required: true, message: '请选择责任部门', trigger: 'change' }, - ], - liablePersonId: [ - { required: true, message: '请选择责任人', trigger: 'change' }, - ], - produceDeviceId: [ - { required: true, message: '请选择生产装置', trigger: 'change' }, - ], - } + produceDeviceId: null + }; + } else { + state.title = '修改风险分析单元'; + state.safetyRiskAnalyseUnitForm = JSON.parse(JSON.stringify(value)); + } + }; - }); - - //打开模态框 - const openSafetyRiskAnalyseUnitDialog = (type: string, value: object, department: [], allProduceDeviceData : []) => { - // console.log(jsonBig.stringify(123124124124214123131)) - state.isSafetyRiskAnalyseUnitDialog = true; - state.allProduceDeviceData = JSON.parse(JSON.stringify(allProduceDeviceData)); - state.departmentList = department; - setTimeout(() => { - safetyRiskAnalyseUnitFormRef.value.clearValidate() - }) - if(type === '新增'){ - state.title = '新增风险分析单元'; - state.safetyRiskAnalyseUnitForm = { - riskCode: null, - riskUnitName: null, - liablePersonId: null, - liableDepId: null, - produceDeviceId: null, - }; - }else{ - state.title = '修改风险分析单元'; - state.safetyRiskAnalyseUnitForm = JSON.parse(JSON.stringify(value)); - } - }; - - //新增修改提交 - const submitSafetyRiskAnalyseUnitDialog = async () => { - safetyRiskAnalyseUnitFormRef.value.validate( async (valid: Boolean) => { - if(valid){ - if(state.title === '新增风险分析单元'){ - let res = await safetyRiskAnalyseUnitApi().addSafetyRiskAnalyseUnit(state.safetyRiskAnalyseUnitForm); - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'风险分析单元新增成功', - duration:2000 - }); - state.isSafetyRiskAnalyseUnitDialog = false; - context.emit('refreshSafetyRiskAnalyseUnit'); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - }else{ - let res = await safetyRiskAnalyseUnitApi().modSafetyRiskAnalyseUnit(state.safetyRiskAnalyseUnitForm); - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'风险分析单元修改成功', - duration:2000 + //新增修改提交 + const submitSafetyRiskAnalyseUnitDialog = async () => { + safetyRiskAnalyseUnitFormRef.value.validate(async (valid: Boolean) => { + if (valid) { + if (state.title === '新增风险分析单元') { + let res = await safetyRiskAnalyseUnitApi().addSafetyRiskAnalyseUnit(state.safetyRiskAnalyseUnitForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '风险分析单元新增成功', + duration: 2000 }); state.isSafetyRiskAnalyseUnitDialog = false; context.emit('refreshSafetyRiskAnalyseUnit'); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); } - }else{ - ElMessage({ - type:'warning', - message:'请完善基本信息', - }); + } else { + let res = await safetyRiskAnalyseUnitApi().modSafetyRiskAnalyseUnit(state.safetyRiskAnalyseUnitForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '风险分析单元修改成功', + duration: 2000 + }); + state.isSafetyRiskAnalyseUnitDialog = false; + context.emit('refreshSafetyRiskAnalyseUnit'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } } - }) - }; - - const achiveUserList = () => { - state.safetyRiskAnalyseUnitForm.liablePersonId = null; - state.userList = []; - getUserData(); - }; - - //获取用户列表 - const getUserData = async () => { - let res = await userApi().getUserLByDepartment(state.safetyRiskAnalyseUnitForm.liableDepId); - if(res.data.code === '200'){ - state.userList = res.data.data; - }else{ + } else { ElMessage({ - type:'warning', - message:res.data.msg + type: 'warning', + message: '请完善基本信息' }); } - } + }); + }; - return{ - ...toRefs(state), - achiveUserList, - safetyRiskAnalyseUnitFormRef, - submitSafetyRiskAnalyseUnitDialog, - openSafetyRiskAnalyseUnitDialog, - }; - } + const achieveUserList = () => { + state.safetyRiskAnalyseUnitForm.liablePersonId = null; + state.userList = []; + getUserData(); + }; + + //获取用户列表 + const getUserData = async () => { + let res = await userApi().getUserLByDepartment(state.safetyRiskAnalyseUnitForm.liableDepId); + if (res.data.code === '200') { + state.userList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + return { + ...toRefs(state), + achieveUserList, + safetyRiskAnalyseUnitFormRef, + submitSafetyRiskAnalyseUnitDialog, + openSafetyRiskAnalyseUnitDialog + }; } +}; </script> <style scoped> -.input-length{ - width:85%; +.input-length { + width: 85%; } </style> diff --git a/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue b/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue index bf995c2..34fd17c 100644 --- a/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue +++ b/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue @@ -2,43 +2,38 @@ <div class="system-role-container"> <el-card shadow="hover"> <div class="system-user-search mb15"> - <div class="basic-search"> + <div class="basic-line"> <span>责任部门:</span> <el-cascader - @change="achiveUserList" + @change="achieveUserList" :options="departmentList" :props="{ emitPath: false, checkStrictly: true, value: 'id', label: 'name' }" placeholder="责任部门" clearable filterable - v-model="safetyRiskAnalyseUnitData.params.liableDep" - class="unit-input" + class="input-box" + v-model="safetyRiskAnalyseUnitData.params.liableDepId" > </el-cascader> </div> - <div class="basic-search"> + <div class="basic-line"> <span>责任人:</span> - <el-select v-model="safetyRiskAnalyseUnitData.params.liablePerson" clearable filterable class="unit-input" placeholder="责任人"> - <el-option - v-for="item in userList" - :key="item.uid" - :label="item.realName" - :value="item.uid" - ></el-option> + <el-select v-model="safetyRiskAnalyseUnitData.params.liablePersonId" clearable filterable class="input-box" placeholder="责任人"> + <el-option v-for="item in userList" :key="item.uid" :label="item.realName" :value="item.uid"></el-option> </el-select> </div> - <div class="basic-search"> + <div class="basic-line"> <span>单元名称:</span> - <el-input v-model="safetyRiskAnalyseUnitData.params.riskUnitName" clearable filterable class="unit-input" placeholder="单元名称"> + <el-input v-model="safetyRiskAnalyseUnitData.params.riskUnitName" clearable filterable class="input-box" placeholder="单元名称"> </el-input> </div> - <el-button size="default" type="primary" class="ml10" @click="handleSearch"> + <el-button size="default" type="primary" class="ml10" v-throttle @click="handleSearch"> <el-icon> <ele-Search /> </el-icon> 查询 </el-button> - <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增','')"> + <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增', '')"> <el-icon> <ele-FolderAdd /> </el-icon> @@ -53,234 +48,222 @@ <el-table-column prop="liableDep" label="责任部门" show-overflow-tooltip></el-table-column> <el-table-column prop="liablePerson" label="责任人" show-overflow-tooltip></el-table-column> <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="gtmCreate" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="lastEditByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column prop="gtmCreate" label="最后修改时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="lastEditUserName" label="最后修改人" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtModitify" label="最后修改时间" show-overflow-tooltip></el-table-column> <el-table-column label="操作" width="150"> <template #default="scope"> - <el-button size="small" text type="primary" @click="onOpenDialogRef('修改',scope.row)">修改</el-button> + <el-button size="small" text type="primary" @click="onOpenDialogRef('修改', scope.row)">修改</el-button> <el-button size="small" text type="danger" @click="onDelProductionDevice(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <el-pagination - @size-change="onHandleSizeChange" - @current-change="onHandleCurrentChange" - class="mt15" - :pager-count="5" - :page-sizes="[10, 20, 30]" - v-model:current-page="safetyRiskAnalyseUnitData.params.pageIndex" - background - v-model:page-size="safetyRiskAnalyseUnitData.params.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="safetyRiskAnalyseUnitData.total" - > - </el-pagination> + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + class="mt15" + :pager-count="5" + :page-sizes="[10, 20, 30]" + v-model:current-page="safetyRiskAnalyseUnitData.params.pageIndex" + background + v-model:page-size="safetyRiskAnalyseUnitData.params.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="safetyRiskAnalyseUnitData.total" + > + </el-pagination> </el-card> - <safetyRiskAnalyseUnitDialog ref="safetyRiskAnalyseUnitDialogRef" @refreshSafetyRiskAnalyseUnit ="initSafetyRiskAnalyseUnitData"/> + <safetyRiskAnalyseUnitDialog ref="safetyRiskAnalyseUnitDialogRef" @refreshSafetyRiskAnalyseUnit="initSafetyRiskAnalyseUnitData" /> </div> </template> <script lang="ts"> - import { toRefs, reactive, onMounted, ref } from 'vue'; - import { ElMessageBox, ElMessage } from 'element-plus'; - import safetyRiskAnalyseUnitDialog from './components/safetyRiskAnalyseUnitDialog.vue'; - import { safetyRiskAnalyseUnitApi } from "/@/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts"; - import { departmentApi } from '/@/api/department'; - import { userApi } from '/@/api/user'; - import { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice'; +import { toRefs, reactive, onMounted, ref } from 'vue'; +import { ElMessageBox, ElMessage } from 'element-plus'; +import safetyRiskAnalyseUnitDialog from './components/safetyRiskAnalyseUnitDialog.vue'; +import { safetyRiskAnalyseUnitApi } from '/@/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts'; +import { departmentApi } from '/@/api/department'; +import { userApi } from '/@/api/user'; +import { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice'; - // 定义接口来定义对象的类型 - interface TableData { - roleName: string; - roleSign: string; - describe: string; - sort: number; - status: boolean; - createTime: string; - } - interface TableDataState { - safetyRiskAnalyseUnitData: { - data: Array<TableData>; - total: number; - loading: boolean; - params: { - pageIndex: number; - pageSize: number; - riskUnitName: string | null; - liableDepId: number | null; - liablePersonId: number | null; - }; +// 定义接口来定义对象的类型 +interface TableData { + roleName: string; + roleSign: string; + describe: string; + sort: number; + status: boolean; + createTime: string; +} +interface TableDataState { + safetyRiskAnalyseUnitData: { + data: Array<TableData>; + total: number; + loading: boolean; + params: { + pageIndex: number; + pageSize: number; + riskUnitName: string | null; + liableDepId: number | null; + liablePersonId: number | null; }; - userList:Array<UserState>; - departmentList:Array<DepartmentState>; - allProduceDeviceData:Array<produceDeviceState>; - } - interface produceDeviceState { + }; + userList: Array<UserState>; + departmentList: Array<DepartmentState>; + allProduceDeviceData: Array<produceDeviceState>; +} +interface produceDeviceState {} +interface DepartmentState {} +interface UserState {} - } - interface DepartmentState { - - } - interface UserState { - - } - - export default ({ - name: 'productionDevice', - components: { safetyRiskAnalyseUnitDialog }, - setup() { - const safetyRiskAnalyseUnitDialogRef = ref(); - const state = reactive<TableDataState>({ - safetyRiskAnalyseUnitData: { - data: [], - total: 0, - loading: false, - params: { - pageIndex: 1, - pageSize: 10, - riskUnitName: null, - liableDepId: null, - liablePersonId: null, - }, - }, - userList: [], - departmentList: [], - allProduceDeviceData: [], - }); - // 初始化表格数据 - const initSafetyRiskAnalyseUnitData = async () => { - let res = await safetyRiskAnalyseUnitApi().getSafetyRiskAnalyseUnitList(state.safetyRiskAnalyseUnitData.params) - if(res.data.code === '200'){ - state.safetyRiskAnalyseUnitData.data = res.data.data - state.safetyRiskAnalyseUnitData.total = res.data.count; - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); +export default { + name: 'productionDevice', + components: { safetyRiskAnalyseUnitDialog }, + setup() { + const safetyRiskAnalyseUnitDialogRef = ref(); + const state = reactive<TableDataState>({ + safetyRiskAnalyseUnitData: { + data: [], + total: 0, + loading: false, + params: { + pageIndex: 1, + pageSize: 10, + riskUnitName: null, + liableDepId: null, + liablePersonId: null } - }; - - const achiveUserList = () => { - state.safetyRiskAnalyseUnitData.params.liablePersonId = null; - state.userList = []; - getUserData(); - }; - - //获取生产装置列表 - const getAllProduceDeviceData = async () => { - let res = await productionDeviceApi().getAllProductionDeviceList(); - if(res.data.code === '200'){ - state.allProduceDeviceData = res.data.data; - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - }; - - //获取部门列表 - const getDepartmentData = async () => { - let res = await departmentApi().getDepartmentList(); - if(res.data.code === '200'){ - state.departmentList = res.data.data; - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - }; - - //获取用户列表 - const getUserData = async () => { - let res = await userApi().getUserLByDepartment(state.safetyRiskAnalyseUnitData.params.liableDepId); - if(res.data.code === '200'){ - state.userList = res.data.data; - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - } - - // 打开生产装置弹窗 - const onOpenDialogRef = (type: string, value: any) => { - safetyRiskAnalyseUnitDialogRef.value.openSafetyRiskAnalyseUnitDialog(type, value, state.departmentList, state.allProduceDeviceData); - }; - - // 删除角色 - const onDelProductionDevice = (row: any) => { - ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.riskUnitName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', + }, + userList: [], + departmentList: [], + allProduceDeviceData: [] + }); + // 初始化表格数据 + const initSafetyRiskAnalyseUnitData = async () => { + let res = await safetyRiskAnalyseUnitApi().getSafetyRiskAnalyseUnitList(state.safetyRiskAnalyseUnitData.params); + if (res.data.code === '200') { + state.safetyRiskAnalyseUnitData.data = res.data.data; + state.safetyRiskAnalyseUnitData.total = res.data.count; + } else { + ElMessage({ type: 'warning', - }).then(async () => { - let res = await safetyRiskAnalyseUnitApi().deleteSafetyRiskAnalyseUnit({id:row.id}); - if(res.data.code ==='200'){ - ElMessage({ - type:'success', - duration:2000, - message:'删除成功' - }); - await initSafetyRiskAnalyseUnitData(); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - }).catch(() => {}); - }; - - const handleSearch = () => { - initSafetyRiskAnalyseUnitData(); + message: res.data.msg + }); } + }; - // 分页改变 - const onHandleSizeChange = (val: number) => { - state.safetyRiskAnalyseUnitData.params.pageSize = val; - initSafetyRiskAnalyseUnitData(); - }; + const achieveUserList = () => { + state.safetyRiskAnalyseUnitData.params.liablePersonId = null; + state.userList = []; + getUserData(); + }; - // 分页改变 - const onHandleCurrentChange = (val: number) => { - state.safetyRiskAnalyseUnitData.params.pageIndex = val; - initSafetyRiskAnalyseUnitData(); - }; + //获取生产装置列表 + const getAllProduceDeviceData = async () => { + let res = await productionDeviceApi().getAllProductionDeviceList(); + if (res.data.code === '200') { + state.allProduceDeviceData = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 页面加载时 - onMounted(() => { - initSafetyRiskAnalyseUnitData(); - getAllProduceDeviceData(); - getDepartmentData(); - }); + //获取部门列表 + const getDepartmentData = async () => { + let res = await departmentApi().getDepartmentList(); + if (res.data.code === '200') { + state.departmentList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - return { - handleSearch, - achiveUserList, - onOpenDialogRef, - onHandleSizeChange, - onDelProductionDevice, - onHandleCurrentChange, - safetyRiskAnalyseUnitDialog, - safetyRiskAnalyseUnitDialogRef, - initSafetyRiskAnalyseUnitData, - ...toRefs(state), - }; - }, - }); + //获取用户列表 + const getUserData = async () => { + let res = await userApi().getUserLByDepartment(state.safetyRiskAnalyseUnitData.params.liableDepId); + if (res.data.code === '200') { + state.userList = res.data.data; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 打开生产装置弹窗 + const onOpenDialogRef = (type: string, value: any) => { + safetyRiskAnalyseUnitDialogRef.value.openSafetyRiskAnalyseUnitDialog(type, value, state.departmentList, state.allProduceDeviceData); + }; + + // 删除角色 + const onDelProductionDevice = (row: any) => { + ElMessageBox.confirm(`此操作将永久删除该条安全风险分析单元:“${row.riskUnitName}”,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + let res = await safetyRiskAnalyseUnitApi().deleteSafetyRiskAnalyseUnit({ id: row.id }); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + duration: 2000, + message: '删除成功' + }); + await initSafetyRiskAnalyseUnitData(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + .catch(() => {}); + }; + + const handleSearch = () => { + initSafetyRiskAnalyseUnitData(); + }; + + // 分页改变 + const onHandleSizeChange = (val: number) => { + state.safetyRiskAnalyseUnitData.params.pageSize = val; + initSafetyRiskAnalyseUnitData(); + }; + + // 分页改变 + const onHandleCurrentChange = (val: number) => { + state.safetyRiskAnalyseUnitData.params.pageIndex = val; + initSafetyRiskAnalyseUnitData(); + }; + + // 页面加载时 + onMounted(() => { + initSafetyRiskAnalyseUnitData(); + getAllProduceDeviceData(); + getDepartmentData(); + }); + + return { + handleSearch, + achieveUserList, + onOpenDialogRef, + onHandleSizeChange, + onDelProductionDevice, + onHandleCurrentChange, + safetyRiskAnalyseUnitDialog, + safetyRiskAnalyseUnitDialogRef, + initSafetyRiskAnalyseUnitData, + ...toRefs(state) + }; + } +}; </script> -<style scoped> -.basic-search{ - display:inline-block; - padding-left: 10px; -} -.unit-input{ - width:200px -} -</style> +<style scoped></style> diff --git a/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/components/safetyRiskEventDialog.vue b/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/components/safetyRiskEventDialog.vue index 236734a..52b1bc3 100644 --- a/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/components/safetyRiskEventDialog.vue +++ b/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/components/safetyRiskEventDialog.vue @@ -1,154 +1,160 @@ <template> <div class="system-add-menu-container"> <el-dialog :title="title" v-model="isSafetyRiskEventDialog" width="600px"> - <el-form :model="safetyRiskEventForm" :rules="safetyRiskEventFormRules" ref="safetyRiskAnalyseUnitFormRef" size="default" label-width="180px"> + <el-form + :model="safetyRiskEventForm" + :rules="safetyRiskEventFormRules" + ref="safetyRiskAnalyseUnitFormRef" + size="default" + label-width="180px" + > <el-row :gutter="35"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="安全风险分析单元名称" prop="riskUnitId"> <el-select class="input-length" v-model="safetyRiskEventForm.riskUnitId" placeholder="请输入安全风险分析单元名称"> <el-option - v-for="item in allSafetyRiskEventData" - :key="item.id" - :label="item.riskUnitName" - :value="item.id" + v-for="item in allSafetyRiskEventData" + :key="item.id" + :label="item.riskUnitName" + :value="item.id" ></el-option> </el-select> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="安全风险事件名称" prop="riskEventName"> - <el-input class="input-length" v-model="safetyRiskEventForm.riskEventName" placeholder="请输入生产装置名称" clearable></el-input> + <el-input + class="input-length" + v-model="safetyRiskEventForm.riskEventName" + placeholder="请输入生产装置名称" + clearable + ></el-input> </el-form-item> </el-col> </el-row> </el-form> <template #footer> - <span class="dialog-footer"> - <el-button @click="isSafetyRiskEventDialog = !isSafetyRiskEventDialog" size="default">取 消</el-button> - <el-button type="primary" @click="submitSafetyRiskEventDialog" size="default">确 实</el-button> - </span> + <span class="dialog-footer"> + <el-button @click="isSafetyRiskEventDialog = !isSafetyRiskEventDialog" size="default">取 消</el-button> + <el-button type="primary" @click="submitSafetyRiskEventDialog" v-throttle size="default">确 实</el-button> + </span> </template> </el-dialog> </div> </template> <script lang="ts"> - interface stateType{ - isSafetyRiskEventDialog:Boolean, - safetyRiskEventForm:{ - riskEventName: string | null, - riskUnitId: number | null, - }, - title: string, - departmentList: [], - allSafetyRiskEventData: [], - safetyRiskEventFormRules: {}, - } - import { reactive, toRefs, ref} from 'vue' - import { safetyRiskEventApi } from '/@/api/doublePreventSystem/safetyRiskEvent'; - import { ElMessage } from 'element-plus'; - export default { - name: "productionDeviceDialog", - setup(props, context) { - const safetyRiskAnalyseUnitFormRef = ref(); - const state = reactive<stateType>({ - title:'', - departmentList: [], - allSafetyRiskEventData:[], - isSafetyRiskEventDialog: false, - safetyRiskEventForm: { - riskEventName: null, - riskUnitId: null, - }, - safetyRiskEventFormRules:{ - riskEventName: [ - { required: true, message: '请填写安全风险分析对象编码', trigger: 'blur' }, - ], - riskUnitId: [ - { required: true, message: '请填写安全风险分析单元名称', trigger: 'blur' }, - ], - } +interface stateType { + isSafetyRiskEventDialog: Boolean; + safetyRiskEventForm: { + riskEventName: string | null; + riskUnitId: number | null; + }; + title: string; + departmentList: []; + allSafetyRiskEventData: []; + safetyRiskEventFormRules: {}; +} +import { reactive, toRefs, ref } from 'vue'; +import { safetyRiskEventApi } from '/@/api/doublePreventSystem/safetyRiskEvent'; +import { ElMessage } from 'element-plus'; +export default { + name: 'productionDeviceDialog', + setup(props: any, context: any) { + const safetyRiskAnalyseUnitFormRef = ref(); + const state = reactive<stateType>({ + title: '', + departmentList: [], + allSafetyRiskEventData: [], + isSafetyRiskEventDialog: false, + safetyRiskEventForm: { + riskEventName: null, + riskUnitId: null + }, + safetyRiskEventFormRules: { + riskEventName: [{ required: true, message: '请填写安全风险分析对象编码', trigger: 'blur' }], + riskUnitId: [{ required: true, message: '请填写安全风险分析单元名称', trigger: 'blur' }] + } + }); + //打开模态框 + const openSafetyRiskEventDialog = (type: string, value: object, department: [], allSafetyRiskEventData: []) => { + state.isSafetyRiskEventDialog = true; + state.allSafetyRiskEventData = JSON.parse(JSON.stringify(allSafetyRiskEventData)); + state.departmentList = department; + setTimeout(() => { + safetyRiskAnalyseUnitFormRef.value.clearValidate(); }); + if (type === '新增') { + state.title = '新增风险事件'; + state.safetyRiskEventForm = { + riskEventName: null, + riskUnitId: null + }; + } else { + state.title = '修改风险事件'; + state.safetyRiskEventForm = JSON.parse(JSON.stringify(value)); + } + }; - //打开模态框 - const openSafetyRiskEventDialog = (type: string, value: object, department: [], allSafetyRiskEventData:[]) => { - state.isSafetyRiskEventDialog = true; - state.allSafetyRiskEventData = JSON.parse(JSON.stringify(allSafetyRiskEventData)); - state.departmentList = department; - setTimeout(() => { - safetyRiskAnalyseUnitFormRef.value.clearValidate() - }) - if(type === '新增'){ - state.title = '新增生产装置'; - state.safetyRiskEventForm = { - riskEventName: null, - riskUnitId: null, - }; - }else{ - state.title = '修改生产装置'; - state.safetyRiskEventForm = JSON.parse(JSON.stringify(value)); - } - }; - - //新增修改提交 - const submitSafetyRiskEventDialog = async () => { - safetyRiskAnalyseUnitFormRef.value.validate( async (valid: Boolean) => { - if(valid){ - if(state.title === '新增生产装置'){ - let res = await safetyRiskEventApi().addSafetyRiskEvent(state.safetyRiskEventForm); - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'生产装置新增成功', - duration:2000 - }); - state.isSafetyRiskEventDialog = false; - context.emit('refreshSafetyRiskEvent'); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - }else{ - let res = await safetyRiskEventApi().modSafetyRiskEvent(state.safetyRiskEventForm); - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'生产装置修改成功', - duration:2000 + //新增修改提交 + const submitSafetyRiskEventDialog = async () => { + safetyRiskAnalyseUnitFormRef.value.validate(async (valid: Boolean) => { + if (valid) { + if (state.title === '新增风险事件') { + let res = await safetyRiskEventApi().addSafetyRiskEvent(state.safetyRiskEventForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '风险事件新增成功', + duration: 2000 }); state.isSafetyRiskEventDialog = false; context.emit('refreshSafetyRiskEvent'); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); } - }else{ - ElMessage({ - type:'warning', - message:'请完善基本信息', - }); + } else { + let res = await safetyRiskEventApi().modSafetyRiskEvent(state.safetyRiskEventForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '风险事件修改成功', + duration: 2000 + }); + state.isSafetyRiskEventDialog = false; + context.emit('refreshSafetyRiskEvent'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } } - }) - } + } else { + ElMessage({ + type: 'warning', + message: '请完善基本信息' + }); + } + }); + }; - return{ - ...toRefs(state), - safetyRiskAnalyseUnitFormRef, - submitSafetyRiskEventDialog, - openSafetyRiskEventDialog, - }; - } + return { + ...toRefs(state), + safetyRiskAnalyseUnitFormRef, + submitSafetyRiskEventDialog, + openSafetyRiskEventDialog + }; } +}; </script> <style scoped> -.input-length{ - width:85%; +.input-length { + width: 85%; } </style> diff --git a/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue b/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue index 5ca9e32..2b77d7b 100644 --- a/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue +++ b/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue @@ -2,33 +2,27 @@ <div class="system-role-container"> <el-card shadow="hover"> <div class="system-user-search mb15"> - <div class="basic-search"> + <div class="basic-line"> <span>安全风险单元名称:</span> - <el-select v-model="safetyRiskEventData.params.riskUnitId" class="unit-input" placeholder="安全风险单元名称"> - <el-option - v-for="item in allSafetyRiskEventData" - :key="item.id" - :label="item.riskUnitName" - :value="item.id" - ></el-option> + <el-select v-model="safetyRiskEventData.params.riskUnitId" class="input-box" placeholder="安全风险单元名称"> + <el-option v-for="item in allSafetyRiskEventData" :key="item.id" :label="item.riskUnitName" :value="item.id"></el-option> </el-select> </div> - <div class="basic-search"> + <div class="basic-line"> <span>安全风险事件名称:</span> - <el-input v-model="safetyRiskEventData.params.riskEventName" class="unit-input" placeholder="安全风险事件名称"> - </el-input> + <el-input v-model="safetyRiskEventData.params.riskEventName" class="input-box" placeholder="安全风险事件名称"> </el-input> </div> - <el-button size="default" type="primary" class="ml10" @click="handleSearch"> + <el-button size="default" type="primary" class="ml10" v-throttle @click="handleSearch"> <el-icon> <ele-Search /> </el-icon> 查询 </el-button> - <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增','')"> + <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增', '')"> <el-icon> <ele-FolderAdd /> </el-icon> - 新增单元 + 新增事件 </el-button> </div> <el-table :data="safetyRiskEventData.data" style="width: 100%"> @@ -36,206 +30,177 @@ <el-table-column prop="riskUnitName" label="安全风险分析单元名称" width="180" show-overflow-tooltip></el-table-column> <el-table-column prop="riskEventName" label="安全风险事件名称" width="180" show-overflow-tooltip></el-table-column> <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="gtmCreate" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="lastEditByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column prop="gtmCreate" label="最后修改时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip></el-table-column> + <el-table-column prop="lastEditUserName" label="最后修改人" show-overflow-tooltip></el-table-column> + <el-table-column prop="gmtModitify" label="最后修改时间" show-overflow-tooltip></el-table-column> <el-table-column label="操作" width="150"> <template #default="scope"> - <el-button size="small" text type="primary" @click="onOpenDialogRef('修改',scope.row)">修改</el-button> + <el-button size="small" text type="primary" @click="onOpenDialogRef('修改', scope.row)">修改</el-button> <el-button size="small" text type="danger" @click="onDelSafetyRiskEvent(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <el-pagination - @size-change="onHandleSizeChange" - @current-change="onHandleCurrentChange" - class="mt15" - :pager-count="5" - :page-sizes="[10, 20, 30]" - v-model:current-page="safetyRiskEventData.params.pageIndex" - background - v-model:page-size="safetyRiskEventData.params.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="safetyRiskEventData.total" - > - </el-pagination> + @size-change="onHandleSizeChange" + @current-change="onHandleCurrentChange" + class="mt15" + :pager-count="5" + :page-sizes="[10, 20, 30]" + v-model:current-page="safetyRiskEventData.params.pageIndex" + background + v-model:page-size="safetyRiskEventData.params.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="safetyRiskEventData.total" + > + </el-pagination> </el-card> - <safetyRiskEventDialog ref="safetyRiskEventDialogRef" @refreshSafetyRiskEvent ="initSafetyRiskEventData"/> + <safetyRiskEventDialog ref="safetyRiskEventDialogRef" @refreshSafetyRiskEvent="initSafetyRiskEventData" /> </div> </template> <script lang="ts"> - import { toRefs, reactive, onMounted, ref } from 'vue'; - import { ElMessageBox, ElMessage } from 'element-plus'; - import safetyRiskEventDialog from './components/safetyRiskEventDialog.vue'; - import { safetyRiskEventApi } from "/@/api/doublePreventSystem/safetyRiskEvent/index.ts"; - import { departmentApi } from '/@/api/department'; +import { toRefs, reactive, onMounted, ref } from 'vue'; +import { ElMessageBox, ElMessage } from 'element-plus'; +import safetyRiskEventDialog from './components/safetyRiskEventDialog.vue'; +import { safetyRiskEventApi } from '/@/api/doublePreventSystem/safetyRiskEvent/index.ts'; +import { departmentApi } from '/@/api/department'; import { safetyRiskAnalyseUnitApi } from '/@/api/doublePreventSystem/safetyRiskAnalyseUnit'; - // 定义接口来定义对象的类型 - interface TableData { - roleName: string; - roleSign: string; - describe: string; - sort: number; - status: boolean; - createTime: string; - } - interface TableDataState { - safetyRiskEventData: { - data: Array<TableData>; - total: number; - loading: boolean; - params: { - pageIndex: number; - pageSize: number; - riskEventName: string | null; - - }; +// 定义接口来定义对象的类型 +interface TableData { + roleName: string; + roleSign: string; + describe: string; + sort: number; + status: boolean; + createTime: string; +} +interface TableDataState { + safetyRiskEventData: { + data: Array<TableData>; + total: number; + loading: boolean; + params: { + pageIndex: number; + pageSize: number; + riskEventName: string | null; }; - departmentList:Array<DepartmentState>; - allSafetyRiskEventData:Array<safetyRiskEventState>; - - } - interface safetyRiskEventState { + }; + allSafetyRiskEventData: Array<safetyRiskEventState>; +} +interface safetyRiskEventState {} - } - interface DepartmentState { - - } - - export default ({ - name: 'productionDevice', - components: { safetyRiskEventDialog }, - setup() { - const safetyRiskEventDialogRef = ref(); - const state = reactive<TableDataState>({ - safetyRiskEventData: { - data: [], - total: 0, - loading: false, - params: { - pageIndex: 1, - pageSize: 10, - riskEventName: null, - }, - }, - departmentList:[], - allSafetyRiskEventData:[], - }); - // 初始化表格数据 - const initSafetyRiskEventData = async () => { - let res = await safetyRiskEventApi().getSafetyRiskEventList(state.safetyRiskEventData.params); - if(res.data.code === '200'){ - state.safetyRiskEventData.data = res.data.data; - state.safetyRiskEventData.total = res.data.count; - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) +export default { + name: 'productionDevice', + components: { safetyRiskEventDialog }, + setup() { + const safetyRiskEventDialogRef = ref(); + const state = reactive<TableDataState>({ + safetyRiskEventData: { + data: [], + total: 0, + loading: false, + params: { + pageIndex: 1, + pageSize: 10, + riskEventName: null } - }; - - // 获取安全风险分析单元数据 - const getAllSafetyRiskEventData = async () => { - let res = await safetyRiskAnalyseUnitApi().getAllSafetyRiskAnalyseUnitList(); - if(res.data.code === '200'){ - state.allSafetyRiskEventData = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - }; - - // 获取部门列表 - const getDepartmentData = async () => { - let res = await departmentApi().getDepartmentList(); - if(res.data.code === '200'){ - state.departmentList = res.data.data; - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - }; - - // 打开安全风险事件 - const onOpenDialogRef = (type: string, value: any) => { - safetyRiskEventDialogRef.value.openSafetyRiskEventDialog(type, value, state.departmentList, state.allSafetyRiskEventData); - }; - - // 删除角色 - const onDelSafetyRiskEvent = (row: any) => { - ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.riskEventName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', + }, + allSafetyRiskEventData: [] + }); + // 初始化表格数据 + const initSafetyRiskEventData = async () => { + let res = await safetyRiskEventApi().getSafetyRiskEventList(state.safetyRiskEventData.params); + if (res.data.code === '200') { + state.safetyRiskEventData.data = res.data.data; + state.safetyRiskEventData.total = res.data.count; + } else { + ElMessage({ type: 'warning', - }).then(async () => { - let res = await safetyRiskEventApi().deleteSafetyRiskEvent({id:row.id}); - if(res.data.code ==='200'){ - ElMessage({ - type:'success', - duration:2000, - message:'删除成功' - }) - await initSafetyRiskEventData(); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }); - } - }).catch(() => {}); - }; - - const handleSearch = () => { - initSafetyRiskEventData(); + message: res.data.msg + }); } + }; - // 分页改变 - const onHandleSizeChange = (val: number) => { - state.safetyRiskEventData.params.pageSize = val; - initSafetyRiskEventData(); - }; + // 获取安全风险分析单元数据 + const getAllSafetyRiskEventData = async () => { + let res = await safetyRiskAnalyseUnitApi().getAllSafetyRiskAnalyseUnitList(); + if (res.data.code === '200') { + state.allSafetyRiskEventData = JSON.parse(JSON.stringify(res.data.data)); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - // 分页改变 - const onHandleCurrentChange = (val: number) => { - state.safetyRiskEventData.params.pageIndex = val; - initSafetyRiskEventData(); - }; + // 打开安全风险事件 + const onOpenDialogRef = (type: string, value: any) => { + safetyRiskEventDialogRef.value.openSafetyRiskEventDialog(type, value, state.allSafetyRiskEventData); + }; - // 页面加载时 - onMounted(() => { - getAllSafetyRiskEventData(); - initSafetyRiskEventData(); - getDepartmentData(); - }); + // 删除角色 + const onDelSafetyRiskEvent = (row: any) => { + ElMessageBox.confirm(`此操作将永久删除该条安全风险事件:“${row.riskEventName}”,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + let res = await safetyRiskEventApi().deleteSafetyRiskEvent({ id: row.id }); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + duration: 2000, + message: '删除成功' + }); + await initSafetyRiskEventData(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + .catch(() => {}); + }; - return { - handleSearch, - onOpenDialogRef, - onHandleSizeChange, - onDelSafetyRiskEvent, - onHandleCurrentChange, - safetyRiskEventDialog, - safetyRiskEventDialogRef, - initSafetyRiskEventData, - ...toRefs(state), - }; - }, - }); + const handleSearch = () => { + initSafetyRiskEventData(); + }; + + // 分页改变 + const onHandleSizeChange = (val: number) => { + state.safetyRiskEventData.params.pageSize = val; + initSafetyRiskEventData(); + }; + + // 分页改变 + const onHandleCurrentChange = (val: number) => { + state.safetyRiskEventData.params.pageIndex = val; + initSafetyRiskEventData(); + }; + + // 页面加载时 + onMounted(() => { + getAllSafetyRiskEventData(); + initSafetyRiskEventData(); + }); + + return { + handleSearch, + onOpenDialogRef, + onHandleSizeChange, + onDelSafetyRiskEvent, + onHandleCurrentChange, + safetyRiskEventDialog, + safetyRiskEventDialogRef, + initSafetyRiskEventData, + ...toRefs(state) + }; + } +}; </script> -<style scoped> -.basic-search{ - display:inline-block; - padding-left: 10px; -} -.unit-input{ - width:200px -} -</style> +<style scoped></style> diff --git a/src/views/doublePreventSystem/riskLevelManage/safetyRiskSpaceImg/index.vue b/src/views/doublePreventSystem/riskLevelManage/safetyRiskSpaceImg/index.vue index db27c8a..769e721 100644 --- a/src/views/doublePreventSystem/riskLevelManage/safetyRiskSpaceImg/index.vue +++ b/src/views/doublePreventSystem/riskLevelManage/safetyRiskSpaceImg/index.vue @@ -1,13 +1,13 @@ <template> - + <div> + <h1></h1> + </div> </template> <script> - export default { - name: "index" - } +export default { + name: "index", +}; </script> -<style scoped> - -</style> +<style scoped></style> diff --git a/src/views/system/menu/component/menuDialog.vue b/src/views/system/menu/component/menuDialog.vue index 0517bac..c5bb3fd 100644 --- a/src/views/system/menu/component/menuDialog.vue +++ b/src/views/system/menu/component/menuDialog.vue @@ -1,267 +1,267 @@ <template> - <div class="system-add-menu-container"> - <el-dialog :title="title" v-model="isShowDialog" width="769px"> - <el-form :model="ruleForm" size="default" label-width="80px"> - <el-row :gutter="35"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="上级菜单"> - <el-cascader - :options="menuData" - :props="{ checkStrictly: true, value: 'id', label: 'title' }" - placeholder="请选择上级菜单" - clearable - class="w100" - v-model="ruleForm.menuSuperior" - > - </el-cascader> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="菜单名称"> - <el-input v-model="ruleForm.meta.title" placeholder="格式:message.router.xxx" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="路由名称"> - <el-input v-model="ruleForm.name" placeholder="路由中的 name 值" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="路由路径"> - <el-input v-model="ruleForm.path" placeholder="路由中的 path 值" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="重定向"> - <el-input v-model="ruleForm.redirect" placeholder="请输入路由重定向" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="菜单图标"> - <IconSelector placeholder="请输入菜单图标" v-model="ruleForm.meta.icon" type="all" /> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="组件路径"> - <el-input v-model="ruleForm.component" placeholder="组件路径" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="权限标识"> - <el-select v-model="ruleForm.meta.roles" multiple placeholder="取角色管理" clearable class="w100"> - <el-option label="admin" value="admin"></el-option> - <el-option label="common" value="common"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="项目名"> - <el-select @change="handelMenu" v-model="ruleForm.projectId" controls-position="right" placeholder="请输入排序" class="w100"> - <el-option - v-for="item in projectList" - :key="item.key" - :value="item.id" - :label="item.name" - > - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="菜单排序"> - <el-input-number v-model="ruleForm.priority" controls-position="right" placeholder="请输入排序" class="w100"/> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="是否隐藏"> - <el-radio-group v-model="ruleForm.meta.isHide"> - <el-radio :label="true">隐藏</el-radio> - <el-radio :label="false">不隐藏</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="onCancel" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmit" size="default">{{ buttonName }}</el-button> - </span> - </template> - </el-dialog> - </div> + <div class="system-add-menu-container"> + <el-dialog :title="title" v-model="isShowDialog" width="769px"> + <el-form :model="ruleForm" size="default" label-width="80px"> + <el-row :gutter="35"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="上级菜单"> + <el-cascader + :options="menuData" + :props="{ checkStrictly: true, value: 'id', label: 'title' }" + placeholder="请选择上级菜单" + clearable + class="w100" + v-model="ruleForm.menuSuperior" + > + </el-cascader> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="菜单名称"> + <el-input v-model="ruleForm.meta.title" placeholder="格式:message.router.xxx" clearable></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="路由名称"> + <el-input v-model="ruleForm.name" placeholder="路由中的 name 值" clearable></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="路由路径"> + <el-input v-model="ruleForm.path" placeholder="路由中的 path 值" clearable></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="重定向"> + <el-input v-model="ruleForm.redirect" placeholder="请输入路由重定向" clearable></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="菜单图标"> + <input placeholder="请输入菜单图标" v-model="ruleForm.meta.icon" type="all" /> + <!-- <IconSelector placeholder="请输入菜单图标" v-model="ruleForm.meta.icon" type="all" />--> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="组件路径"> + <el-input v-model="ruleForm.component" placeholder="组件路径" clearable></el-input> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="权限标识"> + <el-select v-model="ruleForm.meta.roles" multiple placeholder="取角色管理" clearable class="w100"> + <el-option label="admin" value="admin"></el-option> + <el-option label="common" value="common"></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="项目名"> + <el-select + @change="handelMenu" + v-model="ruleForm.projectId" + controls-position="right" + placeholder="请输入排序" + class="w100" + > + <el-option v-for="item in projectList" :key="item.key" :value="item.id" :label="item.name"> </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="菜单排序"> + <el-input-number v-model="ruleForm.priority" controls-position="right" placeholder="请输入排序" class="w100" /> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="是否隐藏"> + <el-radio-group v-model="ruleForm.meta.isHide"> + <el-radio :label="true">隐藏</el-radio> + <el-radio :label="false">不隐藏</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="onCancel" size="default">取 消</el-button> + <el-button type="primary" @click="onSubmit" size="default">{{ buttonName }}</el-button> + </span> + </template> + </el-dialog> + </div> </template> <script lang="ts"> - import { reactive, toRefs, onMounted, defineComponent } from 'vue'; - import { storeToRefs } from 'pinia'; - import { useRoutesList } from '/@/stores/routesList'; - import { i18n } from '/@/i18n/index'; - import IconSelector from '/@/components/iconSelector/index.vue'; - import { useMenuApi } from '/@/api/menu/index' - import { ElMessageBox, ElMessage } from 'element-plus'; - import {Session} from "/@/utils/storage"; - // import { setBackEndControlRefreshRoutes } from "/@/router/backEnd"; +import { reactive, toRefs, onMounted, defineComponent } from 'vue'; +import { storeToRefs } from 'pinia'; +import { useRoutesList } from '/@/stores/routesList'; +import { i18n } from '/@/i18n/index'; +import IconSelector from '/@/components/iconSelector/index.vue'; +import { useMenuApi } from '/@/api/menu/index'; +import { ElMessageBox, ElMessage } from 'element-plus'; +import { Session } from '/@/utils/storage'; +// import { setBackEndControlRefreshRoutes } from "/@/router/backEnd"; - export default defineComponent({ - name: 'systemAddMenu', - components: { IconSelector }, - setup(props,context) { - const stores = useRoutesList(); - const { routesList } = storeToRefs(stores); - const state = reactive({ - isShowDialog: false, - title:'', - buttonName:'', - // 参数请参考 `/src/router/route.ts` 中的 `dynamicRoutes` 路由菜单格式 - ruleForm: { - projectId:'', - parentId:0, - menuSuperior: [], // 上级菜单 - menuType: 'menu', // 菜单类型 - name: '', // 路由名称 - component: '', // 组件路径 - priority: 0, // 菜单排序 - path: '', // 路由路径 - redirect: '', // 路由重定向,有子集 children 时 - meta: { - title: '', // 菜单名称 - icon: '', // 菜单图标 - isHide: false, // 是否隐藏 - isKeepAlive: true, // 是否缓存 - isAffix: false, // 是否固定 - isLink: '', // 外链/内嵌时链接地址(http:xxx.com),开启外链条件,`1、isLink: 链接地址不为空` - isIframe: false, // 是否内嵌,开启条件,`1、isIframe:true 2、isLink:链接地址不为空` - roles: [], // 权限标识,取角色管理 - }, - btnPower: '', // 菜单类型为按钮时,权限标识 - }, - menuData: [], // 上级菜单数据 - projectList:[ - ], - }); - // 获取 vuex 中的路由 - const getMenuList = (routes: any) => { - const arr: any = []; - routes.map((val: any) => { - val['title'] = val.meta.title; - val['id'] = val.id - arr.push(val); - if (val.children) getMenuList(val.children); - }); - return arr; - }; - // 打开弹窗 - const openDialog = (type:string,value:any,projectList: any,projectId:string) => { - state.projectList = JSON.parse(JSON.stringify(projectList)) - state.isShowDialog = true; - if(type === '新增'){ - state.buttonName = '新增' - state.title = '新增菜单' - state.ruleForm = { - projectId:projectId, - parentId:0, - menuSuperior: [], - menuType: 'menu', - name: '', - component: '', - priority: 0, - path: '', - redirect: '', - meta: { - title: '', - icon: '', - isHide: false, - isKeepAlive: true, - isAffix: false, - isLink: '', - isIframe: false, - roles: [], - }, - btnPower: '', - } - }else{ - state.buttonName = '修改' - state.title = '修改菜单' - state.ruleForm = JSON.parse(JSON.stringify(value)) - state.ruleForm.projectId = projectId.toString() - } - handelMenu() - }; - // 关闭弹窗 - const closeDialog = () => { - state.isShowDialog = false; - }; - // 是否内嵌下拉改变 - // const onSelectIframeChange = () => { - // if (state.ruleForm.meta.isIframe) state.ruleForm.isLink = true; - // else state.ruleForm.isLink = false; - // }; - // 取消 - const onCancel = () => { - closeDialog(); - }; - // 新增 - const onSubmit = async () => { - if(state.ruleForm.menuSuperior && state.ruleForm.menuSuperior !== []){ - let menuId = JSON.parse(JSON.stringify(state.ruleForm.menuSuperior)) - state.ruleForm.parentId = menuId[menuId.length - 1] - } - if(state.title === '新增菜单'){ - let res = await useMenuApi().addMenu(state.ruleForm) - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'菜单新增成功', - duration:2000 - }) - closeDialog(); - context.emit('getMenuList') - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) - } - }else{ - let res = await useMenuApi().modMenu(state.ruleForm) - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'菜单修改成功', - duration:2000 - }) - closeDialog(); - context.emit('getMenuList') - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) - } - } +export default defineComponent({ + name: 'systemAddMenu', + components: { IconSelector }, + setup(props, context) { + const stores = useRoutesList(); + const { routesList } = storeToRefs(stores); + const state = reactive({ + isShowDialog: false, + title: '', + buttonName: '', + // 参数请参考 `/src/router/route.ts` 中的 `dynamicRoutes` 路由菜单格式 + ruleForm: { + projectId: '', + parentId: 0, + menuSuperior: [], // 上级菜单 + menuType: 'menu', // 菜单类型 + name: '', // 路由名称 + component: '', // 组件路径 + priority: 0, // 菜单排序 + path: '', // 路由路径 + redirect: '', // 路由重定向,有子集 children 时 + meta: { + title: '', // 菜单名称 + icon: '', // 菜单图标 + isHide: false, // 是否隐藏 + isKeepAlive: true, // 是否缓存 + isAffix: false, // 是否固定 + isLink: '', // 外链/内嵌时链接地址(http:xxx.com),开启外链条件,`1、isLink: 链接地址不为空` + isIframe: false, // 是否内嵌,开启条件,`1、isIframe:true 2、isLink:链接地址不为空` + roles: [] // 权限标识,取角色管理 + }, + btnPower: '' // 菜单类型为按钮时,权限标识 + }, + menuData: [], // 上级菜单数据 + projectList: [] + }); + // 获取 vuex 中的路由 + const getMenuList = (routes: any) => { + const arr: any = []; + routes.map((val: any) => { + val['title'] = val.meta.title; + val['id'] = val.id; + arr.push(val); + if (val.children) getMenuList(val.children); + }); + return arr; + }; + // 打开弹窗 + const openDialog = (type: string, value: any, projectList: any, projectId: string) => { + state.projectList = JSON.parse(JSON.stringify(projectList)); + state.isShowDialog = true; + if (type === '新增') { + state.buttonName = '新增'; + state.title = '新增菜单'; + state.ruleForm = { + projectId: projectId, + parentId: 0, + menuSuperior: [], + menuType: 'menu', + name: '', + component: '', + priority: 0, + path: '', + redirect: '', + meta: { + title: '', + icon: '', + isHide: false, + isKeepAlive: true, + isAffix: false, + isLink: '', + isIframe: false, + roles: [] + }, + btnPower: '' + }; + } else { + state.buttonName = '修改'; + state.title = '修改菜单'; + state.ruleForm = JSON.parse(JSON.stringify(value)); + state.ruleForm.projectId = projectId.toString(); + } + handelMenu(); + }; + // 关闭弹窗 + const closeDialog = () => { + state.isShowDialog = false; + }; + // 是否内嵌下拉改变 + // const onSelectIframeChange = () => { + // if (state.ruleForm.meta.isIframe) state.ruleForm.isLink = true; + // else state.ruleForm.isLink = false; + // }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + // 新增 + const onSubmit = async () => { + if (state.ruleForm.menuSuperior && state.ruleForm.menuSuperior !== []) { + let menuId = JSON.parse(JSON.stringify(state.ruleForm.menuSuperior)); + state.ruleForm.parentId = menuId[menuId.length - 1]; + } + if (state.title === '新增菜单') { + let res = await useMenuApi().addMenu(state.ruleForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '菜单新增成功', + duration: 2000 + }); + closeDialog(); + context.emit('getMenuList'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } else { + let res = await useMenuApi().modMenu(state.ruleForm); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '菜单修改成功', + duration: 2000 + }); + closeDialog(); + context.emit('getMenuList'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } - // closeDialog(); // 关闭弹窗 - // setBackEndControlRefreshRoutes() // 刷新菜单,未进行后端接口测试 - }; + // closeDialog(); // 关闭弹窗 + // setBackEndControlRefreshRoutes() // 刷新菜单,未进行后端接口测试 + }; - const handelMenu = async () => { - let res = await useMenuApi().getMenuAdmin(state.ruleForm.projectId) - state.menuData = JSON.parse(JSON.stringify(getMenuList(res.data.data))) - } - // 页面加载时 - onMounted(async () => { - // let res = await useMenuApi().getMenuAdmin(Session.get('projectId')) - // state.menuData = JSON.parse(JSON.stringify(getMenuList(res.data.data))) - }); - return { - openDialog, - closeDialog, - onCancel, - onSubmit, - handelMenu, - ...toRefs(state), - }; - }, - }); + const handelMenu = async () => { + let res = await useMenuApi().getMenuAdmin(state.ruleForm.projectId); + state.menuData = JSON.parse(JSON.stringify(getMenuList(res.data.data))); + }; + // 页面加载时 + onMounted(async () => { + // let res = await useMenuApi().getMenuAdmin(Session.get('projectId')) + // state.menuData = JSON.parse(JSON.stringify(getMenuList(res.data.data))) + }); + return { + openDialog, + closeDialog, + onCancel, + onSubmit, + handelMenu, + ...toRefs(state) + }; + } +}); </script> diff --git a/vite.config.ts b/vite.config.ts index cf7bc27..971a832 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,77 +3,77 @@ import { defineConfig, loadEnv, ConfigEnv } from 'vite'; const pathResolve = (dir: string): any => { - return resolve(__dirname, '.', dir); + return resolve(__dirname, '.', dir); }; const alias: Record<string, string> = { - '/@': pathResolve('./src/'), - 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js', + '/@': pathResolve('./src/'), + 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js' }; const viteConfig = defineConfig((mode: ConfigEnv) => { - const env = loadEnv(mode.mode, process.cwd()); - return { - plugins: [vue()], - root: process.cwd(), - resolve: { alias }, - base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH, - hmr: true, - optimizeDeps: { - include: ['element-plus/lib/locale/lang/zh-cn', 'element-plus/lib/locale/lang/en', 'element-plus/lib/locale/lang/zh-tw'], - }, - server: { - host: '0.0.0.0', - port: env.VITE_PORT as unknown as number, - open: env.VITE_OPEN, - proxy: { - '/gitee': { - target: 'https://gitee.com', - ws: true, - changeOrigin: true, - rewrite: (path) => path.replace(/^\/gitee/, ''), - }, - }, - }, - build: { - outDir: 'dist', - sourcemap: false, - chunkSizeWarningLimit: 1500, - rollupOptions: { - output: { - entryFileNames: `assets/[name].${new Date().getTime()}.js`, - chunkFileNames: `assets/[name].${new Date().getTime()}.js`, - assetFileNames: `assets/[name].${new Date().getTime()}.[ext]`, - compact: true, - manualChunks: { - vue: ['vue', 'vue-router', 'pinia'], - echarts: ['echarts'], - }, - }, - }, - }, - css: { - postcss: { - plugins: [ - { - postcssPlugin: 'internal:charset-removal', - AtRule: { - charset: (atRule) => { - if (atRule.name === 'charset') { - atRule.remove(); - } - }, - }, - }, - ], - }, - }, - define: { - __VUE_I18N_LEGACY_API__: JSON.stringify(false), - __VUE_I18N_FULL_INSTALL__: JSON.stringify(false), - __INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false), - }, - }; + const env = loadEnv(mode.mode, process.cwd()); + return { + plugins: [vue()], + root: process.cwd(), + resolve: { alias }, + base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH, + hmr: true, + optimizeDeps: { + include: ['element-plus/lib/locale/lang/zh-cn', 'element-plus/lib/locale/lang/en', 'element-plus/lib/locale/lang/zh-tw'] + }, + server: { + host: '0.0.0.0', + port: env.VITE_PORT as unknown as number, + open: env.VITE_OPEN, + proxy: { + '/gitee': { + target: 'https://gitee.com', + ws: true, + changeOrigin: true, + rewrite: (path) => path.replace(/^\/gitee/, '') + } + } + }, + build: { + outDir: 'dist', + sourcemap: false, + chunkSizeWarningLimit: 1500, + rollupOptions: { + output: { + entryFileNames: `assets/[name].${new Date().getTime()}.js`, + chunkFileNames: `assets/[name].${new Date().getTime()}.js`, + assetFileNames: `assets/[name].${new Date().getTime()}.[ext]`, + compact: true, + manualChunks: { + vue: ['vue', 'vue-router', 'pinia'], + echarts: ['echarts'] + } + } + } + }, + css: { + postcss: { + plugins: [ + { + postcssPlugin: 'internal:charset-removal', + AtRule: { + charset: (atRule) => { + if (atRule.name === 'charset') { + atRule.remove(); + } + } + } + } + ] + } + }, + define: { + __VUE_I18N_LEGACY_API__: JSON.stringify(false), + __VUE_I18N_FULL_INSTALL__: JSON.stringify(false), + __INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false) + } + }; }); export default viteConfig; -- Gitblit v1.9.2