Merge remote-tracking branch 'origin/fix_bug_first_stage' into fix_bug_first_stage

This commit is contained in:
zer0Black
2022-06-30 14:58:49 +08:00
7 changed files with 162 additions and 56 deletions
+5 -1
View File
@@ -671,6 +671,10 @@ module.exports = {
listConfirmation: 'List Confirmation', listConfirmation: 'List Confirmation',
ListConfirmationDeadline: 'List confirmation deadline', ListConfirmationDeadline: 'List confirmation deadline',
dataConfirmation: 'Please select the data whose list confirmation status is not initiated or rejected, and the regulatory engineer and certification engineer are not empty', dataConfirmation: 'Please select the data whose list confirmation status is not initiated or rejected, and the regulatory engineer and certification engineer are not empty',
pleaseSelectinitiatedOrRejected: 'Please select the data whose list confirmation status is not initiated or rejected',
TheEngineerAndCertification: 'The regulatory engineer and Certification Engineer of cannot be blank',
PleaseTaskConfirmationRejected: 'Please select the data whose list confirmation status is accepted and task confirmation status is not initiated or rejected',
theProjectContactEmpty: 'The project contact person of cannot be empty',
pleaseSelectPersonFirst: 'Please select a person first', pleaseSelectPersonFirst: 'Please select a person first',
onlyOnePersonCanBeSelected: 'Only one person can be selected', onlyOnePersonCanBeSelected: 'Only one person can be selected',
overrule: 'Overrule', overrule: 'Overrule',
@@ -939,6 +943,6 @@ module.exports = {
question: 'Question', question: 'Question',
ConfirmQuestion: 'Confirm Question', ConfirmQuestion: 'Confirm Question',
disableInput: 'Disable input', disableInput: 'Disable input',
taskConfirmationDeadline:'Task Confirmation Deadline', taskConfirmationDeadline: 'Task Confirmation Deadline',
OnlyOrTaskconfirmationOut: 'Only when the list confirmation status or task confirmation status is to be confirmed can the reminder be carried out' OnlyOrTaskconfirmationOut: 'Only when the list confirmation status or task confirmation status is to be confirmed can the reminder be carried out'
} }
+4
View File
@@ -680,7 +680,11 @@ module.exports = {
listConfirmation: '清单确认', listConfirmation: '清单确认',
ListConfirmationDeadline: '清单确认截止时间', ListConfirmationDeadline: '清单确认截止时间',
dataConfirmation: '请选择清单确认状态为未发起或拒绝的数据,以及法规工程师认证工程师不为空', dataConfirmation: '请选择清单确认状态为未发起或拒绝的数据,以及法规工程师认证工程师不为空',
pleaseSelectinitiatedOrRejected:'请选择清单确认状态为未发起或拒绝的数据',
TheEngineerAndCertification:'的法规工程师认证工程师不能为空',
taskDataConfirmation: '请选择清单确认状态为接受及任务确认状态为未发起或拒绝的数据,以及工程接口人不为空', taskDataConfirmation: '请选择清单确认状态为接受及任务确认状态为未发起或拒绝的数据,以及工程接口人不为空',
theProjectContactEmpty:'的工程接口人不能为空',
PleaseTaskConfirmationRejected:'请选择清单确认状态为接受及任务确认状态为未发起或拒绝的数据',
pleaseSelectPersonFirst: '请先选择人员', pleaseSelectPersonFirst: '请先选择人员',
onlyOnePersonCanBeSelected: '只能选择一个人员', onlyOnePersonCanBeSelected: '只能选择一个人员',
overrule: '驳回', overrule: '驳回',
@@ -320,8 +320,7 @@
align: 'center', align: 'center',
dataIndex: 'subtitle', dataIndex: 'subtitle',
width: 180, width: 180,
fixed: 'left', ellipsis: true
scopedSlots: { customRender: 'titleName' }
}, },
{ {
title: this.$t('zoneOfApplication'), title: this.$t('zoneOfApplication'),
@@ -27,7 +27,7 @@
</div> </div>
<div style="padding: 67px 0 0 0;background: #ffffff;height:100%"> <div style="padding: 67px 0 0 0;background: #ffffff;height:100%">
<div class="detail-content" style="height: 100%"> <div class="detail-content" style="height: 100%">
<div class="Virtual-detail-left"> <div v-if="isDisplay" class="Virtual-detail-left">
<div class="Virtual-detail-left-text" :title="$t('projectDetails')" <div class="Virtual-detail-left-text" :title="$t('projectDetails')"
v-has="'projectLawsInventory:projectDetails'" v-has="'projectLawsInventory:projectDetails'"
v-if="isTrue" v-if="isTrue"
@@ -37,28 +37,58 @@
</div> </div>
<div class="Virtual-detail-left-text" v-has="'projectLawsInventory:list'" :title="$t('listOfRegulations')" <div class="Virtual-detail-left-text" v-has="'projectLawsInventory:list'" :title="$t('listOfRegulations')"
@click="textClick(1,$t('listOfRegulations'))"> @click="textClick(1,$t('listOfRegulations'))">
<a-icon type="container"/> <a-icon type="control"/>
{{$t('listOfRegulations')}} {{$t('listOfRegulations')}}
</div> </div>
<div class="Virtual-detail-left-text" :title="$t('taskList')" <div class="Virtual-detail-left-text" :title="$t('taskList')"
v-has="'projectLawsInventory:taskList'" v-has="'projectLawsInventory:taskList'"
@click="textClick(2,$t('taskList'))"> @click="textClick(2,$t('taskList'))">
<a-icon type="container"/> <a-icon type="safety"/>
{{$t('taskList')}} {{$t('taskList')}}
</div> </div>
<div class="Virtual-detail-left-text" v-has="'ncrTrack:queryPageInfo'" :title="$t('nonConformance')" <div class="Virtual-detail-left-text" v-has="'ncrTrack:queryPageInfo'" :title="$t('nonConformance')"
@click="textClick(3,$t('nonConformance'))"> @click="textClick(3,$t('nonConformance'))">
<a-icon type="container"/> <a-icon type="safety-certificate"/>
{{$t('nonConformance')}} {{$t('nonConformance')}}
</div> </div>
<div class="Virtual-detail-left-text" v-has="'projectLawsInventory:TaskParameterCollection'" <div class="Virtual-detail-left-text" v-has="'projectLawsInventory:TaskParameterCollection'"
:title="$t('TaskParameterCollection')" :title="$t('TaskParameterCollection')"
@click="textClick(4,$t('TaskParameterCollection'))"> @click="textClick(4,$t('TaskParameterCollection'))">
<a-icon type="container"/> <a-icon type="profile"/>
{{$t('TaskParameterCollection')}} {{$t('TaskParameterCollection')}}
</div> </div>
<a-icon @click="textIconClick" type="menu-fold" class="text-icon"/>
</div> </div>
<div class="Virtual-detail-right"> <div v-if="!isDisplay" class="Virtual-detail-left-One">
<div class="Virtual-detail-left-text"
:title="$t('projectDetails')"
v-has="'projectLawsInventory:projectDetails'"
v-if="isTrue"
@click="textClick(0,$t('projectDetails'))">
<a-icon type="container"/>
</div>
<div class="Virtual-detail-left-text" v-has="'projectLawsInventory:list'" :title="$t('listOfRegulations')"
@click="textClick(1,$t('listOfRegulations'))">
<a-icon type="control"/>
</div>
<div class="Virtual-detail-left-text" :title="$t('taskList')"
v-has="'projectLawsInventory:taskList'"
@click="textClick(2,$t('taskList'))">
<a-icon type="safety"/>
</div>
<div class="Virtual-detail-left-text" v-has="'ncrTrack:queryPageInfo'" :title="$t('nonConformance')"
@click="textClick(3,$t('nonConformance'))">
<a-icon type="safety-certificate"/>
</div>
<div class="Virtual-detail-left-text" v-has="'projectLawsInventory:TaskParameterCollection'"
:title="$t('TaskParameterCollection')"
@click="textClick(4,$t('TaskParameterCollection'))">
<a-icon type="profile"/>
</div>
<a-icon @click="textIconClick" type="menu-unfold" class="text-icon-one"/>
</div>
<div class="Virtual-detail-right"
:style="{'width':isDisplay?'calc(100% - 240px)':'calc(100% - 66px)'}">
<ProjectDetailsName @TaskListChange="TaskListChange" v-if="textTitle === $t('projectDetails')"/> <ProjectDetailsName @TaskListChange="TaskListChange" v-if="textTitle === $t('projectDetails')"/>
<listOfRegulations v-else-if="textTitle === $t('listOfRegulations')"/> <listOfRegulations v-else-if="textTitle === $t('listOfRegulations')"/>
<TaskList :isDisplayNum="isDisplayNum" :areaOfResponsibility="areaOfResponsibility" <TaskList :isDisplayNum="isDisplayNum" :areaOfResponsibility="areaOfResponsibility"
@@ -106,6 +136,8 @@
textTitle: '', textTitle: '',
isTrue: true, isTrue: true,
loading: false, loading: false,
isDisplay: true,
url: { url: {
logList: '/project/projectLawsInventoryLogEO/page', logList: '/project/projectLawsInventoryLogEO/page',
historicalVersionUrl: '', historicalVersionUrl: '',
@@ -151,6 +183,9 @@
} }
}, },
methods: { methods: {
textIconClick() {
this.isDisplay = !this.isDisplay
},
...mapGetters(['userInfo']), ...mapGetters(['userInfo']),
textColor(name) { textColor(name) {
let textColor = document.getElementsByClassName('Virtual-detail-left-text-color') let textColor = document.getElementsByClassName('Virtual-detail-left-text-color')
@@ -312,11 +347,13 @@
.Virtual-detail-left { .Virtual-detail-left {
width: 240px; width: 240px;
flex: 0 0 240px;
padding: 16px 24px; padding: 16px 24px;
box-sizing: border-box; box-sizing: border-box;
font-size: 16px; font-size: 16px;
line-height: 3; line-height: 3;
float: left; float: left;
transition: all 0.2s;
.Virtual-detail-left-text { .Virtual-detail-left-text {
padding: 2px 12px; padding: 2px 12px;
@@ -327,12 +364,30 @@
} }
} }
.Virtual-detail-left-One {
width: 66px;
flex: 0 0 66px;
display: inline-block;
padding: 16px 16px;
box-sizing: border-box;
font-size: 18px;
right: 0;
transition: all 0.2s;
.Virtual-detail-left-text {
padding: 2px 8px;
cursor: pointer;
margin-bottom: 18px;
color: rgb(0, 0, 0);
}
}
.Virtual-detail-right { .Virtual-detail-right {
border-left: 2px #eff1f3 solid; border-left: 2px #eff1f3 solid;
width: calc(100% - 240px);
height: 100%; height: 100%;
float: left; float: right;
overflow: auto; overflow: auto;
transition: all 0.2s;
} }
} }
@@ -344,4 +399,24 @@
.Virtual-detail-text-right { .Virtual-detail-text-right {
} }
.text-icon {
color: rgb(0, 0, 0);
font-size: 22px;
position: absolute;
left: 230px;
top: 50%;
transform: translate(-50%, -50%);
transition: all 0.2s;
}
.text-icon-one {
color: rgb(0, 0, 0);
font-size: 22px;
position: absolute;
left: 56px;
top: 50%;
transform: translate(-50%, -50%);
transition: all 0.2s;
}
</style> </style>
@@ -5,7 +5,8 @@
{{$t('basicInformationOfParameters')}} {{$t('basicInformationOfParameters')}}
</div> </div>
<div class="header-tight"> <div class="header-tight">
<a-button v-has="'projectLibraryBase:edit'" class="box-button" style="line-height: 32px" @click="edit"> <a-button v-if="this.$route.query.studioEngineer == this.userInfo().id" class="box-button"
style="line-height: 32px" @click="edit">
{{$t('edit')}} {{$t('edit')}}
</a-button> </a-button>
</div> </div>
@@ -92,7 +93,8 @@
{{$t('regulatoryCertificationTaskPlan')}} {{$t('regulatoryCertificationTaskPlan')}}
</div> </div>
<div class="header-tight"> <div class="header-tight">
<a-button class="box-button" v-has="'projectTaskPlanning:queryByProjectId'" style="line-height: 32px" <a-button class="box-button" v-if="this.$route.query.studioEngineer == this.userInfo().id"
style="line-height: 32px"
@click="settingClick">{{$t('setting')}} @click="settingClick">{{$t('setting')}}
</a-button> </a-button>
</div> </div>
@@ -139,6 +141,7 @@
import currentStatusOfTheProjectEcharts from './currentStatusOfTheProjectEcharts' import currentStatusOfTheProjectEcharts from './currentStatusOfTheProjectEcharts'
import deliverableStatusEchart from './deliverableStatusEchart' import deliverableStatusEchart from './deliverableStatusEchart'
import certificationProgressEchart from './certificationProgressEchart' import certificationProgressEchart from './certificationProgressEchart'
import { mapGetters } from 'vuex'
export default { export default {
name: 'ProjectDetails', name: 'ProjectDetails',
@@ -171,6 +174,7 @@
this.getSetting() this.getSetting()
}, },
methods: { methods: {
...mapGetters(['userInfo']),
getForm() { getForm() {
getAction(this.url.queryById, { id: this.$route.query.id }).then((res) => { getAction(this.url.queryById, { id: this.$route.query.id }).then((res) => {
if (res.success) { if (res.success) {
@@ -46,7 +46,9 @@
</a-row> </a-row>
</a-form> </a-form>
</div> </div>
<div class="table-operator" style="overflow:hidden;"> <div class="table-operator"
v-if="(isRoleSwitching && !isDisplay) || (!isDisplay && roleSwitchingList.length > 1) || isDisplay"
style="overflow:hidden;margin-bottom: 20px">
<div style="float: left;margin-bottom: 0px;margin-left: 20px" v-if="isDisplay"> <div style="float: left;margin-bottom: 0px;margin-left: 20px" v-if="isDisplay">
<div class="operator-text" @click="initiateListConfirmationcClick('清单')"> <div class="operator-text" @click="initiateListConfirmationcClick('清单')">
<a-icon type="solution"/> <a-icon type="solution"/>
@@ -151,7 +153,7 @@
class="tableList" class="tableList"
:loading="loading" :loading="loading"
:pagination="false" :pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 360px)'}" :scroll="{x: '100%',y:'calc(100vh - 170px)'}"
rowKey="id" rowKey="id"
:data-source="dataSource" :data-source="dataSource"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
@@ -229,6 +231,7 @@
@ok="handleOk" @ok="handleOk"
@cancel="handleCancel" @cancel="handleCancel"
> >
<a-spin :spinning="confirmLoading">
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm"> <a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :span="24"> <a-col :span="24">
@@ -262,6 +265,7 @@
</a-col> </a-col>
</a-row> </a-row>
</a-form-model> </a-form-model>
</a-spin>
</a-modal> </a-modal>
<a-modal <a-modal
:title="fileTitle" :title="fileTitle"
@@ -414,9 +418,8 @@
title: this.$t('subtitle'), title: this.$t('subtitle'),
align: 'center', align: 'center',
dataIndex: 'subtitle', dataIndex: 'subtitle',
width: 180, ellipsis: true,
fixed: 'left', width: 180
scopedSlots: { customRender: 'titleName' }
}, },
{ {
title: this.$t('listConfirmationStatus'), title: this.$t('listConfirmationStatus'),
@@ -1279,11 +1282,16 @@
for (let i = 0; i < this.dataSource.length; i++) { for (let i = 0; i < this.dataSource.length; i++) {
for (let j = 0; j < selectedRowKeys.length; j++) { for (let j = 0; j < selectedRowKeys.length; j++) {
if (this.dataSource[i].id == selectedRowKeys[j]) { if (this.dataSource[i].id == selectedRowKeys[j]) {
if ((this.dataSource[i].inventoryAffirmStatus == 'Not started' || this.dataSource[i].inventoryAffirmStatus == 'Rejected') && if (this.dataSource[i].inventoryAffirmStatus == 'Not started' || this.dataSource[i].inventoryAffirmStatus == 'Rejected') {
this.dataSource[i].homologationEngineerId && this.dataSource[i].regulationOwnerId) { if (this.dataSource[i].homologationEngineerId && this.dataSource[i].regulationOwnerId) {
isTrue = true isTrue = true
} else {
this.$message.warning(this.dataSource[i].serialNumber + this.$t('TheEngineerAndCertification'))
isTrue = false
return
}
} else { } else {
this.$message.warning(this.$t('The') + (i + 1) + this.$t('strip') + ',' + this.$t('dataConfirmation')) this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('pleaseSelectinitiatedOrRejected'))
isTrue = false isTrue = false
return return
} }
@@ -1309,40 +1317,46 @@
for (let j = 0; j < selectedRowKeys.length; j++) { for (let j = 0; j < selectedRowKeys.length; j++) {
if (this.dataSource[i].id == selectedRowKeys[j]) { if (this.dataSource[i].id == selectedRowKeys[j]) {
if ((this.dataSource[i].taskAffirmStatus == 'Not started' || this.dataSource[i].taskAffirmStatus == 'Rejected') && if ((this.dataSource[i].taskAffirmStatus == 'Not started' || this.dataSource[i].taskAffirmStatus == 'Rejected') &&
this.dataSource[i].engineeringInterfacePerson && this.dataSource[i].inventoryAffirmStatus == 'Accepted') { this.dataSource[i].inventoryAffirmStatus == 'Accepted') {
if ((this.dataSource[i].verifyDueDate && this.dataSource[i].verifyDutyId if (this.dataSource[i].engineeringInterfacePerson) {
&& this.dataSource[i].verifyInitiatorId && this.dataSource[i].verifyDeliverableType) || if ((this.dataSource[i].verifyDueDate && this.dataSource[i].verifyDutyId
(!this.dataSource[i].verifyDueDate && !this.dataSource[i].verifyDutyId && this.dataSource[i].verifyInitiatorId && this.dataSource[i].verifyDeliverableType) ||
&& !this.dataSource[i].verifyInitiatorId && !this.dataSource[i].verifyDeliverableType)) { (!this.dataSource[i].verifyDueDate && !this.dataSource[i].verifyDutyId
isTrue = true && !this.dataSource[i].verifyInitiatorId && !this.dataSource[i].verifyDeliverableType)) {
isTrue = true
} else {
isTrue = false
this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('pleaseConformityVerification'))
return
}
if ((this.dataSource[i].prehomoDueDate && this.dataSource[i].prehomoDutyId
&& this.dataSource[i].prehomoInitiatorId && this.dataSource[i].prehomoDeliverableType) ||
(!this.dataSource[i].prehomoDueDate && !this.dataSource[i].prehomoDutyId
&& !this.dataSource[i].prehomoInitiatorId && !this.dataSource[i].prehomoDeliverableType)) {
isTrue = true
} else {
isTrue = false
this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('pleaseConfirmedByPrehomo'))
return
}
if ((this.dataSource[i].designDueDate && this.dataSource[i].designDutyId
&& this.dataSource[i].designInitiatorId && this.dataSource[i].designDeliverableType) ||
(!this.dataSource[i].designDueDate && !this.dataSource[i].designDutyId
&& !this.dataSource[i].designInitiatorId && !this.dataSource[i].designDeliverableType)) {
isTrue = true
} else {
isTrue = false
this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('pleaseDesignConformityConfirmation'))
return
}
} else { } else {
isTrue = false isTrue = false
this.$message.warning(this.$t('The') + (i + 1) + this.$t('strip') + ',' + this.$t('pleaseConformityVerification')) this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('theProjectContactEmpty'))
return
}
if ((this.dataSource[i].prehomoDueDate && this.dataSource[i].prehomoDutyId
&& this.dataSource[i].prehomoInitiatorId && this.dataSource[i].prehomoDeliverableType) ||
(!this.dataSource[i].prehomoDueDate && !this.dataSource[i].prehomoDutyId
&& !this.dataSource[i].prehomoInitiatorId && !this.dataSource[i].prehomoDeliverableType)) {
isTrue = true
} else {
isTrue = false
this.$message.warning(this.$t('The') + (i + 1) + this.$t('strip') + ',' + this.$t('pleaseConfirmedByPrehomo'))
return
}
if ((this.dataSource[i].designDueDate && this.dataSource[i].designDutyId
&& this.dataSource[i].designInitiatorId && this.dataSource[i].designDeliverableType) ||
(!this.dataSource[i].designDueDate && !this.dataSource[i].designDutyId
&& !this.dataSource[i].designInitiatorId && !this.dataSource[i].designDeliverableType)) {
isTrue = true
} else {
isTrue = false
this.$message.warning(this.$t('The') + (i + 1) + this.$t('strip') + ',' + this.$t('pleaseDesignConformityConfirmation'))
return return
} }
} else { } else {
isTrue = false isTrue = false
this.$message.warning(this.$t('The') + (i + 1) + this.$t('strip') + ',' + this.$t('taskDataConfirmation')) this.$message.warning(this.dataSource[i].serialNumber + ',' + this.$t('PleaseTaskConfirmationRejected'))
return return
} }
} }
@@ -84,10 +84,11 @@
<a-col :span="24"> <a-col :span="24">
<div class="box-title-text"> <div class="box-title-text">
<div class="title-text"> <div class="title-text">
<span class="Required">*</span> <!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('regulatoryEngineer')">{{$t('regulatoryEngineer')}}</span> <span class="title-text-text" :title="$t('regulatoryEngineer')">{{$t('regulatoryEngineer')}}</span>
</div> </div>
<a-form-model-item class="itemModel" :prop="'lawEngineerName'"> <!-- :prop="'lawEngineerName'"-->
<a-form-model-item class="itemModel">
<PersonnelSelection <PersonnelSelection
:query="{db_field_name:'lawEngineer',db_field_txt:$t('regulatoryEngineer')}" :query="{db_field_name:'lawEngineer',db_field_txt:$t('regulatoryEngineer')}"
:personneQuery="formInline" :personneQuery="formInline"
@@ -101,10 +102,11 @@
<a-col :span="24"> <a-col :span="24">
<div class="box-title-text"> <div class="box-title-text">
<div class="title-text"> <div class="title-text">
<span class="Required">*</span> <!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('engineeringInterfacePerson')">{{$t('engineeringInterfacePerson')}}</span> <span class="title-text-text" :title="$t('engineeringInterfacePerson')">{{$t('engineeringInterfacePerson')}}</span>
</div> </div>
<a-form-model-item class="itemModel" :prop="'engineeringInterfacePersonName'"> <!-- :prop="'engineeringInterfacePersonName'"-->
<a-form-model-item class="itemModel">
<PersonnelSelection <PersonnelSelection
:query="{db_field_name:'engineeringInterfacePerson',db_field_txt:$t('engineeringInterfacePerson')}" :query="{db_field_name:'engineeringInterfacePerson',db_field_txt:$t('engineeringInterfacePerson')}"
:personneQuery="formInline" :personneQuery="formInline"
@@ -118,10 +120,11 @@
<a-col :span="24"> <a-col :span="24">
<div class="box-title-text"> <div class="box-title-text">
<div class="title-text"> <div class="title-text">
<span class="Required">*</span> <!-- <span class="Required">*</span>-->
<span class="title-text-text" :title="$t('certifiedEngineer')">{{$t('certifiedEngineer')}}</span> <span class="title-text-text" :title="$t('certifiedEngineer')">{{$t('certifiedEngineer')}}</span>
</div> </div>
<a-form-model-item class="itemModel" :prop="'certificationEngineer'"> <!-- :prop="'certificationEngineer'"-->
<a-form-model-item class="itemModel">
<a-select allowClear <a-select allowClear
v-model="formInline.certificationEngineer" v-model="formInline.certificationEngineer"
:placeholder="$t('certifiedEngineer')+$t('areaOfResponsibility')"> :placeholder="$t('certifiedEngineer')+$t('areaOfResponsibility')">
@@ -325,6 +328,9 @@
editOk() { editOk() {
this.$refs.ruleForm.validate(valid => { this.$refs.ruleForm.validate(valid => {
if (valid) { if (valid) {
if (!this.formInline.certificationEngineer){
this.formInline.certificationEngineer = ''
}
this.confirmLoading = true this.confirmLoading = true
putAction(this.url.edit, this.formInline).then((res) => { putAction(this.url.edit, this.formInline).then((res) => {
if (res.success) { if (res.success) {