lct
Your Name
2022-07-07 fd285d6245ddd54c2eef8237eb878f573d665f94
lct
已修改26个文件
已添加5个文件
已删除1个文件
1641 ■■■■ 文件已修改
.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/codeStyles/Project.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/codeStyles/codeStyleConfig.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/prettier.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.prettierrc.js 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/department/index.ts 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/doublePreventSystem/productionDevice/index.ts 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/doublePreventSystem/riskControlMeasure/index.ts 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/doublePreventSystem/safetyRiskEvent/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/login/index.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/menu/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/role/index.ts 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/user/index.ts 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/style/index.scss 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.ts 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/debounce.ts 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/directive.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/getStyleSheets.ts 202 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.ts 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/throttle.ts 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doublePreventSystem/riskLevelManage/productionDevice/components/productionDeviceDialog.vue 113 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/components/riskControlMeasureDialog.vue 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/index.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/components/safetyRiskAnalyseUnitDialog.vue 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/components/safetyRiskEventDialog.vue 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/doublePreventSystem/riskLevelManage/safetyRiskSpaceImg/index.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/menu/component/menuDialog.vue 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.ts 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.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'
.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>
.idea/codeStyles/codeStyleConfig.xml
对比新文件
@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
  <state>
    <option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
  </state>
</component>
.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>
.prettierrc.js
@@ -2,38 +2,38 @@
    // 一行最多多少个字符
    printWidth: 150,
    // 指定每个缩进级别的空格数
    tabWidth: 2,
    tabWidth: 4,
    // 使用制表符而不是空格缩进行
    useTabs: true,
    // 在语句末尾打印分号
    semi: true,
    useTabs: false,
    // // 在语句末尾打印分号
    // semi: true,
    // 使用单引号而不是双引号
    singleQuote: true,
    // 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
    quoteProps: 'as-needed',
    // 在JSX中使用单引号而不是双引号
    jsxSingleQuote: false,
    // 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none
    trailingComma: 'es5',
    // // 更改引用对象属性的时间 可选值"<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: 0,
    rangeEnd: Infinity,
    // 指定要使用的解析器,不需要写文件开头的 @prettier
    requirePragma: false,
    // 不需要自动在文件开头插入 @prettier
    insertPragma: false,
    // 使用默认的折行标准 always\never\preserve
    proseWrap: 'preserve',
    // 指定HTML文件的全局空格敏感度 css\strict\ignore
    htmlWhitespaceSensitivity: 'css',
    // Vue文件脚本和样式标签缩进
    vueIndentScriptAndStyle: false,
    // 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',
    endOfLine: 'lf'
};
src/api/department/index.ts
@@ -2,12 +2,14 @@
export function departmentApi() {
    return {
        // v1
        getDepartmentList: () => {
            return request({
                url: `/department/list`,
                method: 'post',
                method: 'post'
            });
        },
        // v1
        addDepartment: (data: object) => {
            return request({
                url: `/department/add`,
@@ -15,12 +17,13 @@
                data:data
            });
        },
        // v1
        modDepartment: (data: object) => {
            return request({
                url: `/department/mod`,
                method: 'post',
                data:data
            });
        },
        }
    };
}
src/api/doublePreventSystem/productionDevice/index.ts
@@ -1,7 +1,8 @@
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`,
@@ -9,6 +10,7 @@
                data:data
            });
        },
        // v1
        addProductionDevice: (data: object) => {
            return request({
                url: `/prevent/device/insert/saveDevice`,
@@ -16,6 +18,7 @@
                data:data
            });
        },
        // v1
        modProductionDevice: (data: object) => {
            return request({
                url: `/prevent/device/update/updateDevice`,
@@ -23,6 +26,7 @@
                data:data
            });
        },
        // v1
        deleteProductionDevice: (data: object) => {
            return request({
                url: `/prevent/device/delete/deleteDevice`,
@@ -30,11 +34,12 @@
                data:data
            });
        },
        // v1
        getAllProductionDeviceList: () => {
            return request({
                url: `/prevent/device/select/listDevices`,
                method: 'post',
                method: 'post'
            });
        },
    }
    };
}
src/api/doublePreventSystem/riskControlMeasure/index.ts
@@ -1,7 +1,8 @@
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`,
@@ -9,6 +10,7 @@
                data:data
            });
        },
        // v1
        addRiskControlMeasure: (data: object) => {
            return request({
                url: `/prevent/riskControlMeasure/insert/saveRiskControlMeasure`,
@@ -16,6 +18,7 @@
                data:data
            });
        },
        // v1
        modRiskControlMeasure: (data: object) => {
            return request({
                url: `/prevent/riskControlMeasure/update/updateRiskControlMeasure`,
@@ -23,6 +26,7 @@
                data:data
            });
        },
        // v1
        deleteRiskControlMeasure: (data: object) => {
            return request({
                url: `/prevent/riskControlMeasure/delete/deleteRiskControlMeasure`,
@@ -30,5 +34,11 @@
                data:data
            });
        },
        getClassifyData: () => {
            return request({
                url: `/prevent/riskControlMeasure/select/listMeasures`,
                method: 'post'
            });
    }
    };
}
src/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts
@@ -1,7 +1,8 @@
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`,
@@ -9,6 +10,7 @@
                data:data
            });
        },
        // v1
        addSafetyRiskAnalyseUnit: (data: object) => {
            return request({
                url: `/prevent/riskAnaUnit/insert/saveRiskAnaUnit`,
@@ -16,6 +18,7 @@
                data:data
            });
        },
        // v1
        modSafetyRiskAnalyseUnit: (data: object) => {
            return request({
                url: `/prevent/riskAnaUnit/update/updateRiskAnaUnit`,
@@ -23,6 +26,7 @@
                data:data
            });
        },
        // v1
        deleteSafetyRiskAnalyseUnit: (data: object) => {
            return request({
                url: `/prevent/riskAnaUnit/delete/deleteRiskAnaUnit`,
@@ -30,11 +34,12 @@
                data:data
            });
        },
        // v1
        getAllSafetyRiskAnalyseUnitList: () => {
            return request({
                url: `/prevent/riskEvent/select/listRiskUnits`,
                method: 'post',
                method: 'post'
            });
        },
    }
    };
}
src/api/doublePreventSystem/safetyRiskEvent/index.ts
@@ -1,7 +1,8 @@
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`,
@@ -9,6 +10,7 @@
                data:data
            });
        },
        // v1
        addSafetyRiskEvent: (data: object) => {
            return request({
                url: `/prevent/riskEvent/insert/saveRiskEvent`,
@@ -16,6 +18,7 @@
                data:data
            });
        },
        // v1
        modSafetyRiskEvent: (data: object) => {
            return request({
                url: `/prevent/riskEvent/update/updateRiskEvent`,
@@ -23,6 +26,7 @@
                data:data
            });
        },
        // v1
        deleteSafetyRiskEvent: (data: object) => {
            return request({
                url: `/prevent/riskEvent/delete/deleteRiskEvent`,
@@ -30,5 +34,12 @@
                data:data
            });
        },
        // v1
        getAllSafetyRiskEventList: () => {
            return request({
                url: `/prevent/riskEvent/select/getListEvents`,
                method: 'post'
            });
    }
    };
}
src/api/login/index.ts
@@ -7,19 +7,21 @@
 */
export function useLoginApi() {
    return {
        // v1
        signIn: (params: object) => {
            return request({
                url: '/auth/login',
                method: 'post',
                data: params,
                data: params
            });
        },
        // v1
        signOut: (params: object) => {
            return request({
                url: '/user/signOut',
                method: 'post',
                data: params,
                data: params
            });
        },
        }
    };
}
src/api/menu/index.ts
@@ -8,12 +8,14 @@
 */
export function useMenuApi() {
    return {
        // v1
        getMenuAdmin: (value?: string) => {
            return request({
                url: `/auth/menu?projectId= ${value}`,
                method: 'post',
                method: 'post'
            });
        },
        // v1
        addMenu: (value?: object) => {
            return request({
                url: `/menu/add`,
@@ -21,6 +23,7 @@
                data:value
            });
        },
        // v1
        modMenu: (value?: object) => {
            return request({
                url: `/menu/mod`,
@@ -28,18 +31,20 @@
                data:value
            });
        },
        // v1
        deleteMenu: (value?: object) => {
            return request({
                url: `/menu/del`,
                method: 'post',
                data:value,
                data: value
            });
        },
        // v1
        getProjectList: () => {
            return request({
                url: `/project/list`,
                method: 'post',
                method: 'post'
            });
        },
        }
    };
}
src/api/role/index.ts
@@ -2,12 +2,14 @@
export function useRoleApi() {
    return {
        // v1
        getRoleList: () => {
            return request({
                url: `/role/list`,
                method: 'post',
                method: 'post'
            });
        },
        // v1
        addRole: (data: object) => {
            return request({
                url: `/role/add`,
@@ -15,12 +17,13 @@
                data:data
            });
        },
        // v1
        modRole: (data: object) => {
            return request({
                url: `/role/mod`,
                method: 'post',
                data:data
            });
        },
        }
    };
}
src/api/user/index.ts
@@ -2,6 +2,7 @@
export function userApi() {
    return {
        // v1
        getUserList: (data: any) => {
            return request({
                url: `/account/page/list`,
@@ -9,6 +10,7 @@
                data:data
            });
        },
        // v1
        addUser: (data: object) => {
            return request({
                url: `/account/add`,
@@ -16,6 +18,7 @@
                data:data
            });
        },
        // v1
        modUser: (data: object) => {
            return request({
                url: `/account/mod`,
@@ -23,11 +26,12 @@
                data:data
            });
        },
        // v1
        getUserLByDepartment: (depId : number | null) => {
            return request({
                url: `/account/dep/list?depId=${depId}`,
                method: 'get',
                method: 'get'
            });
        },
        }
    };
}
src/assets/style/index.scss
对比新文件
@@ -0,0 +1,7 @@
.input-box{
  width: 200px !important;
}
.basic-line{
  display: inline-block;
  padding-left: 10px;
}
src/main.ts
@@ -5,18 +5,18 @@
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);
src/utils/debounce.ts
文件已删除
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
@@ -15,4 +16,6 @@
    wavesDirective(app);
    // 自定义拖动指令
    dragDirective(app);
    preventClick(app);
}
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;
src/utils/request.ts
@@ -1,24 +1,20 @@
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' },
    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')}`;
        }
@@ -32,31 +28,29 @@
service.defaults.transformResponse = [
    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)
            Session.clear();
            window.location.href = '/';
            return Promise.reject(response);
        }
        // if(response.data.code && response.data.code !== '200'){        
            return Promise.resolve(response)
        return Promise.resolve(response);
        // }
        // Session.clear()
        // window.location.href = '/'
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);
        //     })
        // }
    });
}
src/views/doublePreventSystem/riskLevelManage/productionDevice/components/productionDeviceDialog.vue
@@ -1,11 +1,22 @@
<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">
@@ -25,19 +36,26 @@
                    </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>
@@ -45,7 +63,7 @@
            <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>
                    <el-button type="primary" @click="submitProductionDevice" v-throttle size="default">确 实</el-button>
                </span>
            </template>
        </el-dialog>
@@ -54,54 +72,48 @@
<script lang="ts">
    interface stateType{
        isShowProductionDeviceDialog:Boolean,
    isShowProductionDeviceDialog: Boolean;
        productionDeviceForm:{
            produceDeviceName: string,
            depId: number | null,
            riskLevel: number | null,
            location: string,
        },
        title: string,
        departmentList: [],
        levelList: Array<levelListState>,
        productionDeviceFormRules:{}
        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'
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, context) {
    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:'重大风险'},],
            levelList: [
                { id: 1, name: '低风险' },
                { id: 2, name: '一般风险' },
                { id: 3, name: '较大风险' },
                { id: 4, name: '重大风险' }
            ],
                productionDeviceForm: {
                    produceDeviceName: '',
                    depId: null,
                    riskLevel: null,
                    location: '',
                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' },
                    ],
                produceDeviceName: [{ required: true, message: '请填写生产装置名称', trigger: 'blur' }],
                depId: [{ required: true, message: '请选择部门', trigger: 'change' }],
                riskLevel: [{ required: true, message: '请选择风险等级', trigger: 'change' }],
                location: [{ required: true, message: '请填写区域位置', trigger: 'blur' }]
                }
            });
            //打开模态框
@@ -109,15 +121,15 @@
                state.isShowProductionDeviceDialog = true;
                state.departmentList = department;
                setTimeout(() => {
                    productionDeviceFormRef.value.clearValidate()
                })
                productionDeviceFormRef.value.clearValidate();
            });
                if(type === '新增'){
                    state.title = '新增生产装置';
                    state.productionDeviceForm = {
                        produceDeviceName: '',
                        depId: null,
                        riskLevel: null,
                        location: '',
                    location: ''
                    };
                }else{
                    state.title = '修改生产装置';
@@ -165,21 +177,20 @@
                    }else{
                        ElMessage({
                            type:'warning',
                            message:'请完善基本信息',
                        message: '请完善基本信息'
                        });
                    }
                })
            }
            });
        };
            return{
                ...toRefs(state),
                productionDeviceFormRef,
                submitProductionDevice,
                openProductionDeviceDialog,
            openProductionDeviceDialog
            };
        }
    }
};
</script>
<style scoped>
src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue
@@ -2,18 +2,13 @@
    <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"
@@ -21,11 +16,12 @@
                            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>
@@ -44,13 +40,11 @@
                <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>
@@ -80,7 +74,7 @@
    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 { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice/index.ts';
    import { departmentApi } from '/@/api/department';
    // 定义接口来定义对象的类型
@@ -110,12 +104,8 @@
        departmentList:Array<DepartmentState>;
        levelList:Array<levelListState>;
    }
    interface levelListState {
    }
    interface DepartmentState {
    }
interface levelListState {}
interface DepartmentState {}
    export default defineComponent({
        name: 'productionDevice',
@@ -135,14 +125,19 @@
                        depId: null,
                        location: null,
                        produceDeviceName: null
                    },
                }
                },
                departmentList:[],
                levelList:[{id:1,name:'低风险'},{id:2,name:'一般风险'},{id:3,name:'较大风险'},{id:4,name:'重大风险'},]
            levelList: [
                { id: 1, name: '低风险' },
                { id: 2, name: '一般风险' },
                { id: 3, name: '较大风险' },
                { id: 4, name: '重大风险' }
            ]
            });
            // 初始化表格数据
            const initProductionDeviceTableData = async () => {
                let res = await productionDeviceApi().getProductionDeviceList(state.productionDeviceData.params)
            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;
@@ -150,21 +145,21 @@
                    ElMessage({
                        type:'warning',
                        message:res.data.msg
                    })
                });
                }
            };
            const getDepartmentData = async () => {
                let res = await departmentApi().getDepartmentList()
            let res = await departmentApi().getDepartmentList();
                if(res.data.code === '200'){
                    state.departmentList = res.data.data
                state.departmentList = res.data.data;
                }else{
                    ElMessage({
                        type:'warning',
                        message:res.data.msg
                    })
                });
                }
            }
        };
            // 打开生产装置弹窗
            const onOpenDialogRef = (type: string, value: any) => {
@@ -172,39 +167,41 @@
            };
            // 删除角色
            const onDelProductionDevice = (row: any) => {
                ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.produceDeviceName}”,是否继续?`, '提示', {
            ElMessageBox.confirm(`此操作将永久删除该条生产装置:“${row.produceDeviceName}”,是否继续?`, '提示', {
                    confirmButtonText: '确认',
                    cancelButtonText: '取消',
                    type: 'warning',
                }).then(async () => {
                    let res = await productionDeviceApi().deleteProductionDevice({id:row.id})
                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()
                        });
                        await initProductionDeviceTableData();
                    }else{
                        ElMessage({
                            type:'warning',
                            message:res.data.msg
                        })
                        });
                    }
                }).catch(() => {});
                })
                .catch(() => {});
            };
            const handleSearch = () => {
                initProductionDeviceTableData()
            }
            initProductionDeviceTableData();
        };
            // 分页改变
            const onHandleSizeChange = (val: number) => {
                state.productionDeviceData.params.pageSize = val;
                initProductionDeviceTableData()
            initProductionDeviceTableData();
            };
            // 分页改变
            const onHandleCurrentChange = (val: number) => {
                state.productionDeviceData.params.pageIndex = val;
                initProductionDeviceTableData()
            initProductionDeviceTableData();
            };
            // 页面加载时
            onMounted(() => {
@@ -220,15 +217,10 @@
                productionDeviceDialog,
                productionDeviceDialogRef,
                initProductionDeviceTableData,
                ...toRefs(state),
            ...toRefs(state)
            };
        },
    }
    });
</script>
<style scoped>
.basic-search{
    display:inline-block;
    padding-left: 10px;
}
</style>
<style scoped></style>
src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/components/riskControlMeasureDialog.vue
@@ -1,47 +1,92 @@
<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"
                                    v-for="item in allSafetyRiskEventData"
                                :key="item.id"
                                :label="item.name"
                                    :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>
@@ -49,7 +94,7 @@
            <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>
                    <el-button type="primary" @click="submitRiskControlMeasureDialog" v-throttle size="default">确 实</el-button>
                </span>
            </template>
        </el-dialog>
@@ -58,93 +103,113 @@
<script lang="ts">
    interface stateType{
        isRiskControlMeasureDialog:Boolean,
    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:{}
        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 levelListState {
interface classifyTwoType {
    id: number;
    riskMeasureName: string;
}
interface controlTypeListType {}
    }
    import { reactive, toRefs, ref} from 'vue'
import { reactive, toRefs, ref } from 'vue';
    import { riskControlMeasureApi } from '/@/api/doublePreventSystem/riskControlMeasure';
    import { ElMessage } from 'element-plus';
    export default {
        name: "riskControlMeasureDialog",
        setup(props, context) {
    name: 'riskControlMeasureDialog',
    setup(props: any, context: any) {
            const riskControlMeasureFormRef = ref();
            const state = reactive<stateType>({
                title:'',
                departmentList: [],
            controlTypeList: [
                { id: 1, name: '自动化监控' },
                { id: 2, name: '隐患排查' }
            ],
            classifyOneList: [],
            classifyTwoList: [],
            classifyTwoListAll: [],
            allSafetyRiskEventData: [],
                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,
                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' },
                    ],
                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, department: []) => {
        const openSafetyRiskEventDialog = (type: string, value: object, allSafetyRiskEventData: [], classifyOneList: [], classifyTwoList: []) => {
                state.isRiskControlMeasureDialog = true;
                state.departmentList = department;
            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()
                })
                riskControlMeasureFormRef.value.clearValidate();
            });
                if(type === '新增'){
                    state.title = '新增生产装置';
                state.title = '新增风险管控措施';
                    state.riskControlMeasureForm = {
                        riskCode: null,
                        riskUnitName: null,
                        liablePersonId: null,
                        liableDepId: null,
                        produceDeviceId: null,
                    riskEventId: null,
                    controlMeasureCode: null,
                    controlType: null,
                    checkContent: null,
                    classify1: null,
                    classify2: null,
                    classify3: null,
                    measureDesc: null
                    };
                }else{
                    state.title = '修改生产装置';
                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 === '新增生产装置'){
                    if (state.title === '新增风险管控措施') {
                            let res = await riskControlMeasureApi().addRiskControlMeasure(state.riskControlMeasureForm);
                            if(res.data.code === '200'){
                                ElMessage({
                                type:'success',
                                message:'生产装置新增成功',
                                message: '风险管控措施新增成功',
                                duration:2000
                                });
                            state.isRiskControlMeasureDialog = false;
@@ -160,7 +225,7 @@
                            if(res.data.code === '200'){
                                ElMessage({
                                type:'success',
                                message:'生产装置修改成功',
                                message: '风险管控措施修改成功',
                                duration:2000
                            });
                            state.isRiskControlMeasureDialog = false;
@@ -175,20 +240,21 @@
                    }else{
                        ElMessage({
                            type:'warning',
                            message:'请完善基本信息',
                        message: '请完善基本信息'
                        });
                    }
                })
            }
            });
        };
            return{
                ...toRefs(state),
               riskControlMeasureFormRef,
            changeClassifyTwoList,
                submitRiskControlMeasureDialog,
                openSafetyRiskEventDialog,
            openSafetyRiskEventDialog
            };
        }
    }
};
</script>
<style scoped>
src/views/doublePreventSystem/riskLevelManage/riskControlMeasure/index.vue
@@ -2,30 +2,19 @@
    <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>
@@ -35,20 +24,27 @@
                    <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>
@@ -79,7 +75,7 @@
    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 { safetyRiskEventApi } from '/@/api/doublePreventSystem/safetyRiskEvent';
    // 定义接口来定义对象的类型
    interface TableData {
@@ -98,22 +94,21 @@
            params: {
                pageIndex: number;
                pageSize: number;
                riskUnitName: string | null;
                liableDep: number | null;
                liablePerson: number | null;
            controlType: number | null;
            riskEventId: number | null;
            };
        };
        departmentList:Array<DepartmentState>;
        levelList:Array<levelListState>;
    controlTypeList: Array<controlTypeType>;
    classifyOneList: Array<classifyOneType>;
    classifyTwoList: Array<classifyTwoType>;
    allSafetyRiskEventData: Array<SafetyRiskEventDataState>;
    }
    interface levelListState {
interface controlTypeType {}
interface classifyOneType {}
interface classifyTwoType {}
interface SafetyRiskEventDataState {}
    }
    interface DepartmentState {
    }
    export default ({
export default {
        name: 'riskControlMeasure',
        components: { riskControlMeasureDialog },
        setup() {
@@ -126,18 +121,22 @@
                    params: {
                        pageIndex: 1,
                        pageSize: 10,
                        riskUnitName: null,
                        liableDep: null,
                        liablePerson: null,
                    controlType: null,
                    riskEventId: null
                }
                    },
                },
                departmentList:[],
                levelList:[{id:1,name:'低风险'},{id:2,name:'一般风险'},{id:3,name:'较大风险'},{id:4,name:'重大风险'},]
            controlTypeList: [
                { id: 1, name: '自动化监控' },
                { id: 2, name: '隐患排查' }
            ],
            classifyOneList: [],
            classifyTwoList: [],
            allSafetyRiskEventData: []
            });
            // 初始化表格数据
            const initRiskControlMeasureData = async () => {
                let res = await riskControlMeasureApi().getRiskControlMeasureList(state.riskControlMeasureData.params)
            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;
@@ -145,75 +144,116 @@
                    ElMessage({
                        type:'warning',
                        message:res.data.msg
                    })
                });
                }
            };
            //获取部门列表
            const getDepartmentData = async () => {
                let res = await departmentApi().getDepartmentList()
        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 getAllSafetyRiskEvent = async () => {
            let res = await safetyRiskEventApi().getAllSafetyRiskEventList();
                if(res.data.code === '200'){
                    state.departmentList = res.data.data
                state.allSafetyRiskEventData = JSON.parse(JSON.stringify(res.data.data));
                }else{
                    ElMessage({
                        type:'warning',
                        message:res.data.msg
                    })
                });
                }
        };
        //获取管控措施分类
        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
                });
            }
        };
            // 打开生产装置弹窗
            const onOpenDialogRef = (type: string, value: any) => {
                riskControlMeasureDialogRef.value.openSafetyRiskEventDialog(type, value, state.departmentList);
            riskControlMeasureDialogRef.value.openSafetyRiskEventDialog(
                type,
                value,
                state.allSafetyRiskEventData,
                state.classifyOneList,
                state.classifyTwoList
            );
            };
            
            // 删除角色
            const onDelRiskControlMeasure = (row: any) => {
                ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.produceDeviceName}”,是否继续?`, '提示', {
            ElMessageBox.confirm(`此操作将永久删除该条风险管控措施:“${row.produceDeviceName}”,是否继续?`, '提示', {
                    confirmButtonText: '确认',
                    cancelButtonText: '取消',
                    type: 'warning',
                }).then(async () => {
                    let res = await riskControlMeasureApi().deleteRiskControlMeasure({id:row.id})
                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()
                        });
                        await initRiskControlMeasureData();
                    }else{
                        ElMessage({
                            type:'warning',
                            message:res.data.msg
                        })
                        });
                    }
                }).catch(() => {});
                })
                .catch(() => {});
            };
            const handleSearch = () => {
                initRiskControlMeasureData()
            }
            initRiskControlMeasureData();
        };
            // 分页改变
            const onHandleSizeChange = (val: number) => {
                state.riskControlMeasureData.params.pageSize = val;
                initRiskControlMeasureData()
            initRiskControlMeasureData();
            };
            // 分页改变
            const onHandleCurrentChange = (val: number) => {
                state.riskControlMeasureData.params.pageIndex = val;
                initRiskControlMeasureData()
            initRiskControlMeasureData();
            };
            // 页面加载时
            onMounted(() => {
                initRiskControlMeasureData();
                getDepartmentData();
            getAllSafetyRiskEvent();
            getClassify();
            });
            return {
            dateFormat,
                handleSearch,
                onOpenDialogRef,
                onHandleSizeChange,
@@ -222,15 +262,10 @@
                riskControlMeasureDialog,
                riskControlMeasureDialogRef,
                initRiskControlMeasureData,
                ...toRefs(state),
            ...toRefs(state)
            };
        },
    });
    }
};
</script>
<style scoped>
.basic-search{
    display:inline-block;
    padding-left: 10px;
}
</style>
<style scoped></style>
src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/components/safetyRiskAnalyseUnitDialog.vue
@@ -1,21 +1,40 @@
<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"
@@ -28,7 +47,7 @@
                    <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="请选择部门"
@@ -42,13 +61,14 @@
                    </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>
@@ -57,7 +77,7 @@
            <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>
                    <el-button type="primary" @click="submitSafetyRiskAnalyseUnitDialog" v-throttle size="default">确 实</el-button>
                </span>
            </template>
        </el-dialog>
@@ -66,30 +86,27 @@
<script lang="ts">
    interface stateType{
        isSafetyRiskAnalyseUnitDialog:Boolean,
    isSafetyRiskAnalyseUnitDialog: Boolean;
        safetyRiskAnalyseUnitForm:{
            riskCode: string | null,
            riskUnitName: string | null,
            liablePersonId: number | null,
            liableDepId: number | null,
            produceDeviceId: number | null,
        },
        title: string,
        userList:[],
        departmentList: [],
        allProduceDeviceData: [],
        safetyRiskAnalyseUnitFormRules:{}
        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 { 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) {
    name: 'productionDeviceDialog',
    setup(props: any, context: any) {
            const safetyRiskAnalyseUnitFormRef = ref();
            const state = reactive<stateType>({
                title:'',
@@ -102,26 +119,15 @@
                    riskUnitName: null,
                    liablePersonId: null,
                    liableDepId: null,
                    produceDeviceId: 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' },
                    ],
                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' }]
                }
            });
            //打开模态框
@@ -131,8 +137,8 @@
                state.allProduceDeviceData = JSON.parse(JSON.stringify(allProduceDeviceData));
                state.departmentList = department;
                setTimeout(() => {
                    safetyRiskAnalyseUnitFormRef.value.clearValidate()
                })
                safetyRiskAnalyseUnitFormRef.value.clearValidate();
            });
                if(type === '新增'){
                    state.title = '新增风险分析单元';
                    state.safetyRiskAnalyseUnitForm = {
@@ -140,7 +146,7 @@
                        riskUnitName: null,
                        liablePersonId: null,
                        liableDepId: null,
                        produceDeviceId: null,
                    produceDeviceId: null
                    };
                }else{
                    state.title = '修改风险分析单元';
@@ -188,13 +194,13 @@
                    }else{
                        ElMessage({
                            type:'warning',
                            message:'请完善基本信息',
                        message: '请完善基本信息'
                        });
                    }
                })
            });
            };
            const achiveUserList = () => {
        const achieveUserList = () => {
                state.safetyRiskAnalyseUnitForm.liablePersonId = null;
                state.userList = [];
                getUserData();
@@ -211,17 +217,17 @@
                        message:res.data.msg
                    });
                }
            }
        };
            return{
                ...toRefs(state),
                achiveUserList,
            achieveUserList,
                safetyRiskAnalyseUnitFormRef,
                submitSafetyRiskAnalyseUnitDialog,
                openSafetyRiskAnalyseUnitDialog,
            openSafetyRiskAnalyseUnitDialog
            };
        }
    }
};
</script>
<style scoped>
src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue
@@ -2,37 +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-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>
@@ -53,9 +48,9 @@
                <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>
@@ -85,7 +80,7 @@
    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 { safetyRiskAnalyseUnitApi } from '/@/api/doublePreventSystem/safetyRiskAnalyseUnit/index.ts';
    import { departmentApi } from '/@/api/department';
    import { userApi } from '/@/api/user';
    import { productionDeviceApi } from '/@/api/doublePreventSystem/productionDevice';
@@ -116,17 +111,11 @@
        departmentList:Array<DepartmentState>;
        allProduceDeviceData:Array<produceDeviceState>;
    }
    interface produceDeviceState {
interface produceDeviceState {}
interface DepartmentState {}
interface UserState {}
    }
    interface DepartmentState {
    }
    interface UserState {
    }
    export default ({
export default {
        name: 'productionDevice',
        components: { safetyRiskAnalyseUnitDialog },
        setup() {
@@ -141,18 +130,18 @@
                        pageSize: 10,
                        riskUnitName: null,
                        liableDepId: null,
                        liablePersonId: null,
                    },
                    liablePersonId: null
                }
                },
                userList: [],
                departmentList: [],
                allProduceDeviceData: [],
            allProduceDeviceData: []
            });
            // 初始化表格数据
            const initSafetyRiskAnalyseUnitData = async () => {
                let res = await safetyRiskAnalyseUnitApi().getSafetyRiskAnalyseUnitList(state.safetyRiskAnalyseUnitData.params)
            let res = await safetyRiskAnalyseUnitApi().getSafetyRiskAnalyseUnitList(state.safetyRiskAnalyseUnitData.params);
                if(res.data.code === '200'){
                    state.safetyRiskAnalyseUnitData.data = res.data.data
                state.safetyRiskAnalyseUnitData.data = res.data.data;
                    state.safetyRiskAnalyseUnitData.total = res.data.count;
                }else{
                    ElMessage({
@@ -162,7 +151,7 @@
                }
            };
            const achiveUserList = () => {
        const achieveUserList = () => {
                state.safetyRiskAnalyseUnitData.params.liablePersonId = null;
                state.userList = [];
                getUserData();
@@ -205,7 +194,7 @@
                        message:res.data.msg
                    });
                }
            }
        };
            // 打开生产装置弹窗
            const onOpenDialogRef = (type: string, value: any) => {
@@ -214,11 +203,12 @@
            
            // 删除角色
            const onDelProductionDevice = (row: any) => {
                ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.riskUnitName}”,是否继续?`, '提示', {
            ElMessageBox.confirm(`此操作将永久删除该条安全风险分析单元:“${row.riskUnitName}”,是否继续?`, '提示', {
                    confirmButtonText: '确认',
                    cancelButtonText: '取消',
                    type: 'warning',
                }).then(async () => {
                type: 'warning'
            })
                .then(async () => {
                    let res = await safetyRiskAnalyseUnitApi().deleteSafetyRiskAnalyseUnit({id:row.id});
                    if(res.data.code ==='200'){
                        ElMessage({
@@ -233,12 +223,13 @@
                            message:res.data.msg
                        });
                    }
                }).catch(() => {});
                })
                .catch(() => {});
            };
            const handleSearch = () => {
                initSafetyRiskAnalyseUnitData();
            }
        };
            // 分页改变
            const onHandleSizeChange = (val: number) => {
@@ -261,7 +252,7 @@
            return {
                handleSearch,
                achiveUserList,
            achieveUserList,
                onOpenDialogRef,
                onHandleSizeChange,
                onDelProductionDevice,
@@ -269,18 +260,10 @@
                safetyRiskAnalyseUnitDialog,
                safetyRiskAnalyseUnitDialogRef,
                initSafetyRiskAnalyseUnitData,
                ...toRefs(state),
            ...toRefs(state)
            };
        },
    });
    }
};
</script>
<style scoped>
.basic-search{
    display:inline-block;
    padding-left: 10px;
}
.unit-input{
    width:200px
}
</style>
<style scoped></style>
src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/components/safetyRiskEventDialog.vue
@@ -1,7 +1,13 @@
<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">
@@ -17,7 +23,12 @@
                    </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>
@@ -25,7 +36,7 @@
            <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>
                    <el-button type="primary" @click="submitSafetyRiskEventDialog" v-throttle size="default">确 实</el-button>
                </span>
            </template>
        </el-dialog>
@@ -34,22 +45,22 @@
<script lang="ts">
    interface stateType{
        isSafetyRiskEventDialog:Boolean,
    isSafetyRiskEventDialog: Boolean;
        safetyRiskEventForm:{
            riskEventName: string | null,
            riskUnitId: number | null,
        },
        title: string,
        departmentList: [],
        allSafetyRiskEventData: [],
        safetyRiskEventFormRules: {},
        riskEventName: string | null;
        riskUnitId: number | null;
    };
    title: string;
    departmentList: [];
    allSafetyRiskEventData: [];
    safetyRiskEventFormRules: {};
    }
    import { reactive, toRefs, ref} from 'vue'
import { reactive, toRefs, ref } from 'vue';
    import { safetyRiskEventApi } from '/@/api/doublePreventSystem/safetyRiskEvent';
    import { ElMessage } from 'element-plus';
    export default {
        name: "productionDeviceDialog",
        setup(props, context) {
    name: 'productionDeviceDialog',
    setup(props: any, context: any) {
            const safetyRiskAnalyseUnitFormRef = ref();
            const state = reactive<stateType>({
                title:'',
@@ -58,17 +69,12 @@
                isSafetyRiskEventDialog: false,
                safetyRiskEventForm: {
                    riskEventName: null,
                    riskUnitId: null,
                riskUnitId: null
                },
                safetyRiskEventFormRules:{
                    riskEventName: [
                        { required: true, message: '请填写安全风险分析对象编码', trigger: 'blur' },
                    ],
                    riskUnitId: [
                        { required: true, message: '请填写安全风险分析单元名称', trigger: 'blur' },
                    ],
                riskEventName: [{ required: true, message: '请填写安全风险分析对象编码', trigger: 'blur' }],
                riskUnitId: [{ required: true, message: '请填写安全风险分析单元名称', trigger: 'blur' }]
                }
            });
            //打开模态框
@@ -77,16 +83,16 @@
                state.allSafetyRiskEventData = JSON.parse(JSON.stringify(allSafetyRiskEventData));
                state.departmentList = department;
                setTimeout(() => {
                    safetyRiskAnalyseUnitFormRef.value.clearValidate()
                })
                safetyRiskAnalyseUnitFormRef.value.clearValidate();
            });
                if(type === '新增'){
                    state.title = '新增生产装置';
                state.title = '新增风险事件';
                    state.safetyRiskEventForm = {
                        riskEventName: null,
                        riskUnitId: null,
                    riskUnitId: null
                    };
                }else{
                    state.title = '修改生产装置';
                state.title = '修改风险事件';
                    state.safetyRiskEventForm = JSON.parse(JSON.stringify(value));
                }
            };
@@ -95,12 +101,12 @@
            const submitSafetyRiskEventDialog = async () => {
                safetyRiskAnalyseUnitFormRef.value.validate( async (valid: Boolean) => {
                    if(valid){
                        if(state.title === '新增生产装置'){
                    if (state.title === '新增风险事件') {
                            let res = await safetyRiskEventApi().addSafetyRiskEvent(state.safetyRiskEventForm);
                            if(res.data.code === '200'){
                                ElMessage({
                                type:'success',
                                message:'生产装置新增成功',
                                message: '风险事件新增成功',
                                duration:2000
                                });
                            state.isSafetyRiskEventDialog = false;
@@ -116,7 +122,7 @@
                            if(res.data.code === '200'){
                                ElMessage({
                                type:'success',
                                message:'生产装置修改成功',
                                message: '风险事件修改成功',
                                duration:2000
                            });
                            state.isSafetyRiskEventDialog = false;
@@ -131,20 +137,20 @@
                    }else{
                        ElMessage({
                            type:'warning',
                            message:'请完善基本信息',
                        message: '请完善基本信息'
                        });
                    }
                })
            }
            });
        };
            return{
                ...toRefs(state),
                safetyRiskAnalyseUnitFormRef,
                submitSafetyRiskEventDialog,
                openSafetyRiskEventDialog,
            openSafetyRiskEventDialog
            };
        }
    }
};
</script>
<style scoped>
src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue
@@ -2,23 +2,17 @@
    <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>
@@ -28,7 +22,7 @@
                    <el-icon>
                        <ele-FolderAdd />
                    </el-icon>
                    新增单元
                    新增事件
                </el-button>
            </div>
            <el-table :data="safetyRiskEventData.data" style="width: 100%">
@@ -36,9 +30,9 @@
                <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>
@@ -68,7 +62,7 @@
    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 { safetyRiskEventApi } from '/@/api/doublePreventSystem/safetyRiskEvent/index.ts';
    import { departmentApi } from '/@/api/department';
import { safetyRiskAnalyseUnitApi } from '/@/api/doublePreventSystem/safetyRiskAnalyseUnit';
@@ -90,21 +84,13 @@
                pageIndex: number;
                pageSize: number;
                riskEventName: string | null;
            };
        };
        departmentList:Array<DepartmentState>;
        allSafetyRiskEventData:Array<safetyRiskEventState>;
    }
    interface safetyRiskEventState {
interface safetyRiskEventState {}
    }
    interface DepartmentState {
    }
    export default ({
export default {
        name: 'productionDevice',
        components: { safetyRiskEventDialog },
        setup() {
@@ -117,11 +103,10 @@
                    params: {
                        pageIndex: 1,
                        pageSize: 10,
                        riskEventName: null,
                    riskEventName: null
                }
                    },
                },
                departmentList:[],
                allSafetyRiskEventData:[],
            allSafetyRiskEventData: []
            });
            // 初始化表格数据
            const initSafetyRiskEventData = async () => {
@@ -133,7 +118,7 @@
                    ElMessage({
                        type:'warning',
                        message:res.data.msg
                    })
                });
                }
            };
@@ -150,38 +135,26 @@
                }
            };
            // 获取部门列表
            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);
            safetyRiskEventDialogRef.value.openSafetyRiskEventDialog(type, value, state.allSafetyRiskEventData);
            };
            
            // 删除角色
            const onDelSafetyRiskEvent = (row: any) => {
                ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.riskEventName}”,是否继续?`, '提示', {
            ElMessageBox.confirm(`此操作将永久删除该条安全风险事件:“${row.riskEventName}”,是否继续?`, '提示', {
                    confirmButtonText: '确认',
                    cancelButtonText: '取消',
                    type: 'warning',
                }).then(async () => {
                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({
@@ -189,12 +162,13 @@
                            message:res.data.msg
                        });
                    }
                }).catch(() => {});
                })
                .catch(() => {});
            };
            const handleSearch = () => {
                initSafetyRiskEventData();
            }
        };
            // 分页改变
            const onHandleSizeChange = (val: number) => {
@@ -212,7 +186,6 @@
            onMounted(() => {
                getAllSafetyRiskEventData();
                initSafetyRiskEventData();
                getDepartmentData();
            });
            return {
@@ -224,18 +197,10 @@
                safetyRiskEventDialog,
                safetyRiskEventDialogRef,
                initSafetyRiskEventData,
                ...toRefs(state),
            ...toRefs(state)
            };
        },
    });
    }
};
</script>
<style scoped>
.basic-search{
    display:inline-block;
    padding-left: 10px;
}
.unit-input{
    width:200px
}
</style>
<style scoped></style>
src/views/doublePreventSystem/riskLevelManage/safetyRiskSpaceImg/index.vue
@@ -1,13 +1,13 @@
<template>
  <div>
    <h1></h1>
  </div>
</template>
<script>
    export default {
        name: "index"
    }
  name: "index",
};
</script>
<style scoped>
</style>
<style scoped></style>
src/views/system/menu/component/menuDialog.vue
@@ -38,7 +38,8 @@
                    </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" />
                            <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">
@@ -56,14 +57,14 @@
                    </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-select
                                @change="handelMenu"
                                v-model="ruleForm.projectId"
                                controls-position="right"
                                placeholder="请输入排序"
                                class="w100"
                                >
                                </el-option>
                                <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>
@@ -98,9 +99,9 @@
    import { useRoutesList } from '/@/stores/routesList';
    import { i18n } from '/@/i18n/index';
    import IconSelector from '/@/components/iconSelector/index.vue';
    import { useMenuApi } from '/@/api/menu/index'
import { useMenuApi } from '/@/api/menu/index';
    import { ElMessageBox, ElMessage } from 'element-plus';
    import {Session} from "/@/utils/storage";
import { Session } from '/@/utils/storage';
    // import { setBackEndControlRefreshRoutes } from "/@/router/backEnd";
    export default defineComponent({
@@ -132,20 +133,19 @@
                        isAffix: false, // 是否固定
                        isLink: '', // 外链/内嵌时链接地址(http:xxx.com),开启外链条件,`1、isLink: 链接地址不为空`
                        isIframe: false, // 是否内嵌,开启条件,`1、isIframe:true 2、isLink:链接地址不为空`
                        roles: [], // 权限标识,取角色管理
                    roles: [] // 权限标识,取角色管理
                    },
                    btnPower: '', // 菜单类型为按钮时,权限标识
                btnPower: '' // 菜单类型为按钮时,权限标识
                },
                menuData: [], // 上级菜单数据
                projectList:[
                ],
            projectList: []
            });
            // 获取 vuex 中的路由
            const getMenuList = (routes: any) => {
                const arr: any = [];
                routes.map((val: any) => {
                    val['title'] = val.meta.title;
                    val['id'] = val.id
                val['id'] = val.id;
                    arr.push(val);
                    if (val.children) getMenuList(val.children);
                });
@@ -153,11 +153,11 @@
            };
            // 打开弹窗
            const openDialog = (type:string,value:any,projectList: any,projectId:string) => {
                state.projectList = JSON.parse(JSON.stringify(projectList))
            state.projectList = JSON.parse(JSON.stringify(projectList));
                state.isShowDialog = true;
                if(type === '新增'){
                    state.buttonName = '新增'
                    state.title = '新增菜单'
                state.buttonName = '新增';
                state.title = '新增菜单';
                    state.ruleForm = {
                        projectId:projectId,
                        parentId:0,
@@ -176,17 +176,17 @@
                            isAffix: false,
                            isLink: '',
                            isIframe: false,
                            roles: [],
                        roles: []
                        },
                        btnPower: '',
                    }
                    btnPower: ''
                };
                }else{
                    state.buttonName = '修改'
                    state.title = '修改菜单'
                    state.ruleForm = JSON.parse(JSON.stringify(value))
                    state.ruleForm.projectId = projectId.toString()
                state.buttonName = '修改';
                state.title = '修改菜单';
                state.ruleForm = JSON.parse(JSON.stringify(value));
                state.ruleForm.projectId = projectId.toString();
                }
                handelMenu()
            handelMenu();
            };
            // 关闭弹窗
            const closeDialog = () => {
@@ -204,40 +204,40 @@
            // 新增
            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]
                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)
                let res = await useMenuApi().addMenu(state.ruleForm);
                    if(res.data.code === '200'){
                        ElMessage({
                            type:'success',
                            message:'菜单新增成功',
                            duration:2000
                        })
                    });
                        closeDialog();
                        context.emit('getMenuList')
                    context.emit('getMenuList');
                    }else{
                        ElMessage({
                            type:'warning',
                            message:res.data.msg
                        })
                    });
                    }
                }else{
                    let res = await useMenuApi().modMenu(state.ruleForm)
                let res = await useMenuApi().modMenu(state.ruleForm);
                    if(res.data.code === '200'){
                        ElMessage({
                            type:'success',
                            message:'菜单修改成功',
                            duration:2000
                        })
                    });
                        closeDialog();
                        context.emit('getMenuList')
                    context.emit('getMenuList');
                    }else{
                        ElMessage({
                            type:'warning',
                            message:res.data.msg
                        })
                    });
                    }
                }
@@ -246,9 +246,9 @@
            };
            const handelMenu = async () => {
                let res = await useMenuApi().getMenuAdmin(state.ruleForm.projectId)
                state.menuData = JSON.parse(JSON.stringify(getMenuList(res.data.data)))
            }
            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'))
@@ -260,8 +260,8 @@
                onCancel,
                onSubmit,
                handelMenu,
                ...toRefs(state),
            ...toRefs(state)
            };
        },
    }
    });
</script>
vite.config.ts
@@ -8,7 +8,7 @@
const alias: Record<string, string> = {
    '/@': pathResolve('./src/'),
    'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
    'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js'
};
const viteConfig = defineConfig((mode: ConfigEnv) => {
@@ -20,7 +20,7 @@
        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'],
            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',
@@ -31,9 +31,9 @@
                    target: 'https://gitee.com',
                    ws: true,
                    changeOrigin: true,
                    rewrite: (path) => path.replace(/^\/gitee/, ''),
                },
            },
                    rewrite: (path) => path.replace(/^\/gitee/, '')
                }
            }
        },
        build: {
            outDir: 'dist',
@@ -47,10 +47,10 @@
                    compact: true,
                    manualChunks: {
                        vue: ['vue', 'vue-router', 'pinia'],
                        echarts: ['echarts'],
                    },
                },
            },
                        echarts: ['echarts']
                    }
                }
            }
        },
        css: {
            postcss: {
@@ -62,17 +62,17 @@
                                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),
        },
            __INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false)
        }
    };
});