| | |
| | | <el-select |
| | | v-model="state.form.year" |
| | | placeholder="请选择年份" |
| | | :disabled="title === '查看'" |
| | | style="width: 100%" |
| | | filterable |
| | | allow-create |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="部门名称:" prop="departId" > |
| | | <el-form-item label="部门名称:" prop="deptId" > |
| | | <el-select |
| | | :disabled="title === '查看'" |
| | | v-model="state.form.departId" |
| | | v-model="state.form.deptId" |
| | | placeholder="请选择部门" |
| | | style="width: 240px" |
| | | > |
| | |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="文件编号:" prop="departId" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.content" placeholder="请输入"></el-input> |
| | | <el-form-item label="文件编号:" prop="document" > |
| | | <el-input :disabled="title === '查看'" v-model="state.form.document" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="风险管理控制:" prop="outEnvironment" > |
| | | <div style="display: flex;width: 100%;"> |
| | | <el-table :data="state.form.outEnvironment" :border="true" > |
| | | <el-form-item label="风险管理控制表:" prop="riskContents" > |
| | | <div style="display: flex;width: 100%;margin-top: 10px"> |
| | | <el-table :data="state.form.riskContents" :border="true" > |
| | | <el-table-column type="index" label="序号" align="center"></el-table-column> |
| | | <el-table-column label="质量管理活动/流程/项目管理过程" prop="content" align="center" > |
| | | <el-table-column label="质量管理活动/流程/项目管理过程" prop="process" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <el-form-item :prop="'outEnvironment.' + '[' + $index + ']' + '.content'" :rules="state.rules.out.content"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="row.remark" placeholder="请输入"></el-input> |
| | | <el-form-item :prop="'riskContents.' + '[' + $index + ']' + '.process'" :rules="state.rules.process"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="row.process" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="风险识别-潜在的风险事件" prop="content" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.mess" :key="index"> |
| | | <el-form-item :prop="'outEnvironment.' + '[' + $index + '].' +'mess.' + '[' + index + ']' + '.num'" :rules="state.rules.num"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.num" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contentMesses" :key="index"> |
| | | <el-form-item :prop="'riskContents.' + '[' + $index + '].' +'contentMesses.' + '[' + index + ']' + '.riskEvent'" :rules="state.rules.riskEvent"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.riskEvent" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="风险识别-风险发生的后果" prop="remark" align="center" > |
| | | <el-table-column label="风险识别-风险发生的后果" prop="riskConsequence" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.mess" :key="index"> |
| | | <el-form-item :prop="'outEnvironment.' + '[' + $index + '].' +'mess.' + '[' + index + ']' + '.num'" :rules="state.rules.num"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.num" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contentMesses" :key="index"> |
| | | <el-form-item :prop="'riskContents.' + '[' + $index + '].' +'contentMesses.' + '[' + index + ']' + '.riskConsequence'" :rules="state.rules.riskConsequence"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.riskConsequence" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="风险评估-严重度" prop="remark" align="center" > |
| | | <el-table-column label="风险评估-严重度" prop="severity" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.mess" :key="index"> |
| | | <el-form-item :prop="'outEnvironment.' + '[' + $index + '].' +'mess.' + '[' + index + ']' + '.num'" :rules="state.rules.num"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.num" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contentMesses" :key="index"> |
| | | <el-form-item :prop="'riskContents.' + '[' + $index + '].' +'contentMesses.' + '[' + index + ']' + '.severity'" :rules="state.rules.severity"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.severity" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="风险评估-发生频率" prop="remark" align="center" > |
| | | <el-table-column label="风险评估-发生频率" prop="frequency" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.mess" :key="index"> |
| | | <el-form-item :prop="'outEnvironment.' + '[' + $index + '].' +'mess.' + '[' + index + ']' + '.num'" :rules="state.rules.num"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.num" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contentMesses" :key="index"> |
| | | <el-form-item :prop="'riskContents.' + '[' + $index + '].' +'contentMesses.' + '[' + index + ']' + '.frequency'" :rules="state.rules.frequency"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.frequency" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="风险评估-RPN" prop="remark" align="center" > |
| | | <el-table-column label="风险评估-RPN" prop="rpn" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.mess" :key="index"> |
| | | <el-form-item :prop="'outEnvironment.' + '[' + $index + '].' +'mess.' + '[' + index + ']' + '.num'" :rules="state.rules.num"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.num" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contentMesses" :key="index"> |
| | | <el-form-item :prop="'riskContents.' + '[' + $index + '].' +'contentMesses.' + '[' + index + ']' + '.rpn'" :rules="state.rules.rpn"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.rpn" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="风险评估-风险等级" prop="remark" align="center" > |
| | | <el-table-column label="风险评估-风险等级" prop="riskLevel" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.mess" :key="index"> |
| | | <el-form-item :prop="'outEnvironment.' + '[' + $index + '].' +'mess.' + '[' + index + ']' + '.num'" :rules="state.rules.num"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.num" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contentMesses" :key="index"> |
| | | <el-form-item :prop="'riskContents.' + '[' + $index + '].' +'contentMesses.' + '[' + index + ']' + '.riskLevel'" :rules="state.rules.riskLevel"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.riskLevel" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="风险对应措施-预防措施" prop="remark" align="center" > |
| | | <el-table-column label="风险对应措施-预防措施" prop="measures" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.mess" :key="index"> |
| | | <el-form-item :prop="'outEnvironment.' + '[' + $index + '].' +'mess.' + '[' + index + ']' + '.num'" :rules="state.rules.num"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.num" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contentMesses" :key="index"> |
| | | <el-form-item :prop="'riskContents.' + '[' + $index + '].' +'contentMesses.' + '[' + index + ']' + '.measures'" :rules="state.rules.measures"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.measures" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="风险对应措施-责任人" prop="remark" align="center" > |
| | | <el-table-column label="风险对应措施-责任人" prop="chargeUser" align="center" > |
| | | <template #default="{row,$index}"> |
| | | <div v-for="(i,index) in row.mess" :key="index"> |
| | | <el-form-item :prop="'outEnvironment.' + '[' + $index + '].' +'mess.' + '[' + index + ']' + '.num'" :rules="state.rules.num"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.num" placeholder="请输入"></el-input> |
| | | <div v-for="(i,index) in row.contentMesses" :key="index"> |
| | | <el-form-item :prop="'riskContents.' + '[' + $index + '].' +'contentMesses.' + '[' + index + ']' + '.chargeUser'" :rules="state.rules.chargeUser"> |
| | | <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.chargeUser" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" align="center" width="120" v-if="title !== '查看'" > |
| | | <template #default="scope"> |
| | | <el-button link type="primary" @click="addObject(scope.row)" >添加</el-button> |
| | | <el-button link type="danger" @click="delObject(scope.row)" >删除</el-button> |
| | | <el-button link type="primary" @click="addObject(scope.row,scope.$index)" >添加</el-button> |
| | | <el-button link type="danger" @click="delObject(scope.row,scope.$index)" >删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | </el-row> |
| | | <el-row :gutter="24"> |
| | | <el-col :span="24"> |
| | | <el-form-item label="编制:" prop="compilationId" > |
| | | <el-select clearable v-model="state.form.compilationId" :disabled="title =='查看'" filterable style="width: 240px"> |
| | | <el-form-item label="编制:" prop="fictionId" > |
| | | <el-select clearable v-model="state.form.fictionId" :disabled="title =='查看'" filterable style="width: 240px"> |
| | | <el-option |
| | | v-for="item in state.peopleList" |
| | | :key="item.id" |
| | |
| | | import {getUser} from "@/api/onlineEducation/user"; |
| | | import {getDept, getObject, getObjectPage} from "@/api/qualityObjectives/object"; |
| | | import {addTable, editTable, getTargetById} from "@/api/qualityObjectives/table"; |
| | | import {addRiskControl, editRiskControl} from "@/api/riskManage/risk"; |
| | | |
| | | const dialogVisible = ref(false); |
| | | const title = ref(""); |
| | |
| | | form: { |
| | | id: '', |
| | | companyId: null, |
| | | departId: null, |
| | | deptId: null, |
| | | year: '', |
| | | compilationId: null, |
| | | fictionId: null, |
| | | checkId: null, |
| | | ratifyId: null, |
| | | dateTime: null, |
| | | outEnvironment:[], |
| | | inEnvironment: [] |
| | | document: null, |
| | | riskContents: [] |
| | | }, |
| | | rules: { |
| | | companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }], |
| | | departId: [{ required: true, message: '请选择部门', trigger: 'blur' }], |
| | | deptId: [{ required: true, message: '请选择部门', trigger: 'blur' }], |
| | | year: [{ required: true, message: '请选择年份', trigger: 'blur' }], |
| | | compilationId: [{ required: true, message: '请选择编制人', trigger: 'blur' }], |
| | | fictionId: [{ required: true, message: '请选择编制人', trigger: 'blur' }], |
| | | ratifyId: [{ required: true, message: '请选择批准人', trigger: 'blur' }], |
| | | checkId: [{ required: true, message: '请选择审核人', trigger: 'blur' }], |
| | | dateTime: [{ required: true, message: '请选择日期', trigger: 'blur' }], |
| | | out: { |
| | | reason: [{required: true, message: "", trigger: "blur"}], |
| | | content: [{required: true, message: "", trigger: "blur"}], |
| | | }, |
| | | in: { |
| | | reason: [{required: true, message: "", trigger: "blur"}], |
| | | content: [{required: true, message: "", trigger: "blur"}], |
| | | }, |
| | | document: [{ required: true, message: '请输入文件编号', trigger: 'blur' }], |
| | | riskContents: [{ required: true, message: '请输入风险管理控制表', trigger: 'blur' }], |
| | | num:[{required: true, message: "", trigger: "blur"}], |
| | | riskEvent:[{required: true, message: "", trigger: "blur"}], |
| | | riskConsequence:[{required: true, message: "", trigger: "blur"}], |
| | | severity:[{required: true, message: "", trigger: "blur"}], |
| | | frequency:[{required: true, message: "", trigger: "blur"}], |
| | | rpn:[{required: true, message: "", trigger: "blur"}], |
| | | riskLevel:[{required: true, message: "", trigger: "blur"}], |
| | | measures:[{required: true, message: "", trigger: "blur"}], |
| | | chargeUser:[{required: true, message: "", trigger: "blur"}], |
| | | process:[{required: true, message: "", trigger: "blur"}], |
| | | }, |
| | | peopleList: [], |
| | | isAdmin: false, |
| | |
| | | { |
| | | value: 5, |
| | | label: '2021' |
| | | }, |
| | | ], |
| | | outReasonList:[ |
| | | { |
| | | id: 1, |
| | | name: '政治经济因素' |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: '法律法规因素' |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: '宏观政策因素' |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: '文化氛围' |
| | | }, |
| | | ], |
| | | inReasonList:[ |
| | | { |
| | | id: 1, |
| | | name: '公司价值观' |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: '企业文化' |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: '过程能力' |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: '制度流程因素' |
| | | }, |
| | | ], |
| | | }) |
| | |
| | | if(title.value === '新增'){ |
| | | console.log('sta',state.form) |
| | | const {id, ...data} = JSON.parse(JSON.stringify(state.form)) |
| | | const res = await addTable(data) |
| | | const res = await addRiskControl(data) |
| | | if(res.code === 200){ |
| | | ElMessage({ |
| | | type: 'success', |
| | |
| | | dialogVisible.value = false; |
| | | }else if(title.value === '编辑'){ |
| | | const {...data} = JSON.parse(JSON.stringify(state.form)) |
| | | const res = await editTable(data) |
| | | const res = await editRiskControl(data) |
| | | if(res.code === 200){ |
| | | ElMessage({ |
| | | type: 'success', |
| | |
| | | ratifyId:'', |
| | | ratifyName: '', |
| | | ratifyTime: '', |
| | | outEnvironment:[], |
| | | riskContents:[], |
| | | } |
| | | state.peopleList = [] |
| | | state.companyList = [] |
| | |
| | | |
| | | |
| | | const selectValueCom = (val) => { |
| | | state.form.compilationId = null |
| | | state.form.fictionId = null |
| | | state.form.checkId = null |
| | | state.form.ratifyId = null |
| | | state.form.departId = null |
| | | state.form.deptId = null |
| | | state.companyList.forEach(item => { |
| | | if(item.name === val){ |
| | | state.form.companyId = item.id |
| | |
| | | } |
| | | } |
| | | const addTableData = () => { |
| | | state.form.outEnvironment.push({mess: [{id: null}]}) |
| | | state.form.riskContents.push({contentMesses: [{riskEvent: '',riskConsequence: '',severity: '',frequency: '',rpn: '',riskLevel: '',measures: '',chargeUser: ''}],process: ''}) |
| | | |
| | | } |
| | | const addObject = (val) => { |
| | | state.form.outEnvironment.forEach(item => { |
| | | if(item.id == val.id){ |
| | | item.mess.push({id: item.id}) |
| | | const addObject = (val,itemIndex) => { |
| | | state.form.riskContents.forEach((item,index) => { |
| | | if(itemIndex == index){ |
| | | item.contentMesses.push({id: item.id}) |
| | | } |
| | | }) |
| | | |
| | | } |
| | | const delObject = (val) => { |
| | | state.form.outEnvironment.forEach(item => { |
| | | if(item.id == val.id){ |
| | | if(item.mess.length == 1){ |
| | | ElMessage.warning('至少保留一组数据') |
| | | return |
| | | const delObject = (val,itemIndex) => { |
| | | state.form.riskContents.forEach((item,index) => { |
| | | if(index == itemIndex){ |
| | | if(item.contentMesses.length == 1){ |
| | | state.form.riskContents.splice(index,1) |
| | | }else { |
| | | item.contentMesses.pop() |
| | | } |
| | | item.mess.pop() |
| | | } |
| | | }) |
| | | } |