[add] 市场法规清单

This commit is contained in:
lideqin
2024-06-14 18:09:50 +08:00
parent 41ed25fbba
commit 10569bbf55
5 changed files with 738 additions and 1 deletions
@@ -58,11 +58,28 @@ module.exports = {
uploadData: '上传资料',
addAPeer: '新增同级',
newChild: '新增子级',
pleaseSelectTheDirectoryOnTheLeft:'请选择左侧目录'
pleaseSelectTheDirectoryOnTheLeft: '请选择左侧目录'
},
// 文档动态
documentDynamics: {
messageContent: '消息内容',
notificationTime: '通知时间'
},
// 市场法规清单
marketRegulationsList: {
listNumber: '清单编号',
listName: '清单名称',
countryRegion: '国家/地区',
drivingPosition: '驾驶位置',
author: '作者',
exportName: '市场法规清单表',
listVersion: '清单版本',
releaseTime: '发布时间',
listState: '清单状态',
customName: '自定义名称',
securityClass: '密级',
listDeclaration: '清单说明',
templateName: '市场法规清单导入模版',
}
}
+33
View File
@@ -189,6 +189,39 @@ module.exports = {
noFileAvailableForPreview: '暂无可预览的文件',
enterpriseStandard: '企业标准',
pleaseAtLeastSelectOneUser: '请至少选择一个用户',
next: '下一步',
marketRegulationsList: '市场法规清单',
transfer: '调取',
// 标准字段
standardField: {
standardEnglishName: '标准英文名称',
newProductionVehicleImplementationDate: '新生产车实施日期',
newCertifiedVehicleImplementationDate: '新认证车实施日期',
dateOfRegistration: '注册日期',
applicableCountryRegion: '适用国家/地区',
applicableVehicleType: '适用车型'
},
// 市场清单详情列表字段
marketListField: {
standardEnglishName: '标准英文名称',
newProductionVehicleImplementationDate: '新生产车实施日期',
newCertifiedVehicleImplementationDate: '新认证车实施日期',
dateOfRegistration: '注册日期',
applicableCountryRegion: '适用国家/地区',
applicableVehicleType: '适用车型',
authenticationObject: '认证对象',
certifiedDeliverables: '认证交付物',
type: '类型',
dynamicType: '动力类型',
mainControlDepartment: '主控部门',
masterControlDepartmentProfessionalModule: '主控部门专业模块',
relatedDepartment: '关联部门',
associateDepartmentSpecializedModules: '关联部门专业模块',
batchRestriction: '批量限制',
automaticDrivingLevel: '自动驾驶等级',
requirementType: '要求类型',
},
// 树右键
treeRight: {
addFolder: '新增文件夹',
+7
View File
@@ -597,3 +597,10 @@ export const EnterpriseNameCode = {
JC: { text: 'JC', value: 'JC' },
JHK: { text: 'JHK', value: 'JHK' }
}
// 清单状态
export const ListState = {
RELEASED: { text: '已发布', value: '1' },
UNPUBLISH: { text: '未发布', value: '2' },
UNDER_REVISION: { text: '修改中', value: '3' },
}
@@ -0,0 +1,430 @@
<template>
<internal-detail-page :title="$route.query.title" :content-padding="0" :loading="loading">
<div class="content-wrapper">
<a-form :form="form">
<a-row>
<!-- 国家/地区 -->
<a-col :span="12">
<a-form-item :labelCol="labelCol"
:wrapperCol="wrapperCol"
:label="$t('standardRegulationLibrary.marketRegulationsList.countryRegion')">
<j-dict-select-tag v-decorator="['countryRegion', validatorRules.countryRegion]"
dict-code="market_state"
:placeholder="$t('pleaseSelect') + $t('standardRegulationLibrary.marketRegulationsList.countryRegion')" />
</a-form-item>
</a-col>
<!-- 清单编号 -->
<a-col :span="12">
<a-form-item :label="$t('standardRegulationLibrary.marketRegulationsList.listNumber')"
:labelCol="labelCol"
:wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.marketRegulationsList.listNumber')"
:maxLength="200"
disabled
v-decorator="['listNumber', validatorRules.listNumber]" />
</a-form-item>
</a-col>
</a-row>
<a-row>
<!-- 自定义名称 -->
<a-col :span="12">
<a-form-item :label="$t('standardRegulationLibrary.marketRegulationsList.customName')"
:labelCol="labelCol"
:wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.marketRegulationsList.customName')"
:maxLength="200"
v-decorator="['customName', validatorRules.customName]" />
</a-form-item>
</a-col>
<!-- 驾驶位置 -->
<a-col :span="12">
<a-form-item :labelCol="labelCol"
:wrapperCol="wrapperCol"
:label="$t('standardRegulationLibrary.marketRegulationsList.drivingPosition')">
<j-dict-select-tag v-decorator="['drivingPosition', validatorRules.drivingPosition]"
dict-code="driving_position"
:placeholder="$t('pleaseSelect') + $t('standardRegulationLibrary.marketRegulationsList.drivingPosition')" />
</a-form-item>
</a-col>
</a-row>
<!-- 密级 -->
<a-form-item :labelCol="lineLabelCol"
:wrapperCol="lineWrapperCol"
:label="$t('standardRegulationLibrary.marketRegulationsList.securityClass')">
<j-dict-select-tag v-decorator="['securityClass']"
dict-code="security_class"
:placeholder="$t('pleaseSelect') + $t('standardRegulationLibrary.marketRegulationsList.securityClass')" />
</a-form-item>
<!-- 清单说明 -->
<a-form-item :labelCol="lineLabelCol"
:wrapperCol="lineWrapperCol"
:label="$t('standardRegulationLibrary.marketRegulationsList.listDeclaration')">
<a-textarea :placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.marketRegulationsList.listDeclaration')"
:maxLength="500"
:auto-size="{ minRows: 3, maxRows: 6 }"
v-decorator="['listDeclaration']"></a-textarea>
</a-form-item>
<!-- 附件 -->
<a-form-item :labelCol="lineLabelCol"
:wrapperCol="lineWrapperCol"
:label="$t('attach')">
<j-upload v-decorator="['attach']"
return-id
multiple />
</a-form-item>
</a-form>
<div class="center-operate-box">
<!-- 下一步 -->
<a-button type="primary" ghost :loading="loading" @click="handleNext">{{ $t('next') }}</a-button>
</div>
<template v-if="showList || model.id">
<!-- 市场法规清单 -->
<div class="process-part-title">{{ $t('marketRegulationsList') }}</div>
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<!-- 标准编号 -->
<a-col :md="6" :sm="12">
<a-form-item :label="$t('standardNumber')">
<j-input
:placeholder="$t('pleaseEnter') + $t('standardNumber')"
v-model="queryParam.standardNumber"></j-input>
</a-form-item>
</a-col>
<!-- 清单名称 -->
<a-col :md="6" :sm="8">
<a-form-item :label="$t('standardName')">
<j-input
:placeholder="$t('pleaseEnter') + $t('standardName')"
v-model="queryParam.standardName"></j-input>
</a-form-item>
</a-col>
<div style="float: right;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search">{{ $t('query') }}</a-button>
<a-button type="primary" ghost @click="searchReset" icon="reload" style="margin-left: 8px">{{ $t('reset') }}</a-button>
</div>
</a-row>
</a-form>
</div>
<div class="table-operator">
<!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd">{{ $t('newlyAdded') }}</a-button>
<!-- 调取 -->
<a-button icon="plus" type="primary" @click="handleTransfer">{{ $t('transfer') }}</a-button>
<!-- 复制 -->
<a-button icon="copy" type="primary" @click="handleCopy">{{ $t('copy') }}</a-button>
<!-- 批量删除 -->
<a-button icon="delete" type="primary" ghost @click="batchDel">{{ $t('batchDelete') }}</a-button>
<!-- 导入 -->
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader"
:data="importData" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="download" ghost @click="handleImport">{{ $t('import') }}</a-button>
</a-upload>
<!-- 模板下载 -->
<a-button type="primary" icon="download" ghost
@click="downTemplate($t('standardRegulationLibrary.marketRegulationsList.templateName'), '.xls')">
{{ $t('templateDownload') }}
</a-button>
</div>
<!-- table区域-begin -->
<div>
<j-table
:can-drag="true"
:scroll="{x: '100%', y: yScrollHeight}"
ref="table"
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="false"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<!-- 标准编号标准名称 -->
<template v-slot:toDetail="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<a class="link-a" @click="toDetail(record)">{{ text }}</a>
</a-tooltip>
</template>
<template v-slot:action="{text, record}">
<a @click="handleEdit(record)">{{ $t('edit') }}</a>
<a-divider type="vertical" />
<a @click="handleDelete(record.id)" class="table-ope-btn">{{ $t('delete') }}</a>
</template>
</j-table>
</div>
<!-- table区域-end -->
</template>
</div>
<div class="bottom-operate-box">
<!-- 取消 -->
<a-button type="primary" ghost :loading="loading" @click="handleCancel">{{ $t('cancel') }}</a-button>
<!-- 提交 -->
<a-button type="primary" :loading="loading" @click="handleSubmit">{{ $t('submit') }}</a-button>
</div>
</internal-detail-page>
</template>
<script>
import InternalDetailPage from '@/components/InternalDetailPage'
import JTable from '@/components/jero/JTable'
import { JeroListMixin } from '../../../mixins/JeroListMixin'
export default {
name: 'MarketRegulationsFormPage',
components: { InternalDetailPage, JTable },
mixins: [JeroListMixin],
data () {
return {
loading: false,
form: this.$form.createForm(this),
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 4 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 18 }
},
lineLabelCol: {
xs: { span: 24 },
sm: { span: 2 }
},
lineWrapperCol: {
xs: { span: 24 },
sm: { span: 21 }
},
validatorRules: {
// 国家/地区
countryRegion: {
rules: [{
required: true,
message: this.$t('pleaseEnter') + this.$t('standardRegulationLibrary.marketRegulationsList.countryRegion')
}],
validateTrigger: 'change'
},
// 清单编号
listNumber: {
rules: [{
required: true,
message: this.$t('pleaseEnter') + this.$t('standardRegulationLibrary.marketRegulationsList.listNumber')
}],
validateTrigger: 'blur'
},
// 驾驶位置
drivingPosition: {
rules: [{
required: true,
message: this.$t('pleaseEnter') + this.$t('standardRegulationLibrary.marketRegulationsList.drivingPosition')
}],
validateTrigger: 'change'
}
},
columns: [
{ // 序号
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 标准编号
title: this.$t('standardNumber'),
align: 'center',
width: 180,
dataIndex: 'standardNumber',
scopedSlots: { customRender: 'toDetail' }
},
{ // 标准编号
title: this.$t('standardName'),
align: 'center',
width: 180,
dataIndex: 'standardName',
scopedSlots: { customRender: 'toDetail' }
},
{ // 标准英文名称
title: this.$t('marketListField.standardEnglishName'),
align: 'center',
width: 180,
dataIndex: 'standardEnglishName',
scopedSlots: { customRender: 'text' }
},
{ // 新生产车实施日期
title: this.$t('marketListField.newProductionVehicleImplementationDate'),
align: 'center',
width: 180,
dataIndex: 'newProductionVehicleImplementationDate',
scopedSlots: { customRender: 'text' }
},
{ // 新认证车实施日期
title: this.$t('marketListField.newCertifiedVehicleImplementationDate'),
align: 'center',
width: 180,
dataIndex: 'newCertifiedVehicleImplementationDate',
scopedSlots: { customRender: 'text' }
},
{ // 注册日期
title: this.$t('marketListField.dateOfRegistration'),
align: 'center',
width: 180,
dataIndex: 'dateOfRegistration',
scopedSlots: { customRender: 'text' }
},
{ // 适用国家/地区
title: this.$t('marketListField.applicableCountryRegion'),
align: 'center',
width: 180,
dataIndex: 'applicableCountryRegion',
scopedSlots: { customRender: 'text' }
},
{ // 适用车型
title: this.$t('marketListField.applicableVehicleType'),
align: 'center',
width: 180,
dataIndex: 'applicableVehicleType',
scopedSlots: { customRender: 'text' }
},
{ // 认证对象
title: this.$t('marketListField.authenticationObject'),
align: 'center',
width: 180,
dataIndex: 'authenticationObject',
scopedSlots: { customRender: 'text' }
},
{ // 认证交付物
title: this.$t('marketListField.certifiedDeliverables'),
align: 'center',
width: 180,
dataIndex: 'certifiedDeliverables',
scopedSlots: { customRender: 'text' }
},
{ // 类型
title: this.$t('marketListField.type'),
align: 'center',
width: 180,
dataIndex: 'type',
scopedSlots: { customRender: 'text' }
},
{ // 动力类型
title: this.$t('marketListField.dynamicType'),
align: 'center',
width: 180,
dataIndex: 'dynamicType',
scopedSlots: { customRender: 'text' }
},
{ // 主控部门
title: this.$t('marketListField.mainControlDepartment'),
align: 'center',
width: 180,
dataIndex: 'mainControlDepartment',
scopedSlots: { customRender: 'text' }
},
{ // 主控部门专业模块
title: this.$t('marketListField.masterControlDepartmentProfessionalModule'),
align: 'center',
width: 180,
dataIndex: 'masterControlDepartmentProfessionalModule',
scopedSlots: { customRender: 'text' }
},
{ // 关联部门
title: this.$t('marketListField.relatedDepartment'),
align: 'center',
width: 180,
dataIndex: 'relatedDepartment',
scopedSlots: { customRender: 'text' }
},
{ // 关联部门专业模块
title: this.$t('marketListField.associateDepartmentSpecializedModules'),
align: 'center',
width: 180,
dataIndex: 'associateDepartmentSpecializedModules',
scopedSlots: { customRender: 'text' }
},
{ // 批量限制
title: this.$t('marketListField.batchRestriction'),
align: 'center',
width: 180,
dataIndex: 'batchRestriction',
scopedSlots: { customRender: 'text' }
},
{ // 自动驾驶等级
title: this.$t('marketListField.automaticDrivingLevel'),
align: 'center',
width: 180,
dataIndex: 'automaticDrivingLevel',
scopedSlots: { customRender: 'text' }
},
{ // 要求类型
title: this.$t('marketListField.requirementType'),
align: 'center',
width: 180,
dataIndex: 'requirementType',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 170
}
],
showList: false, // 是否展示清单
url: {
list: ''
}
}
},
methods: {
// 下一步
handleNext () {
this.showList = true
},
// 取消
handleCancel () {
},
// 提交
handleSubmit () {
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.bottom-operate-box {
height: 52px;
padding: 10px 32px;
text-align: right;
.ant-btn {
margin-left: 15px;
}
}
.content-wrapper {
height: calc(100% - 52px);
box-sizing: border-box;
overflow: auto;
padding: 32px 20px;
}
</style>
@@ -0,0 +1,250 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<!-- 清单编号 -->
<a-col :md="6" :sm="12">
<a-form-item :label="$t('standardRegulationLibrary.marketRegulationsList.listNumber')">
<j-input
:placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.marketRegulationsList.listNumber')"
v-model="queryParam.listNumber"></j-input>
</a-form-item>
</a-col>
<!-- 清单名称 -->
<a-col :md="6" :sm="8">
<a-form-item :label="$t('standardRegulationLibrary.marketRegulationsList.listName')">
<j-input
:placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.marketRegulationsList.listName')"
v-model="queryParam.listName"></j-input>
</a-form-item>
</a-col>
<!-- 国家/地区 -->
<a-col :md="6" :sm="8">
<a-form-item :label="$t('standardRegulationLibrary.marketRegulationsList.countryRegion')">
<j-dict-select-tag
:placeholder="$t('pleaseSelect') + $t('standardRegulationLibrary.marketRegulationsList.countryRegion')"
v-model="queryParam.countryRegion"
dict-code="market_state"></j-dict-select-tag>
</a-form-item>
</a-col>
<template v-if="toggleSearchStatus">
<!-- 驾驶位置 -->
<a-col :md="6" :sm="8">
<a-form-item :label="$t('standardRegulationLibrary.marketRegulationsList.drivingPosition')">
<j-dict-select-tag
:placeholder="$t('pleaseSelect') + $t('standardRegulationLibrary.marketRegulationsList.drivingPosition')"
v-model="queryParam.drivingPosition"
dict-code="driving_position"></j-dict-select-tag>
</a-form-item>
</a-col>
<!-- 作者 -->
<a-col :md="6" :sm="8">
<a-form-item :label="$t('standardRegulationLibrary.marketRegulationsList.author')">
<j-input
:placeholder="$t('pleaseEnter') + $t('standardRegulationLibrary.marketRegulationsList.author')"
v-model="queryParam.author"></j-input>
</a-form-item>
</a-col>
</template>
<div style="float: right;overflow: hidden;" class="table-page-search-submitButtons">
<a @click="handleToggleSearch">
{{ toggleSearchStatus ? $t('putAway') : $t('open') }}
<a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
</a>
<a-button type="primary" @click="searchQuery" icon="search">{{ $t('query') }}</a-button>
<a-button type="primary" ghost @click="searchReset" icon="reload" style="margin-left: 8px">{{ $t('reset') }}</a-button>
</div>
</a-row>
</a-form>
</div>
<div class="table-operator">
<!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd">{{ $t('newlyAdded') }}</a-button>
<!-- 发布 -->
<a-button icon="plus" type="primary" @click="handleBatchPublish">{{ $t('release') }}</a-button>
<!-- 批量删除 -->
<a-button icon="delete" type="primary" ghost @click="batchDel">{{ $t('batchDelete') }}</a-button>
<!-- 导出 -->
<a-button icon="upload" type="primary" ghost @click="handleExportXls($t('standardRegulationLibrary.marketRegulationsList.exportName'))">
{{ $t('export') }}
</a-button>
<!-- 查看 -->
<a-button icon="eye" type="primary" ghost @click="handleLook">{{ $t('view') }}</a-button>
</div>
<!-- table区域-begin -->
<div>
<j-table
:can-drag="true"
:scroll="{x: '100%', y: yScrollHeight}"
ref="table"
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="false"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<!-- 清单编号清单名称 -->
<template v-slot:toDetail="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<a class="link-a" @click="toDetail(record)">{{ text }}</a>
</a-tooltip>
</template>
</j-table>
</div>
<!-- table区域-end -->
</a-card>
</template>
<script>
import JTable from '@/components/jero/JTable'
import JDictSelectTag from '@/components/dict/JDictSelectTag'
import { JeroListMixin } from '@/mixins/JeroListMixin'
import { ListState } from '../../../enums/commonEnums'
export default {
name: 'MarketRegulationsList',
components: { JTable, JDictSelectTag },
mixins: [JeroListMixin],
data () {
return {
columns: [
{ // 国家/地区
title: this.$t('standardRegulationLibrary.marketRegulationsList.countryRegion'),
align: 'center',
width: 180,
dataIndex: 'countryRegion',
scopedSlots: { customRender: 'text' }
},
{ // 清单编号
title: this.$t('standardRegulationLibrary.marketRegulationsList.listNumber'),
align: 'center',
width: 180,
dataIndex: 'listNumber',
scopedSlots: { customRender: 'toDetail' }
},
{ // 清单编号
title: this.$t('standardRegulationLibrary.marketRegulationsList.listName'),
align: 'center',
width: 180,
dataIndex: 'listName',
scopedSlots: { customRender: 'toDetail' }
},
{ // 驾驶位置
title: this.$t('standardRegulationLibrary.marketRegulationsList.drivingPosition'),
align: 'center',
width: 180,
dataIndex: 'drivingPosition',
scopedSlots: { customRender: 'text' }
},
{ // 清单版本
title: this.$t('standardRegulationLibrary.marketRegulationsList.listVersion'),
align: 'center',
width: 180,
dataIndex: 'listVersion',
scopedSlots: { customRender: 'text' }
},
{ // 发布时间
title: this.$t('standardRegulationLibrary.marketRegulationsList.releaseTime'),
align: 'center',
width: 180,
dataIndex: 'releaseTime',
scopedSlots: { customRender: 'text' }
},
{ // 作者
title: this.$t('standardRegulationLibrary.marketRegulationsList.author'),
align: 'center',
width: 180,
dataIndex: 'author',
scopedSlots: { customRender: 'text' }
},
{ // 清单状态
title: this.$t('standardRegulationLibrary.marketRegulationsList.listState'),
align: 'center',
width: 180,
dataIndex: 'listState',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 170
}
],
operationList: [
// 发布
{
text: this.$t('release'),
clickEvent: 'handlePublish',
has: '',
// 已发布状态不显示发布按钮??
show: (record) => {
return record.listState !== ListState.RELEASED.value
}
},
// 编辑
{
text: this.$t('edit'),
clickEvent: 'handleEdit',
has: ''
},
// 删除
{
text: this.$t('delete'),
clickEvent: 'handleDelete',
has: ''
}
],
url: {
list: '',
deleteBatch: '',
delete: ''
}
}
},
methods: {
// 新增
handleAdd () {
this.$router.push({
path: '/standardRegulationLibrary/marketRegulationsList/marketRegulationsFormPage',
query: {
title: this.$t('newlyAdded')
}
})
},
// 批量发布
handleBatchPublish () {
},
// 查看
handleLook () {
},
// 发布
handlePublish () {
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
</style>