From 01ad8bbb87e6af83adfb3c75b85d6533abef32de Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期二, 05 八月 2025 17:29:16 +0800 Subject: [PATCH] 修改 --- public/riskRecordExample.docx | 0 src/views/build/conpanyFunctionConsult/riskManage/control/components/editDialog.vue | 195 +++----- public/evaluateExample.docx | 0 src/api/riskManage/risk.js | 71 +++ src/views/build/conpanyFunctionConsult/riskManage/control/index.vue | 70 +- public/riskControlExample.docx | 0 src/views/build/conpanyFunctionConsult/riskManage/record/index.vue | 83 +-- src/views/build/conpanyFunctionConsult/need/needIdentify/index.vue | 49 + src/views/build/conpanyFunctionConsult/need/evaluate/components/editDialog.vue | 244 ++++------ public/needIdentifyExample.docx | 0 src/views/build/conpanyFunctionConsult/riskManage/record/components/editDialog.vue | 280 +++-------- src/views/build/conpanyFunctionConsult/need/needIdentify/components/editDialog.vue | 170 +++---- src/api/need/need.js | 78 +++ src/views/build/conpanyFunctionConsult/need/evaluate/index.vue | 48 + 14 files changed, 604 insertions(+), 684 deletions(-) diff --git a/public/evaluateExample.docx b/public/evaluateExample.docx index 4385b68..bde07b1 100644 --- a/public/evaluateExample.docx +++ b/public/evaluateExample.docx Binary files differ diff --git a/public/needIdentifyExample.docx b/public/needIdentifyExample.docx index 2df35ac..cad182c 100644 --- a/public/needIdentifyExample.docx +++ b/public/needIdentifyExample.docx Binary files differ diff --git a/public/riskControlExample.docx b/public/riskControlExample.docx index 23e400f..8d95af1 100644 --- a/public/riskControlExample.docx +++ b/public/riskControlExample.docx Binary files differ diff --git a/public/riskRecordExample.docx b/public/riskRecordExample.docx index 9480cbd..e6ce2d7 100644 --- a/public/riskRecordExample.docx +++ b/public/riskRecordExample.docx Binary files differ diff --git a/src/api/need/need.js b/src/api/need/need.js new file mode 100644 index 0000000..03528c1 --- /dev/null +++ b/src/api/need/need.js @@ -0,0 +1,78 @@ +import request from "@/utils/request"; + +export function getNeedDiscren(params) { + return request({ + url: '/composite/expect/discren/list', + method: 'get', + params: params + }) +} +export function getNeedDiscrenAll(params) { + return request({ + url: '/composite/factor/discern/listAll', + method: 'get', + params: params + }) +} + +export function addNeedDiscren(data) { + return request({ + url: '/composite/expect/discren/insert', + method: 'post', + data: data + }) +} + +export function editNeedDiscren(params) { + return request({ + url: `/composite/expect/discren/update`, + method: 'post', + data: params + }) +} + +export function delNeedDiscren(data) { + return request({ + url: `/composite/expect/discren/deleted?expectDiscrenId=${data}`, + method: 'get' + }) +} + +//评价 +export function getNeedEvaluate(params) { + return request({ + url: '/composite/expect/evaluate/list', + method: 'get', + params: params + }) +} +export function getNeedEvaluateAll(params) { + return request({ + url: '/composite/expect/discren/listAll', + method: 'get', + params: params + }) +} + +export function addNeedEvaluate(data) { + return request({ + url: '/composite/expect/evaluate/insert', + method: 'post', + data: data + }) +} + +export function editNeedEvaluate(params) { + return request({ + url: `/composite/expect/evaluate/update`, + method: 'post', + data: params + }) +} + +export function delNeedEvaluate(data) { + return request({ + url: `/composite/expect/evaluate/deleted?expectEvaluateId=${data}`, + method: 'get' + }) +} diff --git a/src/api/riskManage/risk.js b/src/api/riskManage/risk.js new file mode 100644 index 0000000..1aa5cea --- /dev/null +++ b/src/api/riskManage/risk.js @@ -0,0 +1,71 @@ +import request from "@/utils/request"; + +export function getRiskControl(params) { + return request({ + url: '/composite/risk/manage/list', + method: 'get', + params: params + }) +} +export function getRiskControlAll(params) { + return request({ + url: '/composite/risk/manage/listAll', + method: 'get', + params: params + }) +} + +export function addRiskControl(data) { + return request({ + url: '/composite/risk/manage/insert', + method: 'post', + data: data + }) +} + +export function editRiskControl(params) { + return request({ + url: `/composite/risk/manage/update`, + method: 'post', + data: params + }) +} + +export function delRiskControl(data) { + return request({ + url: `/composite/risk/manage/deleted?riskManageId=${data}`, + method: 'get' + }) +} + +//监视记录 +export function getMonitorRecord(params) { + return request({ + url: '/composite/risk/monitor/list', + method: 'get', + params: params + }) +} + +export function addMonitorRecord(data) { + return request({ + url: '/composite/risk/monitor/insert', + method: 'post', + data: data + }) +} + +export function editMonitorRecord(params) { + return request({ + url: `/composite/risk/monitor/update`, + method: 'post', + data: params + }) +} + +export function delMonitorRecord(data) { + return request({ + url: `/composite/risk/monitor/deleted?riskMonitorId=${data}`, + method: 'get' + }) +} diff --git a/src/views/build/conpanyFunctionConsult/need/evaluate/components/editDialog.vue b/src/views/build/conpanyFunctionConsult/need/evaluate/components/editDialog.vue index b73e826..1af9422 100644 --- a/src/views/build/conpanyFunctionConsult/need/evaluate/components/editDialog.vue +++ b/src/views/build/conpanyFunctionConsult/need/evaluate/components/editDialog.vue @@ -8,7 +8,7 @@ :close-on-press-escape="false" :close-on-click-modal="false" > - <el-form :model="state.form" size="default" ref="busRef" :rules="state.rules" label-position="right" label-width="130"> + <el-form :model="state.form" size="default" ref="busRef" :rules="state.rules" label-position="right" > <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="企业名称:" prop="companyId" v-if="state.isAdmin"> @@ -25,17 +25,19 @@ </el-row> <el-row :gutter="24"> <el-col :span="24"> - <el-form-item label="相关方期望或要求识别表:" prop="year" > + <el-form-item label="相关方期望或要求识别表:" prop="expectDiscrenId" > <el-select - v-model="state.form.year" + v-model="state.form.expectDiscrenId" placeholder="请选择" style="width: 100%" + @change="changeDiscren" + :disabled="title === '查看'" > <el-option - v-for="item in state.yearList" - :key="item.value" - :label="item.label" - :value="item.label" + v-for="item in state.needList" + :key="item.id" + :label="item.name" + :value="item.id" /> </el-select> </el-form-item> @@ -43,40 +45,56 @@ </el-row> <el-row :gutter="24"> <el-col :span="24"> - <el-form-item label="相关方期望或要求识别表:" prop="outEnvironment" > + <el-form-item label="相关方期望或要求评价表:" :label-width="110" prop="expectContents" > <div style="display: flex;width: 100%;"> - <el-table :data="state.form.outEnvironment" :border="true" > + <el-table :data="state.form.expectContents" :border="true" > <el-table-column type="index" label="序号" align="center"></el-table-column> - <el-table-column label="相关方" prop="message" align="center" /> - <el-table-column label="期望或要求" prop="message" align="center" /> - <el-table-column label="应对措施" prop="message" align="center" /> - <el-table-column label="评价结果" prop="remark" 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.content" placeholder="请输入"></el-input> - </el-form-item> + <el-table-column label="相关方" prop="stakeholder" align="center" /> + <el-table-column label="期望或要求" prop="message" align="center"> + <template #default="{row,$index}"> + <div v-for="(i,index) in row.expectContentMesses" :key="index"> +<!-- <span>{{ i.expectation }}</span>--> + <el-input style="margin-bottom: 5px" disabled v-model="i.expectation"></el-input> + </div> </template> </el-table-column> - <el-table-column label="操作" align="center" width="120" v-if="title !== '查看'" > - <template #default="scope"> - <el-button link type="danger" @click="delTable(scope.row)" >删除</el-button> + <el-table-column label="应对措施" prop="message" align="center"> + <template #default="{row,$index}"> + <div v-for="(i,index) in row.expectContentMesses" :key="index"> +<!-- <span>{{ i.solutions }}</span>--> + <el-input disabled style="margin-bottom: 5px" v-model="i.solutions"></el-input> + </div> </template> </el-table-column> + <el-table-column label="评价结果" prop="review" align="center" > + <template #default="{row,$index}"> + <div v-for="(i,index) in row.expectContentMesses" :key="index"> + <el-form-item :prop="'expectContents.' + '[' + $index + '].' +'expectContentMesses.' + '[' + index + ']' + '.review'" :rules="state.rules.review"> + <el-input style="margin-bottom: 5px" :disabled="title === '查看'" v-model="i.review" 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="danger" @click="delTable(scope.row)" >删除</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> </el-table> - <el-button - :disabled="title === '查看'" - type="primary" - @click="addTableData" - style="margin-left: 10px" - >新增</el-button> +<!-- <el-button--> +<!-- :disabled="title === '查看'"--> +<!-- type="primary"--> +<!-- @click="addTableData"--> +<!-- style="margin-left: 10px"--> +<!-- >新增</el-button>--> </div> </el-form-item> </el-col> </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="evaluateId" > + <el-select clearable v-model="state.form.evaluateId" :disabled="title =='查看'" filterable style="width: 240px"> <el-option v-for="item in state.peopleList" :key="item.id" @@ -89,8 +107,8 @@ </el-row> <el-row :gutter="24"> <el-col :span="12"> - <el-form-item label="确认人:" prop="ratifyId" > - <el-select clearable v-model="state.form.ratifyId" :disabled="title =='查看'" filterable style="width: 240px"> + <el-form-item label="确认人:" prop="confirmId" > + <el-select clearable v-model="state.form.confirmId" :disabled="title =='查看'" filterable style="width: 240px"> <el-option v-for="item in state.peopleList" :key="item.id" @@ -101,10 +119,10 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="日期:" prop="dateTime" > + <el-form-item label="日期:" prop="evaluateTime" > <el-date-picker :disabled="title === '查看'" - v-model="state.form.dateTime" + v-model="state.form.evaluateTime" type="date" placeholder="请选择日期" /> @@ -129,6 +147,7 @@ import {getUser} from "@/api/onlineEducation/user"; import {getDept, getObject, getObjectPage} from "@/api/qualityObjectives/object"; import {addTable, editTable, getTargetById} from "@/api/qualityObjectives/table"; +import {addNeedEvaluate, editNeedEvaluate, getNeedEvaluateAll} from "@/api/need/need"; const dialogVisible = ref(false); const title = ref(""); @@ -141,94 +160,26 @@ form: { id: '', companyId: null, - departId: null, - year: '', - compilationId: null, - checkId: null, - ratifyId: null, - dateTime: null, - outEnvironment:[], - inEnvironment: [] + expectDiscrenId: null, + evaluateId: null, + confirmId: null, + evaluateTime: null, + expectContents:[] }, rules: { companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }], - departId: [{ required: true, message: '请选择部门', trigger: 'blur' }], - year: [{ required: true, message: '请选择年份', trigger: 'blur' }], - compilationId: [{ required: true, message: '请选择编制人', trigger: 'blur' }], - ratifyId: [{ required: true, message: '请选择批准人', trigger: 'blur' }], + expectDiscrenId: [{ required: true, message: '请选择相关方期望或要求识别表', trigger: 'blur' }], + evaluateId: [{ required: true, message: '请选择评价人', trigger: 'blur' }], + confirmId: [{ required: true, message: '请选择确认人', trigger: 'blur' }], + evaluateTime: [{ 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"}], - }, + review: [{required: true, message: "", trigger: "blur"}], }, peopleList: [], isAdmin: false, companyList: [], - deptList: [], - yearList: [ - { - value: 1, - label: '2025' - }, - { - value: 2, - label: '2024' - }, - { - value: 3, - label: '2023' - }, - { - value: 4, - label: '2022' - }, - { - 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: '制度流程因素' - }, - ], + needList: [], }) onMounted(() => { @@ -248,28 +199,32 @@ title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ; if(type === 'edit' || type === 'review') { state.form = JSON.parse(JSON.stringify(value)); + state.form.confirmId = Number(state.form.confirmId) if(state.isAdmin){ state.form.companyId = value.companyId state.form.companyName = value.companyName } } - await getDeptList() + + await getNeedList() await getPeopleList() dialogVisible.value = true; } -const getDeptList = async () => { +const getNeedList = async () => { if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){ return } - const param = { - pageNum: 1, - pageSize: 999, - companyId: state.form.companyId - } - const res = await getDept(param) + const res = await getNeedEvaluateAll({companyId: state.form.companyId}) if(res.code === 200){ - state.deptList = res.data + state.needList = res.data.map(item => { + return { + ...item, + name: item.year + '年度' + item.deptName + '相关方期望或要求识别表' + } + }) + }else{ + ElMessage.warning(res.message) } } const onSubmit = async () => { @@ -278,7 +233,7 @@ 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 addNeedEvaluate(data) if(res.code === 200){ ElMessage({ type: 'success', @@ -293,7 +248,7 @@ dialogVisible.value = false; }else if(title.value === '编辑'){ const {...data} = JSON.parse(JSON.stringify(state.form)) - const res = await editTable(data) + const res = await editNeedEvaluate(data) if(res.code === 200){ ElMessage({ type: 'success', @@ -320,22 +275,16 @@ const reset = () => { state.form = { id: '', - qualityId: '', - - fictionId : '', - fictionName: '', - fictionTime:'', - checkId :'', - checkName: '', - checkTime:'', - ratifyId:'', - ratifyName: '', - ratifyTime: '', - outEnvironment:[], + companyId: null, + expectDiscrenId: null, + evaluateId: null, + confirmId: null, + evaluateTime: null, + expectContents:[] } state.peopleList = [] state.companyList = [] - state.qualityList = [] + state.needList = [] } const getPeopleList = async ()=> { if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){ @@ -353,32 +302,29 @@ ElMessage.warning(res.message) } }; - +const changeDiscren = (val) => { + state.needList.forEach(item => { + if(item.id == val){ + state.form.expectContents = item.expectContents + } + }) +} const selectValueCom = (val) => { - state.form.compilationId = null - state.form.checkId = null - state.form.ratifyId = null - state.form.departId = null + state.form.confirmId = null + state.form.evaluateId = null + state.form.expectDiscrenId = null state.companyList.forEach(item => { if(item.name === val){ state.form.companyId = item.id } }) - getDeptList() + getNeedList() getPeopleList() } -const handleChangeNum = (value) => { - if (!/^\d+$/.test(value)) { // 验证是否为数字 - ElMessage.warning('只能输入数字') - state.form.year = '' // 重置选择,避免非法值被添加到options中 - } else if (!state.yearList.some(option => option.label === value)) { // 确保不是已存在的选项 - state.yearList.push({ value, label: value }); // 添加新选项(这里简单地将值和标签设为相同) - } -} const addTableData = () => { state.form.outEnvironment.push({}) } diff --git a/src/views/build/conpanyFunctionConsult/need/evaluate/index.vue b/src/views/build/conpanyFunctionConsult/need/evaluate/index.vue index e913efe..c3e4f11 100644 --- a/src/views/build/conpanyFunctionConsult/need/evaluate/index.vue +++ b/src/views/build/conpanyFunctionConsult/need/evaluate/index.vue @@ -55,8 +55,12 @@ <el-table v-loading="loading" :data="dataList" :border="true" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" /> <el-table-column type="index" label="序号" width="80" align="center"></el-table-column> - <el-table-column label="名称" prop="companyName" align="center" /> - <el-table-column label="部门" prop="departName" align="center" /> + <el-table-column label="名称" align="center"> + <template #default="scope"> + <span>{{scope.row.year}}年度{{scope.row.deptName}}相关方期望或要求评价表</span> + </template> + </el-table-column> + <el-table-column label="部门" prop="deptName" align="center" /> <el-table-column label="年份" prop="year" align="center" /> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160"> <template #default="scope"> @@ -90,6 +94,7 @@ import Cookies from "js-cookie"; import {generateWordDocument} from "@/utils/exportWord"; import {delTable, getTable} from "@/api/qualityObjectives/table"; +import {delNeedEvaluate, getNeedEvaluate} from "@/api/need/need"; const { proxy } = getCurrentInstance(); const loading = ref(false); const noticeRef = ref(); @@ -151,18 +156,14 @@ }); const getList = async () => { loading.value = true; - // const res = await getTable(data.queryParams); - // if(res.code === 200){ - // dataList.value = res.data.list - // total.value = res.data.total - // }else{ - // ElMessage.warning(res.message) - // } - dataList.value = [ - {} - ] + const res = await getNeedEvaluate(data.queryParams); + if(res.code === 200){ + dataList.value = res.data.list + total.value = res.data.total + }else{ + ElMessage.warning(res.message) + } loading.value = false; - } const searchClick = () => { @@ -243,13 +244,22 @@ const data = JSON.parse(JSON.stringify(choosedData.value)) let name = '' data.forEach(item => { - item.tableList =[ - { - num: 1 + item.evaluateTime = item.evaluateTime.substring(0,10) + item.tableData = item.expectContents.map((i,index) => { + return{ + ...i, + expectContentMesses: i.expectContentMesses.map((q,qindex) => { + return{ + ...q, + first: qindex == 0, + num: index+1, + stakeholder: i.stakeholder + } + }) } - ] + }) try { - generateWordDocument(templatePath.value, item, `_相关方期望或要求评价表.docx`); + generateWordDocument(templatePath.value, item, item.companyName +`_相关方期望或要求评价表.docx`); } catch (error){ ElMessage({ type: 'warning', @@ -282,7 +292,7 @@ type: 'warning', }) .then( async() => { - const res = await delTable(val.id); + const res = await delNeedEvaluate(val.id); if(res.code === 200){ ElMessage({ type: 'success', diff --git a/src/views/build/conpanyFunctionConsult/need/needIdentify/components/editDialog.vue b/src/views/build/conpanyFunctionConsult/need/needIdentify/components/editDialog.vue index 10cf0c4..c993b89 100644 --- a/src/views/build/conpanyFunctionConsult/need/needIdentify/components/editDialog.vue +++ b/src/views/build/conpanyFunctionConsult/need/needIdentify/components/editDialog.vue @@ -29,6 +29,7 @@ <el-select v-model="state.form.year" placeholder="请选择年份" + :disabled="title === '查看'" style="width: 100%" filterable allow-create @@ -46,10 +47,10 @@ </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" > @@ -65,32 +66,39 @@ </el-row> <el-row :gutter="24"> <el-col :span="24"> - <el-form-item label="相关方期望或要求识别表:" prop="outEnvironment" > + <el-form-item label="相关方期望或要求识别表:" prop="expectContents" > <div style="display: flex;width: 100%;"> - <el-table :data="state.form.outEnvironment" :border="true" > + <el-table :data="state.form.expectContents" :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="stakeholder" 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.content" placeholder="请输入"></el-input> + <el-form-item :prop="'expectContents.' + '[' + $index + ']' + '.stakeholder'" :rules="state.rules.stakeholder"> + <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="row.stakeholder" placeholder="请输入"></el-input> </el-form-item> </template> </el-table-column> - <el-table-column label="期望或要求" prop="content" 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.content" placeholder="请输入"></el-input> - </el-form-item> + <el-table-column label="期望或要求" prop="expectation" align="center" > + <template #default="{row,$index}"> + <div v-for="(i,index) in row.expectContentMesses" :key="index"> + <el-form-item :prop="'expectContents.' + '[' + $index + '].' +'expectContentMesses.' + '[' + index + ']' + '.expectation'" :rules="state.rules.expectation"> + <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.expectation" placeholder="请输入"></el-input> + </el-form-item> + </div> </template> </el-table-column> - <el-table-column label="应对措施" prop="remark" align="center" > - <template #default="{row,$index}"> - <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="row.remark" placeholder="请输入"></el-input> + <el-table-column label="应对措施" prop="solutions" align="center" > + <template #default="{row,$index}"> + <div v-for="(i,index) in row.expectContentMesses" :key="index"> + <el-form-item :prop="'expectContents.' + '[' + $index + '].' +'expectContentMesses.' + '[' + index + ']' + '.solutions'" :rules="state.rules.solutions"> + <el-input style="margin-top: 10px" :disabled="title === '查看'" type="textarea" v-model="i.solutions" 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="danger" @click="delTable(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> @@ -106,15 +114,15 @@ </el-row> <el-row :gutter="24"> <el-col :span="24"> - <el-form-item label="监测频率:" prop="compilationId" > - <el-input style="width: 240px" :disabled="title === '查看'" v-model="state.form.compilationId" placeholder="请输入"></el-input> + <el-form-item label="监测频率:" prop="frequency" > + <el-input style="width: 240px" :disabled="title === '查看'" v-model="state.form.frequency" placeholder="请输入"></el-input> </el-form-item> </el-col> </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" @@ -153,10 +161,10 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="日期:" prop="dateTime" > + <el-form-item label="日期:" prop="fictionTime" > <el-date-picker :disabled="title === '查看'" - v-model="state.form.dateTime" + v-model="state.form.fictionTime" type="date" placeholder="请选择日期" /> @@ -181,6 +189,7 @@ import {getUser} from "@/api/onlineEducation/user"; import {getDept, getObject, getObjectPage} from "@/api/qualityObjectives/object"; import {addTable, editTable, getTargetById} from "@/api/qualityObjectives/table"; +import {addNeedDiscren, editNeedDiscren} from "@/api/need/need"; const dialogVisible = ref(false); const title = ref(""); @@ -193,31 +202,28 @@ form: { id: '', companyId: null, - departId: null, + deptId: null, year: '', - compilationId: null, + fictionId: null, checkId: null, ratifyId: null, - dateTime: null, - outEnvironment:[], - inEnvironment: [] + fictionTime: null, + frequency: '', + expectContents:[], }, 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"}], - }, + fictionTime: [{ required: true, message: '请选择日期', trigger: 'blur' }], + frequency: [{ required: true, message: '请输入监测频率', trigger: 'blur' }], + stakeholder: [{required: true, message: "", trigger: "blur"}], + expectation: [{required: true, message: "", trigger: "blur"}], + solutions: [{required: true, message: "", trigger: "blur"}], + expectContents:[{ required: true, message: '请填写相关方期望或要求识别表', trigger: 'blur' }], }, peopleList: [], isAdmin: false, @@ -243,42 +249,6 @@ { 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: '制度流程因素' }, ], }) @@ -330,7 +300,7 @@ 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 addNeedDiscren(data) if(res.code === 200){ ElMessage({ type: 'success', @@ -345,7 +315,7 @@ dialogVisible.value = false; }else if(title.value === '编辑'){ const {...data} = JSON.parse(JSON.stringify(state.form)) - const res = await editTable(data) + const res = await editNeedDiscren(data) if(res.code === 200){ ElMessage({ type: 'success', @@ -372,22 +342,19 @@ const reset = () => { state.form = { id: '', - qualityId: '', - - fictionId : '', - fictionName: '', - fictionTime:'', - checkId :'', - checkName: '', - checkTime:'', - ratifyId:'', - ratifyName: '', - ratifyTime: '', - outEnvironment:[], + companyId: null, + deptId: null, + year: '', + fictionId: null, + checkId: null, + ratifyId: null, + fictionTime: null, + frequency: '', + expectContents:[], } + state.deptList = [] state.peopleList = [] state.companyList = [] - state.qualityList = [] } const getPeopleList = async ()=> { if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){ @@ -410,10 +377,10 @@ 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 @@ -432,10 +399,25 @@ } } const addTableData = () => { - state.form.outEnvironment.push({}) + state.form.expectContents.push({expectContentMesses: [{expectation:'',solutions: ''}],stakeholder: ''}) } -const delTable = (val) => { - state.form.outEnvironment = state.form.outEnvironment.filter(item=> item != val) +const addObject = (val,itemIndex) => { + state.form.expectContents.forEach((item,index) => { + if(index == itemIndex){ + item.expectContentMesses.push({expectContentMesses: [{expectation:'',solutions: ''}],stakeholder:val.stakeholder}) + } + }) +} +const delObject = (val,itemIndex) => { + state.form.expectContents.forEach((item,index) => { + if(index == itemIndex){ + if(item.expectContentMesses.length == 1){ + state.form.expectContents.splice(index,1) + }else { + item.expectContentMesses.pop() + } + } + }) } defineExpose({ diff --git a/src/views/build/conpanyFunctionConsult/need/needIdentify/index.vue b/src/views/build/conpanyFunctionConsult/need/needIdentify/index.vue index 9909657..f30a73b 100644 --- a/src/views/build/conpanyFunctionConsult/need/needIdentify/index.vue +++ b/src/views/build/conpanyFunctionConsult/need/needIdentify/index.vue @@ -55,8 +55,12 @@ <el-table v-loading="loading" :data="dataList" :border="true" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" /> <el-table-column type="index" label="序号" width="80" align="center"></el-table-column> - <el-table-column label="名称" prop="companyName" align="center" /> - <el-table-column label="部门" prop="departName" align="center" /> + <el-table-column label="名称" align="center"> + <template #default="scope"> + <span>{{scope.row.year}}年度{{scope.row.deptName}}相关方期望或要求识别表</span> + </template> + </el-table-column> + <el-table-column label="部门" prop="deptName" align="center" /> <el-table-column label="年份" prop="year" align="center" /> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160"> <template #default="scope"> @@ -90,6 +94,7 @@ import Cookies from "js-cookie"; import {generateWordDocument} from "@/utils/exportWord"; import {delTable, getTable} from "@/api/qualityObjectives/table"; +import {delNeedDiscren, getNeedDiscren} from "@/api/need/need"; const { proxy } = getCurrentInstance(); const loading = ref(false); const noticeRef = ref(); @@ -151,16 +156,13 @@ }); const getList = async () => { loading.value = true; - // const res = await getTable(data.queryParams); - // if(res.code === 200){ - // dataList.value = res.data.list - // total.value = res.data.total - // }else{ - // ElMessage.warning(res.message) - // } - dataList.value = [ - {} - ] + const res = await getNeedDiscren(data.queryParams); + if(res.code === 200){ + dataList.value = res.data.list + total.value = res.data.total + }else{ + ElMessage.warning(res.message) + } loading.value = false; } @@ -241,15 +243,24 @@ const templatePath = ref('/needIdentifyExample.docx') const startGeneration = async () => { const data = JSON.parse(JSON.stringify(choosedData.value)) - let name = '' data.forEach(item => { - item.tableList =[ - { - num: 1 + item.fictionTime = item.fictionTime.substring(0,10) + item.tableData = item.expectContents.map((i,index) => { + return{ + ...i, + expectContentMesses: i.expectContentMesses.map((q,qindex) => { + return{ + ...q, + first: qindex == 0, + num: index+1, + stakeholder: i.stakeholder + } + }) } - ] + }) + console.log('xxx',item.tableData) try { - generateWordDocument(templatePath.value, item, `_相关方期望和需求识别.docx`); + generateWordDocument(templatePath.value, item, item.companyName + `_相关方期望和需求识别表.docx`); } catch (error){ ElMessage({ type: 'warning', @@ -282,7 +293,7 @@ type: 'warning', }) .then( async() => { - const res = await delTable(val.id); + const res = await delNeedDiscren(val.id); if(res.code === 200){ ElMessage({ type: 'success', diff --git a/src/views/build/conpanyFunctionConsult/riskManage/control/components/editDialog.vue b/src/views/build/conpanyFunctionConsult/riskManage/control/components/editDialog.vue index eff87b8..d010400 100644 --- a/src/views/build/conpanyFunctionConsult/riskManage/control/components/editDialog.vue +++ b/src/views/build/conpanyFunctionConsult/riskManage/control/components/editDialog.vue @@ -29,6 +29,7 @@ <el-select v-model="state.form.year" placeholder="请选择年份" + :disabled="title === '查看'" style="width: 100%" filterable allow-create @@ -46,10 +47,10 @@ </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" > @@ -65,100 +66,100 @@ </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> @@ -174,8 +175,8 @@ </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" @@ -232,6 +233,7 @@ 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(""); @@ -244,32 +246,33 @@ 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, @@ -295,42 +298,6 @@ { 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: '制度流程因素' }, ], }) @@ -382,7 +349,7 @@ 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', @@ -397,7 +364,7 @@ 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', @@ -435,7 +402,7 @@ ratifyId:'', ratifyName: '', ratifyTime: '', - outEnvironment:[], + riskContents:[], } state.peopleList = [] state.companyList = [] @@ -462,10 +429,10 @@ 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 @@ -484,25 +451,25 @@ } } 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() } }) } diff --git a/src/views/build/conpanyFunctionConsult/riskManage/control/index.vue b/src/views/build/conpanyFunctionConsult/riskManage/control/index.vue index dff4b58..d8b3453 100644 --- a/src/views/build/conpanyFunctionConsult/riskManage/control/index.vue +++ b/src/views/build/conpanyFunctionConsult/riskManage/control/index.vue @@ -55,8 +55,12 @@ <el-table v-loading="loading" :data="dataList" :border="true" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" /> <el-table-column type="index" label="序号" width="80" align="center"></el-table-column> - <el-table-column label="名称" prop="companyName" align="center" /> - <el-table-column label="部门" prop="departName" align="center" /> + <el-table-column label="名称" align="center"> + <template #default="scope"> + <span>{{scope.row.year}}年度{{scope.row.deptName}}风险管理控制表</span> + </template> + </el-table-column> + <el-table-column label="部门" prop="deptName" align="center" /> <el-table-column label="年份" prop="year" align="center" /> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160"> <template #default="scope"> @@ -90,6 +94,7 @@ import Cookies from "js-cookie"; import {generateWordDocument} from "@/utils/exportWord"; import {delTable, getTable} from "@/api/qualityObjectives/table"; +import {delRiskControl, getRiskControl} from "@/api/riskManage/risk"; const { proxy } = getCurrentInstance(); const loading = ref(false); const noticeRef = ref(); @@ -151,16 +156,13 @@ }); const getList = async () => { loading.value = true; - // const res = await getTable(data.queryParams); - // if(res.code === 200){ - // dataList.value = res.data.list - // total.value = res.data.total - // }else{ - // ElMessage.warning(res.message) - // } - dataList.value = [ - {} - ] + const res = await getRiskControl(data.queryParams); + if(res.code === 200){ + dataList.value = res.data.list + total.value = res.data.total + }else{ + ElMessage.warning(res.message) + } loading.value = false; } @@ -241,38 +243,22 @@ const templatePath = ref('/riskControlExample.docx') const startGeneration = async () => { const data = JSON.parse(JSON.stringify(choosedData.value)) - let name = '' data.forEach(item => { - item.tableList =[ - { - flow: 'xxx', - mess: [ - { - first:true, - flow: 'xxx', - event: 'xxxxxx' - }, - { - first:false, - flow: 'xxx', - event: '2222' - }, - ] - }, - { - flow: '444444', - mess: [ - { - first:true, - flow: '444444', - event: 'gg' - }, - - ] + item.tableData = item.riskContents.map((i,index) => { + return{ + ...i, + contentMesses: i.contentMesses.map((q,qindex) => { + return{ + ...q, + first: qindex == 0, + num: index+1, + process: i.process + } + }) } - ] + }) try { - generateWordDocument(templatePath.value, item, `_相关方期望和需求识别.docx`); + generateWordDocument(templatePath.value, item, item.companyName+`_风险管理控制表.docx`); } catch (error){ ElMessage({ type: 'warning', @@ -305,7 +291,7 @@ type: 'warning', }) .then( async() => { - const res = await delTable(val.id); + const res = await delRiskControl(val.id); if(res.code === 200){ ElMessage({ type: 'success', diff --git a/src/views/build/conpanyFunctionConsult/riskManage/record/components/editDialog.vue b/src/views/build/conpanyFunctionConsult/riskManage/record/components/editDialog.vue index fd179d9..33ebbb5 100644 --- a/src/views/build/conpanyFunctionConsult/riskManage/record/components/editDialog.vue +++ b/src/views/build/conpanyFunctionConsult/riskManage/record/components/editDialog.vue @@ -25,18 +25,19 @@ </el-row> <el-row :gutter="24"> <el-col :span="24"> - <el-form-item label="风险管理控制:" prop="departId" > + <el-form-item label="风险管理控制:" prop="riskManageId" > <el-select :disabled="title === '查看'" - v-model="state.form.departId" + v-model="state.form.riskManageId" placeholder="请选择" - style="width: 240px" + style="width:100%" + @change="changeRisk" > <el-option - v-for="item in state.deptList" - :key="item.deptId" - :label="item.deptName" - :value="item.deptId" + v-for="item in state.riskList" + :key="item.id" + :label="item.name" + :value="item.id" /> </el-select> </el-form-item> @@ -44,122 +45,94 @@ </el-row> <el-row :gutter="24"> <el-col :span="24"> - <el-form-item label="风险管理分析监视记录:" prop="outEnvironment" > + <el-form-item label="风险管理分析监视记录:" prop="riskContents" > <div style="display: flex;width: 100%;"> - <el-table :data="state.form.outEnvironment" :border="true" > + <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" /> <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> - </el-form-item> + <div v-for="(i,index) in row.contentMesses" :key="index"> + <el-input style="margin-bottom: 5px" type="textarea" disabled v-model="i.riskEvent"></el-input> </div> </template> </el-table-column> <el-table-column label="风险识别-风险发生的后果" prop="remark" 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> - </el-form-item> + <div v-for="(i,index) in row.contentMesses" :key="index"> + <el-input style="margin-bottom: 5px" type="textarea" disabled v-model="i.riskConsequence"></el-input> </div> </template> </el-table-column> <el-table-column label="风险评估-严重度" prop="remark" 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> - </el-form-item> + <div v-for="(i,index) in row.contentMesses" :key="index"> + <el-input style="margin-bottom: 5px" type="textarea" disabled v-model="i.severity"></el-input> </div> </template> </el-table-column> <el-table-column label="风险评估-发生频率" prop="remark" 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> - </el-form-item> + <div v-for="(i,index) in row.contentMesses" :key="index"> + <el-input style="margin-bottom: 5px" type="textarea" disabled v-model="i.frequency"></el-input> </div> </template> </el-table-column> <el-table-column label="风险评估-RPN" prop="remark" 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> - </el-form-item> + <div v-for="(i,index) in row.contentMesses" :key="index"> + <el-input style="margin-bottom: 5px" type="textarea" disabled v-model="i.rpn"></el-input> </div> </template> </el-table-column> <el-table-column label="风险评估-风险等级" prop="remark" 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> - </el-form-item> + <div v-for="(i,index) in row.contentMesses" :key="index"> + <el-input style="margin-bottom: 5px" type="textarea" disabled v-model="i.riskLevel"></el-input> </div> </template> </el-table-column> <el-table-column label="风险对应措施-预防措施" prop="remark" 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> - </el-form-item> + <div v-for="(i,index) in row.contentMesses" :key="index"> + <el-input style="margin-bottom: 5px" type="textarea" disabled v-model="i.measures"></el-input> </div> </template> </el-table-column> <el-table-column label="风险对应措施-责任人" prop="remark" 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> - </el-form-item> + <div v-for="(i,index) in row.contentMesses" :key="index"> + <el-input style="margin-bottom: 5px" type="textarea" disabled v-model="i.chargeUser"></el-input> </div> </template> </el-table-column> - <el-table-column label="监视-监视时间" prop="remark" align="center" > + <el-table-column label="监视-监视时间" prop="monitorTime" 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 + ']' + '.monitorTime'" :rules="state.rules.monitorTime"> + <el-input style="margin-bottom: 5px" :disabled="title === '查看'" type="textarea" v-model="i.monitorTime" placeholder="请输入"></el-input> </el-form-item> </div> </template> </el-table-column> - <el-table-column label="监视-评价结果" prop="remark" align="center" > + <el-table-column label="监视-评价结果" prop="review" 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 + ']' + '.review'" :rules="state.rules.review"> + <el-input style="margin-bottom: 5px" :disabled="title === '查看'" type="textarea" v-model="i.review" 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> </template> </el-table-column> </el-table> - <el-button - :disabled="title === '查看'" - type="primary" - @click="addTableData" - style="margin-left: 10px" - >新增</el-button> </div> </el-form-item> </el-col> </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" @@ -185,7 +158,7 @@ </el-col> </el-row> <el-row :gutter="24"> - <el-col :span="24"> + <el-col :span="12"> <el-form-item label="批准:" prop="ratifyId" > <el-select clearable v-model="state.form.ratifyId" :disabled="title =='查看'" filterable style="width: 240px"> <el-option @@ -195,6 +168,16 @@ :value="item.id" /> </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="日期:" prop="checkTime" > + <el-date-picker + :disabled="title === '查看'" + v-model="state.form.checkTime" + type="date" + placeholder="请选择日期" + /> </el-form-item> </el-col> </el-row> @@ -216,6 +199,7 @@ import {getUser} from "@/api/onlineEducation/user"; import {getDept, getObject, getObjectPage} from "@/api/qualityObjectives/object"; import {addTable, editTable, getTargetById} from "@/api/qualityObjectives/table"; +import {addMonitorRecord, editMonitorRecord, getRiskControlAll} from "@/api/riskManage/risk"; const dialogVisible = ref(false); const title = ref(""); @@ -228,95 +212,29 @@ form: { id: '', companyId: null, - departId: null, + riskManageId: null, year: '', - compilationId: null, + fictionId: null, checkId: null, ratifyId: null, - dateTime: null, - outEnvironment:[], - inEnvironment: [] + checkTime: null, + riskContents:[], }, rules: { companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }], - departId: [{ required: true, message: '请选择部门', trigger: 'blur' }], + riskManageId: [{ 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"}], - }, - num:[{required: true, message: "", trigger: "blur"}], + checkTime: [{ required: true, message: '请选择日期', trigger: 'blur' }], + monitorTime:[{required: true, message: "", trigger: "blur"}], + review:[{required: true, message: "", trigger: "blur"}], }, peopleList: [], isAdmin: false, companyList: [], - deptList: [], - yearList: [ - { - value: 1, - label: '2025' - }, - { - value: 2, - label: '2024' - }, - { - value: 3, - label: '2023' - }, - { - value: 4, - label: '2022' - }, - { - 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: '制度流程因素' - }, - ], + riskList: [], }) onMounted(() => { @@ -341,23 +259,26 @@ state.form.companyName = value.companyName } } - await getDeptList() + await getRiskList() await getPeopleList() dialogVisible.value = true; } -const getDeptList = async () => { +const getRiskList = async () => { if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){ return } const param = { - pageNum: 1, - pageSize: 999, companyId: state.form.companyId } - const res = await getDept(param) + const res = await getRiskControlAll(param) if(res.code === 200){ - state.deptList = res.data + state.riskList = res.data.map(item => { + return { + ...item, + name: item.year + '年度' + item.deptName + '风险管理控制' + } + }) } } const onSubmit = async () => { @@ -366,7 +287,7 @@ 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 addMonitorRecord(data) if(res.code === 200){ ElMessage({ type: 'success', @@ -381,7 +302,7 @@ dialogVisible.value = false; }else if(title.value === '编辑'){ const {...data} = JSON.parse(JSON.stringify(state.form)) - const res = await editTable(data) + const res = await editMonitorRecord(data) if(res.code === 200){ ElMessage({ type: 'success', @@ -408,22 +329,18 @@ const reset = () => { state.form = { id: '', - qualityId: '', - - fictionId : '', - fictionName: '', - fictionTime:'', - checkId :'', - checkName: '', - checkTime:'', - ratifyId:'', - ratifyName: '', - ratifyTime: '', - outEnvironment:[], + companyId: null, + riskManageId: null, + year: '', + fictionId: null, + checkId: null, + ratifyId: null, + checkTime: null, + riskContents:[], } state.peopleList = [] state.companyList = [] - state.qualityList = [] + state.riskList = [] } const getPeopleList = async ()=> { if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){ @@ -446,51 +363,26 @@ const selectValueCom = (val) => { - state.form.compilationId = null + state.form.riskManageId = null + state.form.fictionId = null state.form.checkId = null state.form.ratifyId = null - state.form.departId = null state.companyList.forEach(item => { if(item.name === val){ state.form.companyId = item.id } }) - getDeptList() + getRiskList() getPeopleList() } -const handleChangeNum = (value) => { - if (!/^\d+$/.test(value)) { // 验证是否为数字 - ElMessage.warning('只能输入数字') - state.form.year = '' // 重置选择,避免非法值被添加到options中 - } else if (!state.yearList.some(option => option.label === value)) { // 确保不是已存在的选项 - state.yearList.push({ value, label: value }); // 添加新选项(这里简单地将值和标签设为相同) - } -} -const addTableData = () => { - state.form.outEnvironment.push({mess: [{id: null}]}) - -} -const addObject = (val) => { - state.form.outEnvironment.forEach(item => { - if(item.id == val.id){ - item.mess.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 - } - item.mess.pop() +const changeRisk = (val) => { + state.riskList.forEach(item => { + if(val == item.id){ + state.form.riskContents = item.riskContents } }) } - defineExpose({ openDialog }); diff --git a/src/views/build/conpanyFunctionConsult/riskManage/record/index.vue b/src/views/build/conpanyFunctionConsult/riskManage/record/index.vue index 443df68..cd4438b 100644 --- a/src/views/build/conpanyFunctionConsult/riskManage/record/index.vue +++ b/src/views/build/conpanyFunctionConsult/riskManage/record/index.vue @@ -55,8 +55,12 @@ <el-table v-loading="loading" :data="dataList" :border="true" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" /> <el-table-column type="index" label="序号" width="80" align="center"></el-table-column> - <el-table-column label="名称" prop="companyName" align="center" /> - <el-table-column label="部门" prop="departName" align="center" /> + <el-table-column label="名称" align="center"> + <template #default="scope"> + <span>{{scope.row.year}}年度{{scope.row.deptName}}风险管理分析监视记录表</span> + </template> + </el-table-column> + <el-table-column label="部门" prop="deptName" align="center" /> <el-table-column label="年份" prop="year" align="center" /> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160"> <template #default="scope"> @@ -90,6 +94,7 @@ import Cookies from "js-cookie"; import {generateWordDocument} from "@/utils/exportWord"; import {delTable, getTable} from "@/api/qualityObjectives/table"; +import {delMonitorRecord, getMonitorRecord} from "@/api/riskManage/risk"; const { proxy } = getCurrentInstance(); const loading = ref(false); const noticeRef = ref(); @@ -151,16 +156,13 @@ }); const getList = async () => { loading.value = true; - // const res = await getTable(data.queryParams); - // if(res.code === 200){ - // dataList.value = res.data.list - // total.value = res.data.total - // }else{ - // ElMessage.warning(res.message) - // } - dataList.value = [ - {} - ] + const res = await getMonitorRecord(data.queryParams); + if(res.code === 200){ + dataList.value = res.data.list + total.value = res.data.total + }else{ + ElMessage.warning(res.message) + } loading.value = false; } @@ -243,36 +245,22 @@ const data = JSON.parse(JSON.stringify(choosedData.value)) let name = '' data.forEach(item => { - item.tableList =[ - { - flow: 'xxx', - mess: [ - { - first:true, - flow: 'xxx', - event: 'xxxxxx' - }, - { - first:false, - flow: 'xxx', - event: '2222' - }, - ] - }, - { - flow: '444444', - mess: [ - { - first:true, - flow: '444444', - event: 'gg' - }, - - ] + item.checkTime = item.checkTime.substring(0,10) + item.tableData = item.riskContents.map((i,index) => { + return{ + ...i, + contentMesses: i.contentMesses.map((q,qindex) => { + return{ + ...q, + first: qindex == 0, + num: index+1, + process: i.process + } + }) } - ] + }) try { - generateWordDocument(templatePath.value, item, `_相关方期望和需求识别.docx`); + generateWordDocument(templatePath.value, item, item.companyName + `_风险管理分析监视记录表.docx`); } catch (error){ ElMessage({ type: 'warning', @@ -280,17 +268,6 @@ }); } }) -} -function idGroupToTree(data) { - const groups = data.reduce((map, item) => { - map.has(item.type) || map.set(item.type, []); - map.get(item.type).push(item); - return map; - }, new Map()); - return Array.from(groups).map(([type, items]) => ({ - type, - children: items - })); } const handleSelectionChange = (val) => { choosedData.value = val @@ -305,13 +282,13 @@ type: 'warning', }) .then( async() => { - const res = await delTable(val.id); + const res = await delMonitorRecord(val.id); if(res.code === 200){ ElMessage({ type: 'success', message: '删除成功' }); - getList(); + await getList(); }else{ ElMessage.warning(res.message) } -- Gitblit v1.9.2