Merge remote-tracking branch 'origin/master'

This commit is contained in:
danshihao
2024-06-27 17:23:19 +08:00
15 changed files with 2101 additions and 17 deletions
+5 -1
View File
@@ -964,6 +964,10 @@
}
// 解决表头错位问题
/deep/ .ant-table-fixed-header .ant-table-scroll .ant-table-header {
margin-bottom: -8px !important;
}
/deep/ .ant-table-hide-scrollbar {
margin-right: -9px;
scrollbar-color: unset;
}
+4
View File
@@ -199,7 +199,11 @@ module.exports = {
newCertifiedVehicleImplementationDate: 'New certified vehicle implementation date',
generate: 'Generate',
vehicleType: 'Vehicle type',
modelStatus: 'Model status',
clickToUpload: 'Click to upload',
designEngineer: 'Design engineer',
pleaseUpload: 'Please upload',
supportingMaterial: 'Supporting material',
// 树右键
treeRight: {
addFolder: 'Create New Folder',
+15 -1
View File
@@ -32,7 +32,21 @@ module.exports = {
decompositionSingleSource: 'Decomposition single source',
pleaseAddStandard: 'Please add a new criterion first',
modelStatus: 'Model status',
primaryInvestigator: 'Primary investigator'
primaryInvestigator: 'Primary investigator',
checkWhetherTheTaskIsDelivered: 'Check whether the task is delivered',
batchSelector: 'Batch selector',
mainFinderImportTemplate: 'Compliance check process Import template',
countersigningOfficer: 'Countersigning officer',
auditor: 'Auditor',
approvingOfficer: 'Approving officer',
evaluationResult: 'Evaluation result',
theStatusNotMeetRequirements: 'The status quo that does not meet the requirements',
rectificationPlan: 'Rectification plan',
rectificationCycle: 'Rectification cycle',
rectificationCost: 'Rectification cost',
sharedWithOtherProjects: 'Shared with other projects',
costOfThisItemAfterSharing: 'Cost of this item after sharing',
appraiser: 'Appraiser'
},
// 市场清单发布流程
marketListReleaseProcess: {
+15 -1
View File
@@ -32,7 +32,21 @@ module.exports = {
decompositionSingleSource: '分解单来源',
pleaseAddStandard: '请先新增一条标准',
modelStatus: '车型状态',
primaryInvestigator: '主排查人'
primaryInvestigator: '主排查人',
checkWhetherTheTaskIsDelivered: '排查任务是否下发',
batchSelector: '批量选择人员',
mainFinderImportTemplate: '法规符合性排查流程导入模板',
countersigningOfficer: '会签人员',
auditor: '审核人员',
approvingOfficer: '批准人员',
evaluationResult: '评估结果',
theStatusNotMeetRequirements: '不满足要求的现状',
rectificationPlan: '整改方案',
rectificationCycle: '整改周期',
rectificationCost: '整改费用',
sharedWithOtherProjects: '与其他项目共用性',
costOfThisItemAfterSharing: '共用后本项目所需费用',
appraiser: '评估人'
},
// 市场清单发布流程
marketListReleaseProcess: {
+4
View File
@@ -216,7 +216,11 @@ module.exports = {
newCertifiedVehicleImplementationDate: '新认证车实施日期',
generate: '生成',
vehicleType: '车型',
modelStatus: '车型状态',
clickToUpload: '点击上传',
designEngineer: '设计工程师',
pleaseUpload: '请上传',
supportingMaterial: '佐证材料',
// 标准字段
standardField: {
standardEnglishName: '标准英文名称',
+8
View File
@@ -216,3 +216,11 @@ export const RectificationState = {
TO_BE_RECTIFIED: { text: '待整改', value: '1' },
TARGET_IS_CLOSED: { text: '已关闭', value: '2' }
}
// 法规符合性排查流程-评估结果
export const EvaluationResult = {
CONFORM_TO: { text: '符合', value: '1' },
INCONFORMITY: { text: '不符合', value: '2' },
NOT_INVOLVE: { text: '不涉及', value: '3' },
TO_BE_VERIFIED: { text: '待验证', value: '4' }
}
@@ -262,6 +262,7 @@ export default {
}
</script>
<style lang="less" scoped>
@import '~@assets/less/common.less';
.ant-card-body .table-operator {
margin-bottom: 18px;
}
@@ -58,7 +58,7 @@
v-decorator="['prcMes']" />
</a-form-item>
</a-col>
<a-col v-if="[2].includes(currentNode)" :span="24">
<a-col v-if="[2, 3, 4, 5, 6, 7, 8, 9].includes(currentNode)" :span="24">
<!-- 标准编号/标准名称 -->
<a-form-item
:labelCol="$i18n.locale === EN ? longLabelColEn : longLabelCol"
@@ -70,7 +70,7 @@
v-decorator="['standardNumberName']" />
</a-form-item>
</a-col>
<a-col v-if="[2].includes(currentNode)" :span="24">
<a-col v-if="[2, 3, 4, 6, 7, 8, 9].includes(currentNode)" :span="24">
<!-- 适用市场 -->
<a-form-item
:labelCol="$i18n.locale === EN ? longLabelColEn : longLabelCol"
@@ -91,12 +91,17 @@
<!-- 节点2各部门接口人分发 -->
<interface-person-delivery-base-info v-if="currentNode === 2" ref="baseInfoRef"></interface-person-delivery-base-info>
<!-- 节点3主排查人分发 -->
<main-finder-distributes-base-info v-if="currentNode === 3" ref="baseInfoRef"></main-finder-distributes-base-info>
<!-- 节点4设计工程师评估 -->
<design-engineer-evaluation v-if="currentNode === 4" ref="baseInfoRef"></design-engineer-evaluation>
<!-- 节点5主排查人单线审核 -->
<!-- 节点6只排查人汇总 -->
<main-finder-single-audit-base-info v-if="currentNode === 5" ref="baseInfoRef"></main-finder-single-audit-base-info>
<!-- 节点6主排查人汇总 -->
<main-finder-collect-base-info v-if="currentNode === 6" ref="baseInfoRef"></main-finder-collect-base-info>
<!-- 节点7会签 -->
<!-- 节点8设计工程师科室经理审核 -->
<!-- 节点9高级经理/技术官批准 -->
<finish-audit-base-info v-if="[7,8,9].includes(currentNode)" ref="baseInfoRef"></finish-audit-base-info>
<!-- 流程审批信息 -->
<div class="process-part-title">{{ $t('processApprovalInformation') }}</div>
@@ -182,10 +187,20 @@ import {
import pick from 'lodash.pick'
import EngineerInitBaseInfo from './modules/EngineerInitBaseInfo'
import InterfacePersonDeliveryBaseInfo from './modules/InterfacePersonDeliveryBaseInfo'
import MainFinderDistributesBaseInfo from './modules/MainFinderDistributesBaseInfo'
import DesignEngineerEvaluation from './modules/DesignEngineerEvaluation'
import MainFinderSingleAuditBaseInfo from './modules/MainFinderSingleAuditBaseInfo'
import MainFinderCollectBaseInfo from './modules/MainFinderCollectBaseInfo'
import FinishAuditBaseInfo from './modules/FinishAuditBaseInfo'
export default {
name: 'RegulatoryComplianceCheckProcess',
components: {
FinishAuditBaseInfo,
MainFinderCollectBaseInfo,
MainFinderSingleAuditBaseInfo,
DesignEngineerEvaluation,
MainFinderDistributesBaseInfo,
InterfacePersonDeliveryBaseInfo,
EngineerInitBaseInfo,
InternalDetailPage,
@@ -271,7 +286,7 @@ export default {
loading: false,
switchValue: 'base', // 头部tab选中值
disabled: false,
currentNode: 2, // 当前节点
currentNode: 1, // 当前节点
currentNodeName: '',
currentNodeId: RegulatoryComplianceCheckNodes.initiated.value, // 当前节点id
model: {},
@@ -0,0 +1,275 @@
<template>
<div>
<div class="process-part-title">{{ $t('dispatchInformation') }}</div>
<div>
<j-expand-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="standardNumber"
:columns="columns"
:dataSource="dataSource"
formIsDepend="evaluationResult"
:extraForm="extraForm"
:loading="loading">
<template slot="evaluationResult" slot-scope="{text, record}">
<j-dict-select-tag
style="width: 100%"
:placeholder="$t('pleaseSelect')"
dict-code="evaluation_result"
v-model="record.evaluationResult">
</j-dict-select-tag>
</template>
</j-expand-table>
</div>
</div>
</template>
<script>
import JExpandTable from '@/components/JExpandTable'
export default {
name: 'DesignEngineerEvaluation',
components: { JExpandTable },
props: {
disabled: {
type: Boolean,
required: false,
default: false
}
},
data () {
return {
loading: false,
columns: [
{ // 条款号
title: this.$t('clauseNo'),
align: 'center',
width: 180,
dataIndex: 'clauseNo',
scopedSlots: { customRender: 'text' }
},
{ // 条款标题
title: this.$t('clauseTitle'),
align: 'center',
width: 180,
dataIndex: 'clauseTitle',
scopedSlots: { customRender: 'text' }
},
{ // 条款内容
title: this.$t('clauseContent'),
align: 'center',
width: 180,
dataIndex: 'clauseContent',
scopedSlots: { customRender: 'text' }
},
{ // 车型
title: this.$t('vehicleType'),
align: 'center',
width: 180,
dataIndex: 'vehicleType',
scopedSlots: { customRender: 'text' }
},
{ // 车型状态
title: this.$t('modelStatus'),
align: 'center',
width: 180,
dataIndex: 'modelStatus',
scopedSlots: { customRender: 'text' }
},
{ // 评价结果
title: this.$t('workCenter.regulatoryComplianceCheckProcess.evaluationResult'),
align: 'center',
width: 300,
dataIndex: 'evaluationResult',
scopedSlots: { customRender: 'evaluationResult' }
}
],
dataSource: [],
extraForm: {
1: { // 符合
rules: {
// 备注
remark: { required: false, message: this.$t('pleaseEnter') + this.$t('remarks'), trigger: 'blur' },
// 佐证材料
file: { required: false, message: this.$t('pleaseUpload') + this.$t('supportingMaterial'), trigger: 'change' }
},
formArr: [
{
fieldShowType: 1,
dbFieldTxt: this.$t('remarks'),
dbFieldName: 'remark'
},
{
fieldShowType: 2,
dbFieldTxt: this.$t('supportingMaterial'),
dbFieldName: 'file'
}
]
},
2: { // 不符合
rules: {
// 整改周期
rectificationCycle: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'), trigger: 'blur' },
// 整改费用
rectificationCost: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'), trigger: 'blur' },
// 共用后本项目所需费用
costOfThisItemAfterSharing: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'), trigger: 'blur' },
// 不满足要求的现状
theStatusNotMeetRequirements: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'), trigger: 'blur' },
// 整改方案
rectificationPlan: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'), trigger: 'blur' },
// 与其他项目共用性
sharedWithOtherProjects: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'), trigger: 'blur' }
},
formArr: [
{ // 整改周期
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'),
fieldMustInput: true,
dbFieldName: 'rectificationCycle'
},
{ // 整改费用
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'),
fieldMustInput: true,
dbFieldName: 'rectificationCost'
},
{ // 共用后本项目所需费用
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'),
fieldMustInput: true,
dbFieldName: 'costOfThisItemAfterSharing'
},
{ // 不满足要求的现状
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'),
fieldMustInput: true,
dbFieldName: 'theStatusNotMeetRequirements'
},
{ // 整改方案
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'),
fieldMustInput: true,
dbFieldName: 'rectificationPlan'
},
{ // 与其他项目共用性
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'),
fieldMustInput: true,
dbFieldName: 'sharedWithOtherProjects'
}
]
},
3: { // 不涉及
rules: {
// 备注
remark: { required: false, message: this.$t('pleaseEnter') + this.$t('remarks'), trigger: 'blur' },
// 佐证材料
file: { required: false, message: this.$t('pleaseUpload') + this.$t('supportingMaterial'), trigger: 'change' }
},
formArr: [
{
fieldShowType: 1,
dbFieldTxt: this.$t('remarks'),
dbFieldName: 'remark'
},
{
fieldShowType: 2,
dbFieldTxt: this.$t('supportingMaterial'),
dbFieldName: 'file'
}
]
},
4: { // 待验证
rules: {
// 整改周期
rectificationCycle: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'), trigger: 'blur' },
// 整改费用
rectificationCost: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'), trigger: 'blur' },
// 共用后本项目所需费用
costOfThisItemAfterSharing: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'), trigger: 'blur' },
// 不满足要求的现状
theStatusNotMeetRequirements: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'), trigger: 'blur' },
// 整改方案
rectificationPlan: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'), trigger: 'blur' },
// 与其他项目共用性
sharedWithOtherProjects: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'), trigger: 'blur' }
},
formArr: [
{ // 整改周期
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'),
fieldMustInput: true,
dbFieldName: 'rectificationCycle'
},
{ // 整改费用
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'),
fieldMustInput: true,
dbFieldName: 'rectificationCost'
},
{ // 共用后本项目所需费用
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'),
fieldMustInput: true,
dbFieldName: 'costOfThisItemAfterSharing'
},
{ // 不满足要求的现状
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'),
fieldMustInput: true,
dbFieldName: 'theStatusNotMeetRequirements'
},
{ // 整改方案
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'),
fieldMustInput: true,
dbFieldName: 'rectificationPlan'
},
{ // 与其他项目共用性
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'),
fieldMustInput: true,
dbFieldName: 'sharedWithOtherProjects'
}
]
}
}
}
},
methods: {
// 拿到外面传进来的数据初始化,因为套了几层就不在外层初始化数据了
initData (data) {
// 给表单赋值
this.formInline = Object.assign({}, data)
this.isGetDataAfter = true
},
// 外层要获取数据
getData () {
// 把数据抛出,在线编辑不知道要不要抛
const data = {}
data.formInline = this.formInline
return data
},
// 外层获取数据要过校验,返回false表示没有通过校验
async getDataValidate () {
let data = {}
await this.$refs.ruleForm.validate(valid => {
if (valid) {
data.formInline = this.formInline
} else {
data = false
}
})
return data
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,191 @@
<template>
<div>
<div class="process-part-title">{{ $t('dispatchInformation') }}</div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="standardNumber"
:columns="columns"
:dataSource="dataSource"
:pagination="false"
:loading="loading">
<!-- 佐证材料 -->
<template v-slot:material="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? record.material_dictText : global.emptyLine }}</template>
<a v-if="text" class="link-a" @click="previewFile(record)">{{ record.material_dictText }}</a>
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template>
</j-table>
</div>
</template>
<script>
import JTable from '@/components/jero/JTable'
export default {
name: 'FinishAuditBaseInfo',
components: {
JTable
},
data () {
return {
loading: false,
columns: [
{
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 条款号
title: this.$t('clauseNo'),
align: 'center',
width: 180,
dataIndex: 'clauseNo',
scopedSlots: { customRender: 'text' }
},
{ // 条款内容
title: this.$t('clauseContent'),
align: 'center',
width: 180,
dataIndex: 'clauseContent',
scopedSlots: { customRender: 'text' }
},
{ // 车型
title: this.$t('vehicleType'),
align: 'center',
width: 180,
dataIndex: 'vehicleType',
scopedSlots: { customRender: 'text' }
},
{ // 车型状态
title: this.$t('modelStatus'),
align: 'center',
width: 180,
dataIndex: 'modelStatus',
scopedSlots: { customRender: 'text' }
},
{ // 责任部门
title: this.$t('responsibleDepartment'),
align: 'center',
width: 180,
dataIndex: 'authDept',
scopedSlots: { customRender: 'text' }
},
{ // 评估人
title: this.$t('workCenter.regulatoryComplianceCheckProcess.appraiser'),
align: 'center',
width: 180,
dataIndex: 'appraiser',
scopedSlots: { customRender: 'text' }
},
{ // 评估结果
title: this.$t('workCenter.regulatoryComplianceCheckProcess.evaluationResult'),
align: 'center',
width: 180,
dataIndex: 'evaluationResult',
scopedSlots: { customRender: 'text' }
},
{ // 不满足要求的现状
title: this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'),
align: 'center',
width: 180,
dataIndex: 'theStatusNotMeetRequirements',
scopedSlots: { customRender: 'text' }
},
{ // 整改方案
title: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'),
align: 'center',
width: 180,
dataIndex: 'rectificationPlan',
scopedSlots: { customRender: 'text' }
},
{ // 整改周期
title: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'),
align: 'center',
width: 180,
dataIndex: 'rectificationCycle',
scopedSlots: { customRender: 'text' }
},
{ // 整改费用
title: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'),
align: 'center',
width: 180,
dataIndex: 'rectificationCost',
scopedSlots: { customRender: 'text' }
},
{ // 与其他项目共用性
title: this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'),
align: 'center',
width: 180,
dataIndex: 'sharedWithOtherProjects',
scopedSlots: { customRender: 'text' }
},
{ // 共用后本项目所需费用
title: this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'),
align: 'center',
width: 180,
dataIndex: 'costOfThisItemAfterSharing',
scopedSlots: { customRender: 'text' }
},
{ // 备注
title: this.$t('remarks'),
align: 'center',
width: 180,
dataIndex: 'remark',
scopedSlots: { customRender: 'text' }
},
{ // 佐证材料
title: this.$t('supportingMaterial'),
align: 'center',
width: 180,
dataIndex: 'material',
scopedSlots: { customRender: 'material' }
}
],
dataSource: []
}
},
methods: {
// 拿到外面传进来的数据初始化,因为套了几层就不在外层初始化数据了
initData (data) {
// 给表单赋值
this.formInline = Object.assign({}, data)
this.isGetDataAfter = true
},
// 外层要获取数据
getData () {
// 把数据抛出,在线编辑不知道要不要抛
const data = {}
data.formInline = this.formInline
return data
},
// 外层获取数据要过校验,返回false表示没有通过校验
async getDataValidate () {
let data = {}
await this.$refs.ruleForm.validate(valid => {
if (valid) {
data.formInline = this.formInline
} else {
data = false
}
})
return data
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,365 @@
<template>
<div>
<div class="process-part-title">{{ $t('dispatchInformation') }}</div>
<div v-if="!disabled" class="table-operator">
<!-- 导出, 文件名称标准编号+标准名称+符合性排查 -->
<a-button icon="upload" type="primary" ghost @click="handleExportXls()">
{{ $t('export') }}
</a-button>
</div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="standardNumber"
:columns="columns"
:dataSource="dataSource"
:pagination="false"
:loading="loading">
<!-- 佐证材料 -->
<template v-slot:material="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? record.material_dictText : global.emptyLine }}</template>
<a v-if="text" class="link-a" @click="previewFile(record)">{{ record.material_dictText }}</a>
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 操作栏 -->
<div slot="action" slot-scope="{record}" class="action-span-cell">
<a @click="handleEdit(record)" class="table-ope-btn" :disabled="disabled">{{ $t('edit') }}</a>
</div>
</j-table>
<a-form-model :model="formInline" class="form-add" :rules="rules" ref="ruleForm">
<div class="form-flex-box">
<!-- 会签人员 自动带出法规工程师可多选其他人 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.regulatoryComplianceCheckProcess.countersigningOfficer')">
{{ $t('workCenter.regulatoryComplianceCheckProcess.countersigningOfficer') }}
</span>
</div>
<a-form-model-item class="item-model" prop="countersigningOfficer">
<user-selection v-model="formInline.countersigningOfficer"
:placeholder="$t('pleaseSelect')+$t('workCenter.regulatoryComplianceCheckProcess.countersigningOfficer')"
:disabled="disabled"
filedName="countersigningOfficer"
@nameChange="userSelectNameChange"
:nameStr="formInline.countersigningOfficer_dictText"
type="checkbox"/>
</a-form-model-item>
</div>
<!-- 审核人员 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.regulatoryComplianceCheckProcess.auditor')">
{{ $t('workCenter.regulatoryComplianceCheckProcess.auditor') }}
</span>
</div>
<a-form-model-item class="item-model" prop="auditor">
<user-selection v-model="formInline.auditor"
:placeholder="$t('pleaseSelect')+$t('workCenter.regulatoryComplianceCheckProcess.auditor')"
:disabled="disabled"
filedName="auditor"
@nameChange="userSelectNameChange"
:nameStr="formInline.auditor_dictText"
type="radio"/>
</a-form-model-item>
</div>
<!-- 批准人员 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.regulatoryComplianceCheckProcess.approvingOfficer')">
{{ $t('workCenter.regulatoryComplianceCheckProcess.approvingOfficer') }}
</span>
</div>
<a-form-model-item class="item-model" prop="approvingOfficer">
<user-selection v-model="formInline.approvingOfficer"
:placeholder="$t('pleaseSelect')+$t('workCenter.regulatoryComplianceCheckProcess.approvingOfficer')"
:disabled="disabled"
filedName="approvingOfficer"
@nameChange="userSelectNameChange"
:nameStr="formInline.approvingOfficer_dictText"
type="radio"/>
</a-form-model-item>
</div>
</div>
</a-form-model>
<!-- 编辑弹框 -->
<main-finder-collect-edit-modal ref="editRef" @ok="editOk"/>
</div>
</template>
<script>
import JTable from '@/components/jero/JTable'
import UserSelection from '@/components/selection/UserSelection'
import { downFile } from '../../../../api/manage'
import MainFinderCollectEditModal from './MainFinderCollectEditModal'
export default {
name: 'MainFinderCollectBaseInfo',
components: { JTable, UserSelection, MainFinderCollectEditModal },
props: {
disabled: {
type: Boolean,
required: false,
default: false
}
},
data () {
return {
loading: false,
columns: [
{
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 条款号
title: this.$t('clauseNo'),
align: 'center',
width: 180,
dataIndex: 'clauseNo',
scopedSlots: { customRender: 'text' }
},
{ // 条款内容
title: this.$t('clauseContent'),
align: 'center',
width: 180,
dataIndex: 'clauseContent',
scopedSlots: { customRender: 'text' }
},
{ // 车型
title: this.$t('vehicleType'),
align: 'center',
width: 180,
dataIndex: 'vehicleType',
scopedSlots: { customRender: 'text' }
},
{ // 车型状态
title: this.$t('modelStatus'),
align: 'center',
width: 180,
dataIndex: 'modelStatus',
scopedSlots: { customRender: 'text' }
},
{ // 责任部门
title: this.$t('responsibleDepartment'),
align: 'center',
width: 180,
dataIndex: 'authDept',
scopedSlots: { customRender: 'text' }
},
{ // 评估人
title: this.$t('workCenter.regulatoryComplianceCheckProcess.appraiser'),
align: 'center',
width: 180,
dataIndex: 'appraiser',
scopedSlots: { customRender: 'text' }
},
{ // 评估结果
title: this.$t('workCenter.regulatoryComplianceCheckProcess.evaluationResult'),
align: 'center',
width: 180,
dataIndex: 'evaluationResult',
scopedSlots: { customRender: 'text' }
},
{ // 不满足要求的现状
title: this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'),
align: 'center',
width: 180,
dataIndex: 'theStatusNotMeetRequirements',
scopedSlots: { customRender: 'text' }
},
{ // 整改方案
title: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'),
align: 'center',
width: 180,
dataIndex: 'rectificationPlan',
scopedSlots: { customRender: 'text' }
},
{ // 整改周期
title: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'),
align: 'center',
width: 180,
dataIndex: 'rectificationCycle',
scopedSlots: { customRender: 'text' }
},
{ // 整改费用
title: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'),
align: 'center',
width: 180,
dataIndex: 'rectificationCost',
scopedSlots: { customRender: 'text' }
},
{ // 与其他项目共用性
title: this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'),
align: 'center',
width: 180,
dataIndex: 'sharedWithOtherProjects',
scopedSlots: { customRender: 'text' }
},
{ // 共用后本项目所需费用
title: this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'),
align: 'center',
width: 180,
dataIndex: 'costOfThisItemAfterSharing',
scopedSlots: { customRender: 'text' }
},
{ // 备注
title: this.$t('remarks'),
align: 'center',
width: 180,
dataIndex: 'remark',
scopedSlots: { customRender: 'text' }
},
{ // 佐证材料
title: this.$t('supportingMaterial'),
align: 'center',
width: 180,
dataIndex: 'material',
scopedSlots: { customRender: 'material' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 170
}
],
dataSource: [],
formInline: {},
rules: {
// 会签人员
countersigningOfficer: [
{
required: true,
message: this.$t('workCenter.regulatoryComplianceCheckProcess.countersigningOfficer') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 审核人员
auditor: [
{
required: true,
message: this.$t('workCenter.regulatoryComplianceCheckProcess.auditor') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 批准人员
approvingOfficer: [
{
required: true,
message: this.$t('workCenter.regulatoryComplianceCheckProcess.approvingOfficer') + this.$t('cannotEmpty'),
trigger: 'change'
}
]
},
url: {
exportXlsUrl: ''
}
}
},
methods: {
// 拿到外面传进来的数据初始化,因为套了几层就不在外层初始化数据了
initData (data) {
// 给表单赋值
this.formInline = Object.assign({}, data)
this.isGetDataAfter = true
},
// 外层要获取数据
getData () {
// 把数据抛出,在线编辑不知道要不要抛
const data = {}
data.formInline = this.formInline
return data
},
// 外层获取数据要过校验,返回false表示没有通过校验
async getDataValidate () {
let data = {}
await this.$refs.ruleForm.validate(valid => {
if (valid) {
data.formInline = this.formInline
} else {
data = false
}
})
return data
},
handleExportXls (fileName, fileSuffix = '.xls') {
if (!fileName || typeof fileName !== 'string') {
fileName = '导出文件'
}
const param = this.getQueryParams()
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
param.selections = this.selectedRowKeys.join(',')
}
console.log('导出参数', param)
// 加一个大的提示
const modalLoading = this.$info({
title: '提示',
content: <span>正在导出请稍候 <a-spin size="small" /></span>,
keyboard: false
})
// 把知道了这个按钮去掉
this.$nextTick(() => {
document.getElementsByClassName('ant-modal-confirm-btns')[0].style = 'display:none'
})
downFile(this.url.exportXlsUrl, param).then((data) => {
if (!data) {
this.$message.warning('文件下载失败')
return
}
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(new Blob([data], { type: 'application/vnd.ms-excel' }), fileName + fileSuffix)
} else {
const url = window.URL.createObjectURL(new Blob([data], { type: 'application/vnd.ms-excel' }))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', fileName + fileSuffix)
document.body.appendChild(link)
link.click()
document.body.removeChild(link) // 下载完成移除元素
window.URL.revokeObjectURL(url) // 释放掉blob对象
}
}).finally(() => {
// 销毁这个提示
modalLoading.destroy()
})
},
userSelectNameChange (value, fieldName) {
this.formInline[fieldName + '_dictText'] = value
},
// 编辑
handleEdit (record) {
this.$refs.editRef.edit(record)
},
// 编辑完成
editOk (result) {
const index = this.dataSource.findIndex(item => item.id === result.id)
this.dataSource[index] = Object.assign({}, this.dataSource[index], result)
}
}
}
</script>
<style scoped lang="less">
.form-add {
margin-top: 20px;
}
</style>
@@ -0,0 +1,194 @@
<template>
<j-modal
:title="title"
:maskClosable="false"
:width="width"
:visible="visible"
:confirm-loading="confirmLoading"
switchFullscreen
@ok="handleOk"
@cancel="handleCancel">
<a-form :form="form">
<!-- 评估人 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.regulatoryComplianceCheckProcess.appraiser')">
<user-selection :placeholder="$t('pleaseSelect') + $t('workCenter.regulatoryComplianceCheckProcess.appraiser')"
type="radio"
:name-str="model.appraiser_dictText"
filed-name="appraiser"
@nameChange="handleNameChange"
@listChange="handleUserChange"
v-decorator="['appraiser', validatorRules.appraiser]" />
</a-form-item>
<!-- 评估结果 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.regulatoryComplianceCheckProcess.evaluationResult')">
<j-dict-select-tag :placeholder="$t('pleaseSelect') + $t('workCenter.regulatoryComplianceCheckProcess.evaluationResult')"
dict-code="evaluation_result"
v-decorator="['evaluationResult', validatorRules.evaluationResult]" />
</a-form-item>
<!-- 不满足要求的现状 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements')">
<a-textarea :placeholder="$t('pleaseEnter') + $t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements')"
:maxLength="500"
:autoSize="{minRows: 4, maxRows: 6}"
v-decorator="['theStatusNotMeetRequirements', validatorRules.theStatusNotMeetRequirements]" />
</a-form-item>
<!-- 整改方案 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan')">
<a-textarea :placeholder="$t('pleaseEnter') + $t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan')"
:maxLength="500"
:autoSize="{minRows: 4, maxRows: 6}"
v-decorator="['rectificationPlan', validatorRules.rectificationPlan]" />
</a-form-item>
<!-- 整改周期 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle')">
<a-input :placeholder="$t('pleaseEnter') + $t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle')"
:maxLength="50"
v-decorator="['rectificationCycle', validatorRules.rectificationCycle]" />
</a-form-item>
<!-- 整改费用 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost')">
<a-input :placeholder="$t('pleaseEnter') + $t('workCenter.regulatoryComplianceCheckProcess.rectificationCost')"
:maxLength="50"
v-decorator="['rectificationCost', validatorRules.rectificationCost]" />
</a-form-item>
<!-- 与其他项目共用性 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects')">
<a-textarea :placeholder="$t('pleaseEnter') + $t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects')"
:maxLength="500"
:autoSize="{minRows: 4, maxRows: 6}"
v-decorator="['sharedWithOtherProjects', validatorRules.sharedWithOtherProjects]" />
</a-form-item>
<!-- 共用后本项目所需费用 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing')">
<a-input :placeholder="$t('pleaseEnter') + $t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing')"
:maxLength="50"
v-decorator="['costOfThisItemAfterSharing', validatorRules.costOfThisItemAfterSharing]" />
</a-form-item>
<!-- 备注 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('remarks')">
<a-textarea :placeholder="$t('pleaseEnter') + $t('remarks')"
:maxLength="500"
:autoSize="{minRows: 4, maxRows: 6}"
v-decorator="['remark', validatorRules.remark]" />
</a-form-item>
<!-- 佐证材料 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('supportingMaterial')">
<j-upload return-id
v-decorator="['supportingMaterial', validatorRules.supportingMaterial]" />
</a-form-item>
</a-form>
</j-modal>
</template>
<script>
import UserSelection from '../../../../components/selection/UserSelection'
export default {
name: 'MainFinderCollectEditModal',
components: { UserSelection },
data () {
return {
title: this.$t('edit'),
width: 800,
visible: false,
confirmLoading: false,
form: this.$form.createForm(this),
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 4 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 20 }
},
validatorRules: {
// 评估人
appraiser: {
rules: [{ required: true, message: this.$t('pleaseSelect') + this.$t('workCenter.regulatoryComplianceCheckProcess.appraiser') }],
validateTrigger: 'change'
},
// 评估结果
evaluationResult: {
rules: [{ required: true, message: this.$t('pleaseSelect') + this.$t('workCenter.regulatoryComplianceCheckProcess.evaluationResult') }],
validateTrigger: 'change'
},
// 不满足要求的现状
newProductImplDate: {
rules: [{ required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements') }],
validateTrigger: 'blur'
},
// 整改方案
rectificationPlan: {
rules: [{ required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan') }],
validateTrigger: 'blur'
},
// 整改周期
rectificationCycle: {
rules: [{ required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle') }],
validateTrigger: 'blur'
},
// 整改费用
rectificationCost: {
rules: [{ required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost') }],
validateTrigger: 'blur'
},
// 与其他项目共用性
sharedWithOtherProjects: {
rules: [{ required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects') }],
validateTrigger: 'blur'
},
// 共用后本项目所需费用
costOfThisItemAfterSharing: {
rules: [{ required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing') }],
validateTrigger: 'blur'
}
}
}
},
methods: {
edit (record) {
this.form.resetFields()
this.model = Object.assign({}, record)
this.visible = true
this.$nextTick(() => {
this.form.setFieldsValue(this.model)
})
},
// 选择评估人变化,更新责任部门为评估人的部门
handleUserChange (list) {
const data = list[0] || {}
const obj = {
authDept: data.orgCodeTxt // 部门
}
this.model = Object.assign(this.model, obj)
this.form.setFieldsValue(obj)
},
handleNameChange (value, fieldName) {
this.model[fieldName + '_dictText'] = value
},
close () {
this.visible = false
},
handleOk () {
this.form.validateFields((err, values) => {
if (!err) {
this.confirmLoading = true
const formData = Object.assign(this.model, values)
this.$emit('ok', formData)
this.confirmLoading = false
this.close()
}
})
},
handleCancel () {
this.close()
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,721 @@
<template>
<div>
<!-- 业务分派信息部分 -->
<div class="process-part-title">{{ $t('dispatchInformation') }}</div>
<a-form-model :model="formInline" class="form-add" :rules="rules" ref="ruleForm">
<div class="form-flex-box">
<!-- 排查任务是否下发 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.regulatoryComplianceCheckProcess.checkWhetherTheTaskIsDelivered')">
{{ $t('workCenter.regulatoryComplianceCheckProcess.checkWhetherTheTaskIsDelivered') }}
</span>
</div>
<a-form-model-item class="item-model" prop="checkWhetherTheTaskIsDelivered">
<j-dict-select-tag
:placeholder="$t('pleaseSelect') + this.$t('workCenter.regulatoryComplianceCheckProcess.checkWhetherTheTaskIsDelivered')"
dict-code="yn"
v-model="formInline.checkWhetherTheTaskIsDelivered">
</j-dict-select-tag>
</a-form-model-item>
</div>
</div>
</a-form-model>
<div class="center-operate-box">
<!-- 下一步 -->
<a-button type="primary" ghost :loading="loading" @click="handleNext">{{ $t('next') }}</a-button>
</div>
<!-- 排查任务是否下发选择是的情况 -->
<template v-if="clickNextAfter && formInline.checkWhetherTheTaskIsDelivered === YesOrNoEnum.YES.value">
<!-- 操作区域 -->
<div v-if="!disabled" class="table-operator">
<!-- 批量选择人员 -->
<a-button icon="setting" type="primary" ghost @click="batchCheckPerson">
{{ $t('workCenter.regulatoryComplianceCheckProcess.batchSelector') }}
</a-button>
</div>
<div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="standardNumber"
:columns="columns"
:dataSource="dataSource"
:pagination="false"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
:loading="loading">
</j-table>
</div>
</template>
<!-- 排查任务是否下发选择否的情况 -->
<template v-else-if="clickNextAfter && formInline.checkWhetherTheTaskIsDelivered === YesOrNoEnum.NO.value">
<!-- 操作区域 -->
<div v-if="!disabled" class="table-operator">
<!-- 导入 -->
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button icon="download" type="primary" ghost>{{ $t('import') }}</a-button>
</a-upload>
<!-- 模板下载 -->
<a-button icon="download" type="primary" ghost @click="downTemplate($t('workCenter.regulatoryComplianceCheckProcess.mainFinderImportTemplate'))">
{{ $t('templateDownload') }}
</a-button>
<!-- 导出, 文件名称标准编号+标准名称+符合性排查 -->
<a-button icon="upload" type="primary" ghost @click="handleExportXls()">
{{ $t('export') }}
</a-button>
</div>
<div>
<j-expand-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="standardNumber"
:columns="columnsEvaluate"
:dataSource="dataSourceEvaluate"
formIsDepend="evaluationResult"
:extraForm="extraForm"
:loading="loading">
<template slot="evaluationResult" slot-scope="{text, record}">
<j-dict-select-tag
style="width: 100%"
:placeholder="$t('pleaseSelect')"
dict-code="evaluation_result"
v-model="record.evaluationResult">
</j-dict-select-tag>
</template>
</j-expand-table>
</div>
<a-form-model :model="personFormInline" class="form-add" :rules="rules" ref="ruleForm">
<div class="form-flex-box">
<!-- 会签人员 自动带出法规工程师可多选其他人 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.regulatoryComplianceCheckProcess.countersigningOfficer')">
{{ $t('workCenter.regulatoryComplianceCheckProcess.countersigningOfficer') }}
</span>
</div>
<a-form-model-item class="item-model" prop="countersigningOfficer">
<user-selection v-model="personFormInline.countersigningOfficer"
:placeholder="$t('pleaseSelect')+$t('workCenter.regulatoryComplianceCheckProcess.countersigningOfficer')"
:disabled="disabled"
filedName="countersigningOfficer"
@nameChange="userSelectNameChangeForm"
:nameStr="personFormInline.countersigningOfficer_dictText"
type="checkbox"/>
</a-form-model-item>
</div>
<!-- 审核人员 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.regulatoryComplianceCheckProcess.auditor')">
{{ $t('workCenter.regulatoryComplianceCheckProcess.auditor') }}
</span>
</div>
<a-form-model-item class="item-model" prop="auditor">
<user-selection v-model="personFormInline.auditor"
:placeholder="$t('pleaseSelect')+$t('workCenter.regulatoryComplianceCheckProcess.auditor')"
:disabled="disabled"
filedName="auditor"
@nameChange="userSelectNameChangeForm"
:nameStr="personFormInline.auditor_dictText"
type="radio"/>
</a-form-model-item>
</div>
<!-- 批准人员 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.regulatoryComplianceCheckProcess.approvingOfficer')">
{{ $t('workCenter.regulatoryComplianceCheckProcess.approvingOfficer') }}
</span>
</div>
<a-form-model-item class="item-model" prop="approvingOfficer">
<user-selection v-model="personFormInline.approvingOfficer"
:placeholder="$t('pleaseSelect')+$t('workCenter.regulatoryComplianceCheckProcess.approvingOfficer')"
:disabled="disabled"
filedName="approvingOfficer"
@nameChange="userSelectNameChangeForm"
:nameStr="personFormInline.approvingOfficer_dictText"
type="radio"/>
</a-form-model-item>
</div>
</div>
</a-form-model>
</template>
<!-- 选用户弹框 -->
<user-select-modal ref="userSelectModal" type="checkbox" @change="userSelectModalChange" @nameChange="userSelectNameChange"/>
</div>
</template>
<script>
import { YesOrNoEnum } from '@/enums/commonEnums'
import JExpandTable from '@/components/JExpandTable'
import JTable from '@/components/jero/JTable'
import UserSelection from '@/components/selection/UserSelection'
import UserSelectModal from '@/components/selection/UserSelectModal'
import Vue from 'vue'
import { ACCESS_TOKEN, TENANT_ID } from '@/store/mutation-types'
import store from '@/store'
import { downFile, downloadFile } from '../../../../api/manage'
// 导入的加载提示
let importModalLoading
export default {
name: 'MainFinderDistributesBaseInfo',
components: { JExpandTable, JTable, UserSelection, UserSelectModal },
props: {
disabled: {
type: Boolean,
required: false,
default: false
}
},
computed: {
tokenHeader () {
const head = { 'X-Access-Token': Vue.ls.get(ACCESS_TOKEN) }
const tenantid = Vue.ls.get(TENANT_ID)
if (tenantid) {
head['tenant-id'] = tenantid
}
return head
},
importExcelUrl: function () {
return `${window._CONFIG.domianURL}/${this.url.importExcelUrl}`
}
},
data () {
return {
YesOrNoEnum,
loading: false,
formInline: {},
rules: {
// 排查任务是否下发
checkWhetherTheTaskIsDelivered: [
{
required: true,
message: this.$t('workCenter.regulatoryComplianceCheckProcess.checkWhetherTheTaskIsDelivered') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 会签人员
countersigningOfficer: [
{
required: true,
message: this.$t('workCenter.regulatoryComplianceCheckProcess.countersigningOfficer') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 审核人员
auditor: [
{
required: true,
message: this.$t('workCenter.regulatoryComplianceCheckProcess.auditor') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 批准人员
approvingOfficer: [
{
required: true,
message: this.$t('workCenter.regulatoryComplianceCheckProcess.approvingOfficer') + this.$t('cannotEmpty'),
trigger: 'change'
}
]
},
clickNextAfter: false,
columns: [
{
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 条款号
title: this.$t('clauseNo'),
align: 'center',
width: 180,
dataIndex: 'clauseNo',
scopedSlots: { customRender: 'text' }
},
{ // 条款标题
title: this.$t('clauseTitle'),
align: 'center',
width: 180,
dataIndex: 'clauseTitle',
scopedSlots: { customRender: 'text' }
},
{ // 条款内容
title: this.$t('clauseContent'),
align: 'center',
width: 180,
dataIndex: 'clauseContent',
scopedSlots: { customRender: 'text' }
},
{ // 车型
title: this.$t('vehicleType'),
align: 'center',
width: 180,
dataIndex: 'vehicleType',
scopedSlots: { customRender: 'text' }
},
{ // 车型状态
title: this.$t('modelStatus'),
align: 'center',
width: 180,
dataIndex: 'modelStatus',
scopedSlots: { customRender: 'text' }
},
{ // 设计工程师
title: this.$t('designEngineer'),
align: 'center',
width: 300,
dataIndex: 'designEngineer',
customRender: (value, row, index) => {
return <user-selection
v-model={row.designEngineer}
filedName={row.id} onNameChange={this.userNameChange}
nameStr={row.designEngineer_dictText} showBtn={false}
disabled={this.disabled} type={'checkbox'} placeholder={this.$t('pleaseSelect')} />
}
}
],
dataSource: [],
selectedRowKeys: [],
selectionRows: [],
selectNames: '', // 选完人的名字,批量设置人需要用
columnsEvaluate: [
{ // 条款号
title: this.$t('clauseNo'),
align: 'center',
width: 180,
dataIndex: 'clauseNo',
scopedSlots: { customRender: 'text' }
},
{ // 条款标题
title: this.$t('clauseTitle'),
align: 'center',
width: 180,
dataIndex: 'clauseTitle',
scopedSlots: { customRender: 'text' }
},
{ // 条款内容
title: this.$t('clauseContent'),
align: 'center',
width: 180,
dataIndex: 'clauseContent',
scopedSlots: { customRender: 'text' }
},
{ // 车型
title: this.$t('vehicleType'),
align: 'center',
width: 180,
dataIndex: 'vehicleType',
scopedSlots: { customRender: 'text' }
},
{ // 车型状态
title: this.$t('modelStatus'),
align: 'center',
width: 180,
dataIndex: 'modelStatus',
scopedSlots: { customRender: 'text' }
},
{ // 评价结果
title: this.$t('workCenter.regulatoryComplianceCheckProcess.evaluationResult'),
align: 'center',
width: 300,
dataIndex: 'evaluationResult',
scopedSlots: { customRender: 'evaluationResult' }
}
],
dataSourceEvaluate: [],
extraForm: {
1: { // 符合
rules: {
// 备注
remark: { required: false, message: this.$t('pleaseEnter') + this.$t('remarks'), trigger: 'blur' },
// 佐证材料
file: { required: false, message: this.$t('pleaseUpload') + this.$t('supportingMaterial'), trigger: 'change' }
},
formArr: [
{
fieldShowType: 1,
dbFieldTxt: this.$t('remarks'),
dbFieldName: 'remark'
},
{
fieldShowType: 2,
dbFieldTxt: this.$t('supportingMaterial'),
dbFieldName: 'file'
}
]
},
2: { // 不符合
rules: {
// 整改周期
rectificationCycle: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'), trigger: 'blur' },
// 整改费用
rectificationCost: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'), trigger: 'blur' },
// 共用后本项目所需费用
costOfThisItemAfterSharing: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'), trigger: 'blur' },
// 不满足要求的现状
theStatusNotMeetRequirements: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'), trigger: 'blur' },
// 整改方案
rectificationPlan: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'), trigger: 'blur' },
// 与其他项目共用性
sharedWithOtherProjects: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'), trigger: 'blur' }
},
formArr: [
{ // 整改周期
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'),
fieldMustInput: true,
dbFieldName: 'rectificationCycle'
},
{ // 整改费用
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'),
fieldMustInput: true,
dbFieldName: 'rectificationCost'
},
{ // 共用后本项目所需费用
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'),
fieldMustInput: true,
dbFieldName: 'costOfThisItemAfterSharing'
},
{ // 不满足要求的现状
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'),
fieldMustInput: true,
dbFieldName: 'theStatusNotMeetRequirements'
},
{ // 整改方案
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'),
fieldMustInput: true,
dbFieldName: 'rectificationPlan'
},
{ // 与其他项目共用性
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'),
fieldMustInput: true,
dbFieldName: 'sharedWithOtherProjects'
}
]
},
3: { // 不涉及
rules: {
// 备注
remark: { required: false, message: this.$t('pleaseEnter') + this.$t('remarks'), trigger: 'blur' },
// 佐证材料
file: { required: false, message: this.$t('pleaseUpload') + this.$t('supportingMaterial'), trigger: 'change' }
},
formArr: [
{
fieldShowType: 1,
dbFieldTxt: this.$t('remarks'),
dbFieldName: 'remark'
},
{
fieldShowType: 2,
dbFieldTxt: this.$t('supportingMaterial'),
dbFieldName: 'file'
}
]
},
4: { // 待验证
rules: {
// 整改周期
rectificationCycle: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'), trigger: 'blur' },
// 整改费用
rectificationCost: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'), trigger: 'blur' },
// 共用后本项目所需费用
costOfThisItemAfterSharing: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'), trigger: 'blur' },
// 不满足要求的现状
theStatusNotMeetRequirements: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'), trigger: 'blur' },
// 整改方案
rectificationPlan: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'), trigger: 'blur' },
// 与其他项目共用性
sharedWithOtherProjects: { required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'), trigger: 'blur' }
},
formArr: [
{ // 整改周期
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'),
fieldMustInput: true,
dbFieldName: 'rectificationCycle'
},
{ // 整改费用
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'),
fieldMustInput: true,
dbFieldName: 'rectificationCost'
},
{ // 共用后本项目所需费用
fieldShowType: 4,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'),
fieldMustInput: true,
dbFieldName: 'costOfThisItemAfterSharing'
},
{ // 不满足要求的现状
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'),
fieldMustInput: true,
dbFieldName: 'theStatusNotMeetRequirements'
},
{ // 整改方案
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'),
fieldMustInput: true,
dbFieldName: 'rectificationPlan'
},
{ // 与其他项目共用性
fieldShowType: 1,
dbFieldTxt: this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'),
fieldMustInput: true,
dbFieldName: 'sharedWithOtherProjects'
}
]
}
},
personFormInline: {},
url: {
downTemplateUrl: '',
importExcelUrl: ''
}
}
},
methods: {
// 拿到外面传进来的数据初始化,因为套了几层就不在外层初始化数据了
initData (data) {
// 给表单赋值
this.formInline = Object.assign({}, data)
this.isGetDataAfter = true
},
// 外层要获取数据
getData () {
// 把数据抛出,在线编辑不知道要不要抛
const data = {}
data.formInline = this.formInline
return data
},
// 外层获取数据要过校验,返回false表示没有通过校验
async getDataValidate () {
let data = {}
await this.$refs.ruleForm.validate(valid => {
if (valid) {
data.formInline = this.formInline
} else {
data = false
}
})
return data
},
// 下一步
handleNext () {
this.clickNextAfter = true
},
// 表格选中
onSelectChange (selectedRowKeys, selectionRows) {
this.selectedRowKeys = selectedRowKeys
this.selectionRows = selectionRows
},
// 批量选择人员
batchCheckPerson () {
if (this.selectedRowKeys.length <= 0) {
// 请选择要分发的数据
this.$message.warning(this.$t('pleaseSelectDistributeData'))
return
}
this.$refs.userSelectModal.open()
},
// 批量设置审批人选择人后的回调
userSelectModalChange (value) {
for (const item of this.selectedRowKeys) {
const curr = this.dataSource.find(i => i.id === item)
curr.designEngineer = value
curr.designEngineer_dictText = this.selectNames
}
this.dataSource = JSON.parse(JSON.stringify(this.dataSource))
this.selectedRowKeys = []
},
// 选人的名字获取
userSelectNameChange (value) {
this.selectNames = value
},
userNameChange (value, fieldName) {
const dataIndex = this.dataSource.findIndex(item => item.id === fieldName)
this.dataSource[dataIndex].designEngineer_dictText = value
},
// 导入
handleImportExcel (info) {
// 限制导入大于500MB
if (info.file.size > 1024 * 1024 * 500) {
this.$message.error('导入文件最大500MB')
info.fileList.pop()
return
}
// 加一个大的提示
if (!this.loading) {
importModalLoading = this.$info({
title: '提示',
content: <span>正在导入请稍候 <a-spin size="small" /></span>,
keyboard: false
})
}
this.loading = true
// 把知道了这个按钮去掉
this.$nextTick(() => {
document.getElementsByClassName('ant-modal-confirm-btns')[0].style = 'display:none'
})
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList)
}
if (info.file.status === 'done') {
// 销毁这个提示
importModalLoading && importModalLoading.destroy()
this.loading = false
if (info.file.response.success) {
// this.$message.success(`${info.file.name} 文件上传成功`);
if (info.file.response.code === 201) {
const { message, result: { msg, fileUrl, fileName } } = info.file.response
const href = window._CONFIG.domianURL + fileUrl
this.$warning({
title: message,
content: (<div>
<span>{msg}</span><br />
<span>具体详情请 <a href={href} target="_blank" download={fileName}>点击下载</a> </span>
</div>
)
})
} else {
this.$message.success(info.file.response.message || `${info.file.name} 文件上传成功`)
}
// 推入表格中
this.dataSourceEvaluate = info.file.response.result.map(item => {
const uidGenerator = () => {
return '-' + parseInt(Math.random() * 10000 + 1, 10)
}
return {
uid: uidGenerator(),
...item
}
})
} else {
if (Array.isArray(info.file.response.result) && info.file.response.result.length > 0) {
this.messageLineFeed(this.$t('fileImportError'), info.file.response.result)
} else {
this.$message.warning(`${info.file.name} ${info.file.response.message}`)
}
}
} else if (info.file.status === 'error') {
// 销毁这个提示
importModalLoading && importModalLoading.destroy()
this.loading = false
if (info.file.response.status === 500) {
const data = info.file.response
const token = Vue.ls.get(ACCESS_TOKEN)
if (token && data.message.includes('Token失效')) {
this.error({
title: '登录已过期',
content: '很抱歉,登录已过期,请重新登录',
okText: '重新登录',
mask: false,
onOk: () => {
store.dispatch('Logout').then(() => {
Vue.ls.remove(ACCESS_TOKEN)
window.location.reload()
})
}
})
}
} else {
this.$message.warning(`文件上传失败: ${info.file.msg} `)
}
}
},
// 下载导入模板
downTemplate (fileName) {
if (!fileName || typeof fileName !== 'string') {
fileName = '模板文件'
}
downloadFile(this.url.downTemplateUrl, fileName + '.xls')
},
handleExportXls (fileName, fileSuffix = '.xls') {
if (!fileName || typeof fileName !== 'string') {
fileName = '导出文件'
}
const param = this.getQueryParams()
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
param.selections = this.selectedRowKeys.join(',')
}
console.log('导出参数', param)
// 加一个大的提示
const modalLoading = this.$info({
title: '提示',
content: <span>正在导出请稍候 <a-spin size="small" /></span>,
keyboard: false
})
// 把知道了这个按钮去掉
this.$nextTick(() => {
document.getElementsByClassName('ant-modal-confirm-btns')[0].style = 'display:none'
})
downFile(this.url.exportXlsUrl, param).then((data) => {
if (!data) {
this.$message.warning('文件下载失败')
return
}
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(new Blob([data], { type: 'application/vnd.ms-excel' }), fileName + fileSuffix)
} else {
const url = window.URL.createObjectURL(new Blob([data], { type: 'application/vnd.ms-excel' }))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', fileName + fileSuffix)
document.body.appendChild(link)
link.click()
document.body.removeChild(link) // 下载完成移除元素
window.URL.revokeObjectURL(url) // 释放掉blob对象
}
}).finally(() => {
// 销毁这个提示
modalLoading.destroy()
})
},
userSelectNameChangeForm (value, fieldName) {
this.personFormInline[fieldName + '_dictText'] = value
}
}
}
</script>
<style scoped lang="less">
.form-add {
margin-top: 20px;
}
.center-operate-box {
float: right;
}
</style>
@@ -0,0 +1,251 @@
<template>
<div>
<div class="process-part-title">{{ $t('dispatchInformation') }}</div>
<div v-if="!disabled" class="table-operator">
<!-- 导出, 文件名称标准编号+标准名称+符合性排查 -->
<a-button icon="upload" type="primary" ghost @click="handleExportXls()">
{{ $t('export') }}
</a-button>
</div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="standardNumber"
:columns="columns"
:dataSource="dataSource"
:pagination="false"
:loading="loading">
<!-- 佐证材料 -->
<template v-slot:material="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? record.material_dictText : global.emptyLine }}</template>
<a v-if="text" class="link-a" @click="previewFile(record)">{{ record.material_dictText }}</a>
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template>
</j-table>
</div>
</template>
<script>
import JTable from '@/components/jero/JTable'
import { downFile } from '../../../../api/manage'
export default {
name: 'MainFinderSingleAuditBaseInfo',
components: {
JTable
},
props: {
disabled: {
type: Boolean,
required: false,
default: false
}
},
data () {
return {
loading: false,
columns: [
{
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 条款号
title: this.$t('clauseNo'),
align: 'center',
width: 180,
dataIndex: 'clauseNo',
scopedSlots: { customRender: 'text' }
},
{ // 条款内容
title: this.$t('clauseContent'),
align: 'center',
width: 180,
dataIndex: 'clauseContent',
scopedSlots: { customRender: 'text' }
},
{ // 车型
title: this.$t('vehicleType'),
align: 'center',
width: 180,
dataIndex: 'vehicleType',
scopedSlots: { customRender: 'text' }
},
{ // 车型状态
title: this.$t('modelStatus'),
align: 'center',
width: 180,
dataIndex: 'modelStatus',
scopedSlots: { customRender: 'text' }
},
{ // 责任部门
title: this.$t('responsibleDepartment'),
align: 'center',
width: 180,
dataIndex: 'authDept',
scopedSlots: { customRender: 'text' }
},
{ // 评估人
title: this.$t('workCenter.regulatoryComplianceCheckProcess.appraiser'),
align: 'center',
width: 180,
dataIndex: 'appraiser',
scopedSlots: { customRender: 'text' }
},
{ // 评估结果
title: this.$t('workCenter.regulatoryComplianceCheckProcess.evaluationResult'),
align: 'center',
width: 180,
dataIndex: 'evaluationResult',
scopedSlots: { customRender: 'text' }
},
{ // 不满足要求的现状
title: this.$t('workCenter.regulatoryComplianceCheckProcess.theStatusNotMeetRequirements'),
align: 'center',
width: 180,
dataIndex: 'theStatusNotMeetRequirements',
scopedSlots: { customRender: 'text' }
},
{ // 整改方案
title: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationPlan'),
align: 'center',
width: 180,
dataIndex: 'rectificationPlan',
scopedSlots: { customRender: 'text' }
},
{ // 整改周期
title: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCycle'),
align: 'center',
width: 180,
dataIndex: 'rectificationCycle',
scopedSlots: { customRender: 'text' }
},
{ // 整改费用
title: this.$t('workCenter.regulatoryComplianceCheckProcess.rectificationCost'),
align: 'center',
width: 180,
dataIndex: 'rectificationCost',
scopedSlots: { customRender: 'text' }
},
{ // 与其他项目共用性
title: this.$t('workCenter.regulatoryComplianceCheckProcess.sharedWithOtherProjects'),
align: 'center',
width: 180,
dataIndex: 'sharedWithOtherProjects',
scopedSlots: { customRender: 'text' }
},
{ // 共用后本项目所需费用
title: this.$t('workCenter.regulatoryComplianceCheckProcess.costOfThisItemAfterSharing'),
align: 'center',
width: 180,
dataIndex: 'costOfThisItemAfterSharing',
scopedSlots: { customRender: 'text' }
},
{ // 备注
title: this.$t('remarks'),
align: 'center',
width: 180,
dataIndex: 'remark',
scopedSlots: { customRender: 'text' }
},
{ // 佐证材料
title: this.$t('supportingMaterial'),
align: 'center',
width: 180,
dataIndex: 'material',
scopedSlots: { customRender: 'material' }
}
],
dataSource: [],
url: {
exportXlsUrl: ''
}
}
},
methods: {
// 拿到外面传进来的数据初始化,因为套了几层就不在外层初始化数据了
initData (data) {
// 给表单赋值
this.formInline = Object.assign({}, data)
this.isGetDataAfter = true
},
// 外层要获取数据
getData () {
// 把数据抛出,在线编辑不知道要不要抛
const data = {}
data.formInline = this.formInline
return data
},
// 外层获取数据要过校验,返回false表示没有通过校验
async getDataValidate () {
let data = {}
await this.$refs.ruleForm.validate(valid => {
if (valid) {
data.formInline = this.formInline
} else {
data = false
}
})
return data
},
handleExportXls (fileName, fileSuffix = '.xls') {
if (!fileName || typeof fileName !== 'string') {
fileName = '导出文件'
}
const param = this.getQueryParams()
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
param.selections = this.selectedRowKeys.join(',')
}
console.log('导出参数', param)
// 加一个大的提示
const modalLoading = this.$info({
title: '提示',
content: <span>正在导出请稍候 <a-spin size="small" /></span>,
keyboard: false
})
// 把知道了这个按钮去掉
this.$nextTick(() => {
document.getElementsByClassName('ant-modal-confirm-btns')[0].style = 'display:none'
})
downFile(this.url.exportXlsUrl, param).then((data) => {
if (!data) {
this.$message.warning('文件下载失败')
return
}
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(new Blob([data], { type: 'application/vnd.ms-excel' }), fileName + fileSuffix)
} else {
const url = window.URL.createObjectURL(new Blob([data], { type: 'application/vnd.ms-excel' }))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', fileName + fileSuffix)
document.body.appendChild(link)
link.click()
document.body.removeChild(link) // 下载完成移除元素
window.URL.revokeObjectURL(url) // 释放掉blob对象
}
}).finally(() => {
// 销毁这个提示
modalLoading.destroy()
})
}
}
}
</script>
<style scoped>
</style>
@@ -11,35 +11,49 @@
<a-form :form="form">
<!-- 标准编号 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('standardNumber')">
<a-form-item :labelCol="$i18n.locale === EN ? labelColEn : labelCol"
:wrapperCol="$i18n.locale === EN ? wrapperColEn : wrapperCol"
:label="$t('standardNumber')">
<a-input :placeholder="$t('pleaseEnter') + $t('standardNumber')"
:maxLength="50"
v-decorator="['standardNumber', validatorRules.standardNumber]" />
</a-form-item>
<!-- 标准名称 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('standardNumber')">
<a-form-item :labelCol="$i18n.locale === EN ? labelColEn : labelCol"
:wrapperCol="$i18n.locale === EN ? wrapperColEn : wrapperCol"
:label="$t('standardNumber')">
<a-input :placeholder="$t('pleaseEnter') + $t('standardName')"
:maxLength="50"
v-decorator="['standardName', validatorRules.standardName]" />
</a-form-item>
<!-- 标准状态 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('standardState')">
<j-dict-select-tag :placeholder="$t('pleaseEnter') + $t('standardState')"
<a-form-item :labelCol="$i18n.locale === EN ? labelColEn : labelCol"
:wrapperCol="$i18n.locale === EN ? wrapperColEn : wrapperCol"
:label="$t('standardState')">
<j-dict-select-tag :placeholder="$t('pleaseSelect') + $t('standardState')"
dict-code="standard_state"
v-decorator="['standardState', validatorRules.standardState]" />
</a-form-item>
<!-- 新生产车实施日期 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('newProductionVehicleImplementationDate')">
<a-form-item :labelCol="$i18n.locale === EN ? labelColEn : labelCol"
:wrapperCol="$i18n.locale === EN ? wrapperColEn : wrapperCol"
:label="$t('newProductionVehicleImplementationDate')">
<j-multiple-date-picker :placeholder="$t('pleaseSelect') + $t('newProductionVehicleImplementationDate')"
fieldName="newProductImplDate"
v-decorator="['newProductImplDate', validatorRules.newProductImplDate]" />
</a-form-item>
<!-- 新认证车实施日期 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('newCertifiedVehicleImplementationDate')">
<a-form-item :labelCol="$i18n.locale === EN ? labelColEn : labelCol"
:wrapperCol="$i18n.locale === EN ? wrapperColEn : wrapperCol"
:label="$t('newCertifiedVehicleImplementationDate')">
<j-multiple-date-picker :placeholder="$t('pleaseSelect') + $t('newCertifiedVehicleImplementationDate')"
fieldName="newAuthImplDate"
v-decorator="['newAuthImplDate', validatorRules.newAuthImplDate]" />
</a-form-item>
<!-- 分解单附件 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.regulatoryComplianceCheckProcess.resolutionAttachment')">
<a-form-item :labelCol="$i18n.locale === EN ? labelColEn : labelCol"
:wrapperCol="$i18n.locale === EN ? wrapperColEn : wrapperCol"
:label="$t('workCenter.regulatoryComplianceCheckProcess.resolutionAttachment')">
<j-upload return-id
v-decorator="['resolutionAttachment', validatorRules.resolutionAttachment]" />
</a-form-item>
@@ -50,12 +64,13 @@
<script>
import JMultipleDatePicker from '../../../../components/JMultipleDatePicker'
import { addForeignSystemTree, editForeignSystemTree } from '../../../../api/standardRegulationLibraryApi'
export default {
name: 'ManualAddModal',
components: { JMultipleDatePicker },
data () {
return {
EN: 'en-us',
title: this.$t('operation'),
width: 800,
visible: false,
@@ -64,11 +79,19 @@ export default {
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 4 }
sm: { span: 6 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 20 }
sm: { span: 18 }
},
labelColEn: {
xs: { span: 24 },
sm: { span: 10 }
},
wrapperColEn: {
xs: { span: 24 },
sm: { span: 14 }
},
validatorRules: {
// 标准编号