update 法规合规评估流程

This commit is contained in:
赵霄
2024-01-18 17:14:13 +08:00
parent 72dab95b9d
commit a6e8d5e66a
13 changed files with 1236 additions and 202 deletions
+29 -2
View File
@@ -3,7 +3,7 @@ import { getAction, postAction } from './manage.js'
// 查询定义流程列表 // 查询定义流程列表
const getProcessNodeList = (params) => getAction('/activiti/getNodeList', params) const getProcessNodeList = (params) => getAction('/activiti/getNodeList', params)
// 催办 // 催办
const urgeProcessNode = (params) =>postAction('/workCenter/urging', params) const urgeProcessNode = (params) => postAction('/workCenter/urging', params)
// 流程配置-部署 // 流程配置-部署
const deployWorkFlow = (params) => getAction('/activitiModel/deploy', params) const deployWorkFlow = (params) => getAction('/activitiModel/deploy', params)
@@ -403,6 +403,24 @@ const rejectNoMatchTrackingProcess = (params) => postAction('/process/projectNot
// 保存 // 保存
const saveNoMatchTrackingProcess = (params) => postAction('/process/projectNotMet/saveToDraft', params) const saveNoMatchTrackingProcess = (params) => postAction('/process/projectNotMet/saveToDraft', params)
/* 法规合规评估流程 */
// 获取标准列表(带分解单来源的信息)
const getStandardListCarryDecompositionSingleSource = (params) => getAction('/process/projectStandard/quaryStandard', params)
// 通过标准及分解单来源获取条款
const getClauseByStandard = (params) => postAction('/process/projectStandard/processProjectStandardGetList', params)
// 保存
const saveStandardCompliance = (params) => postAction('/process/projectStandard/saveToDraft', params)
// 发起
const initStandardCompliance = (params) => postAction('/process/projectStandard/startProcess', params)
// 提交
const submitStandardCompliance = (params) => postAction('/process/projectStandard/submit', params)
// 同意
const agreeStandardCompliance = (params) => postAction('/process/projectStandard/agree', params)
// 驳回
const rejectStandardCompliance = (params) => postAction('/process/projectStandard/reject', params)
// 查询流程信息
const queryStandardCompliance = (params) => getAction('/process/projectStandard/queryProcessInfoVO', params)
export { export {
getProcessNodeList, getProcessNodeList,
urgeProcessNode, urgeProcessNode,
@@ -605,5 +623,14 @@ export {
submitNoMatchTrackingProcess, submitNoMatchTrackingProcess,
agreeNoMatchTrackingProcess, agreeNoMatchTrackingProcess,
rejectNoMatchTrackingProcess, rejectNoMatchTrackingProcess,
saveNoMatchTrackingProcess saveNoMatchTrackingProcess,
getStandardListCarryDecompositionSingleSource,
getClauseByStandard,
saveStandardCompliance,
initStandardCompliance,
submitStandardCompliance,
agreeStandardCompliance,
rejectStandardCompliance,
queryStandardCompliance
} }
+13 -18
View File
@@ -409,27 +409,22 @@ module.exports = {
// 未符合项跟踪流程 // 未符合项跟踪流程
noMatchTracking: { noMatchTracking: {
queryByCondition: '按条件查询', queryByCondition: '按条件查询',
problemTypes: problemTypes: '问题类型'
'问题类型'
}, },
// 法规合规评估流程 // 法规合规评估流程
standardCompliance: { standardCompliance: {
addStandard: '添加标准', addStandard: '添加标准',
responsibleUnitContactPerson: responsibleUnitContactPerson: '责任单位联络人',
'责任单位联络人', pleaseSelectDeleteData: '请选择要删除的数据',
pleaseSelectDeleteData: moduleOwner: '模块责任人',
'请选择要删除的数据', projectAppraisal: '项目评估',
moduleOwner: stronglyRelatedVehicleType: '是否与车型强关联',
'模块责任人', doesNotFitModel: '不符合车型系列',
projectAppraisal: projectApproval: '项目审批',
'项目评估', projectFiling: '项目归档',
stronglyRelatedVehicleType: pleaseAddStandard: '请添加标准',
'是否与车型强关联', pleaseSelectResponsibleUnitContactPerson: '请选择责任单位联络人',
doesNotFitModel: atLeastOneData:'至少需要保留一条数据',
'不符合车型系列', pleaseSelectDesignEngineer: '请选择设计工程师',
projectApproval:
'项目审批',
projectFiling:
'项目归档'
} }
} }
+9 -9
View File
@@ -193,7 +193,7 @@ export const ProcessKey = {
// 未符合项跟踪流程 // 未符合项跟踪流程
NO_MATCH_TRACKING: { text: 'project-not-met', value: 'project-not-met' }, NO_MATCH_TRACKING: { text: 'project-not-met', value: 'project-not-met' },
// 法规合规评估流程 // 法规合规评估流程
REGULATORY_COMPLIANCE_ASSESSMENT: { text: 'fb-standard-compliance-assessment', value: 'fb-standard-compliance-assessment' }, REGULATORY_COMPLIANCE_ASSESSMENT: { text: 'standard-assessment', value: 'standard-assessment' },
// 法规采购流程 // 法规采购流程
LEGAL_PROCUREMENT: { text: 'fb-standard-purchase', value: 'fb-standard-purchase' }, LEGAL_PROCUREMENT: { text: 'fb-standard-purchase', value: 'fb-standard-purchase' },
// 企标稽查计划 // 企标稽查计划
@@ -520,14 +520,14 @@ export const EsStartUseNodes = new EsEnums({
// 法规合规流程节点 // 法规合规流程节点
export const StandardComplianceNodes = new EsEnums({ export const StandardComplianceNodes = new EsEnums({
initial: { text: '法规工程师发起', value: '1', btn: ['save', 'submit'] }, initial: { text: '法规工程师发起', value: 'fggcsfq', btn: ['save', 'submit'] },
departLeaderIssue: { text: '部所主管级领导下发', value: '2', btn: ['return', 'save', 'submit'] }, departLeaderIssue: { text: '部所主管级领导下发', value: 'bszgjldxf', btn: ['return', 'save', 'submit'] },
moduleOwnerIssue: { text: '模块责任人分发', value: '3', btn: ['return', 'save', 'submit'] }, moduleOwnerIssue: { text: '模块责任人分发', value: 'mkzrrff', btn: ['return', 'save', 'submit'] },
designEngineerAssess: { text: '设计工程师评估', value: '4', btn: ['return', 'save', 'submit'] }, designEngineerAssess: { text: '设计工程师评估', value: 'sjgcspg', btn: ['return', 'save', 'submit'] },
moduleOwnerReview: { text: '模块责任人审批', value: '5', btn: ['return', 'save', 'agree', 'reject'] }, moduleOwnerReview: { text: '模块责任人审批', value: 'mkzrrsp', btn: ['return', 'save', 'agree', 'reject'] },
departLeaderApprove: { text: '部所主管级领导审批', value: '6', btn: ['return', 'save', 'agree', 'reject'] }, departLeaderApprove: { text: '部所主管级领导审批', value: 'bszgjldsp', btn: ['return', 'save', 'agree', 'reject'] },
regulatoryEngineerApprove: { text: '法规工程师审批', value: '7', btn: ['return', 'save', 'agree', 'reject'] }, regulatoryEngineerApprove: { text: '法规工程师审批', value: 'fggcssp', btn: ['return', 'save', 'agree', 'reject'] },
designEngineerWriteProject: { text: '设计工程师补充立项项目号', value: '8', btn: ['submit'] } designEngineerWriteProject: { text: '设计工程师补充立项项目号', value: 'sjgcsbcgzlbh', btn: ['submit'] }
}) })
// 项目合规评估流程状态 // 项目合规评估流程状态
@@ -130,6 +130,10 @@ export default {
case '4': case '4':
path = '/workCenter/NoMatchTrackingProcess' path = '/workCenter/NoMatchTrackingProcess'
break break
// 法规合规评估流程
case '5':
path = '/workCenter/StandardComplianceProcess'
break
// 法规采购流程 // 法规采购流程
case '6': case '6':
path = '/workCenter/StandardProcurementProcess' path = '/workCenter/StandardProcurementProcess'
@@ -85,7 +85,9 @@ import {
transferInspectExtension, transferInspectExtension,
transferInspectPlan, transferInspectPlan,
transferInspectProcess, transferInspectProcess,
transferInspectRectify, transferPermissionApply, transferPostMeetingManage, transferInspectRectify,
transferPermissionApply,
transferPostMeetingManage,
transferProcurementProcess, transferProcurementProcess,
turnToStandardECProcess turnToStandardECProcess
} from '../../../../api/workCenter' } from '../../../../api/workCenter'
@@ -108,7 +110,10 @@ import {
FGEntryChangeProcessNode, FGEntryChangeProcessNode,
ConsultationProcess, ConsultationProcess,
ProjectComplianceEvaluationProcessNode, ProjectComplianceEvaluationProcessNode,
ProcurementProcessNodes, StandardPromotion, NoMatchTrackingNodes ProcurementProcessNodes,
StandardPromotion,
NoMatchTrackingNodes,
StandardComplianceNodes
} from '@/enums/commonEnums' } from '@/enums/commonEnums'
export default { export default {
@@ -188,7 +193,9 @@ export default {
// 未符合项跟踪流程 // 未符合项跟踪流程
[ProcessType.NO_MATCH_TRACKING.value]: [NoMatchTrackingNodes.initial.value], [ProcessType.NO_MATCH_TRACKING.value]: [NoMatchTrackingNodes.initial.value],
// 法规合规评估流程 // 法规合规评估流程
[ProcessType.REGULATORY_COMPLIANCE_ASSESSMENT.value]: [], [ProcessType.REGULATORY_COMPLIANCE_ASSESSMENT.value]: [
StandardComplianceNodes.initial.value, StandardComplianceNodes.designEngineerWriteProject.value
],
// 法规采购流程 // 法规采购流程
[ProcessType.LEGAL_PROCUREMENT.value]: [ProcurementProcessNodes.initiate.value, ProcurementProcessNodes.regulatoryEngineerConfirmation.value], [ProcessType.LEGAL_PROCUREMENT.value]: [ProcurementProcessNodes.initiate.value, ProcurementProcessNodes.regulatoryEngineerConfirmation.value],
// 企标立项/变更计划 // 企标立项/变更计划
@@ -287,6 +294,10 @@ export default {
case '4': case '4':
path = '/workCenter/NoMatchTrackingProcess' path = '/workCenter/NoMatchTrackingProcess'
break break
// 法规合规评估流程
case '5':
path = '/workCenter/StandardComplianceProcess'
break
// 法规采购流程 // 法规采购流程
case '6': case '6':
path = '/workCenter/StandardProcurementProcess' path = '/workCenter/StandardProcurementProcess'
@@ -39,7 +39,7 @@
format="YYYY-MM-DD" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
v-decorator="['processDueDate']" v-decorator="['processDueDate']"
:disabled="disabled" :disabled="!isInitial"
style="width: 100%" /> style="width: 100%" />
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -50,14 +50,15 @@
@change="event => event.target.value = event.target.value.trim()" @change="event => event.target.value = event.target.value.trim()"
:maxLength="500" :maxLength="500"
type="textarea" type="textarea"
:disabled="disabled" :disabled="!isInitial"
v-decorator="['processDescription']" /> v-decorator="['processDescription']" />
</a-form-item> </a-form-item>
<!--标准编号/标准名称--> <!--标准编号/标准名称-->
<div class="standard-info" v-if="!isInitial"> <div class="standard-info" v-if="!isInitial">
<label class="standard-info-label">{{ $t('projectLibrary.vehicleItemLibrary.standardNumberStandardName') }}</label> <label class="standard-info-label">{{ $t('projectLibrary.vehicleItemLibrary.standardNumberStandardName') }}</label>
<div class="standard-info-text"> <div class="standard-info-text" @click="toStandardDetail">{{ selectedStandard.standardNumber }} {{
selectedStandard.standardName
}}
</div> </div>
</div> </div>
@@ -66,19 +67,25 @@
<!--发起节点--> <!--发起节点-->
<template v-if="isInitial"> <template v-if="isInitial">
<!--业务基本信息选择标准--> <!--业务基本信息选择标准-->
<initial-basic-service-info @source:change="handleSourceChange" @standard:change="handleStandardChange" /> <initial-basic-service-info ref="standardList"
:selected-standard="selectedStandard"
@source:change="handleSourceChange"
@standard:change="handleStandardChange" />
<!--业务分派信息--> <!--业务分派信息-->
<initial-assign-table :selected-source="selectedSource" :selected-standard="selectedStandard" /> <initial-assign-table ref="termList"
:selected-spilt-info-id="selectedSpiltInfoId"
:selected-standard="selectedStandard"
:display-data-source="dispathDataSource" />
</template> </template>
<!--部所主管级领导下发--> <!--部所主管级领导下发-->
<depart-leader-issue-table v-if="isDepartLeaderIssue" /> <depart-leader-issue-table v-if="isDepartLeaderIssue" ref="termList" :display-data-source="dispathDataSource" />
<!--模块责任人分发--> <!--模块责任人分发-->
<module-owner-issue-table v-if="isModuleOwnerIssue" /> <module-owner-issue-table v-if="isModuleOwnerIssue" ref="termList" :display-data-source="dispathDataSource" />
<!--设计工程师评估--> <!--设计工程师评估-->
<design-engineer-assess v-if="isDesignEngineerAssess" /> <design-engineer-assess v-if="isDesignEngineerAssess" ref="termList" :display-data-source="dispathDataSource"/>
<!--模块负责人评审--> <!--模块负责人评审-->
<module-owner-approve-table v-if="isModuleOwnerApprove" /> <module-owner-approve-table v-if="isModuleOwnerApprove" />
@@ -112,9 +119,12 @@
<!--人员信息--> <!--人员信息-->
<div class="detail-page-scroll-content p-0" v-show="switchValue === 'user'"> <div class="detail-page-scroll-content p-0" v-show="switchValue === 'user'">
<process-detail-list> <process-detail-list :process-key="ProcessKey.REGULATORY_COMPLIANCE_ASSESSMENT.value">
<template #personnelInfo> <template #personnelInfo>
<personnel-info ref="personnelInfo" :data="personnelInfoData" /> <personnel-info ref="personnelInfo"
:data="personnelInfoData"
:current-node="currentNode"
:special-process-node-prefix="currentNodePrefix" />
</template> </template>
</process-detail-list> </process-detail-list>
</div> </div>
@@ -142,6 +152,9 @@
{{ $t('reject') }} {{ $t('reject') }}
</a-button> </a-button>
</div> </div>
<!--选人-->
<user-select-modal type="radio" ref="userSelectModal" @change="continueTransfer" />
</internal-detail-page> </internal-detail-page>
</template> </template>
@@ -150,7 +163,7 @@ import PersonnelInfo from '../../../components/PersonnelInfo'
import InternalDetailPage from '../../../components/InternalDetailPage' import InternalDetailPage from '../../../components/InternalDetailPage'
import ProcessDetailList from '../../../components/ProcessDetailList' import ProcessDetailList from '../../../components/ProcessDetailList'
import { WorkCenterMixin } from '../../../mixins/WorkCenterMixin' import { WorkCenterMixin } from '../../../mixins/WorkCenterMixin'
import { ProcessKey, StandardComplianceNodes } from '../../../enums/commonEnums' import { ProcessKey, StandardComplianceNodes, StandardSource } from '../../../enums/commonEnums'
import InitialBasicServiceInfo from './components/InitialBasicServiceInfo' import InitialBasicServiceInfo from './components/InitialBasicServiceInfo'
import InitialAssignTable from './components/InitialAssignTable' import InitialAssignTable from './components/InitialAssignTable'
import DepartLeaderIssueTable from './components/DepartLeaderIssueTable' import DepartLeaderIssueTable from './components/DepartLeaderIssueTable'
@@ -160,10 +173,19 @@ import ModuleOwnerApproveTable from './components/ModuleOwnerApproveTable'
import DepartLeaderApproveTable from './components/DepartLeaderApproveTable' import DepartLeaderApproveTable from './components/DepartLeaderApproveTable'
import RegulatoryEngineerApproval from './components/RegulatoryEngineerApproval' import RegulatoryEngineerApproval from './components/RegulatoryEngineerApproval'
import DesignEngineerWriteProject from './components/DesignEngineerWriteProject' import DesignEngineerWriteProject from './components/DesignEngineerWriteProject'
import {
saveStandardCompliance,
initStandardCompliance,
submitStandardCompliance,
queryStandardCompliance,
processTransfer
} from '../../../api/workCenter'
import UserSelectModal from '../../../components/selection/UserSelectModal'
export default { export default {
name: 'StandardComplianceProcess', name: 'StandardComplianceProcess',
components: { components: {
UserSelectModal,
ProcessDetailList, ProcessDetailList,
InternalDetailPage, InternalDetailPage,
PersonnelInfo, PersonnelInfo,
@@ -180,9 +202,9 @@ export default {
mixins: [WorkCenterMixin], mixins: [WorkCenterMixin],
data () { data () {
return { return {
ProcessKey,
loading: false, loading: false,
btnList: [], btnList: [],
disabled: false,
// 流程信息表单 // 流程信息表单
processInfoForm: this.$form.createForm(this), processInfoForm: this.$form.createForm(this),
processInfo: {}, processInfo: {},
@@ -214,64 +236,102 @@ export default {
} }
}, },
selectedStandard: {}, // 发起节点,选中的标准 selectedStandard: {}, // 发起节点,选中的标准
selectedSource: null // 发起节点,选中标准的分解单来源 selectedSpiltInfoId: null, // 发起节点,选中标准的分解单拆分id
businessId: null,
dispathDataSource: [], // 业务分派信息的数据
currentNodePrefix: null
} }
}, },
computed: { computed: {
pageTitle () { pageTitle () {
return `${this.$t('flowCenter')}${this.$route.meta.title}` const subTitle = this.$route.query.taskName || StandardComplianceNodes.initial.text
return `${this.$t('flowCenter')}${this.$route.meta.title}${subTitle}`
}, },
// 是否发起节点,发起节点展示业务基本信息、业务分派信息 // 是否发起节点,发起节点展示业务基本信息、业务分派信息
isInitial () { isInitial () {
return this.currentNode === StandardComplianceNodes.initial.value return this.currentNode && this.currentNode.indexOf(StandardComplianceNodes.initial.value) === 0
}, },
// 是否部所主管级领导下发节点 // 是否部所主管级领导下发节点
isDepartLeaderIssue () { isDepartLeaderIssue () {
return this.currentNode === StandardComplianceNodes.departLeaderIssue.value return this.currentNode && this.currentNode.indexOf(StandardComplianceNodes.departLeaderIssue.value) === 0
}, },
// 是否模块负责人分发 // 是否模块负责人分发
isModuleOwnerIssue () { isModuleOwnerIssue () {
return this.currentNode === StandardComplianceNodes.moduleOwnerIssue.value return this.currentNode && this.currentNode.indexOf(StandardComplianceNodes.moduleOwnerIssue.value) === 0
}, },
// 是否设计工程师评估节点 // 是否设计工程师评估节点
isDesignEngineerAssess () { isDesignEngineerAssess () {
return this.currentNode === StandardComplianceNodes.designEngineerAssess.value return this.currentNode && this.currentNode.indexOf(StandardComplianceNodes.designEngineerAssess.value) === 0
}, },
// 是否模块责任人评审节点 // 是否模块责任人评审节点
isModuleOwnerApprove () { isModuleOwnerApprove () {
return this.currentNode === StandardComplianceNodes.moduleOwnerReview.value return this.currentNode && this.currentNode.indexOf(StandardComplianceNodes.moduleOwnerReview.value) === 0
}, },
// 是否部所主管级领导审批 // 是否部所主管级领导审批
isDepartLeaderApprove () { isDepartLeaderApprove () {
return this.currentNode === StandardComplianceNodes.departLeaderApprove.value return this.currentNode && this.currentNode.indexOf(StandardComplianceNodes.departLeaderApprove.value) === 0
}, },
// 是否法规工程师审批 // 是否法规工程师审批
isRegulatoryEngineerApproval () { isRegulatoryEngineerApproval () {
return this.currentNode === StandardComplianceNodes.regulatoryEngineerApprove.value return this.currentNode && this.currentNode.indexOf(StandardComplianceNodes.regulatoryEngineerApprove.value) === 0
}, },
// 是否设计工程师补充立项项目号 // 是否设计工程师补充立项项目号
isDesignEngineerWriteProject () { isDesignEngineerWriteProject () {
return this.currentNode === StandardComplianceNodes.designEngineerWriteProject.value return this.currentNode && this.currentNode.indexOf(StandardComplianceNodes.designEngineerWriteProject.value) === 0
} }
}, },
created () { created () {
if (this.$route.query.processInstanceId || this.$route.query.draftId) { this.getPersonInfoStructure(ProcessKey.REGULATORY_COMPLIANCE_ASSESSMENT.value, () => {
this.currentNode = this.$route.query.nodeId if (this.$route.query.processInstanceId || this.$route.query.draftId) {
} else { this.currentNode = this.$route.query.nodeId || StandardComplianceNodes.initial.value
this.currentNode = StandardComplianceNodes.initial.value this.initProcessData()
}
this.btnList = StandardComplianceNodes.propertyOfValue('btn', this.currentNode) } else {
this.getPersonInfoStructure(ProcessKey.NO_MATCH_TRACKING.value, () => { this.currentNode = StandardComplianceNodes.initial.value
}
const key = StandardComplianceNodes.keyOfValueByLike(this.currentNode)
this.btnList = StandardComplianceNodes[key].btn || []
this.currentNodePrefix = StandardComplianceNodes[key].value
this.initPersonInfoData() this.initPersonInfoData()
}) })
}, },
methods: { methods: {
initProcessData () {
this.loading = true
const params = {
taskId: this.$route.query.taskId,
processInstanceId: this.$route.query.processInstanceId,
draftId: this.$route.query.draftId
}
queryStandardCompliance(params).then(res => {
if (res.success) {
let { result = {} } = res
if (result.infoJsonStr) {
result = JSON.parse(result.infoJsonStr)
}
this.businessId = result.businessId
this.processInfo = Object.assign({}, result.basicProcessInfoDTO || {})
this.approvalInfo = Object.assign({}, result.basicTaskInfoDTO || {}, { taskId: this.$route.query.taskId })
this.selectedStandard = Object.assign({}, result.businessInfoDTO.processProjectStandard || {})
console.log(this.selectedStandard)
this.dispathDataSource = result.businessInfoDTO.processProjectStandardTermList || []
this.$nextTick(() => {
this.processInfoForm.setFieldsValue(this.processInfo)
this.approvalInfoForm.setFieldsValue(this.approvalInfo)
})
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
},
/** /**
* 分解单来源变化 * 分解单来源变化
* @param source * @param source
*/ */
handleSourceChange (source) { handleSourceChange (spiltInfoId) {
this.selectedSource = source this.selectedSpiltInfoId = spiltInfoId
}, },
/** /**
* 选择的标准变化 * 选择的标准变化
@@ -279,21 +339,208 @@ export default {
*/ */
handleStandardChange (standard) { handleStandardChange (standard) {
this.selectedStandard = Object.assign({}, standard) this.selectedStandard = Object.assign({}, standard)
this.generateProcessName()
}, },
generateProcessName () {
// 处理自动生成流程名称
let processName
if (this.selectedStandard.id) {
processName = `${this.selectedStandard.standardNumber}-${this.selectedStandard.standardName}-法规合规评估`
}
this.processInfoForm.setFieldsValue({ processName })
},
/**
* 转办
*/
handleTurnTo () { handleTurnTo () {
this.$refs.userSelectModal.open()
}, },
continueTransfer (userId) {
const params = {
taskId: this.$route.query.taskId,
userId
}
this.loading = true
processTransfer(params).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
},
/**
* 处理保存的数据,保存不需要进行表单校验
*/
dealSaveFormData () {
// 流程信息
const basicProcessInfoDTO = Object.assign(this.processInfo, this.processInfoForm.getFieldsValue())
// 流程审批信息
const basicTaskInfoDTO = Object.assign(this.approvalInfo, this.approvalInfoForm.getFieldsValue())
// 业务基本信息(发起节点的标准列表)
let processProjectStandard = {}
if (this.$refs.standardList) {
processProjectStandard = this.$refs.standardList.submit(false)
} else {
processProjectStandard = { ...this.selectedStandard }
}
// 条款列表
let processProjectStandardTermList = []
if (this.$refs.termList) {
processProjectStandardTermList = this.$refs.termList.submit(false)
}
// 校验是否至少填了一项
const checkValueArr = Object.values({ ...basicProcessInfoDTO, ...basicTaskInfoDTO, ...processProjectStandard })
if (checkValueArr.every(tt => !tt) && (!processProjectStandardTermList || processProjectStandardTermList.length === 0)) {
this.$message.warning(this.$t('pleaseFillInAtLeastOneItem'))
return false
}
return {
basicProcessInfoDTO,
basicTaskInfoDTO,
businessId: this.businessId,
draftId: this.$route.query.draftId,
businessInfoDTO: {
processProjectStandard,
processProjectStandardTermList
}
}
},
/**
* 处理提交表单数据
*/
dealSubmitFormData () {
let basicProcessInfoDTO = {}, basicTaskInfoDTO = {}, flag = true
this.processInfoForm.validateFields((errors, values) => {
if (!errors) {
basicProcessInfoDTO = Object.assign(this.processInfo, values)
} else {
flag = false
}
})
this.approvalInfoForm.validateFields((errors, values) => {
if (!errors) {
basicTaskInfoDTO = Object.assign(this.approvalInfo, values)
} else {
flag = false
}
})
// 业务基本信息(发起节点的标准列表)
let processProjectStandard
if (this.$refs.standardList) {
processProjectStandard = this.$refs.standardList.submit(true, true)
} else {
processProjectStandard = { ...this.selectedStandard }
}
flag = !!processProjectStandard
// 条款列表
let processProjectStandardTermList
if (this.$refs.termList) {
const needRemind = this.$refs.standardList ? processProjectStandard && processProjectStandard.id : true
processProjectStandardTermList = this.$refs.termList.submit(true, needRemind)
}
flag = !!processProjectStandardTermList
if (!flag) {
this.switchValue = 'base'
return false
}
return {
basicProcessInfoDTO,
basicTaskInfoDTO,
businessId: this.businessId,
businessInfoDTO: {
processProjectStandard,
processProjectStandardTermList
}
}
},
/**
* 保存
*/
handleSave () { handleSave () {
const formData = this.dealSaveFormData()
if (!formData) {
return
}
formData.infoJsonStr = JSON.stringify(formData)
this.loading = true
saveStandardCompliance(formData).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
}, },
/**
* 提交
*/
handleSubmit () { handleSubmit () {
const formData = this.dealSubmitFormData()
if (!formData) {
return
}
let submitFunc
if (this.currentNode.indexOf(StandardComplianceNodes.initial.value) === 0) {
submitFunc = initStandardCompliance
const saveFormData = this.dealSaveFormData()
if (saveFormData) {
formData.infoJsonStr = JSON.stringify(saveFormData)
}
} else {
submitFunc = submitStandardCompliance
}
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
})
}, },
handleAgree () { handleAgree () {
}, },
handleReject () { handleReject () {
},
toStandardDetail () {
const { source, standardId } = this.selectedStandard
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 = { standardId }
this.$openPageNewSheet({
path, query
})
} }
} }
} }
@@ -13,25 +13,37 @@
:columns="columns" :columns="columns"
:data-source="dataSource" :data-source="dataSource"
:scroll="{x: '100%'}" :scroll="{x: '100%'}"
:pagination="false" :pagination="ipagination"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"> :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
@change="handleTableChange">
<!--选择模块负责人--> <!--选择模块负责人-->
<template v-slot:moduleOwner="{text,record,index}"> <template v-slot:moduleOwner="{text,record,index}">
<user-selection :show-btn="false" <user-selection :show-btn="false"
:value="record.contact" :value="record.moduleOwner"
:name-str="record.contact_dictText" :name-str="record.moduleOwner_dictText"
v-if="!record.uninvolved" v-if="!record.notInvolved"
:placeholder="$t('pleaseSelect') + $t('workCenter.standardCompliance.moduleOwner')" /> :placeholder="$t('pleaseSelect') + $t('workCenter.standardCompliance.moduleOwner')"
@listChange="list => handleUserChange(list, index)" />
<div v-else>{{ global.emptyLine }}</div> <div v-else>{{ global.emptyLine }}</div>
</template> </template>
<!--条文内容-->
<template v-slot:clauseContent="{text}">
<div class="table-text" style="cursor: pointer" @click="showContent(text)" v-if="text">
{{ text && text !== 'null' ? text.replace(/<.*?>/ig, ' ') : '' }}
</div>
<div class="table-text" v-else>{{ global.emptyLine }}</div>
</template>
<!--操作--> <!--操作-->
<template v-slot:action="{text,record,index}"> <template v-slot:action="{text,record,index}">
<div class="action-span-cell"> <div class="action-span-cell">
<a @click="handleUninvolved(record, index)">{{ <a @click="handleUninvolved(record, index)">
!record.uninvolved ? $t('projectLibrary.vehicleItemLibrary.uninvolved') : $t('workCenter.projectComplianceEvaluationProcess.noCauseInvolved') {{
}}</a> !record.notInvolved ? $t('projectLibrary.vehicleItemLibrary.uninvolved') : $t('workCenter.projectComplianceEvaluationProcess.noCauseInvolved')
}}
</a>
</div> </div>
</template> </template>
</j-table> </j-table>
@@ -41,6 +53,8 @@
<user-select-modal ref="userSelectModal" @listChange="handleBatchSelected" /> <user-select-modal ref="userSelectModal" @listChange="handleBatchSelected" />
<!--不涉及原因--> <!--不涉及原因-->
<uninvolved-modal ref="uninvolvedModal" @ok="handleUninvolvedOk" /> <uninvolved-modal ref="uninvolvedModal" @ok="handleUninvolvedOk" />
<!--条文内容-->
<split-clause-detail ref="clauseDetail" />
</div> </div>
</template> </template>
@@ -49,48 +63,83 @@ import UserSelection from '../../../../components/selection/UserSelection'
import JTable from '../../../../components/jero/JTable' import JTable from '../../../../components/jero/JTable'
import UserSelectModal from '../../../../components/selection/UserSelectModal' import UserSelectModal from '../../../../components/selection/UserSelectModal'
import UninvolvedModal from '../modules/UninvolvedModal' import UninvolvedModal from '../modules/UninvolvedModal'
import SplitClauseDetail from '../../../documentTool/documentSplit/modules/SplitClauseDetail'
export default { export default {
name: 'DepartLeaderIssueTable', name: 'DepartLeaderIssueTable',
components: { JTable, UserSelection, UserSelectModal, UninvolvedModal }, components: { SplitClauseDetail, JTable, UserSelection, UserSelectModal, UninvolvedModal },
props: {
// 回显的数据
displayDataSource: {
type: Array,
required: false,
default: () => {
return []
}
}
},
data () { data () {
return { return {
columns: [ columns: [
// 标准编号/条款号 // 标准编号/条款号
{ {
dataIndex: 'workNumber', dataIndex: 'termNumber',
title: this.$t('projectLibrary.vehicleItemLibrary.standardNumberClauseNumber'), title: this.$t('projectLibrary.vehicleItemLibrary.standardNumberClauseNumber'),
width: 150 width: 150
}, },
// 标准名称/条款名称 // 标准名称/条款名称
{ {
dataIndex: 'projectName', dataIndex: 'termName',
title: this.$t('workCenter.projectComplianceEvaluationProcess.standardNameClauseName'), title: this.$t('workCenter.projectComplianceEvaluationProcess.standardNameClauseName'),
width: 160
},
// 标准状态
{
title: this.$t('standardSelect.textState'),
dataIndex: 'standardState_dictText',
width: 150 width: 150
}, },
// 条款内容
{
dataIndex: 'termText',
title: this.$t('workCenter.projectComplianceEvaluationProcess.terms'),
width: 250,
scopedSlots: { customRender: 'clauseContent' }
},
// 模块责任人 // 模块责任人
{ {
title: this.$t('workCenter.standardCompliance.moduleOwner'), title: this.$t('workCenter.standardCompliance.moduleOwner'),
dataIndex: 'contact', dataIndex: 'contact',
width: 150, width: 250,
scopedSlots: { customRender: 'moduleOwner' } scopedSlots: { customRender: 'moduleOwner' }
}, },
// 操作 // 操作
{ {
title: this.$t('operation'), title: this.$t('operation'),
fixed: 'right',
width: 150, width: 150,
scopedSlots: { customRender: 'action' } scopedSlots: { customRender: 'action' }
} }
], ],
dataSource: [{ id: 1 }], dataSource: [],
selectedRowKeys: [] selectedRowKeys: [],
/* 分页参数 */
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
}
}
},
watch: {
displayDataSource: {
handler (value) {
this.dataSource = []
if (value) {
this.dataSource = value
}
},
deep: true,
immediate: true
} }
}, },
methods: { methods: {
@@ -109,9 +158,9 @@ export default {
const data = JSON.parse(JSON.stringify(this.dataSource)) const data = JSON.parse(JSON.stringify(this.dataSource))
this.dataSource = data.map(item => { this.dataSource = data.map(item => {
// 选中且没有填写不涉及理由 // 选中且没有填写不涉及理由
if (this.selectedRowKeys.includes(item.id) && !item.uninvolved) { if (this.selectedRowKeys.includes(item.id) && !item.notInvolved) {
item.contact = list.map(tt => tt.id).join(',') item.moduleOwner = list.map(tt => tt.id).join(',')
item.contact_dictText = list.map(tt => tt.realname + '(' + tt.username + ')').join(',') item.moduleOwner_dictText = list.map(tt => tt.realname + '(' + tt.username + ')').join(',')
} }
return item return item
}) })
@@ -125,11 +174,43 @@ export default {
this.$refs.uninvolvedModal.open(record, index) this.$refs.uninvolvedModal.open(record, index)
}, },
handleUninvolvedOk (record, index) { handleUninvolvedOk (record, index) {
// 如果写了不涉及原因,就清除模块负责人信息
if (record.notInvolved) {
record.moduleOwner = null
record.moduleOwner_dictText = null
}
this.$set(this.dataSource, index, record) this.$set(this.dataSource, index, record)
}, },
onSelectChange (selectedRowKeys) { onSelectChange (selectedRowKeys) {
this.selectedRowKeys = selectedRowKeys this.selectedRowKeys = selectedRowKeys
} },
showContent (text) {
this.$refs.clauseDetail.open(text)
},
handleUserChange (list, index) {
this.dataSource[index].moduleOwner = list.map(item => item.id).join(',')
this.dataSource[index].moduleOwner_dictText = list.map(item => item.realname + '(' + item.username + ')').join(',')
},
/**
* 提交数据
* @param needValidator
* @param needRemind
*/
submit (needValidator, needRemind) {
if (!needValidator) {
return this.dataSource
}
if (this.dataSource.length === 0 || this.dataSource.some(tt => !tt.moduleOwner && !tt.notInvolved)) {
if (needRemind) {
this.$message.warning(this.$t('workCenter.projectComplianceEvaluationProcess.pleaseSelectModuleOwner'))
}
return false
}
return this.dataSource
},
handleTableChange (pagination) {
this.ipagination = pagination
},
} }
} }
</script> </script>
@@ -144,4 +225,4 @@ export default {
/deep/ .user-input { /deep/ .user-input {
width: 100% !important; width: 100% !important;
} }
</style> </style>
@@ -6,9 +6,7 @@
<!--上一节点处理人--> <!--上一节点处理人-->
<div class="info-form-item"> <div class="info-form-item">
<label class="info-form-item-label">{{ $t('workCenter.projectComplianceEvaluationProcess.preNodePeople') }}</label> <label class="info-form-item-label">{{ $t('workCenter.projectComplianceEvaluationProcess.preNodePeople') }}</label>
<div class="info-form-item-text"> <div class="info-form-item-text"></div>
</div>
</div> </div>
<div> <div>
@@ -29,15 +27,23 @@
<template v-slot:evaluationResult="text,record,index"> <template v-slot:evaluationResult="text,record,index">
<j-dict-select-tag dict-code="assess_results" <j-dict-select-tag dict-code="assess_results"
style="width: 100%" style="width: 100%"
:value="record.evaluationResult" :value="record.assessResults"
@change="value => handleEvaluationResultChange(value, record, index)" /> @change="value => handleEvaluationResultChange(value, record, index)" />
</template> </template>
<!--条文内容-->
<template v-slot:clauseContent="{text}">
<div class="table-text" style="cursor: pointer" @click="showContent(text)" v-if="text">
{{ text && text !== 'null' ? text.replace(/<.*?>/ig, ' ') : '' }}
</div>
<div class="table-text" v-else>{{ global.emptyLine }}</div>
</template>
<!--展开的部分--> <!--展开的部分-->
<template v-slot:expandedRowRender="record,index"> <template v-slot:expandedRowRender="record,index">
<a-form-model :model="record" :rules="record.evaluationResult === inconformity ? rules : null" :ref="`ruleForm${index}`"> <a-form-model :model="record" :rules="record.assessResults === inconformity ? rules : null" :ref="`ruleForm${index}`">
<!--不符合--> <!--不符合-->
<template v-if="record.evaluationResult === inconformity"> <template v-if="record.assessResults === inconformity">
<!--是否与车型强关联--> <!--是否与车型强关联-->
<a-form-model-item :label="$t('workCenter.standardCompliance.stronglyRelatedVehicleType')" <a-form-model-item :label="$t('workCenter.standardCompliance.stronglyRelatedVehicleType')"
:labelCol="{span: 4}" :labelCol="{span: 4}"
@@ -48,13 +54,13 @@
type="radio" /> type="radio" />
</a-form-model-item> </a-form-model-item>
<!--不符合车型系列--> <!--不符合车型系列-->
<a-form-model-item :label="$t('workCenter.standardCompliance.doesNotFitModel')" <a-form-model-item :label="$t('workCenter.standardCompliance.modelSeries')"
:labelCol="{span: 4}" :labelCol="{span: 4}"
:wrapperCol="{span: 18}" :wrapperCol="{span: 18}"
prop="doesNotFitModel" prop="modelSeries"
v-if="record.stronglyRelatedVehicleType === yesValue"> v-if="record.modelSeries === yesValue">
<a-select :placeholder="$t('pleaseSelect') + $t('project')" <a-select :placeholder="$t('pleaseSelect') + $t('project')"
v-model="record.doesNotFitModel" v-model="record.modelSeries"
mode="multiple" mode="multiple"
show-search show-search
:filter-option="filterOption"> :filter-option="filterOption">
@@ -62,7 +68,7 @@
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
</template> </template>
<template v-if="record.evaluationResult === inconformity || record.evaluationResult === accordWith"> <template v-if="record.assessResults === inconformity || record.assessResults === accordWith">
<!--依据描述--> <!--依据描述-->
<a-form-model-item :label="$t('projectLibrary.specialProjectLibrary.basisDescription')" <a-form-model-item :label="$t('projectLibrary.specialProjectLibrary.basisDescription')"
:labelCol="{span: 4}" :labelCol="{span: 4}"
@@ -85,61 +91,72 @@
</a-table> </a-table>
</div> </div>
<a-button @click="handleCheck">校验</a-button> <!--条文内容-->
<split-clause-detail ref="clauseDetail" />
</div> </div>
</template> </template>
<script> <script>
import { EvaluationResultType, YesOrNoEnum } from '../../../../enums/commonEnums' import { EvaluationResultType, YesOrNoEnum } from '../../../../enums/commonEnums'
import { getCarTypeProjectList } from '../../../../api/projectLibraryApi' import { getCarTypeProjectList } from '../../../../api/projectLibraryApi'
import SplitClauseDetail from '../../../documentTool/documentSplit/modules/SplitClauseDetail'
export default { export default {
name: 'DesignEngineerAssess', name: 'DesignEngineerAssess',
components: { SplitClauseDetail },
props: {
// 回显的数据
displayDataSource: {
type: Array,
required: false,
default: () => {
return []
}
}
},
data () { data () {
return { return {
columns: [ columns: [
// 标准编号/条款号 // 标准编号/条款号
{ {
dataIndex: 'workNumber', dataIndex: 'termNumber',
title: this.$t('projectLibrary.vehicleItemLibrary.standardNumberClauseNumber'), title: this.$t('projectLibrary.vehicleItemLibrary.standardNumberClauseNumber'),
width: 150, width: 150,
align: 'center', align: 'center',
scopedSlots: { customRender: 'text' }
}, },
// 标准名称/条款名称 // 标准名称/条款名称
{ {
dataIndex: 'projectName', dataIndex: 'termName',
title: this.$t('workCenter.projectComplianceEvaluationProcess.standardNameClauseName'), title: this.$t('workCenter.projectComplianceEvaluationProcess.standardNameClauseName'),
width: 160,
align: 'center',
scopedSlots: { customRender: 'text' }
},
// 标准状态
{
title: this.$t('standardSelect.textState'),
dataIndex: 'standardState_dictText',
width: 150, width: 150,
align: 'center', align: 'center',
scopedSlots: { customRender: 'text' } },
// 条款内容
{
dataIndex: 'termText',
title: this.$t('workCenter.projectComplianceEvaluationProcess.terms'),
width: 250,
align: 'center',
scopedSlots: { customRender: 'clauseContent' }
}, },
// 实施日期 // 实施日期
{ {
title: this.$t('dashboard.advancedSearch.materialDate'), title: this.$t('dashboard.advancedSearch.materialDate'),
align: 'center', align: 'center',
width: 180, width: 180,
dataIndex: 'implementation_date', dataIndex: 'implementationDate',
scopedSlots: { customRender: 'text' } scopedSlots: { customRender: 'text' }
}, },
// 评估结果 // 评估结果
{ {
dataIndex: 'evaluationResults_dictText', dataIndex: 'assessResults_dictText',
title: this.$t('projectLibrary.vehicleItemLibrary.evaluationResult'), title: this.$t('projectLibrary.vehicleItemLibrary.evaluationResult'),
width: 120, width: 120,
align: 'center', align: 'center',
scopedSlots: { customRender: 'evaluationResult' } scopedSlots: { customRender: 'evaluationResult' }
} }
], ],
dataSource: [{ id: '1' }], dataSource: [],
form: {}, form: {},
rules: { rules: {
// 依据描述 // 依据描述
@@ -155,15 +172,27 @@ export default {
trigger: 'change' trigger: 'change'
}, },
// 不符合车型系列 // 不符合车型系列
doesNotFitModel: { modelSeries: {
required: true, required: true,
message: this.$t('pleaseSelect') + this.$t('workCenter.standardCompliance.doesNotFitModel'), message: this.$t('pleaseSelect') + this.$t('workCenter.standardCompliance.modelSeries'),
trigger: 'change' trigger: 'change'
} }
}, },
carTypeList: [] // 车型下拉数据 carTypeList: [] // 车型下拉数据
} }
}, },
watch: {
displayDataSource: {
handler (value) {
this.dataSource = []
if (value) {
this.dataSource = value
}
},
deep: true,
immediate: true
}
},
computed: { computed: {
accordWith () { accordWith () {
return EvaluationResultType.accordWith.value return EvaluationResultType.accordWith.value
@@ -192,7 +221,7 @@ export default {
}, },
handleEvaluationResultChange (value, record, index) { handleEvaluationResultChange (value, record, index) {
const data = JSON.parse(JSON.stringify(this.dataSource)) const data = JSON.parse(JSON.stringify(this.dataSource))
data[index].evaluationResult = value data[index].assessResults = value
this.dataSource.splice(0, this.dataSource.length, ...data) this.dataSource.splice(0, this.dataSource.length, ...data)
}, },
handleCheck () { handleCheck () {
@@ -203,7 +232,10 @@ export default {
filterOption (input, option) { filterOption (input, option) {
const text = option.componentOptions.children[0].text || option.componentOptions.children[0].data.attrs.title const text = option.componentOptions.children[0].text || option.componentOptions.children[0].data.attrs.title
return text.toLowerCase().indexOf(input.toLowerCase()) >= 0 return text.toLowerCase().indexOf(input.toLowerCase()) >= 0
} },
showContent (text) {
this.$refs.clauseDetail.open(text)
},
} }
} }
</script> </script>
@@ -13,32 +13,46 @@
</a-button> </a-button>
</div> </div>
<div> <div>
<j-table rowKey="id" <j-table rowKey="rowKey"
:columns="columns" :columns="columns"
:data-source="dataSource" :data-source="dataSource"
:scroll="{x: '100%'}" :scroll="{x: '100%'}"
:pagination="false" :pagination="ipagination"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"> :loading="loading"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
@change="handleTableChange">
<!--选择责任单位联络人--> <!--选择责任单位联络人-->
<template v-slot:contact="{text,record,index}"> <template v-slot:contact="{text,record,index}">
<user-selection :show-btn="false" <user-selection
:value="record.contact" :show-btn="false"
:name-str="record.contact_dictText" :value="record.responsibleUnitLeader"
type="checkbox" :name-str="record.responsibleUnitLeader_dictText"
:placeholder="$t('pleaseSelect') + $t('workCenter.standardCompliance.responsibleUnitContactPerson')" /> type="checkbox"
:placeholder="$t('pleaseSelect') + $t('workCenter.standardCompliance.responsibleUnitContactPerson')"
@listChange="list => handleContactChange(list, index)" />
</template>
<!--条文内容-->
<template v-slot:clauseContent="{text}">
<div class="table-text" style="cursor: pointer" @click="showContent(text)" v-if="text">
{{ text && text !== 'null' ? text.replace(/<.*?>/ig, ' ') : '' }}
</div>
<div class="table-text" v-else>{{ global.emptyLine }}</div>
</template> </template>
<!--操作--> <!--操作-->
<template v-slot:action="{text,record,index}"> <template v-slot:action="{text,record,index}">
<div class="action-span-cell"> <div class="action-span-cell">
<a :disabled="index === 0 && dataSource.length === 1" @click="handleDelete(record.id)">{{ $t('delete') }}</a> <a :disabled="index === 0 && dataSource.length === 1" @click="handleDelete(record.rowKey)">{{ $t('delete') }}</a>
</div> </div>
</template> </template>
</j-table> </j-table>
</div> </div>
<user-select-modal ref="userSelectModal" type="checkbox" @listChange="handleBatchSelected" /> <user-select-modal ref="userSelectModal" type="checkbox" @listChange="handleBatchSelected" />
<!--条文内容-->
<split-clause-detail ref="clauseDetail" />
</div> </div>
</template> </template>
@@ -46,10 +60,13 @@
import JTable from '../../../../components/jero/JTable' import JTable from '../../../../components/jero/JTable'
import UserSelection from '../../../../components/selection/UserSelection' import UserSelection from '../../../../components/selection/UserSelection'
import UserSelectModal from '../../../../components/selection/UserSelectModal' import UserSelectModal from '../../../../components/selection/UserSelectModal'
import { getClauseByStandard } from '../../../../api/workCenter'
import SplitClauseDetail from '../../../documentTool/documentSplit/modules/SplitClauseDetail'
import { randomUUID } from '../../../../utils/util'
export default { export default {
name: 'InitialAssignTable', name: 'InitialAssignTable',
components: { UserSelection, JTable, UserSelectModal }, components: { SplitClauseDetail, UserSelection, JTable, UserSelectModal },
props: { props: {
// 选中的标准 // 选中的标准
selectedStandard: { selectedStandard: {
@@ -60,29 +77,72 @@ export default {
} }
}, },
// 分解单来源 // 分解单来源
selectedSource: { selectedSpiltInfoId: {
type: String, type: String,
required: false, required: false,
default: false default: false
},
// 回显的数据
displayDataSource: {
type: Array,
required: false,
default: () => {
return []
}
} }
}, },
watch: { watch: {
// 选中标准变化,清除表格数据 // 选中标准变化
selectedStandard: { selectedStandard: {
handler () { handler () {
this.dataSource = [] this.dataSource = []
// 如果没有选中分解单id,那么就直接将标准带入
if (this.selectedStandard.id && !this.selectedSpiltInfoId) {
this.dataSource = [{
...this.selectedStandard,
rowKey: randomUUID(),
standardId: this.selectedStandard.id,
termNumber: this.selectedStandard.standardNumber,
termName: this.selectedStandard.standardName
}]
} else if (!this.selectedStandard.id) {
this.dataSource = []
}
}, },
deep: true deep: true
}, },
// 选中的分解单来源变化 // 选中的分解单来源变化
selectedSource (value) { selectedSpiltInfoId (value) {
if (value && this.selectedStandard.id) { console.log('分解单change')
// todo 获取条款号的数据 this.dataSource = []
if (value && value !== '0' && this.selectedStandard.id) {
this.initClauseList()
} else if (this.selectedStandard.id) {
// 不带入直接处理数据就好
this.dataSource = [{
...this.selectedStandard,
rowKey: randomUUID(),
standardId: this.selectedStandard.id,
termNumber: this.selectedStandard.standardNumber,
termName: this.selectedStandard.standardName
}]
} }
},
displayDataSource: {
handler (value) {
if (value && value.length > 0) {
this.dataSource = value
} else {
this.dataSource = []
}
},
deep: true,
immediate: true
} }
}, },
data () { data () {
return { return {
loading: false,
columns: [ columns: [
// 序号 // 序号
{ {
@@ -96,32 +156,27 @@ export default {
}, },
// 标准编号/条款号 // 标准编号/条款号
{ {
dataIndex: 'workNumber', dataIndex: 'termNumber',
title: this.$t('projectLibrary.vehicleItemLibrary.standardNumberClauseNumber'), title: this.$t('projectLibrary.vehicleItemLibrary.standardNumberClauseNumber'),
width: 150 width: 150
}, },
// 标准名称/条款名称 // 标准名称/条款名称
{ {
dataIndex: 'projectName', dataIndex: 'termName',
title: this.$t('workCenter.projectComplianceEvaluationProcess.standardNameClauseName'), title: this.$t('workCenter.projectComplianceEvaluationProcess.standardNameClauseName'),
width: 160 width: 160
}, },
// 条款内容 // 条款内容
{ {
dataIndex: 'projectSource_dictText', dataIndex: 'termText',
title: this.$t('workCenter.projectComplianceEvaluationProcess.terms'), title: this.$t('workCenter.projectComplianceEvaluationProcess.terms'),
width: 150 width: 150,
}, scopedSlots: { customRender: 'clauseContent' }
// 标准状态
{
title: this.$t('standardSelect.textState'),
dataIndex: 'standardState_dictText',
width: 150
}, },
// 责任单位联络人 // 责任单位联络人
{ {
title: this.$t('workCenter.standardCompliance.responsibleUnitContactPerson'), title: this.$t('workCenter.standardCompliance.responsibleUnitContactPerson'),
dataIndex: 'contact', dataIndex: 'responsibleUnitLeader_dictText',
width: 150, width: 150,
scopedSlots: { customRender: 'contact' } scopedSlots: { customRender: 'contact' }
}, },
@@ -134,7 +189,19 @@ export default {
} }
], ],
dataSource: [], dataSource: [],
selectedRowKeys: [] selectedRowKeys: [],
/* 分页参数 */
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
}
} }
}, },
methods: { methods: {
@@ -152,19 +219,19 @@ export default {
handleBatchSelected (list) { handleBatchSelected (list) {
const data = JSON.parse(JSON.stringify(this.dataSource)) const data = JSON.parse(JSON.stringify(this.dataSource))
this.dataSource = data.map(item => { this.dataSource = data.map(item => {
if (this.selectedRowKeys.includes(item.id)) { if (this.selectedRowKeys.includes(item.rowKey)) {
item.contact = list.map(tt => tt.id).join(',') item.responsibleUnitLeader = list.map(tt => tt.id).join(',')
item.contact_dictText = list.map(tt => tt.realname + '(' + tt.username + ')').join(',') item.responsibleUnitLeader_dictText = list.map(tt => tt.realname + '(' + tt.username + ')').join(',')
} }
return item return item
}) })
}, },
handleDelete (id) { handleDelete (rowKey) {
this.$confirm({ this.$confirm({
title: this.$t('confirmDeletion'), title: this.$t('confirmDeletion'),
content: this.$t('areYouSure'), content: this.$t('areYouSure'),
onOk: () => { onOk: () => {
const index = this.dataSource.findIndex(tt => tt.id === id) const index = this.dataSource.findIndex(tt => tt.rowKey === rowKey)
this.dataSource[index] = null this.dataSource[index] = null
this.dataSource = this.dataSource.filter(tt => !!tt) this.dataSource = this.dataSource.filter(tt => !!tt)
this.selectedRowKeys = [] this.selectedRowKeys = []
@@ -172,16 +239,22 @@ export default {
}) })
}, },
batchDelete () { batchDelete () {
// 至少选择一条数据
if (!this.selectedRowKeys || this.selectedRowKeys.length === 0) { if (!this.selectedRowKeys || this.selectedRowKeys.length === 0) {
this.$message.warning(this.$t('workCenter.standardCompliance.pleaseSelectDeleteData')) this.$message.warning(this.$t('workCenter.standardCompliance.pleaseSelectDeleteData'))
return return
} }
// 至少保留一条数据
if (this.selectedRowKeys.length === this.dataSource.length) {
this.$message.warning(this.$t('workCenter.standardCompliance.atLeastOneData'))
return
}
this.$confirm({ this.$confirm({
title: this.$t('confirmBatchDeletion'), title: this.$t('confirmBatchDeletion'),
content: this.$t('deleteAData'), content: this.$t('deleteAData'),
onOk: () => { onOk: () => {
const data = this.dataSource.map(item => { const data = this.dataSource.map(item => {
if (this.selectedRowKeys.includes(item.id)) { if (this.selectedRowKeys.includes(item.rowKey)) {
return null return null
} }
return item return item
@@ -193,6 +266,55 @@ export default {
}, },
onSelectChange (selectedRowKeys) { onSelectChange (selectedRowKeys) {
this.selectedRowKeys = selectedRowKeys this.selectedRowKeys = selectedRowKeys
},
/**
* 获取条款列表
*/
initClauseList () {
this.loading = true
const params = {
sarFileSplitInfoId: this.selectedSpiltInfoId,
standardId: this.selectedStandard.id
}
getClauseByStandard(params).then(res => {
if (res.success) {
const data = res.result || []
this.dataSource = data.map(item => {
return { ...item, rowKey: randomUUID() }
})
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
},
showContent (text) {
this.$refs.clauseDetail.open(text)
},
handleTableChange (pagination) {
this.ipagination = pagination
},
handleContactChange (list, recordIndex) {
this.dataSource[recordIndex].responsibleUnitLeader = list.map(item => item.id).join(',')
this.dataSource[recordIndex].responsibleUnitLeader_dictText = list.map(item => item.realname + '(' + item.username + ')').join(',')
},
/**
* 提交数据
* @param needValidator 是否需要校验
* @param needRemind 是否需要提醒
*/
submit (needValidator, needRemind) {
if (!needValidator) {
return this.dataSource
}
if (this.dataSource.length === 0 || this.dataSource.some(tt => !tt.responsibleUnitLeader)) {
if (needRemind) {
this.$message.warning(this.$t('workCenter.standardCompliance.pleaseSelectResponsibleUnitContactPerson'))
}
return false
}
return this.dataSource
} }
} }
} }
@@ -208,4 +330,4 @@ export default {
/deep/ .user-input { /deep/ .user-input {
width: 100% !important; width: 100% !important;
} }
</style> </style>
@@ -14,26 +14,68 @@
</div> </div>
<div> <div>
<j-table :columns="columns" :data-source="dataSource" :pagination="false" :scroll="{x: '100%'}"> <j-table :columns="columns" :data-source="dataSource" :pagination="false" :scroll="{x: '100%'}">
<!--跳转标准详情-->
<template v-slot:detail="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<div class="table-text can-click-table-text" v-if="text || text === 0" @click="toDetailPage(record)">{{ text }}</div>
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template>
<!--分解单来源-->
<template v-slot:salvageListSource="{text, record, index}"> <template v-slot:salvageListSource="{text, record, index}">
<j-dict-select-tag style="width: 100%" <a-select :placeholder="$t('pleaseSelect') + $t('workCenter.projectComplianceEvaluationProcess.salvageListSource')"
:value="record.salvageSource" :value="record.decompositionOrderSource"
dict-code="process_manuscript" style="width: 100%"
@change="value => handleSourceChange(value, record, index)" /> @change="value => handleSourceChange(value, record, index)">
<a-select-option v-for="item in record.decompositionOrderSourceVOList"
:key="item.value"
:value="item.value"
:disabled="item.value !== '0' && !item.sarFileSplitInfoId">
{{ item.text }}
</a-select-option>
</a-select>
</template> </template>
</j-table> </j-table>
</div> </div>
<standard-selection-modal ref="standardSelectModal" type="radio" @listChange="handleSelectedStandard" /> <select-standard-drawer ref="standardSelectModal" type="radio" @listChange="handleSelectedStandard" />
</div> </div>
</template> </template>
<script> <script>
import StandardSelectionModal from '../../../../components/selection/StandardSelectionModal'
import JTable from '../../../../components/jero/JTable' import JTable from '../../../../components/jero/JTable'
import SelectStandardDrawer from '../modules/SelectStandardDrawer'
import { StandardSource } from '../../../../enums/commonEnums'
export default { export default {
name: 'InitialBasicServiceInfo', name: 'InitialBasicServiceInfo',
components: { JTable, StandardSelectionModal }, components: { JTable, SelectStandardDrawer },
props: {
// 选中的标准
selectedStandard: {
type: Object,
required: false,
default: () => {
return {}
}
}
},
watch: {
selectedStandard: {
handler (val) {
if (val.id) {
this.dataSource = [{ ...val }]
} else {
this.dataSource = []
}
},
deep: true,
immediate: true
}
},
data () { data () {
return { return {
columns: [ columns: [
@@ -47,7 +89,8 @@ export default {
{ {
title: this.$t('standardName'), title: this.$t('standardName'),
dataIndex: 'standardName', dataIndex: 'standardName',
width: 150 width: 150,
scopedSlots: { customRender: 'detail' }
}, },
// 标准状态 // 标准状态
{ {
@@ -86,19 +129,83 @@ export default {
}, },
methods: { methods: {
handleDelete () { handleDelete () {
this.$confirm({
title: this.$t('confirmDeletion'),
content: this.$t('areYouSure'),
onOk: () => {
this.dataSource = []
this.$emit('standard:change', this.dataSource[0])
}
})
}, },
handleAdd () { handleAdd () {
this.$refs.standardSelectModal.open() this.$refs.standardSelectModal.open()
}, },
handleSelectedStandard (list) { handleSelectedStandard (list) {
this.dataSource = list this.dataSource = []
this.$emit('standard:change', list[0]) if (list.length > 0) {
const data = {
...list[0],
standardId: list[0].id,
decompositionOrderSource: '0'
}
this.$set(this.dataSource, 0, data)
}
this.$emit('standard:change', this.dataSource[0])
}, },
handleSourceChange (value, record, index) { handleSourceChange (value, record, index) {
record.salvageSource = value record.decompositionOrderSource = value
this.$set(this.dataSource, index, record) this.$set(this.dataSource, index, record)
this.$emit('source:change', value) const splitInfoId = record.decompositionOrderSourceVOList.find(tt => tt.value === value).sarFileSplitInfoId
this.$emit('source:change', splitInfoId)
},
/**
* 返回数据
* @param needValidator 是否需要校验
* @param needRemind 是否需要提示
*/
submit (needValidator, needRemind) {
if (!needValidator) {
return this.dataSource[0] || {}
}
if (!this.dataSource || this.dataSource.length === 0) {
if (needRemind) {
this.$message.warning(this.$t('workCenter.standardCompliance.pleaseAddStandard'))
}
return false
}
return this.dataSource[0]
},
/**
* 跳转标准详情
* @param record
*/
toDetailPage ({ id, source }) {
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 }
this.$openPageNewSheet({
path, query
})
} }
} }
} }
@@ -107,4 +214,4 @@ export default {
<style scoped lang="less"> <style scoped lang="less">
@import '~@assets/less/common.less'; @import '~@assets/less/common.less';
</style> </style>
@@ -13,25 +13,35 @@
:columns="columns" :columns="columns"
:data-source="dataSource" :data-source="dataSource"
:scroll="{x: '100%'}" :scroll="{x: '100%'}"
:pagination="false" :pagination="ipagination"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"> :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
@change="handleTableChange">
<!--选择责任单位联络人--> <!--选择设计工程师-->
<template v-slot:moduleOwner="{text,record,index}"> <template v-slot:moduleOwner="{text,record,index}">
<user-selection :show-btn="false" <user-selection :show-btn="false"
:value="record.contact" :value="record.designEngineer"
:name-str="record.contact_dictText" :name-str="record.designEngineer_dictText"
v-if="!record.uninvolved" v-if="!record.notInvolved"
type="checkbox" type="checkbox"
:placeholder="$t('pleaseSelect') + $t('workCenter.standardConsultationProcess.designEngineer')" /> :placeholder="$t('pleaseSelect') + $t('workCenter.standardConsultationProcess.designEngineer')"
@listChange="list => handleUserChange(list, index)" />
<div v-else>{{ global.emptyLine }}</div> <div v-else>{{ global.emptyLine }}</div>
</template> </template>
<!--条文内容-->
<template v-slot:clauseContent="{text}">
<div class="table-text" style="cursor: pointer" @click="showContent(text)" v-if="text">
{{ text && text !== 'null' ? text.replace(/<.*?>/ig, ' ') : '' }}
</div>
<div class="table-text" v-else>{{ global.emptyLine }}</div>
</template>
<!--操作--> <!--操作-->
<template v-slot:action="{text,record,index}"> <template v-slot:action="{text,record,index}">
<div class="action-span-cell"> <div class="action-span-cell">
<a @click="handleUninvolved(record, index)">{{ <a @click="handleUninvolved(record, index)">{{
!record.uninvolved ? $t('projectLibrary.vehicleItemLibrary.uninvolved') : $t('workCenter.projectComplianceEvaluationProcess.noCauseInvolved') !record.notInvolved ? $t('projectLibrary.vehicleItemLibrary.uninvolved') : $t('workCenter.projectComplianceEvaluationProcess.noCauseInvolved')
}}</a> }}</a>
</div> </div>
</template> </template>
@@ -42,6 +52,8 @@
<user-select-modal ref="userSelectModal" type="checkbox" @listChange="handleBatchSelected" /> <user-select-modal ref="userSelectModal" type="checkbox" @listChange="handleBatchSelected" />
<!--不涉及原因--> <!--不涉及原因-->
<uninvolved-modal ref="uninvolvedModal" @ok="handleUninvolvedOk" /> <uninvolved-modal ref="uninvolvedModal" @ok="handleUninvolvedOk" />
<!--条文内容-->
<split-clause-detail ref="clauseDetail" />
</div> </div>
</template> </template>
@@ -50,31 +62,43 @@ import UserSelection from '../../../../components/selection/UserSelection'
import UserSelectModal from '../../../../components/selection/UserSelectModal' import UserSelectModal from '../../../../components/selection/UserSelectModal'
import UninvolvedModal from '../modules/UninvolvedModal' import UninvolvedModal from '../modules/UninvolvedModal'
import JTable from '../../../../components/jero/JTable' import JTable from '../../../../components/jero/JTable'
import SplitClauseDetail from '../../../documentTool/documentSplit/modules/SplitClauseDetail'
export default { export default {
name: 'ModuleOwnerIssueTable', name: 'ModuleOwnerIssueTable',
components: { JTable, UninvolvedModal, UserSelectModal, UserSelection }, components: { SplitClauseDetail, JTable, UninvolvedModal, UserSelectModal, UserSelection },
props: {
// 回显的数据
displayDataSource: {
type: Array,
required: false,
default: () => {
return []
}
}
},
data () { data () {
return { return {
columns: [ columns: [
// 标准编号/条款号 // 标准编号/条款号
{ {
dataIndex: 'workNumber', dataIndex: 'termNumber',
title: this.$t('projectLibrary.vehicleItemLibrary.standardNumberClauseNumber'), title: this.$t('projectLibrary.vehicleItemLibrary.standardNumberClauseNumber'),
width: 150 width: 150
}, },
// 标准名称/条款名称 // 标准名称/条款名称
{ {
dataIndex: 'projectName', dataIndex: 'termName',
title: this.$t('workCenter.projectComplianceEvaluationProcess.standardNameClauseName'), title: this.$t('workCenter.projectComplianceEvaluationProcess.standardNameClauseName'),
width: 160
},
// 标准状态
{
title: this.$t('standardSelect.textState'),
dataIndex: 'standardState_dictText',
width: 150 width: 150
}, },
// 条款内容
{
dataIndex: 'termText',
title: this.$t('workCenter.projectComplianceEvaluationProcess.terms'),
width: 250,
scopedSlots: { customRender: 'clauseContent' }
},
// 设计工程师 // 设计工程师
{ {
title: this.$t('workCenter.standardConsultationProcess.designEngineer'), title: this.$t('workCenter.standardConsultationProcess.designEngineer'),
@@ -85,13 +109,36 @@ export default {
// 操作 // 操作
{ {
title: this.$t('operation'), title: this.$t('operation'),
fixed: 'right',
width: 150, width: 150,
scopedSlots: { customRender: 'action' } scopedSlots: { customRender: 'action' }
} }
], ],
dataSource: [{ id: 1 }], dataSource: [],
selectedRowKeys: [] selectedRowKeys: [],
/* 分页参数 */
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
}
}
},
watch: {
displayDataSource: {
handler (value) {
this.dataSource = []
if (value) {
this.dataSource = value
}
},
deep: true,
immediate: true
} }
}, },
methods: { methods: {
@@ -110,9 +157,9 @@ export default {
const data = JSON.parse(JSON.stringify(this.dataSource)) const data = JSON.parse(JSON.stringify(this.dataSource))
this.dataSource = data.map(item => { this.dataSource = data.map(item => {
// 选中且没有填写不涉及理由 // 选中且没有填写不涉及理由
if (this.selectedRowKeys.includes(item.id) && !item.uninvolved) { if (this.selectedRowKeys.includes(item.id) && !item.notInvolved) {
item.contact = list.map(tt => tt.id).join(',') item.designEngineer = list.map(tt => tt.id).join(',')
item.contact_dictText = list.map(tt => tt.realname + '(' + tt.username + ')').join(',') item.designEngineer_dictText = list.map(tt => tt.realname + '(' + tt.username + ')').join(',')
} }
return item return item
}) })
@@ -130,6 +177,33 @@ export default {
}, },
onSelectChange (selectedRowKeys) { onSelectChange (selectedRowKeys) {
this.selectedRowKeys = selectedRowKeys this.selectedRowKeys = selectedRowKeys
},
showContent (text) {
this.$refs.clauseDetail.open(text)
},
handleUserChange (list, index) {
this.dataSource[index].designEngineer = list.map(item => item.id).join(',')
this.dataSource[index].designEngineer_dictText = list.map(item => item.realname + '(' + item.username + ')').join(',')
},
/**
* 提交数据
* @param needValidator
* @param needRemind
*/
submit (needValidator, needRemind) {
if (!needValidator) {
return this.dataSource
}
if (this.dataSource.length === 0 || this.dataSource.some(tt => !tt.designEngineer && !tt.notInvolved)) {
if (needRemind) {
this.$message.warning(this.$t('workCenter.standardCompliance.pleaseSelectDesignEngineer'))
}
return false
}
return this.dataSource
},
handleTableChange (pagination) {
this.ipagination = pagination
} }
} }
} }
@@ -145,4 +219,4 @@ export default {
/deep/ .user-input { /deep/ .user-input {
width: 100% !important width: 100% !important
} }
</style> </style>
@@ -0,0 +1,333 @@
<template>
<a-drawer
:title="$t('standardSelect.standardSelection')"
:maskClosable="false"
:width="1000"
placement="right"
:closable="true"
@close="handleCancel"
:visible="visible"
class="custom-drawer-style">
<div class="custom-drawer-style-scroll">
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :sm="8">
<a-form-item :label="$t('standardSelect.source')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag style="width: 100%" v-model="queryParam.source"
:disabled="disabledSourceSearch"
:placeholder="$t('pleaseSelect')+$t('standardSelect.source')"
:triggerChange="false"
:options="sourceOptions"
@change="handleTypeChange" />
</a-form-item>
</a-col>
<a-col :sm="8">
<a-form-item :label="$t('standardSelect.standardNumOrName')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('standardSelect.standardNumOrName')"
v-model="queryParam.standardNumberOrName"></a-input>
</a-form-item>
</a-col>
<div style="float: right;overflow: hidden;margin-right: 41px;margin-bottom: 20px"
class="table-page-search-submitButtons">
<a-button style="margin-left: 8px" type="primary" icon="search" @click="searchQuery">{{ $t('query') }}</a-button>
<a-button style="margin-left: 8px" type="primary" ghost icon="reload" @click="searchReset">{{ $t('reset') }}</a-button>
</div>
</a-row>
</a-form>
</div>
<a-table
:columns="columns"
rowKey="standardNumber"
:scroll="{x: 900}"
:data-source="dataList"
:pagination="ipagination"
:row-selection="{ type: type, selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
:loading="loading"
@change="handleTableChange">
<template slot="text" slot-scope="text">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<div class="table-text">{{ text || text === 0 ? text : global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 企标编号/企标名称 -->
<template v-slot:toDetail="text, record">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<a v-if="text" class="link-a" @click="handleGoDetail(record)">{{ text }}</a>
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 标准状态 -->
<template slot="standardState" slot-scope="text, record">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{
record.source === '3' ? (record.esStandardState_dictText || global.emptyLine) : (record.standardState_dictText || global.emptyLine)
}}
</template>
<div class="table-text">{{
record.source === '3' ? (record.esStandardState_dictText || global.emptyLine) : (record.standardState_dictText || global.emptyLine)
}}
</div>
</a-tooltip>
</template>
</a-table>
</div>
<div class="custom-drawer-style-bottom-btn">
<a-button @click="handleCancel">{{ $t('cancel') }}</a-button>
<a-button @click="handleSubmit" type="primary" :loading="confirmLoading">{{ $t('submit') }}</a-button>
</div>
</a-drawer>
</template>
<script>
import JDictSelectTag from '../../../../components/dict/JDictSelectTag'
import { StandardSource } from '../../../../enums/commonEnums'
import { ajaxGetDictItems } from '../../../../api/api'
import { getStandardListCarryDecompositionSingleSource } from '../../../../api/workCenter'
export default {
name: 'SelectStandardDrawer',
components: { JDictSelectTag },
props: {
source: {
type: [String, Number],
default: '1'
},
// 查询条件可以选择的类型
canSelectedSource: {
type: [String, Array],
required: false,
default: () => {
return [StandardSource.DOMESTIC.value, StandardSource.OVERSEAS.value, StandardSource.ENTERPRISE.value]
}
},
value: {
type: String,
default: ''
},
// 搜索条件中的来源是否不可更改
disabledSourceSearch: {
type: Boolean,
default: false
},
type: {
type: String,
required: false,
default: 'checkbox'
},
// 列表数据不包含的标准
excludeStandardNumbers: {
type: String,
required: false,
default: null
},
// 过滤条件
filters: {
type: Object,
required: false,
default: () => {
return {}
}
}
},
data () {
return {
visible: false,
confirmLoading: false,
labelCol: {
sm: 8
},
wrapperCol: {
sm: 14
},
selectedRowKeys: [],
selectedRowList: [],
loading: false,
queryParam: {},
/* 分页参数 */
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
},
columns: [
{
title: this.$t('standardNumber'),
dataIndex: 'standardNumber',
ellipsis: true,
align: 'center',
width: 150,
scopedSlots: { customRender: 'toDetail' }
},
{
title: this.$t('standardName'),
dataIndex: 'standardName',
ellipsis: true,
align: 'center',
width: 150,
scopedSlots: { customRender: 'toDetail' }
},
// 发布日期
{
title: this.$t('standardSelect.releaseDate'),
dataIndex: 'releaseDate',
align: 'center',
width: 120,
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('standardSelect.textState'),
dataIndex: 'standardState_dictText',
align: 'center',
width: 150,
scopedSlots: { customRender: 'standardState' }
}
],
dataList: [],
sourceOptions: []
}
},
methods: {
open () {
this.visible = true
this.queryParam = {}
this.initDict()
this.$nextTick(() => {
this.source ? this.queryParam.source = this.source : this.queryParam = {}
this.replacePage()
})
},
initDict () {
ajaxGetDictItems('standard_source').then(res => {
if (res.success) {
const canSelectedArr = typeof this.canSelectedSource === 'string' ? this.canSelectedSource.split(',') : this.canSelectedSource
this.sourceOptions = res.result.filter(tt => canSelectedArr.includes(tt.value))
}
})
},
// 获取表格数据
replacePage (arg) {
if (arg === 1) {
this.ipagination.current = 1
}
const query = {
...this.queryParam,
...this.filters,
pageNo: this.ipagination.current,
pageSize: this.ipagination.pageSize,
excludeStandardNumbers: this.excludeStandardNumbers
}
// 清空在可选范围内进行查询
if (!query.source && this.canSelectedSource.length < 3) {
query.source = this.canSelectedSource.join(',')
}
// this.selectedRowKeys = []
this.loading = true
getStandardListCarryDecompositionSingleSource(query).then((res) => {
if (res.success) {
this.dataList = res.result.records
this.ipagination.total = res.result.total
this.selectedRowKeys = this.value ? this.value.split(',') : []
} else {
this.dataList = []
}
}).finally(() => {
this.loading = false
})
},
searchQuery () {
this.replacePage(1)
},
searchReset () {
// 如果禁用来源,就不重置来源
if (this.disabledSourceSearch) {
this.queryParam = { source: this.source }
} else {
this.queryParam = {}
}
this.replacePage(1)
},
// 表格选择改变
onSelectChange (value, row) {
this.selectedRowKeys = value
this.selectedRowList = row
},
handleTableChange (pagination) {
// 分页、排序、筛选变化时触发
this.ipagination = pagination
this.replacePage()
},
handleCancel () {
this.close()
},
handleSubmit () {
const serialNumber = []
const serialNameArr = []
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
this.selectedRowList.forEach(res => {
serialNumber.push(res.standardNumber)
serialNameArr.push(res.standardName)
})
this.$emit('change', serialNumber.join(','))
this.$emit('nameChange', serialNameArr.join(','))
this.$emit('listChange', this.selectedRowList)
this.close()
} else {
this.$message.warning(this.$t('selectLeastOne'))
}
},
close () {
this.visible = false
this.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
}
},
handleTypeChange () {
this.$forceUpdate()
},
// 点击跳转标准详情
handleGoDetail (record) {
let path = ''
// 需要先判断是哪种标准
if (record.source === '1') {
path = '/standardRegulationLibrary/DomesticStandardDetail'
} else if (record.source === '2') {
path = '/standardRegulationLibrary/OverseasStandardDetail'
} else if (record.source === '3') {
path = '/enterpriseStandardLibrary/enterpriseStandardDetail'
}
this.$openPageNewSheet({
path: path,
query: {
id: record.id
}
})
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
</style>
@@ -17,7 +17,7 @@
<a-input :placeholder="$t('pleaseEnter') + $t('workCenter.projectComplianceEvaluationProcess.noCauseInvolved')" <a-input :placeholder="$t('pleaseEnter') + $t('workCenter.projectComplianceEvaluationProcess.noCauseInvolved')"
type="textarea" type="textarea"
:maxLength="500" :maxLength="500"
v-decorator="['uninvolved', validatorRules.uninvolved]" /> v-decorator="['notInvolved', validatorRules.notInvolved]" />
</a-form-item> </a-form-item>
</a-form> </a-form>
@@ -49,7 +49,7 @@ export default {
}, },
validatorRules: { validatorRules: {
// 不涉及原因 // 不涉及原因
uninvolved: { notInvolved: {
rules: [{ rules: [{
required: true, required: true,
message: this.$t('pleaseEnter') + this.$t('workCenter.projectComplianceEvaluationProcess.noCauseInvolved') message: this.$t('pleaseEnter') + this.$t('workCenter.projectComplianceEvaluationProcess.noCauseInvolved')
@@ -63,6 +63,7 @@ export default {
}, },
methods: { methods: {
open (record, index) { open (record, index) {
this.validatorRules.notInvolved.rules[0].required = true
this.visible = true this.visible = true
this.model = Object.assign({}, record) this.model = Object.assign({}, record)
this.dataIndex = index this.dataIndex = index
@@ -71,9 +72,9 @@ export default {
}) })
}, },
handleOk (flag) { handleOk (flag) {
this.validatorRules.uninvolved.rules[0].required = flag this.validatorRules.notInvolved.rules[0].required = flag
if (!flag) { if (!flag) {
this.form.setFieldsValue({ uninvolved: null }) this.form.setFieldsValue({ notInvolved: null })
} }
this.form.validateFields((errors, values) => { this.form.validateFields((errors, values) => {
if (!errors) { if (!errors) {
@@ -97,4 +98,4 @@ export default {
<style scoped lang="less"> <style scoped lang="less">
</style> </style>