feature: 标准跟踪清单-重构

This commit is contained in:
zyn
2024-01-29 17:33:22 +08:00
parent 9424197fc4
commit 0fff368258
7 changed files with 1537 additions and 26 deletions
@@ -0,0 +1,686 @@
<template>
<el-drawer
ref="standard"
title="查询结果"
size="1250px"
:visible.sync="visible"
direction="rtl"
append-to-body
>
<div style="flex: 1" class="drawer-content">
<div style="height: calc(100% - 56px)">
<el-form
:model="searchForm"
inline
class="label-input-form search-area"
style="justify-content: left;"
>
<el-form-item label="标准/政策来源" class="search-item">
<el-select
v-model="searchForm.dataSource"
placeholder="请选择标准/政策来源"
@change="dataSourceChange"
>
<el-option v-for="i in dataSourceOptions" :value="i.value" :label="i.label" />
</el-select>
</el-form-item>
<el-form-item
label="标准编号/政策文号"
style="margin-right:10px"
class="search-item"
>
<el-input
v-model="searchForm.lawNumber"
clearable
placeholder="根据编号查找"
:maxlength="100"
/>
</el-form-item>
<el-form-item
label="标准名称/政策名称"
style="margin-right:10px"
class="search-item"
>
<el-input
v-model="searchForm.lawName"
placeholder="根据名称查找"
clearable
:maxlength="100"
/>
</el-form-item>
<el-form-item>
<el-button
size="mini"
type="primary"
class="common-button-primary"
@click="onSearch"
>
查询
</el-button>
<el-button
class="common-button-default"
size="mini"
@click="onClear"
>
清空
</el-button>
</el-form-item>
</el-form>
<el-table
v-if="showTable"
ref="reviseDrawerTable"
:data="standardData"
tooltip-effect="dark"
style="width: 100%;"
border
height="calc(100% - 51px)"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px', fontWeight: 'bold', height: '48px'}"
@selection-change="selectionChange"
>
<el-table-column
fixed="left"
type="selection"
width="55"
align="center"
/>
<el-table-column
fixed="left"
type="index"
width="55"
label="序号"
align="center"
>
<template slot-scope="{scope, column, $index}">
{{ ($index + 1) + (searchForm.page - 1) * searchForm.pageSize }}
</template>
</el-table-column>
<div v-if="searchForm.dataSource === 'INLAND'">
<el-table-column
label="标准号"
width="150"
prop="standCode"
>
<template slot-scope="scope">
<a
v-if="scope.row.standYear && textStatusMap[scope.row.textStatus] === '废止'"
class="table-jump"
style="color: #F56C6C"
@click="handlePreview(scope.row)"
>{{ scope.row.standCode }}</a>
<a
v-else-if="scope.row.standYear"
class="table-jump"
style="color: #333333"
@click="handlePreview(scope.row)"
>{{ scope.row.standCode }}</a>
<a
v-else
class="table-jump"
style="color: #333333"
@click="handlePreview(scope.row)"
>{{ scope.row.standCode }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="standName"
label="标准名称"
min-width="300"
>
<template slot-scope="scope">
<a v-if="textStatusMap[scope.row.textStatus] === '废止'" class="table-jump" style="color: #F56C6C" @click="handlePreview(scope.row)">{{ scope.row.standName }}</a>
<a v-else style="color: #333333" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standName }}</a>
</template>
</el-table-column>
<el-table-column
prop="issueTime"
width="120"
label="发布日期"
>
<template slot-scope="scope">
<span v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C">{{ scope.row.issueTime }}</span>
<span v-else>{{ scope.row.issueTime }}</span>
</template>
</el-table-column>
<el-table-column
prop="ssrq"
width="120"
label="实施日期"
>
<template slot-scope="scope">
<span v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C">{{ scope.row.ssrq }}</span>
<span v-else>{{ scope.row.ssrq }}</span>
</template>
</el-table-column>
<el-table-column
prop="xcxssrq"
width="150"
label="新车型实施日期"
>
<template slot-scope="scope">
<span v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C">{{ scope.row.xcxssrq }}</span>
<span v-else>{{ scope.row.xcxssrq }}</span>
</template>
</el-table-column>
<el-table-column
prop="zccssrq"
width="150"
label="在产车实施日期"
>
<template slot-scope="scope">
<span v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C">{{ scope.row.zccssrq }}</span>
<span v-else>{{ scope.row.zccssrq }}</span>
</template>
</el-table-column>
<el-table-column
prop="textStatus"
width="110"
label="标准状态"
>
<template slot-scope="scope">
<span v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C">{{
textStatusMap[scope.row.textStatus]
}}</span>
<span v-else>{{ textStatusMap[scope.row.textStatus] }}</span>
</template>
</el-table-column>
</div>
<div v-if="searchForm.dataSource === 'FOREIGN'">
<el-table-column
label="标准号"
width="150"
prop="standCode"
>
<template slot-scope="scope">
<a
v-if="scope.row.standYear && textStatusMap[scope.row.textStatus] === '废止'"
style="color: #F56C6C"
class="table-jump"
@click="handlePreview(scope.row)"
>{{ scope.row.standCode }}</a>
<a
v-else-if="scope.row.standYear && textStatusMap[scope.row.textStatus] === '——' "
style="color: #409EFF"
class="table-jump"
@click="handlePreview(scope.row)"
>{{ scope.row.standCode }}</a>
<a
v-else-if="scope.row.standYear"
style="color: #333333"
class="table-jump"
@click="handlePreview(scope.row)"
>{{ scope.row.standCode }}</a>
<a
v-else
style="color: #333333"
class="table-jump"
@click="handlePreview(scope.row)"
>{{ scope.row.standCode }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="standName"
label="标准名称"
min-width="300"
>
<template slot-scope="scope">
<a v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C" class="table-jump" @click="handlePreview(scope.row)">{{
scope.row.standName
}}</a>
<a v-else-if="textStatusMap[scope.row.textStatus] === '——' " style="color: #409EFF" class="table-jump" @click="handlePreview(scope.row)">{{
scope.row.standName
}}</a>
<a v-else style="color: #333333" class="table-jump" @click="handlePreview(scope.row)">{{
scope.row.standName
}}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="standEnName"
label="英文名称"
min-width="300"
>
<template slot-scope="scope">
<a v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C" class="table-jump" @click="handlePreview(scope.row)">{{
scope.row.standEnName
}}</a>
<a v-else-if="textStatusMap[scope.row.textStatus] === '——' " style="color: #409EFF" class="table-jump" @click="handlePreview(scope.row)">{{
scope.row.standEnName
}}</a>
<a v-else style="color: #333333" class="table-jump" @click="handlePreview(scope.row)">{{
scope.row.standEnName
}}</a>
</template>
</el-table-column>
<el-table-column
prop="issueTime"
width="120"
label="发布日期"
>
<template slot-scope="scope">
<div v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C">
{{ scope.row.issueTime }}
</div>
<div v-else-if="textStatusMap[scope.row.textStatus] === '——' " style="color: #409EFF">
{{ scope.row.issueTime }}
</div>
<div v-else style="color: #333333">
{{ scope.row.issueTime }}
</div>
</template>
</el-table-column>
<el-table-column
prop="ssrq"
width="120"
label="实施日期"
>
<template slot-scope="scope">
<span v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C">{{
scope.row.ssrq
}}</span>
<span v-else-if="textStatusMap[scope.row.textStatus] === '——' " style="color: #409EFF">{{
scope.row.ssrq
}}</span>
<span v-else style="color: #333333">{{ scope.row.ssrq }}</span>
</template>
</el-table-column>
<el-table-column
prop="xcxssrq"
width="150"
label="新车型实施日期"
>
<template slot-scope="scope">
<span v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C">{{
scope.row.xcxssrq
}}</span>
<span v-else-if="textStatusMap[scope.row.textStatus] === '——' " style="color: #409EFF">{{
scope.row.xcxssrq
}}</span>
<span v-else style="color: #333333">{{
scope.row.xcxssrq
}}</span>
</template>
</el-table-column>
<el-table-column
prop="zccssrq"
width="150"
label="在产车实施日期"
>
<template slot-scope="scope">
<span v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C">{{
scope.row.zccssrq
}}</span>
<span v-else-if="textStatusMap[scope.row.textStatus] === '——' " style="color: #409EFF">{{
scope.row.zccssrq
}}</span>
<span v-else style="color: #333333">{{
scope.row.zccssrq
}}</span>
</template>
</el-table-column>
<el-table-column
prop="textStatus"
width="110"
label="标准状态"
>
<template slot-scope="scope">
<span v-if="textStatusMap[scope.row.textStatus] === '废止'" style="color: #F56C6C">{{
textStatusMap[scope.row.textStatus]
}}</span>
<span v-else-if="textStatusMap[scope.row.textStatus] === '——' " style="color: #409EFF">{{
textStatusMap[scope.row.textStatus]
}}</span>
<span v-else style="color: #333333">{{ textStatusMap[scope.row.textStatus] }}</span>
</template>
</el-table-column>
</div>
<div v-if="searchForm.dataSource === 'FOREIGN_LAWS'">
<el-table-column
show-overflow-tooltip
label="政策文号"
width="150"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.lawsNo }}</a>
<a v-if="scope.row.standStatusShow === '参考'" style="color: #E6A23C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.lawsNo }}</a>
<a v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'" style="color: #333333" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.lawsNo }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="lawsName"
label="中文名称"
min-width="300"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.lawsName }}</a>
<a v-if="scope.row.standStatusShow === '参考' " style="color: #E6A23C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.lawsName }}</a>
<a v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'" style="color: #333333" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.lawsName }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="lawsEnName"
label="英文名称"
min-width="300"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.lawsEnName }}</a>
<a v-if="scope.row.standStatusShow === '参考'" style="color: #E6A23C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.lawsEnName }}</a>
<a v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'" style="color: #333333" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.lawsEnName }}</a>
</template>
</el-table-column>
<el-table-column
prop="issueTime"
label="发文日期"
width="120"
>
<template slot-scope="scope">
<span v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C">{{ scope.row.issueTime }}</span>
<span v-if="scope.row.standStatusShow === '参考' " style="color: #E6A23C">{{ scope.row.issueTime }}</span>
<span v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'">{{ scope.row.issueTime }}</span>
</template>
</el-table-column>
<el-table-column
prop="XCXSSRQLAWS"
label="新车实施日期"
width="150"
>
<template slot-scope="scope">
<span v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C">{{ scope.row.putTime }}</span>
<span v-if="scope.row.standStatusShow === '参考'" style="color: #E6A23C">{{ scope.row.putTime }}</span>
<span v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'">{{ scope.row.XCXSSRQLAWS }}</span>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="standStatusShow"
label="标准状态"
width="110"
>
<template slot-scope="scope">
<span v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C">
{{ scope.row.standStatusShow }}
</span>
<span v-if="scope.row.standStatusShow === '参考'" style="color: #E6A23C">
{{ scope.row.standStatusShow }}
</span>
<span v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'">
{{ scope.row.standStatusShow }}
</span>
</template>
</el-table-column>
</div>
<div v-if="searchForm.dataSource === 'BUSINESS_STAND'">
<el-table-column
show-overflow-tooltip
label="企标编号"
width="150"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standCode }}</a>
<a v-if="scope.row.standStatusShow === '参考'" style="color: #E6A23C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standCode }}</a>
<a v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'" style="color: #333333" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standCode }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="standName"
label="中文名称"
min-width="300"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standName }}</a>
<a v-if="scope.row.standStatusShow === '参考' " style="color: #E6A23C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standName }}</a>
<a v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'" style="color: #333333" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standName }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="standEnName"
label="英文名称"
min-width="300"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standEnName }}</a>
<a v-if="scope.row.standStatusShow === '参考'" style="color: #E6A23C" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standEnName }}</a>
<a v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'" style="color: #333333" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standEnName }}</a>
</template>
</el-table-column>
<el-table-column
prop="issueTime"
label="发布日期"
width="120"
>
<template slot-scope="scope">
<span v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C">{{ scope.row.issueTime }}</span>
<span v-if="scope.row.standStatusShow === '参考' " style="color: #E6A23C">{{ scope.row.issueTime }}</span>
<span v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'">{{ scope.row.issueTime }}</span>
</template>
</el-table-column>
<el-table-column
prop="putTime"
label="实施日期"
width="120"
>
<template slot-scope="scope">
<span v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C">{{ scope.row.putTime }}</span>
<span v-if="scope.row.standStatusShow === '参考'" style="color: #E6A23C">{{ scope.row.putTime }}</span>
<span v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'">{{ scope.row.putTime }}</span>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="standStatusShow"
label="标准状态"
width="110"
>
<template slot-scope="scope">
<span v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C">
{{ scope.row.standStatusShow }}
</span>
<span v-if="scope.row.standStatusShow === '参考'" style="color: #E6A23C">
{{ scope.row.standStatusShow }}
</span>
<span v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'">
{{ scope.row.standStatusShow }}
</span>
</template>
</el-table-column>
</div>
</el-table>
</div>
<pagination
:page="searchForm.page"
:total="searchForm.total"
@pageChange="pageChange"
@pageSizeChange="pageSizeChange"
/>
</div>
<div class="drawer-footer">
<el-button
round
class="common-button-primary"
icon="el-icon-check"
type="primary"
@click="onDrag"
>
带入
</el-button>
<el-button
round
class="common-button-default"
icon="el-icon-close"
@click="onCancel"
>
取消
</el-button>
</div>
<loading :loading="loading">数据获取中</loading>
</el-drawer>
</template>
<script>
export default {
name: 'StandardListDrawer',
data () {
const dataSourceOptions = [
{
label: '国内标准库',
value: 'INLAND'
},
{
label: '海外标准库',
value: 'FOREIGN'
},
{
label: '国内外政策库',
value: 'FOREIGN_LAWS'
},
{
label: '企业标准库',
value: 'BUSINESS_STAND'
},
]
const searchForm = {
dataSource: 'INLAND',
standType: 'INLAND',
lawCode: '',
lawName: '',
productType: '',
page: 1,
total: 0,
pageSize: this.$store.getters.userInfo.configContent,
}
return {
searchForm,
initSearchForm: JSON.parse(JSON.stringify(searchForm)),
dataSourceOptions,
standardData: [],
loading: false,
url: {
INLANDFOREIGN: 'sarStandardsInfo/sar-standards-info/getSarStandardsInfoPage',
FOREIGN_LAWS: 'lawss/sarLawsInfo/page',
BUSINESS_STAND: 'lawss/sarBussionessStand/getSarBussionStandPage'
},
textStatusMap: {},
showTable: true,
visible: false,
selectedList: [],
}
},
created () {
this.getDicTypeListCode()
this.getData()
},
methods: {
open () {
this.visible = true
this.searchForm = JSON.parse(JSON.stringify(this.initSearchForm))
this.selectedList = []
this.getData()
},
onCancel () {
this.visible = false
},
getData () {
const config = {
_this: this,
loading: 'loading'
}
let url = this.url.INLANDFOREIGN
switch (this.searchForm.dataSource) {
case 'INLAND':
case 'FOREIGN':
url = this.url.INLANDFOREIGN
break
case 'FOREIGN_LAWS':
url = this.url.FOREIGN_LAWS
break
case 'BUSINESS_STAND':
url = this.url.BUSINESS_STAND
break
}
this.searchForm.standType = this.searchForm.dataSource
this.$http._getData(url, this.searchForm, config).then(res => {
if (res.ok) {
this.standardData = res.data.list
this.searchForm.total = res.data.count
this.showTable = false
this.$nextTick(() => {
this.showTable = true
})
}
})
},
pageChange (page) {
this.searchForm.page = page
this.getData()
},
pageSizeChange (pageSize) {
this.searchForm.pageSize = pageSize
this.getData()
},
dataSourceChange () {
const standType = this.searchForm.dataSource
this.searchForm = JSON.parse(JSON.stringify(this.initSearchForm))
this.searchForm.dataSource = standType
this.searchForm.standType = standType
this.getData()
},
onSearch () {
this.searchForm.page = 1
this.getData()
},
onClear () {
this.getData()
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
if (res.ok) {
this.dict = { ...res.data }
this.setMap(this.dict.WBZTCLASS, 'textStatusMap')
}
})
},
setMap (data, key) {
data.forEach(item => {
this.$set(this[key], item.value, item.label);
});
},
selectionChange (selection) {
this.selectedList = selection
},
onDrag () {
this.$emit('dragIn', {
list: this.selectedList,
type: this.searchForm.dataSource
})
this.visible = false
}
}
}
</script>
<style scoped lang="less">
.drawer-content{
padding: 0 19px;
overflow-y: auto;
flex: 1;
position: relative;
}
.drawer-footer {
width: 100%;
padding: 0 20px;
height: 70px;
line-height: 69px;
border-top: 1px solid #e8e8e8;
text-align: right;
background: #fff;
z-index: 999;
}
</style>
@@ -5,33 +5,35 @@
<h4>{{ title }}</h4>
<div style="margin-top: 10px;width: 300px;max-width: 100%">
<el-input
:disabled="disabled"
:value="name"
:placeholder="`选择${title}`"
readonly
@click.native="choice(id)"></el-input>
:disabled="disabled"
:value="name"
:placeholder="placeholder || `选择${title}`"
readonly
@click.native="choice(id)"
/>
</div>
</el-form-item>
</el-card>
<Role-tree v-if="!disabled"
:check-box="!multiple"
:is-title="`选择${title}`"
:is-visible.sync="modalShowFlag"
@checkedRole="checkedRole"
:nodeList="nodeList"
></Role-tree>
<Role-tree
v-if="!disabled"
:check-box="!multiple"
:is-title="`选择${title}`"
:is-visible.sync="modalShowFlag"
:nodeList="nodeList"
@checkedRole="checkedRole"
/>
</el-timeline-item>
</template>
<script>
export default {
name: "TimeLineFormItem",
name: 'TimeLineFormItem',
props: {
id:{
id: {
type: String,
required: true
},
name:{
name: {
type: String,
required: true
},
@@ -50,14 +52,17 @@ export default {
type: String,
required: true
},
multiple: {// 多选
multiple: { // 多选
type: Boolean,
default: false
},
placeholder: {
type: String
}
},
data () {
return {
drawerTitle: '', //drawer标题
drawerTitle: '', // drawer标题
modalShowFlag: false, // drawer开关
nodeList: [],
}
@@ -77,7 +82,7 @@ export default {
this.$emit('update:name', name)
},
joint (data, type) {
return data.reduce((init,item) => {
return data.reduce((init, item) => {
if (init === '') {
return item[type]
} else {
@@ -47,6 +47,7 @@
:visible.sync="fileMadel"
title="上传文件"
:close-on-click-modal="false"
append-to-body
>
<el-upload
ref="importfile"
@@ -0,0 +1,215 @@
<template>
<div style="height: calc(100% - 155px)">
<el-button
type="primary"
size="mini"
style="margin-bottom: 10px;"
@click="handleSearchStandard"
>
手动查找
</el-button>
<el-button
type="danger"
size="mini"
style="margin-bottom: 10px;"
@click="handleDeleteStandard"
>
批量删除
</el-button>
<el-table
ref="selection"
class="table"
:data="data"
tooltip-effect="dark"
style="width:100%;height: calc(100% - 40px)"
height="string"
border
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px', fontWeight: 'bold', height: '48px', padding: 0}"
:cell-style="{padding: 0}"
@selection-change="selectionChange"
>
<el-table-column
type="selection"
width="55"
align="center"
/>
<el-table-column
type="index"
width="55"
label="序号"
align="center"
>
<template slot-scope="{scope, column, $index}">
{{ ($index + 1) }}
</template>
</el-table-column>
<el-table-column
label="标准编号/政策文号"
show-overflow-tooltip
prop="lawCode"
align="center"
/>
<el-table-column
show-overflow-tooltip
prop="lawName"
label="标准名称/政策名称"
align="center"
/>
<el-table-column
prop="productType"
align="center"
show-overflow-tooltip
label="产品类型"
>
<template slot-scope="{row, column, $index}">
<el-select
v-model="row.productType"
placeholder="请选择产品类型"
size="mini"
clearable
>
<el-option
v-for="item in dict.trackingChecklistProductType"
:key="item.value"
:value="item.value"
:label="item.label"
/>
</el-select>
</template>
</el-table-column>
<el-table-column
prop="implTime"
align="center"
show-overflow-tooltip
label="实施日期"
>
<template slot-scope="{row, column, $index}">
<el-date-picker
v-model="row.implTime"
size="mini"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期"
/>
</template>
</el-table-column>
<el-table-column
prop="implRequire"
align="center"
show-overflow-tooltip
label="实施要求"
>
<template slot-scope="{row, column, $index}">
<el-select
v-model="row.implRequire"
placeholder="请选择实施要求"
clearable
size="mini"
>
<el-option
v-for="item in dict.trackingChecklistPutDemand"
:key="item.value"
:value="item.value"
:label="item.label"
/>
</el-select>
</template>
</el-table-column>
</el-table>
<StandardListDrawer ref="StandardListDrawerRef" @dragIn="dragIn" />
</div>
</template>
<script>
import StandardListDrawer from '@/components/hzwlComponents/StandardListDrawer'
export default {
name: 'Inventory',
components: {
StandardListDrawer
},
props: {
data: {
type: Array,
default: () => []
}
},
data () {
return {
selectedList: [],
dict: {}
}
},
created () {
this.getDicTypeListCode()
},
methods: {
handleSearchStandard () {
this.$refs.StandardListDrawerRef.open()
},
selectionChange (selection) {
this.selectedList = selection
},
dragIn ({ list, type }) {
if (list.some(item => this.data.some(i => i.id === item.id))) {
this.$message.warning('请勿重复添加数据')
return
}
const newList = list.map(item => {
let lawCode = ''
let lawName = ''
switch (type) {
case 'INLAND':
case 'FOREIGN':
case 'BUSINESS_STAND':
lawCode = item.standCode
lawName = item.standName
break
case 'FOREIGN_LAWS':
lawCode = item.lawsNo
lawName = item.lawsName
break
}
return {
id: item.id,
dataSource: type,
lawCode,
lawName,
productType: '',
implTime: '',
implRequire: ''
}
})
this.data.push(...newList)
},
handleDeleteStandard () {
if (this.selectedList.length === 0) {
this.$message.warning('请选择要删除的数据')
return
}
this.$confirm('确认删除这些数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
}).then(() => {
this.data = this.data.filter(item => !this.selectedList.some(i => i.id === item.id))
})
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
}
}
}
</script>
<style scoped lang="less">
.table{
/deep/ .el-date-editor.el-input, .el-date-editor.el-input__inner {
width: 145px !important;
}
}
</style>
@@ -0,0 +1,133 @@
<template>
<el-timeline>
<el-form
ref="userForm"
:model="roleForm"
:rules="roleRules"
class="label-input-form"
>
<TimeLineFormItem
:id.sync="roleForm.prcCreateUser"
prop="prcCreateUserName"
timestamp="发起流程"
title="起草"
placeholder="请选择起草人"
:name.sync="roleForm.prcCreateUserName"
disabled
/>
<TimeLineFormItem
:id.sync="roleForm.shr1UserIds"
prop="shr1UserNames"
timestamp="审核"
title="审核"
placeholder="请选择审核人"
multiple
:name.sync="roleForm.shr1UserNames"
:disabled="disabled"
/>
<TimeLineFormItem
:id.sync="roleForm.sdr1UserIds"
prop="sdr1UserNames"
timestamp="审定"
title="审定"
placeholder="请选择审定人"
multiple
:name.sync="roleForm.sdr1UserNames"
:disabled="disabled"
/>
<TimeLineFormItem
:id.sync="roleForm.pzr1UserId"
prop="pzr1UserName"
timestamp="批准"
title="批准"
placeholder="请选择批准人"
:name.sync="roleForm.pzr1UserName"
:disabled="disabled"
/>
<TimeLineFormItem
:id.sync="roleForm.djrUserIds"
prop="djrUserNames"
timestamp="责任对接人分配任务"
title="责任对接人分配任务"
placeholder="责任对接人分配任务"
multiple
:name.sync="roleForm.djrUserNames"
:disabled="disabled"
/>
<TimeLineFormItem
:id.sync="roleForm.glyUserId"
prop="glyUserName"
timestamp="管理员"
title="管理员"
:name.sync="roleForm.glyUserName"
:disabled="disabled"
/>
<TimeLineFormItem
:id.sync="roleForm.shr2UserIds"
prop="shr2UserNames"
timestamp="审核"
title="审核"
placeholder="请选择审核人"
multiple
:name.sync="roleForm.shr2UserNames"
:disabled="disabled"
/>
<TimeLineFormItem
:id.sync="roleForm.sdr2UserIds"
prop="sdr2UserNames"
timestamp="审定"
title="审定"
placeholder="请选择审定人"
multiple
:name.sync="roleForm.sdr2UserNames"
:disabled="disabled"
/>
<TimeLineFormItem
:id.sync="roleForm.pzr2UserId"
prop="pzr2UserName"
timestamp="批准"
title="批准"
placeholder="请选择批准人"
:name.sync="roleForm.pzr2UserName"
:disabled="disabled"
/>
<TimeLineFormItem
:id.sync="roleForm.csrUserIds"
prop="csrUserNames"
timestamp="抄送"
title="抄送"
placeholder="请选择抄送人"
:name.sync="roleForm.csrUserNames"
:disabled="disabled"
/>
</el-form>
</el-timeline>
</template>
<script>
import TimeLineFormItem from '@/components/hzwlComponents/TimeLineFormItem'
export default {
name: 'PersonInfo',
components: {
TimeLineFormItem
},
props: {
roleForm: {
type: Object,
required: true,
},
roleRules: {
type: Object,
required: true,
},
disabled: {
type: Boolean,
default: false
}
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,218 @@
<template>
<el-drawer
:title="title"
:visible="showDrawer"
:wrapperClosable="false"
size="1000px"
@close="onClose"
>
<div class="drawer-content">
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="150px"
label-position="left"
style="height: 100%"
>
<InputFormItem
v-model="form.checkListName"
class="form-item-first"
prop="checkListName"
label="核查清单名称"
/>
<UploadFormItem
label="模板"
:ids.sync="form.checklistTemplate"
:names.sync="form.checklistTemplateName"
/>
<el-tabs v-model="activeName">
<el-tab-pane label="核查清单" name="1" />
<el-tab-pane label="人员信息" name="2" />
</el-tabs>
<Inventory v-show="activeName === '1'" :data="form.issueTrackList" />
<PersonInfo v-show="activeName === '2'" ref="roleForm" :roleForm="roleForm" :roleRules="roleRules" />
</el-form>
</div>
<div class="drawer-footer">
<el-button
icon="el-icon-check"
type="primary"
size="mini"
:loading="isSubmit"
@click="onSubmit"
>
提交
</el-button>
<el-button icon="el-icon-close" size="mini" :loading="isSubmit" @click="onClose">取消</el-button>
</div>
</el-drawer>
</template>
<script>
import UploadFormItem from '@/components/hzwlComponents/UploadFormItem'
import InputFormItem from '@/components/hzwlComponents/InputFormItem'
import PersonInfo from './PersonInfo'
import Inventory from './Inventory'
export default {
name: 'AddModel',
components: {
UploadFormItem,
InputFormItem,
PersonInfo,
Inventory,
},
data () {
const form = {
checkListName: '',
checklistTemplate: '',
checklistTemplateName: '',
issueTrackList: [],
}
const roleForm = {
prcCreateUser: this.$store.getters.userInfo.account,
prcCreateUserName: this.$store.getters.userInfo.userName,
shr1UserIds: '',
shr1UserNames: '',
sdr1UserIds: '',
sdr1UserNames: '',
pzr1UserId: '',
pzr1UserName: '',
djrUserIds: '',
djrUserNames: '',
glyUserId: '',
glyUserName: '',
shr2UserIds: '',
shr2UserNames: '',
sdr2UserIds: '',
sdr2UserNames: '',
pzr2UserId: '',
pzr2UserName: '',
csrUserIds: '',
csrUserNames: '',
}
const rules = {
checkListName: [
{ required: true, message: '核查清单名称不能为空', trigger: 'change' }
],
}
const roleRules = {
shr1UserNames: [
{ required: true, message: '请选择审核人', trigger: 'change' },
],
sdr1UserNames: [
{ required: true, message: '请选择审定人', trigger: 'change' },
],
pzr1UserName: [
{ required: true, message: '请选择批准人', trigger: 'change' },
],
djrUserNames: [
{ required: true, message: '请选择责任对接人', trigger: 'change' },
],
glyUserName: [
{ required: true, message: '请选择管理员', trigger: 'change' },
],
shr2UserNames: [
{ required: true, message: '请选择审核人', trigger: 'change' },
],
sdr2UserNames: [
{ required: true, message: '请选择审定人', trigger: 'change' },
],
pzr2UserName: [
{ required: true, message: '请选择批准人', trigger: 'change' },
],
csrUserNames: [
{ required: true, message: '请选择抄送人', trigger: 'change' },
],
}
return {
title: '新增',
showDrawer: false,
isSubmit: false,
form,
roleForm,
rules,
roleRules,
activeName: '1',
url: {
save: 'standardTrackingCheckList/save',
update: 'standardTrackingCheckList/update',
}
}
},
methods: {
onClose () {
this.showDrawer = false
},
add () {
this.title = '新增'
this.showDrawer = true
},
edit () {
this.title = '编辑'
this.showDrawer = true
},
onSubmit () {
if (this.form.issueTrackList.length === 0) {
return this.$message.warning('请添加核查清单')
}
this.$refs.form.validate(valid => {
if (!valid)
return this.$message.warning('请完善基础信息');
this.$refs['roleForm'].$refs['userForm'].validate(valid => {
if (!valid)
return this.$message.warning('请完善人员信息');
const url = this.title === '新增' ? this.url.save : this.url.update
const form = Object.assign(this.form, { roleForm: this.roleForm })
const config = {
_this: this,
loading: 'isSubmit',
}
this.$http._postData(url, form, config).then(res => {
if (res.ok) {
this.$message.success('操作成功')
this.showDrawer = false
} else {
this.$message.error(res.message)
}
})
})
})
},
}
}
</script>
<style scoped lang="less">
.drawer-content {
padding: 0 19px;
overflow-y: auto;
flex: auto;
/deep/ .el-form-item{
margin-bottom: 0;
color: #666;
.el-form-item__label {
line-height: 50px;
}
.el-form-item__content{
line-height: 50px;
}
}
.form-item-first {
/deep/ .el-input__inner{
border: none;
}
}
}
.drawer-footer {
width: 100%;
padding: 0 20px;
height: 70px;
line-height: 69px;
border-top: 1px solid #e8e8e8;
text-align: right;
background: #fff;
z-index: 999;
}
</style>
@@ -1,27 +1,280 @@
<template>
<div class="standardTrackingList">
<listTracking></listTracking>
<div class="root">
<div class="search-area">
<el-form :modal="searchForm" :inline="true" class="label-input-form">
<el-form-item label="核查清单名称" class="search-item">
<el-input
v-model="searchForm.checkListName"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="标准编号/政策文号" class="search-item">
<el-input
v-model="searchForm.lawCode"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="标准名称/政策名称" class="search-item">
<el-input
v-model="searchForm.lawName"
placeholder="请输入"
/>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
v-btn-permission="'23e01cb6ac6bfcedd39537f236a769e5'"
type="primary"
class="common-button-primary"
size="small"
@click="onSearch"
>
查询
</el-button>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
v-btn-permission="'41945d15f5cb658665ef4916f62354a2'"
class="common-button-default"
size="small"
@click="onClear"
>
清空
</el-button>
</el-form-item>
</el-form>
</div>
<div class="action-bar">
<el-button
v-btn-permission="'226bcb0d4d1b5767183d51186f24c57a'"
type="primary"
size="mini"
@click="add"
>
<i class="el-icon-plus" />新增
</el-button>
<el-button
v-btn-permission="''"
size="mini"
>
模板下载
</el-button>
<el-button
v-btn-permission="''"
size="mini"
>
导入
</el-button>
<el-button
v-btn-permission="''"
size="mini"
>
导出
</el-button>
<el-button
v-btn-permission="'bdc3bb8549669702642f86aa4323c568'"
size="mini"
>
批量删除
</el-button>
<el-button
v-btn-permission="''"
size="mini"
>
流程下发
</el-button>
</div>
<div class="container">
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width:100%;height: calc(100% - 57px)"
height="string"
border
class="drag-table"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px', fontWeight: 'bold', height: '48px', padding: 0}"
:cell-style="{padding: 0}"
@sort-change="sortChange"
@selection-change="selectionChange"
>
<el-table-column
type="selection"
width="55"
align="center"
/>
<el-table-column
type="index"
width="55"
label="序号"
align="center"
>
<template slot-scope="{scope, column, $index}">
{{ ($index + 1) + (searchForm.page - 1) * searchForm.pageSize }}
</template>
</el-table-column>
<el-table-column
prop="checkListName"
label="核查清单名称"
align="center"
sortable="custom"
>
<template slot-scope="{row, column, $index}">
<a class="table-jump" style="color: #2d8cf0" @click="handlePreview(row.id)">{{ row.checkListName }}</a>
</template>
</el-table-column>
<el-table-column
prop="createUserId"
label="创建人"
align="center"
sortable="custom"
/>
<el-table-column
prop="modifyTime"
label="更新时间"
align="center"
sortable="custom"
/>
<el-table-column
prop="processIssuanceTime"
label="流程下发时间"
align="center"
sortable="custom"
/>
<el-table-column
prop="processCompleteTime"
label="流程完成时间"
align="center"
sortable="custom"
/>
<el-table-column
prop="processNum"
label="流程编号"
align="center"
sortable="custom"
>
<template slot-scope="{row, column, $index}">
<a class="table-jump" style="color: #2d8cf0" @click="handlePreview(row.id)">{{ row.processNum }}</a>
</template>
</el-table-column>
<el-table-column
prop="processStatus"
label="流程状态"
align="center"
sortable="custom"
/>
</el-table>
<pagination :page="searchForm.page" :total="searchForm.total" @pageChange="pageChange" @pageSizeChange="pageSizeChange" />
<loading :loading="loading">数据获取中...</loading>
</div>
<addModel ref="addModel" />
</div>
</template>
<script>
import listTracking from "@/pages/regulatoryRepository/accessStandardsAndRegulations/page/listTracking";
import addModel from './addModel'
export default {
name: 'StandardTrackingList',
components: {
listTracking
addModel
},
data() {
data () {
const searchForm = {
checkListName: '',
lawCode: '',
lawName: '',
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
}
return {
searchForm,
initSearchForm: JSON.parse(JSON.stringify(searchForm)),
loading: false,
url: {
page: 'standardTrackingCheckList/page',
save: 'standardTrackingCheckList/save',
remove: 'standardTrackingCheckList/remove',
getById: 'standardTrackingCheckList/getById',
update: 'standardTrackingCheckList/update',
exportTrackingChecklist: 'standardTrackingCheckList/exportTrackingChecklist',
exportTemplateFile: 'standardTrackingCheckList/exportTemplateFile',
},
data: [],
selectedList: [],
}
},
created () {
this.getData()
},
methods: {
getData () {
const config = {
_this: this,
loading: 'loading'
}
this.$http._getData(this.url.page, this.searchForm, config).then(res => {
if(res.ok) {
this.data = res.data
}
})
},
pageChange (page) {
this.searchForm.page = page
this.getData()
},
pageSizeChange (pageSize) {
this.searchForm.pageSize = pageSize
this.getData()
},
onSearch () {
this.getData()
},
onClear () {
this.searchForm = JSON.parse(JSON.stringify(this.initSearchForm))
this.getData()
},
selectionChange (data) {
this.selectedList = []
for (let i = 0; i < data.length; i++) {
this.selectedList.push(data[i].id)
}
},
sortChange ({ column, prop, order }) {
this.searchForm.sortField = prop
this.searchForm.sortMode = 'asc'
if (order === 'descending') {
this.searchForm.sortMode = 'desc'
}
if (!order) {
this.searchForm.sortField = ''
this.searchForm.sortMode = ''
}
this.getData()
},
add () {
this.$refs.addModel.add()
}
}
}
</script>
<style lang="less" scoped>
.standardTrackingList {
height: 100%;
}
.root{
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
.search-area {
.search-item /deep/ .el-button--small {
padding: 8px 15px !important;
height: 30px !important;
}
}
.action-bar /deep/ .el-button{
height: 32px !important;
}
.container {
flex: 1;
}
</style>