修改任务确认流程

This commit is contained in:
qq787203167
2022-05-23 11:19:00 +08:00
parent e22fae8f07
commit e631b10af4
9 changed files with 155 additions and 299 deletions
+7 -2
View File
@@ -761,7 +761,7 @@ module.exports = {
opinion: 'opinion',
operationNode: 'operation node',
taskDataConfirmation: 'Please select the data whose list confirmation status is accepted and task confirmation status is not initiated or rejected, and the regulatory engineer and certification engineer are not empty',
selectIssuer: 'Select issuer',
selectInquiry: 'Select Inquiry',
sendBack: 'send back',
taskConfirmationProcess: 'Task confirmation process',
notFinished: 'not finished',
@@ -869,5 +869,10 @@ module.exports = {
modelName: 'Model Name',
modelYear: 'Model year',
NoteConfirmTheChange: 'Note: after the change, the list will be in the status of not being reviewed, which will start from the internal review, and the historical data will be discarded Confirm the change',
onlyDataChanged: 'Only data whose task confirmation status is accepted can be changed'
onlyDataChanged: 'Only data whose task confirmation status is accepted can be changed',
inquiry:'Inquiry',
ConfirmationDeadline:'Confirmation Deadline',
regulatoryCertificationTaskConfirmation:'Regulatory certification task confirmation',
confirmationEngineeringInterfacePerson:'Confirmation of engineering interface person',
engineerReply:'Engineer reply',
}
+7 -2
View File
@@ -765,12 +765,12 @@ module.exports = {
circulationInformation: '流转信息',
circulationHistory: '流转历史',
agree: '同意',
disagree: '不同意',
disagree: '拒绝',
feedbackMessage: '反馈意见',
result: '结果',
opinion: '意见',
operationNode: '操作节点',
selectIssuer: '选择下发',
selectInquiry: '选择询问',
sendBack: '退回',
taskConfirmationProcess: '任务确认流程',
notFinished: '未完成',
@@ -875,4 +875,9 @@ module.exports = {
modelYear:'年款',
NoteConfirmTheChange:'注意变更后该条清单变为未审查状态将从内部审查工作开始从头进行历史数据都将丢弃是否确认变更',
onlyDataChanged:'只能变更任务确认状态为接受的数据',
inquiry:'询问',
ConfirmationDeadline:'确认截止时间',
regulatoryCertificationTaskConfirmation:'法规认证任务确认',
confirmationEngineeringInterfacePerson:'工程接口人确认',
engineerReply:'工程师回复',
}
@@ -17,46 +17,8 @@
<span slot="approvalResult" slot-scope="text,result">
{{approvalResult[text]}}
</span>
<span slot="approvalFile" slot-scope="text,result">
<a v-if="text" @click="clickButtonToUpload(text)">
{{$t('viewFile')}}
</a>
<span v-else>--</span>
</span>
</a-table>
</div>
<a-modal
:title="$t('deliverableTemplate')"
:width="600"
:visible="visibleFile"
:maskClosable="false"
@cancel="visibleFile = false"
>
<template slot="footer">
<a-button key="back" @click="visibleFile = false">
{{$t('cancel')}}
</a-button>
</template>
<a-table
class="table"
:columns="columnsFile"
:pagination="false"
:scroll="{x:500,y: 400}"
:data-source="dataSourceFile"
:loading="loading"
>
<span slot="fileOperation" slot-scope="record">
<a class="text" @click="pdfPreview(record)"
:disabled="record.fileSuffix == '.pdf' || record.fileSuffix == '.docx'
|| record.fileSuffix == '.xlsx' || record.fileSuffix == '.xls' ? false : true">
{{$t('See')}}
</a>
<a class="text" @click="download(record)">
{{ $t('download') }}
</a>
</span>
</a-table>
</a-modal>
</div>
</template>
@@ -78,60 +40,41 @@
3: this.$t('issue')
},
columns: [
{
title: this.$t('operationNode'),
dataIndex: 'name',
align: 'center',
width:'20%',
},
{
title: this.$t('Operator'),
dataIndex: 'assignee',
align: 'center',
width:'20%',
},
{
title: this.$t('result'),
dataIndex: 'approvalResult',
align: 'center',
width:'20%',
scopedSlots: { customRender: 'approvalResult' }
},
{
title: this.$t('opinion'),
dataIndex: 'approvalOpinion',
align: 'center'
},
{
title: this.$t('enclosure'),
dataIndex: 'approvalFile',
align: 'center',
scopedSlots: { customRender: 'approvalFile' }
},
{
title: this.$t('operationNode'),
dataIndex: 'name',
align: 'center'
},
{
title: this.$t('Operator'),
dataIndex: 'assignee',
align: 'center'
width:'20%',
},
{
title: this.$t('operationTime'),
dataIndex: 'createTime',
align: 'center',
width:'20%',
customRender: function(t, r, index) {
return moment(t).format('YYYY-MM-DD HH:mm:ss')
}
}
],
visibleFile: false,
downLoadFileUrl: window._CONFIG['domianPreviewURL'] + '/sys/common/download',
dataSourceFile: [],
columnsFile: [
{
title: this.$t('enclosure'),
dataIndex: 'fileName',
align: 'center',
width: 260,
ellipsis: true
},
{
title: this.$t('operation'),
align: 'center',
width: 130,
scopedSlots: { customRender: 'fileOperation' }
}
]
}
},
mounted() {
@@ -147,46 +90,6 @@
this.dataSource = res
})
},
clickButtonToUpload(item) {
this.loading = true
this.visibleFile = true
getAction('sys/common/getFileInfos', { id: item }).then((res) => {
if (res.success) {
this.dataSourceFile = res.result
this.dataSourceFile.forEach((val) => {
let fileName = val.fileName
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
val.fileSuffix = fileSuffix
})
this.loading = false
} else {
this.dataSourceFile = []
this.loading = false
}
})
},
pdfPreview(fileQuery) {
let fileName = fileQuery.fileName
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
if (fileSuffix == '.pdf') {
window.open('/pdf/web/viewer.html?file=' + encodeURIComponent('/jero-boot/sys/common/pdf/viewFile?id=' + fileQuery.id))
} else if (fileSuffix == '.docx') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
} else if (fileSuffix == '.xlsx' || fileSuffix == '.xls') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank')
} else {
downloadFile('/sys/common/downLoadFile', fileQuery.fileName, { id: fileQuery.id })
}
},
download(item) {
downloadFile('/sys/common/downLoadFile', item.fileName, { id: item.id })
}
}
}
</script>
@@ -2,18 +2,18 @@
<div class="box">
<div class="box-text">
<div class="header-text">
{{$t('circulationInformation')}}
{{title}}
</div>
</div>
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24" v-if="isFlag">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text" :title="$t('reviewResults')">{{$t('reviewResults')}}</span>
</div>
<a-form-model-item class="itemModel" prop="flag">
<!-- <div class="title-text">-->
<!-- <span class="Required">*</span>-->
<!-- <span class="title-text-text" :title="$t('reviewResults')">{{$t('reviewResults')}}</span>-->
<!-- </div>-->
<a-form-model-item style="margin-left: 36px" class="itemModel" prop="flag">
<a-radio-group style="margin-top: 2px" @change="flagChange" class="box-input" v-model="formInline.flag">
<a-radio value="0">
{{$t('agree')}}
@@ -22,7 +22,7 @@
{{$t('disagree')}}
</a-radio>
<a-radio value="3" v-if="issue">
{{$t('issue')}}
{{$t('inquiry')}}
</a-radio>
</a-radio-group>
</a-form-model-item>
@@ -34,12 +34,12 @@
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text" :title="$t('selectIssuer')">{{$t('selectIssuer')}}</span>
<span class="title-text-text" :title="$t('selectInquiry')">{{$t('selectInquiry')}}</span>
</div>
<a-form-model-item class="itemModel" prop="dreUserIdName">
<PersonnelSelection class="box-input"
:personneQuery="formInline"
:query="{db_field_name:'dreUserId',db_field_txt:$t('selectIssuer')}"
:query="{db_field_name:'dreUserId',db_field_txt:$t('selectInquiry')}"
:isInput="true"
@change="PersonnelSelectionChange"
v-model="formInline.dreUserIdName"/>
@@ -101,7 +101,11 @@
isApprovalOpinion: {
type: Boolean,
default: false
}
},
title:{
type: String,
default: ''
},
},
components: {
uploadFile,
@@ -10,11 +10,11 @@
<a-button class="header-btn prese" v-if="isPreservation" @click="preservation">{{$t('preservation')}}</a-button>
<!-- 下发-->
<a-button class="header-btn issue" v-if="isIssue" @click="issue" type="primary" ghost>{{$t('issue')}}</a-button>
<!-- 提交-->
<a-button class="header-btn submit" v-if="isSubmit" @click="submit" type="primary">{{$t('submit')}}</a-button>
<a-button class="header-btn termin" v-if="isSendBack" @click="sendBackCkick" type="danger" ghost>
{{$t('sendBack')}}
</a-button>
<!-- 提交-->
<a-button class="header-btn submit" v-if="isSubmit" @click="submit" type="primary">{{$t('submit')}}</a-button>
<a-button class="header-btn submit" v-if="isResubmit" @click="Resubmit" type="primary">{{$t('Resubmit')}}</a-button>
<a-button class="header-btn submit" v-if="isAdopt" @click="adopt" type="primary">{{$t('submit')}}</a-button>
</div>
@@ -2,7 +2,10 @@
<div class="box">
<div class="box-text">
<div class="header-text">
{{$t('standardContent')}}
{{title}}
</div>
<div v-if="isConfirmationDeadline" class="header-text" style="margin-right: 20px">
{{this.$t('ConfirmationDeadline')}} : {{this.queryForm.taskAffirmDueDate}}
</div>
</div>
<div class="content-text">
@@ -54,7 +57,15 @@
standardContentQuery: {
type: Object,
default: {}
}
},
title:{
type:String,
default:'',
},
isConfirmationDeadline:{
type:Boolean,
default:false,
},
},
components: {
viewFileModel
@@ -9,33 +9,12 @@
:columns="columns"
>
<span slot="designDeliverableTemplateName" slot-scope="text,record">
<span>{{ record.designDeliverableType_dictText }}</span><br v-if="record.designDeliverableType_dictText">
<a v-if="record.designDeliverableTemplate && record.designDeliverableTemplate.split(',').length == 1"
@click="pdfPreviewClick(record.designDeliverableTemplateName,record.designDeliverableTemplate)">
{{ record.designDeliverableTemplateName }}
<a v-if="record.DeliverableTemplate && record.DeliverableTemplate.split(',').length == 1"
@click="pdfPreviewClick(record.DeliverableTemplateName,record.DeliverableTemplate)">
{{ record.DeliverableTemplateName }}
</a>
<a v-else-if="record.designDeliverableTemplate && record.designDeliverableTemplate.split(',').length > 1"
@click="clickButtonToUpload(record.designDeliverableTemplate)">{{ $t('viewFile') }}</a>
<span v-else>--</span>
</span>
<span slot="prehomoDeliverableTemplateName" slot-scope="text,record">
<span>{{ record.prehomoDeliverableType_dictText }}</span><br v-if="record.prehomoDeliverableType_dictText">
<a v-if="record.prehomoDeliverableTemplate && record.prehomoDeliverableTemplate.split(',').length == 1"
@click="pdfPreviewClick(record.prehomoDeliverableTemplateName,record.prehomoDeliverableTemplate)">
{{ record.prehomoDeliverableTemplateName }}
</a>
<a v-else-if="record.prehomoDeliverableTemplate && record.prehomoDeliverableTemplate.split(',').length > 1"
@click="clickButtonToUpload(record.prehomoDeliverableTemplate)">{{ $t('viewFile') }}</a>
<span v-else>--</span>
</span>
<span slot="verifyDeliverableTemplateName" slot-scope="text,record">
<span>{{ record.verifyDeliverableType_dictText }}</span><br v-if="record.verifyDeliverableType_dictText">
<a v-if="record.verifyDeliverableTemplate && record.verifyDeliverableTemplate.split(',').length == 1"
@click="pdfPreviewClick(record.verifyDeliverableTemplateName,record.verifyDeliverableTemplate)">
{{ record.verifyDeliverableTemplateName }}
</a>
<a v-else-if="record.verifyDeliverableTemplate && record.verifyDeliverableTemplate.split(',').length > 1"
@click="clickButtonToUpload(record.verifyDeliverableTemplate)">{{ $t('viewFile') }}</a>
<a v-else-if="record.DeliverableTemplate && record.DeliverableTemplate.split(',').length > 1"
@click="clickButtonToUpload(record.DeliverableTemplate)">{{ $t('viewFile') }}</a>
<span v-else>--</span>
</span>
</a-table>
@@ -55,7 +34,7 @@
class="table"
:columns="columnsFile"
:pagination="false"
:scroll="{x:500,y: 400}"
:scroll="{x:true,y: 400}"
:data-source="dataSourceFile"
:loading="loading"
>
@@ -92,82 +71,47 @@
downLoadFileUrl: window._CONFIG['domianPreviewURL'] + '/sys/common/download',
columns: [
{
title: this.$t('confirmationOfDesignConformity'),
children: [
{
title: this.$t('Deliverables'),
dataIndex: 'designDeliverableTemplateName',
align: 'center',
scopedSlots: { customRender: 'designDeliverableTemplateName' }
},
{
title: this.$t('Sponsor'),
dataIndex: 'designInitiatorName',
align: 'center'
},
{
title: this.$t('personLiable'),
dataIndex: 'designDutyName',
align: 'center'
},
{
title: this.$t('TaskCutOffTime'),
dataIndex: 'designDueDate',
align: 'center'
}
]
title: this.$t('ProcessType'),
dataIndex: 'ProcessType',
align: 'center',
width:200,
},
{
title: this.$t('PrehomoConfirmation'),
children: [
{
title: this.$t('Deliverables'),
dataIndex: 'prehomoDeliverableTemplateName',
align: 'center',
scopedSlots: { customRender: 'prehomoDeliverableTemplateName' }
},
{
title: this.$t('Sponsor'),
dataIndex: 'prehomoInitiatorName',
align: 'center'
},
{
title: this.$t('personLiable'),
dataIndex: 'prehomoDutyName',
align: 'center'
},
{
title: this.$t('TaskCutOffTime'),
dataIndex: 'prehomoDueDate',
align: 'center'
}
]
title: this.$t('Sponsor'),
dataIndex: 'InitiatorName',
align: 'center',
width:160,
},
{
title: this.$t('verificationAndConformityconfirmation'),
children: [
{
title: this.$t('Deliverables'),
dataIndex: 'verifyDeliverableTemplateName',
align: 'center',
scopedSlots: { customRender: 'verifyDeliverableTemplateName' }
},
{
title: this.$t('Sponsor'),
dataIndex: 'verifyInitiatorName',
align: 'center'
},
{
title: this.$t('personLiable'),
dataIndex: 'verifyDutyName',
align: 'center'
},
{
title: this.$t('TaskCutOffTime'),
dataIndex: 'verifyDueDate',
align: 'center'
}
]
title: this.$t('personLiable'),
dataIndex: 'DutyName',
align: 'center',
width:160,
},
{
title: this.$t('TaskCutOffTime'),
dataIndex: 'DueDate',
align: 'center',
width:160,
},
{
title: this.$t('typeOfDeliverables'),
dataIndex: 'DeliverableType',
align: 'center',
width:160,
},
{
title: this.$t('deliverableTemplate'),
dataIndex: 'DeliverableTemplateName',
align: 'center',
width:260,
scopedSlots: { customRender: 'designDeliverableTemplateName' }
},
{
title: this.$t('descriptionDeliverables'),
dataIndex: 'remark',
align: 'center',
width:300,
}
],
loading: false,
@@ -192,7 +136,36 @@
},
mounted() {
this.dataSource = []
this.dataSource.push(this.standardContentListQuery)
this.dataSource.push({
ProcessType: this.$t('designComplianceReview'),
InitiatorName: this.standardContentListQuery.designInitiatorName,
DutyName: this.standardContentListQuery.designDutyName,
DueDate: this.standardContentListQuery.designDueDate,
DeliverableType: this.standardContentListQuery.designDeliverableType_dictText,
DeliverableTemplate: this.standardContentListQuery.designDeliverableTemplate,
DeliverableTemplateName: this.standardContentListQuery.designDeliverableTemplateName,
remark: this.standardContentListQuery.designRemark
})
this.dataSource.push({
ProcessType: this.$t('preHomeConfirmation'),
InitiatorName: this.standardContentListQuery.prehomoInitiatorName,
DutyName: this.standardContentListQuery.prehomoDutyName,
DueDate: this.standardContentListQuery.prehomoDueDate,
DeliverableType: this.standardContentListQuery.prehomoDeliverableType_dictText,
DeliverableTemplate: this.standardContentListQuery.prehomoDeliverableTemplate,
DeliverableTemplateName: this.standardContentListQuery.prehomoDeliverableTemplateName,
remark: this.standardContentListQuery.prehomoRemark
})
this.dataSource.push({
ProcessType: this.$t('verificationComplianceReview'),
InitiatorName: this.standardContentListQuery.verifyInitiatorName,
DutyName: this.standardContentListQuery.verifyDutyName,
DueDate: this.standardContentListQuery.verifyDueDate,
DeliverableType: this.standardContentListQuery.verifyDeliverableType_dictText,
DeliverableTemplate: this.standardContentListQuery.verifyDeliverableTemplate,
DeliverableTemplateName: this.standardContentListQuery.verifyDeliverableTemplateName,
remark: this.standardContentListQuery.verifyRemark
})
},
methods: {
pdfPreview(fileQuery) {
@@ -1,7 +1,7 @@
<template>
<div id="examineBox">
<headerProcess
:title="$t('theRequirementst')"
:title="$t('regulatoryCertificationTaskConfirmation')"
/>
<div class="detail-box">
<div class="detail-content">
@@ -9,12 +9,15 @@
v-if="isDisplay"
:projectInformationList="projectInformationList"
:url="url"
:queryProject="queryProject"
:projectInformationId="this.queryBy.projectLibraryId"
/>
<standardContent
v-if="isDisplay"
:title="$t('TaskRequirements')"
:standardContentList="standardContentList"
:url="url"
:isConfirmationDeadline="true"
:standardContentQuery="queryProject"
/>
<standardContentListTable
@@ -25,15 +28,14 @@
<examineInformation
:isFlag="isFlag"
v-if="isDisplay"
isViewUploadedFiles
isApprovalOpinion
:title="titleName"
ref="examineInformationRef"
:url="url"/>
<!-- @terminationProcess="terminationProcess"-->
<footerProcess
is-termination-process
is-submit
:isSendBack="isSendBack"
@terminationProcess="terminationProcess"
@submit="submit"
@sendBack="sendBack"
/>
@@ -71,49 +73,14 @@
return {
projectInformationList: [
{
title: this.$t('entryName'),
title: this.$t('RelatedItems'),
value: 'projectName'
},
{
title: this.$t('targetMarket'),
value: 'targetMarket_dictText'
},
{
title: this.$t('projectStatus'),
value: 'projectStatus_dictText'
},
{
title: this.$t('StudioEngineer'),
value: 'studioEngineerName'
},
{
title: this.$t('certifiedEngineer'),
value: 'certificationEngineerName'
},
{},
{
title: this.$t('DigitalPlatform'),
value: 'digitalPlatform_dictText'
},
{
title: this.$t('ModelPlatform'),
value: 'vehiclePlatform_dictText'
},
{},
{
title: this.$t('IPDInformation'),
value: 'ipdInfo'
},
{
title: this.$t('certificationProgram'),
value: 'attestationPlan'
},
{
title: this.$t('dehicleDevelopmentPlan'),
value: 'vehicleDevelopmentPlan'
}
],
standardContentList: [
{
title: this.$t('standard'),
value: 'serialNumber'
@@ -131,30 +98,11 @@
value: 'dutyTerritory_dictText'
},
{
title: this.$t('implementationCategory'),
value: 'implementType_dictText'
},
{
title: this.$t('correspondingStandard'),
value: 'correspondingStandard'
},
{
title: this.$t('engineeringInterfacePerson'),
value: 'engineeringInterfacePersonName'
},
{
title: this.$t('regulatoryEngineer'),
value: 'regulationOwnerName'
},
{
title: this.$t('certifiedEngineer'),
value: 'homologationEngineerName'
},
{
title: this.$t('remarks'),
value: 'remark'
title: this.$t('applicableSupplement'),
value: 'applicableSupplement'
}
],
standardContentList: [],
url: {
urlFrom: 'project/projectLibraryBase/queryById',
queryProjectLawsInventoryInfoById: 'project/projectLawsInventoryEO/queryProjectLawsInventoryInfoById',
@@ -164,19 +112,25 @@
isDisplay: false,
queryProject: {},
loading: false,
titleName: '',
textLoading: this.$t('dataLoading')
}
},
mounted() {
let _this = this
this.isDisplay = false
if (this.$route.query.taskDefinitionKey == 'dreqr') {
this.titleName = this.$t('engineerReply')
} else {
this.titleName = this.$t('confirmationEngineeringInterfacePerson')
}
this.queryTaskDetailByTask(function() {
_this.queryProjectLawsInventoryInfo()
})
},
computed: {
isSendBack() {
if (this.$route.query.taskDefinitionKey == 'zrrjsrw') {
if (this.$route.query.taskDefinitionKey == 'zrrjsrw' || this.$route.query.taskDefinitionKey == 'zrrqr') {
return false
}
return true
@@ -190,11 +144,11 @@
},
methods: {
...mapGetters(['userInfo']),
terminationProcess(handlingTime) {
this.textLoading = this.$t('terminationProcessing')
this.loading = true
this.completeTask({ flag: 2 }, handlingTime)
},
// terminationProcess(handlingTime) {
// this.textLoading = this.$t('terminationProcessing')
// this.loading = true
// this.completeTask({ flag: 2 }, handlingTime)
// },
submit(handlingTime) {
this.$refs.examineInformationRef.submit((res) => {
this.textLoading = this.$t('Submitting')
@@ -291,7 +245,7 @@
postAction('/workFlow/completeTask', query).then((res) => {
if (res.success) {
this.visible = false
this.$message.success(this.$t('OperationSuccessful'))
// this.$message.success(this.$t('OperationSuccessful'))
this.$router.push({
path: '/ProcessCenter'
})
@@ -14,6 +14,7 @@
/>
<standardContent
v-if="isDisplay"
:title="$t('TaskRequirements')"
:standardContentList="standardContentList"
:url="url"
:standardContentQuery="queryProject"