diff --git a/src/api/workCenter.js b/src/api/workCenter.js index db3c8607..5f7c9d2a 100644 --- a/src/api/workCenter.js +++ b/src/api/workCenter.js @@ -359,7 +359,14 @@ const savePostMeetingManage = (params) => postAction('/process/meetingManageFlow const getPostMeetingManageDataById = (params) => getAction('/meetingmanage/processMeetingManage/queryByProjectId', params) /* 项目合规评估流程 */ +// 获取项目法规清单 const queryProjectRegulationList = (params) => getAction('/projectLibrary/lawsAssess/page', params) +// 发起-通过法规获取标准/条款列表 +const queryStandardClauseList = (params) => postAction('/process/projectAssess/processProjectAssessGetList', params) +// 发起 +const initiateProjectComplianceEvaluation = (params) => postAction('/process/projectAssess/startProcess', params) +// 提交 +const submitProjectComplianceEvaluation = (params) => postAction('/process/projectAssess/submit', params) export { getProcessNodeList, @@ -542,5 +549,8 @@ export { savePostMeetingManage, getPostMeetingManageDataById, - queryProjectRegulationList + queryProjectRegulationList, + queryStandardClauseList, + initiateProjectComplianceEvaluation, + submitProjectComplianceEvaluation } diff --git a/src/common/lang/workCenter/zh.js b/src/common/lang/workCenter/zh.js index c5379a3b..40ac8887 100644 --- a/src/common/lang/workCenter/zh.js +++ b/src/common/lang/workCenter/zh.js @@ -239,7 +239,7 @@ module.exports = { designEngineer: '设计工程师', solicitationList: '征求意见列表', chapterName: '章节名称', - pleaseSelectCriteriaFirst: '请先选择标准', + pleaseSelectCriteriaFirst: '请先选择标准' }, // 企标稽查计划 esInspectionPlan: { @@ -377,24 +377,37 @@ module.exports = { noCauseInvolved: '不涉及原因', cancelNotInvolve: '取消不涉及', preNodePeople: '上一节点处理人', - evaluationFeedback:'评估反馈', - ccPerson: '抄送人员' + evaluationFeedback: '评估反馈', + ccPerson: '抄送人员', + pleaseSelectResponsibleUnit: '请选择责任单位', + pleaseSelectResponsibleUnitLeader: '请选择责任单位负责人', + aUnitOnlyALeader: '一个责任单位只能选择一个责任单位负责人,请检查' }, // 未符合项跟踪流程 noMatchTracking: { queryByCondition: '按条件查询', - problemTypes: '问题类型' - }, + problemTypes: + '问题类型' + } + , // 法规合规评估流程 standardCompliance: { addStandard: '添加标准', - responsibleUnitContactPerson: '责任单位联络人', - pleaseSelectDeleteData: '请选择要删除的数据', - moduleOwner: '模块责任人', - projectAppraisal: '项目评估', - stronglyRelatedVehicleType: '是否与车型强关联', - doesNotFitModel: '不符合车型系列', - projectApproval: '项目审批', - projectFiling: '项目归档' + responsibleUnitContactPerson: + '责任单位联络人', + pleaseSelectDeleteData: + '请选择要删除的数据', + moduleOwner: + '模块责任人', + projectAppraisal: + '项目评估', + stronglyRelatedVehicleType: + '是否与车型强关联', + doesNotFitModel: + '不符合车型系列', + projectApproval: + '项目审批', + projectFiling: + '项目归档' } } diff --git a/src/enums/commonEnums.js b/src/enums/commonEnums.js index 8c76eb3f..a85a70ad 100644 --- a/src/enums/commonEnums.js +++ b/src/enums/commonEnums.js @@ -339,7 +339,11 @@ export const InspectionExtensionRequestProcess = new EsEnums({ initiate: { text: '稽查负责人申请延期', value: 'responsible_start', btn: ['save', 'submit'] }, directorLeaderApproval: { text: '负责人主管级领导审批', value: 'leader_approval', btn: ['transfer', 'save', 'agree', 'reject'] }, contactEvaluation: { text: '稽查联络人评估', value: 'liaisons_assess', btn: ['transfer', 'save', 'agree', 'reject'] }, - directorSuperiorLeaderApproval: { text: '负责人主管级上一级领导审批', value: 'leader_up_level', btn: ['transfer', 'save', 'agree', 'reject'] } + directorSuperiorLeaderApproval: { + text: '负责人主管级上一级领导审批', + value: 'leader_up_level', + btn: ['transfer', 'save', 'agree', 'reject'] + } }) // 企标稽查整改 @@ -397,13 +401,14 @@ export const ProcurementProcessNodes = new EsEnums({ // 项目合规评估流程节点 export const ProjectComplianceEvaluationProcessNode = new EsEnums({ - initiate: { text: '法规工程师发起', value: '1', btn: ['save', 'pre', 'next', 'submit'] }, - departLeaderIssued: { text: '各部门主管级领导下发', value: '2', btn: ['return', 'save', 'submit'] }, - moduleOwnerIssued: { text: '模块负责人分发', value: '3', btn: ['return', 'save', 'submit'] }, - designEngineerEvaluation: { text: '设计工程师评估', value: '4', btn: ['return', 'save', 'submit'] }, - moduleOwnerApproval: { text: '模块负责人审批', value: '5', btn: ['return', 'save', 'agree', 'reject'] }, - departLeaderApproval: { text: '各部门主管级领导审批', value: '6', btn: ['return', 'save', 'agree', 'reject'] }, - regulatoryEngineerFiling: { text: '法规工程师归档', value: '7', btn: ['return', 'save', 'submit'] } + initiate: { text: '法规工程师发起', value: 'fggcsfq', btn: ['save', 'pre', 'next', 'submit'] }, + departLeaderIssued: { text: '各部门主管级领导下发', value: 'gbmzgjldxf', btn: ['return', 'save', 'submit'] }, + moduleOwnerIssued: { text: '模块负责人分发', value: 'mkfzrff', btn: ['return', 'save', 'submit'] }, + designEngineerEvaluation: { text: '设计工程师评估', value: 'sjgcspg', btn: ['return', 'save', 'submit'] }, + moduleOwnerApproval: { text: '模块负责人审批', value: 'mkfzrsp', btn: ['return', 'save', 'agree', 'reject'] }, + departLeaderApproval: { text: '各部门主管级领导审批', value: 'gbmzgjldsp', btn: ['return', 'save', 'agree', 'reject'] }, + moduleOwnerModification: { text: '模块负责人修改', value: 'mkfzrxg', btn: ['return', 'save', 'agree', 'reject'] }, + regulatoryEngineerFiling: { text: '法规工程师归档', value: 'fggcsgd', btn: ['return', 'save', 'submit'] } }) // 企标立项、变更流程 diff --git a/src/views/workCenter/projectComplianceEvaluationProcess/ProjectComplianceEvaluationProcess.vue b/src/views/workCenter/projectComplianceEvaluationProcess/ProjectComplianceEvaluationProcess.vue index d5bc4018..b96ee1db 100644 --- a/src/views/workCenter/projectComplianceEvaluationProcess/ProjectComplianceEvaluationProcess.vue +++ b/src/views/workCenter/projectComplianceEvaluationProcess/ProjectComplianceEvaluationProcess.vue @@ -92,7 +92,7 @@ - + @@ -109,29 +109,42 @@ :can-drag="true" :scroll="{x: '100%'}" ref="table" - rowKey="id" + :rowKey="(record,index)=>{return index}" :columns="columns" :dataSource="dataSource" - :pagination="false" + :pagination="ipagination" :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" + @change="handleTableChange" v-bind="$attrs"> + + + @@ -291,6 +304,8 @@ + + @@ -299,13 +314,15 @@ import PersonnelInfo from '../../../components/PersonnelInfo' import InternalDetailPage from '../../../components/InternalDetailPage' import ProcessDetailList from '../../../components/ProcessDetailList' import { WorkCenterMixin } from '../../../mixins/WorkCenterMixin' -import { ProcessKey, ProjectComplianceEvaluationProcessNode } from '../../../enums/commonEnums' +import { ProcessKey, ProjectComplianceEvaluationProcessNode, StandardSource } from '../../../enums/commonEnums' import JTable from '../../../components/jero/JTable' import ProjectTable from './components/ProjectTable' import UserSelection from '../../../components/selection/UserSelection' import UserSelectModal from '../../../components/selection/UserSelectModal' import UninvolvedModal from './modules/UninvolvedModal' import JExpandTable from '../../../components/JExpandTable' +import { queryStandardClauseList, initiateProjectComplianceEvaluation, submitProjectComplianceEvaluation } from '../../../api/workCenter' +import SplitClauseDetail from '../../documentTool/documentSplit/modules/SplitClauseDetail' export default { name: 'ProjectComplianceEvaluationProcess', @@ -318,7 +335,8 @@ export default { ProjectTable, UserSelection, UserSelectModal, - UninvolvedModal + UninvolvedModal, + SplitClauseDetail }, mixins: [WorkCenterMixin], data () { @@ -350,6 +368,18 @@ export default { xs: { span: 24 }, sm: { span: 21 } }, + /* 分页参数 */ + ipagination: { + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '30', '50', '100', '150', '200'], + showTotal: (total, range) => { + return range[0] + '-' + range[1] + ' ' + this.$t('total') + total + this.$t('strip') + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, validatorRules: { // 流程名称 processName: { @@ -402,7 +432,7 @@ export default { }, // 标准编号/条款号 { - dataIndex: 'workNumber', + dataIndex: 'termNumber', title: this.$t('projectLibrary.vehicleItemLibrary.standardNumberClauseNumber'), width: 150, align: 'center', @@ -410,7 +440,7 @@ export default { }, // 标准名称/条款名称 { - dataIndex: 'projectName', + dataIndex: 'termName', title: this.$t('workCenter.projectComplianceEvaluationProcess.standardNameClauseName'), width: 160, align: 'center', @@ -418,11 +448,11 @@ export default { }, // 条款内容 { - dataIndex: 'projectSource_dictText', + dataIndex: 'termText', title: this.$t('workCenter.projectComplianceEvaluationProcess.terms'), width: 150, align: 'center', - scopedSlots: { customRender: 'text' } + scopedSlots: { customRender: 'clauseContent' } } ], dataSource: [], @@ -614,14 +644,14 @@ export default { // 责任单位 { title: this.$t('workCenter.projectComplianceEvaluationProcess.accountabilityUnit'), - dataIndex: 'depart', + dataIndex: 'responsibleUnits', width: 150, scopedSlots: { customRender: 'depart' } }, // 责任单位负责人 { title: this.$t('workCenter.projectComplianceEvaluationProcess.responsibleUnitHead'), - dataIndex: 'user', + dataIndex: 'responsibleUnitLeaders', width: 150, scopedSlots: { customRender: 'user' } }, @@ -767,11 +797,12 @@ export default { // 第三步选择标准 if (this.currentStep === 2) { this.standardDataSource = this.$refs.projectStandardTable.getData() + console.log(this.standardDataSource) if (!this.standardDataSource || this.standardDataSource.length === 0) { this.$message.warning(this.$t('addAtLeastOneRowOfData')) flag = false } else { - // TODO 这块应该需要调接口把标准转成第四步要的条款 + this.getDispatchList() } } if (!flag) { @@ -779,6 +810,23 @@ export default { } this.currentStep++ }, + /** + * 获取业务分派信息列表 + */ + getDispatchList () { + const params = this.standardDataSource.map(item => { + return { + sarFileSplitInfoId: item.sarFileSplitInfoId, + standardNumber: item.standardNumber, + standardName: item.standardName + } + }) + queryStandardClauseList(params).then(res => { + if (res.success) { + this.dataSource = res.result || [] + } + }) + }, /** * 跳转项目详情 */ @@ -794,9 +842,34 @@ export default { /** * 跳转标准详情 */ - toStandardDetail (standard) { - // todo 需要标准类别 - console.log(standard) + toStandardDetail ({ source, standardId }) { + let path + // 根据来源跳转不同的详情页 + switch (source) { + // 国内 + case StandardSource.DOMESTIC.value: + path = '/standardRegulationLibrary/DomesticStandardDetail' + break + // 海外 + case StandardSource.OVERSEAS.value: + path = '/standardRegulationLibrary/OverseasStandardDetail' + break + // 企标 + case StandardSource.ENTERPRISE.value: + path = '/enterpriseStandardLibrary/enterpriseStandardDetail' + break + default: + break + } + if (!path) { + return + } + const query = { + id: standardId + } + this.$openPageNewSheet({ + path, query + }) }, /** * 批量选择人员 @@ -813,7 +886,7 @@ export default { switch (this.currentNode) { // 发起节点,批量选择的是责任单位负责人 case ProjectComplianceEvaluationProcessNode.initiate.value: - fieldName = 'user' + fieldName = 'responsibleUnitLeaders' break // 各部门主管级领导下发,批量选择的是模块负责人 case ProjectComplianceEvaluationProcessNode.departLeaderIssued.value: @@ -830,12 +903,13 @@ export default { return } this.dataSource.forEach((item, index) => { - if (this.selectedRowKeys.includes(item.id)) { + if (this.selectedRowKeys.includes(index)) { item[fieldName] = list.map(tt => tt.id).join(',') item[fieldName + '_dictText'] = list.map(tt => tt.realname + '(' + tt.username + ')').join(',') this.$set(this.dataSource, index, item) } }) + console.log(this.dataSource) this.selectedRowKeys = [] }, onSelectChange (selectedRowKeys) { @@ -848,7 +922,7 @@ export default { * @param index */ handleDepartChange (value, record, index) { - record.depart = value + record.responsibleUnits = value this.$set(this.dataSource, index, record) }, /** @@ -896,21 +970,92 @@ export default { record.evaluationFeedback = value this.$set(this.dataSource, index, record) }, - dealFormData (isSave) { - let formData = {}, processProjectAssess = {} + dealFormData () { + let formData = {}, basicTaskInfoDTO = {}, flag = true // 流程信息 formData.basicProcessInfoDTO = { ...this.processInfo } - // 业务基本信息(项目信息) - if (this.projectDataSource && this.projectDataSource.length > 0) { - processProjectAssess.projectId = this.projectDataSource[0].id + // 发起节点需要多传一些参数 + if (this.currentNode === ProjectComplianceEvaluationProcessNode.initiate.value) { + let processProjectAssess = {}, processProjectAssessLinkList = [], processProjectAssessTermList = [] + // 项目信息(发起第二步) + if (this.projectDataSource && this.projectDataSource.length > 0) { + processProjectAssess.projectId = this.projectDataSource[0].id + } + // 关联标准列表(发起第三步) + processProjectAssessLinkList = JSON.parse(JSON.stringify(this.standardDataSource)) + // 关联条款列表(发起第四步) + processProjectAssessTermList = JSON.parse(JSON.stringify(this.dataSource)) + // 校验责任单位必填 + if (processProjectAssessTermList.some(tt => !tt.responsibleUnits)) { + this.$message.warning(this.$t('workCenter.projectComplianceEvaluationProcess.pleaseSelectResponsibleUnit')) + flag = false + } + // 校验责任单位负责人必填 + if (processProjectAssessTermList.some(tt => !tt.responsibleUnitLeaders)) { + this.$message.warning(this.$t('workCenter.projectComplianceEvaluationProcess.pleaseSelectResponsibleUnitLeader')) + flag = false + } + // 校验责任单位和责任单位负责人是一对一的关系 + if (processProjectAssessTermList.some(tt => { + const responsibleUnitList = (tt.responsibleUnits || '').split(',') + const responsibleUnitLeadersList = (tt.responsibleUnitLeaders || '').split(',') + return responsibleUnitList.length !== responsibleUnitLeadersList.length + })) { + this.$message.warning(this.$t('workCenter.projectComplianceEvaluationProcess.aUnitOnlyALeader')) + flag = false + } + formData.businessInfoDTO = { + processProjectAssess, processProjectAssessLinkList, processProjectAssessTermList + } + } + // 流程审批意见数据 + this.approvalInfoForm.validateFields((errors, values) => { + if (!errors) { + basicTaskInfoDTO = Object.assign(this.approvalInfo, values) + } else { + flag = false + } + }) + formData.basicTaskInfoDTO = basicTaskInfoDTO + console.log(formData) + if (!flag) { + return false } return formData }, handleSave () { - const formData = this.dealFormData(true) - console.log('保存表单数据===', formData) + }, + /** + * 提交 + */ handleSubmit () { + const formData = this.dealFormData() + console.log('提交表单数据===', formData) + if (!formData) { + return + } + let submitFunc + // 发起和提交的接口判断 + if (this.currentNode === ProjectComplianceEvaluationProcessNode.initiate.value) { + submitFunc = initiateProjectComplianceEvaluation + } else { + submitFunc = submitProjectComplianceEvaluation + } + if (!submitFunc) { + return + } + this.loading = true + submitFunc(formData).then(res => { + if (res.success) { + this.$message.success(res.message) + this.goBack() + } else { + this.$message.warning(res.message) + } + }).finally(() => { + this.loading = false + }) }, handleTurnTo () { @@ -920,6 +1065,12 @@ export default { }, handleReject () { + }, + handleTableChange (pagination) { + this.ipagination = pagination + }, + showContent (text) { + this.$refs.clauseDetail.open(text) } }, beforeRouteLeave (to, form, next) { diff --git a/src/views/workCenter/projectComplianceEvaluationProcess/components/StandardList.vue b/src/views/workCenter/projectComplianceEvaluationProcess/components/StandardList.vue index a9531d81..d95007cd 100644 --- a/src/views/workCenter/projectComplianceEvaluationProcess/components/StandardList.vue +++ b/src/views/workCenter/projectComplianceEvaluationProcess/components/StandardList.vue @@ -22,10 +22,14 @@ @@ -38,7 +42,6 @@