Merge remote-tracking branch 'origin/dev_20230829_change' into dev_20231101_TXSS

# Conflicts:
#	src/common/axios/index.js
#	src/pages/config/pages/attributeCustom/components/standSystem.vue
This commit is contained in:
gaosong
2023-11-13 16:44:05 +08:00
316 changed files with 26390 additions and 625 deletions
+4 -3
View File
@@ -14,11 +14,14 @@
"axios": "^0.21.1",
"babel-polyfill": "^6.26.0",
"core-js": "^3.6.5",
"cross-env": "^5.0.5",
"echarts": "^5.0.1",
"element-ui": "^2.13.2",
"es6-promise": "^4.2.8",
"increase-memory-limit": "^1.0.3",
"jquery": "^3.5.1",
"js-base64": "^2.6.2",
"lodash": "^4.17.21",
"moment": "^2.29.1",
"qs": "latest",
"sortablejs": "^1.14.0",
@@ -31,9 +34,7 @@
"vue-custom-scrollbar": "^1.4.4",
"vue-i18n": "^8.22.4",
"vue-router": "^3.2.0",
"vuex": "^3.4.0",
"increase-memory-limit": "^1.0.3",
"cross-env": "^5.0.5"
"vuex": "^3.4.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
+44 -1
View File
@@ -49,7 +49,14 @@ export function inboundLiaisonDetail (data) {
params: data
})
}
// 联络人分配FO详情查询
export function queryZchgxxmscTaskDetail (data) {
return axios({
url: '/api/lawss/activiti/queryZchgxxmscTaskDetail',
method: 'get',
params: data
})
}
// 流程保存
export function saveTask (data) {
return axios({
@@ -1074,3 +1081,39 @@ export function productDeptIssue(params) {
params
})
}
// 内外部会议入库
export function processCreateMeeting (data) {
return axios({
url: '/api/lawss/meeting/processCreateMeeting',
method: 'post',
data
})
}
// 政策课题入会
export function processLawsTopicMembership (data) {
return axios({
url: '/api/lawss/sarLawsTopic/processLawsTopicMembership',
method: 'post',
data
})
}
// 政策课题参会
export function processLawsTopicParticipation (data) {
return axios({
url: '/api/lawss/sarLawsTopic/processLawsTopicParticipation',
method: 'post',
data
})
}
// 政策法规资料入库流程
export function processLawsRegulatoryInformation (data) {
return axios({
url: '/api/lawss/sarLawsTopic/processLawsRegulatoryInformation',
method: 'post',
data
})
}
+28
View File
@@ -635,6 +635,34 @@ export default {
})
},
// formData
_put (url, params = {}, config = {}) {
var _formData = formData(params)
// 参数包含this
let _this = config._this || false
// 参数包含loading
let loading = config.loading || false
// 是否显示操作提示
let showTips = config.showTips === undefined ? true : config.showTips
if (_this && loading) { _this[loading] = true }
return new Promise((resolve,reject) => {
_axios.put(api() + url + '?' + new Date().getTime(), _formData).then(res => {
if (res.data.ok !== undefined && showTips) {
let type = res.data.ok ? 'success' : 'warning'
if (_this && res.data.message !== '' && res.data.message !== null) {
Message[type](res.data.message)
}
}
resolve(res.data)
}).catch(err => {
reject(err)
}).finally(()=>{
if (_this && loading) { _this[loading] = false }
})
})
},
_downloadFile (url, params = {}, method = 'get', fileName = '导出文件') {
_axios({
method,
@@ -18,7 +18,7 @@
clearable
:editable="true"
:disabled="disabled"
:placeholder="placeholder"
:placeholder="placeholder || defaultPlaceholder"
@input="handleChange"
>
</el-date-picker>
@@ -49,10 +49,13 @@ export default {
span: {
type: Number,
default: 24
},
placeholder: {
type: String
}
},
computed: {
placeholder () {
defaultPlaceholder () {
return `请选择${this.config.attrName}`
},
showMessage () {
+16 -3
View File
@@ -4,6 +4,7 @@
<el-form-item
:label="config.attrName"
:prop="config.attrField"
:rules="rules"
:label-width="labelWidth"
class="add-form-item"
:class="{'form-item-disabled': disabled}"
@@ -197,6 +198,14 @@ export default {
showModifyName: {
type: Boolean,
default: false
},
rules: {
type: Array
},
// 单位 M
size: {
type: Number,
default: 200
}
},
watch: {
@@ -314,12 +323,16 @@ export default {
fileSuffix = fileSuffix.toLocaleLowerCase()
// 判断上传文件格式
if (!this.allowType.includes(fileSuffix)) {
this.$message.error(`文件${file.name}格式不正确,请上传${this.allowType.join('、')}文件`)
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: break-all;;color: #F56C6C">文件{file.name}格式不正确请上传{this.allowType.join('、')}文件</div>,
type: 'error'
})
return false
}
// 判断文件上传大小
if (file.size / 1024 / 1024 > 200) {// eslint-disable-line
this.$message.error('文件' + file.name + '大小不超过200M')
if (file.size / 1024 / 1024 > this.size) {// eslint-disable-line
this.$message.error('文件' + file.name + `超过${ this.size }M`)
return false
}
return true
@@ -3,6 +3,7 @@
<el-form-item
:label="config.attrName"
:prop="config.attrField"
:rules="rules"
label-width="150px"
class="add-form-item"
:class="{'form-item-disabled': disabled}"
@@ -40,6 +41,9 @@ export default {
span: {
type: Number,
default: 24
},
rules: {
type: Array
}
},
computed: {
@@ -55,8 +59,8 @@ export default {
},
methods: {
handleChange (event) {
const value = event.target.value
this.$emit('input', value)
// const value = event.target.value
this.$emit('input', event)
}
}
}
@@ -0,0 +1,92 @@
<template>
<!--流程-审批历史-->
<div class="flow-list">
<el-table
height="100%"
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%"
border
row-key="id"
:no-data-text="listNoDataText"
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
>
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
prop="name"
label="任务步骤"
align="center"
>
</el-table-column>
<el-table-column
prop="assignee"
label="任务受理人"
align="center"
>
</el-table-column>
<el-table-column
prop="createTime"
label="创建时间"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.createTime ? $moment(scope.row.createTime).format('YYYY-MM-DD') : '' }}</span>
</template>
</el-table-column>
<el-table-column
prop="endTime"
label="完成时间"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? $moment(scope.row.endTime).format('YYYY-MM-DD') : '' }}</span>
</template>
</el-table-column>
<el-table-column
prop="comment"
label="流程信息"
align="center">
<template slot-scope="scope">
<span>{{scope.row.commentText}}</span>
</template>
</el-table-column>
<el-table-column
prop="completeFlag"
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
<loading :loading="loading">流程列表加载中</loading>
</div>
</template>
<script>
export default {
name: "ApprovalHistory",
props: {
data: {
type: Array,
required: true
},
loading: {
type: Boolean,
default: false
}
},
computed: {
listNoDataText () {
return this.processType === 1 ? '暂无待办流程' : '暂无已办流程'
},
},
}
</script>
<style scoped>
</style>
@@ -0,0 +1,109 @@
<template>
<el-form-item :label="label" :prop="prop" class="add-form-item form-item-disabled">
<el-date-picker
:value="currentTime"
:picker-options="pickerOptions"
:disabled="disabled"
type="daterange"
range-separator=""
start-placeholder="起始时间"
end-placeholder="结束时间"
value-format="yyyy-MM-dd"
align="right"
@input="handleChange">
</el-date-picker>
</el-form-item>
</template>
<script>
export default {
name: "DataRangePickerFormItem",
props: {
startTime: {
type: String,
required: true
},
endTime: {
type: String,
required: true
},
prop: {
type: String
},
label: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
clearable: {
type: Boolean,
default: true
},
editable: {
type: Boolean,
default: false
}
},
computed: {
placeholder () {
return `请选择${this.label}`
},
},
data () {
return {
currentTime: [],
pickerOptions: {
shortcuts: [{
text: '最近一周',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近一个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近三个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit('pick', [start, end]);
}
}]
},
}
},
created() {
this.currentTime = [this.startTime || '', this.endTime || '']
},
methods: {
handleChange (event) {
this.currentTime = event
const startTime = event[0]
const endTime = event[1]
this.$emit('update:startTime', startTime)
this.$emit('update:endTime', endTime)
}
}
}
</script>
<style scoped lang="less">
.add-form-item {
margin-bottom: 0;
min-height: 50px;
line-height: 50px;
border-bottom: 1px dashed #e5e5e5;
clear: both;
}
</style>
@@ -0,0 +1,64 @@
<template>
<el-form-item :label="label" :prop="prop" class="add-form-item form-item-disabled">
<el-datePicker :value="value"
:editable="editable"
:disabled="disabled"
:clearable="clearable"
:placeholder="placeholder || defaultPlaceholder"
value-format="yyyy-MM-dd"
@input="handleChange">
</el-datePicker>
</el-form-item>
</template>
<script>
export default {
name: "DatePickerFormItem",
props: {
value: {
required: true
},
prop: {
type: String
},
label: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
clearable: {
type: Boolean,
default: true
},
editable: {
type: Boolean,
default: false
},
placeholder: {
type: String
}
},
computed: {
defaultPlaceholder () {
return `请选择${this.label}`
},
},
methods: {
handleChange (event) {
this.$emit('input', event)
}
}
}
</script>
<style scoped lang="less">
.add-form-item {
margin-bottom: 0;
min-height: 50px;
line-height: 50px;
border-bottom: 1px dashed #e5e5e5;
clear: both;
}
</style>
@@ -0,0 +1,162 @@
<!-- 多选时间组件 -->
<template>
<el-tooltip class="item" effect="dark" :content="label" placement="top-start">
<el-form-item
:label="label"
:prop="prop"
:label-width="labelWidth"
class="add-form-item"
:class="{'form-item-disabled': disabled}"
>
<el-input
v-show="false"
:value="value"
:placeholder="placeholder"
:disabled="disabled"
></el-input>
<div class="date-picker-group">
<template v-for="(tag, index) in tagList">
<transition name="el-zoom-in-center">
<div class="tag-wrap" v-if="tagAnimateList.includes(tag)" :key="index">
<el-tag
size="small"
:closable="!disabled"
@close="handleRemoveTag(index)">{{ tag }}</el-tag>
</div>
</transition>
</template>
<div class="tag-wrap" v-if="datePickerVisible">
<el-date-picker
ref="datePicker"
v-model="datePickerVal"
type="date"
:placeholder="placeholder"
format="yyyy-MM-dd"
:picker-options="pickerOptions"
@input="handleChange"
>
</el-date-picker>
</div>
<div class="tag-wrap" v-else>
<el-button
:disabled="disabled"
class="add-date"
type="primary"
plain
size="mini"
@click="handleAddDate">增加日期</el-button>
</div>
</div>
</el-form-item>
</el-tooltip>
</template>
<script>
export default {
name: "DatePickerGroupFormItem",
data () {
return {
datePickerVal: '',
tagList: [],
datePickerVisible: false,
tagAnimateList: []
}
},
props: {
value: {
required: true
},
label: {
type: String,
},
prop: {
type: String
},
disabled: {
type: Boolean,
default: false
},
labelWidth: {
type: String
}
},
computed: {
placeholder () {
return `请输入${this.label}`
},
pickerOptions () {
const _this = this
return {
disabledDate (time) {
return _this.tagList.includes(_this.$dateFormat(time, 'yyyy-MM-dd'))
}
}
}
},
watch: {
value (val) {
this.tagList = val !== '' && val !== null && val !== undefined ? val.split(',') : []
},
tagList: {
handler (val) {
setTimeout(() => {
this.tagAnimateList = JSON.parse(JSON.stringify(val))
})
}
}
},
mounted () {
this.tagList = this.value !== '' && this.value !== null && typeof (this.value) !== 'undefined' ? this.value.split(',') : []
},
methods: {
handleChange (value) {
const val = this.$dateFormat(value, 'yyyy-MM-dd')
this.tagList.push(val)
this.datePickerVisible = false
this.datePickerVal = ''
this.$emit('input', this.tagList.join(','))
},
handleAddDate () {
this.datePickerVisible = true
this.$nextTick(() => {
this.$refs.datePicker.focus()
})
},
handleRemoveTag (index) {
this.tagList.splice(index, 1)
this.$emit('input', this.tagList.join(','))
}
},
}
</script>
<style scoped lang="less">
.add-form-item {
height: auto;
min-height: 50px;
.date-picker-group {
min-height: 49px;
display: flex;
flex-flow: row wrap;
justify-content: flex-start;
padding-left: 10px;
.tag-wrap {
height: 50px;
display: inline-flex;
align-items: center;
margin-right: 5px;
user-select: none;
&:last-child {
margin-right: 0;
}
}
.add-date {
height: 24px;
padding: 0 8px;
line-height: 22px;
}
}
}
</style>
@@ -0,0 +1,90 @@
<template>
<div>
<el-form-item :label="label" :prop="prop" class="add-form-item form-item-disabled">
<el-input
:value="value"
:placeholder="placeholder"
:clearable="clearable"
:disabled="disabled"
readonly
@click.native="choice('dep', placeholder, ids)">
></el-input>
</el-form-item>
<Mechanism-tree
:is-title="choiceTitle"
:is-visible.sync="modalShowDepFlag"
:nodeList="nodeList"
@checkedRole="checkedRole"
></Mechanism-tree>
</div>
</template>
<script>
export default {
name: "DepartmentFormItem",
props: {
value: {
required: true
},
ids: {
required: true
},
prop: {
type: String
},
label: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
clearable: {
type: Boolean,
default: true
},
},
data () {
return {
choiceTitle: '', // 人员选择
modalShowDepFlag: false,
nodeList: [],
}
},
computed: {
placeholder () {
return `选择${this.label}`
},
},
methods: {
choice(type, title, id='') {
this.nodeList = []
if (id) {
this.$set(this, 'nodeList', id.split(','))
}
this.choiceTitle = title
this.modalShowDepFlag = true
},
checkedRole(data) {
let idList = ''
let nameList = ''
data.forEach(item => {
if (nameList.length > 0) {
nameList += ','
idList += ','
}
idList += item.id
nameList += item.name
})
this.$emit('input', nameList)
this.$emit('update:ids', idList)
this.$emit('change')
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,349 @@
<template>
<!--政策入库手动查找代替文件-->
<div>
<el-form-item
:label="label"
:prop="prop"
:label-width="labelWidth"
class="add-form-item form-item-disabled"
>
<el-input
:value="value"
:placeholder="placeholder"
:disabled="disabled"
clearable
@input="handleChange"
></el-input>
<el-button
type="primary"
class="common-button-primary"
size="mini"
style="position:absolute;top: 10px;right: 0;"
:disabled="disabled"
@click="selectLaws"
>手动查找</el-button>
</el-form-item>
<el-dialog
:title="label"
:visible.sync="replaceLawsNumModel"
width="875px"
:close-on-click-modal="false"
@close="replaceLawsNumModelCancel"
:append-to-body="true"
>
<div class="search-area">
<div class="left">
<el-form :modal="replaceLawsNumForm" :inline="true" class="label-input-form" @keyup.enter.native="getReplaceLawsNumRowSearch">
<!-- <el-form-item label="数据来源" class="search-item">-->
<!-- <el-select v-model="replaceLawsNumForm.dataSource" filterable>-->
<!-- <el-option-->
<!-- v-for="item in dataSourceOptions"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- >-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="政策文号" class="search-item input-width">
<el-input
v-model="replaceLawsNumForm.lawsNo"
placeholder="根据政策文号查找"
clearable
:maxlength="100"></el-input>
</el-form-item>
<el-form-item label="政策名称" class="search-item input-width">
<el-input
v-model="replaceLawsNumForm.lawsName"
placeholder="根据政策名称查找"
clearable
:maxlength="100"></el-input>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
type="primary"
class="common-button-primary"
size="small"
@click="getReplaceLawsNumRowSearch">
查询
</el-button>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
class="common-button-default"
size="small"
@click="getResetLawsNumRow">清空
</el-button>
</el-form-item>
</el-form>
</div>
</div>
<el-table
ref="selections"
:data="replaceLawsNumRow"
tooltip-effect="dark"
style="width: 100%;overflow-y: auto;overflow-x: hidden;"
border
:height="300"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="selectReplaceStandNumRowChange">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
label="政策文号"
min-width="130">
<template slot-scope="scope">
<span>
<a v-if="scope.row.lawsNo" class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.lawsNo }}</a>
</span>
</template>
</el-table-column>
<el-table-column
prop="lawsName"
label="政策名称"
min-width="130">
</el-table-column>
<el-table-column
prop="lawsEnName"
label="英文名称"
min-width="130">
</el-table-column>
<el-table-column
prop="issueTime"
label="发文日期"
width="130">
<template slot-scope="scope">{{ $moment(scope.row.issueTime).format('YYYY-MM-DD') }}</template>
</el-table-column>
<el-table-column
prop="standStatusShow"
label="文本状态"
width="130">
</el-table-column>
</el-table>
<loading :loading="replaceLoading">{{$t('m.dataAcquisition')}}</loading>
<!--分页-->
<pagination
style="position: relative;"
:page="replacePage"
:total="replaceTotal"
@pageChange="pageChangeReplace"
@pageSizeChange="pageSizeChangeReplace"></pagination>
<div slot="footer" class="demo-drawer-footer">
<el-button class="common-button-default" round icon="el-icon-close" @click="replaceLawsNumModel = false">取消</el-button>
<el-button type="primary" round class="common-button-primary" icon="el-icon-check" @click="replaceLawsNumModelBt">提交</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: "InputForStandardsForLaws",
props: {
label: {
type: String,
required: true
},
prop: {
type: String,
},
value: {
required: true
},
disabled: {
type: Boolean,
default: false
},
// 栅格比例
span: {
type: Number,
default: 24
},
// label宽度
labelWidth: {
type: String,
}
},
data () {
return {
replaceLawsNumModel: false,
// 代替标准号
replaceLawsNumForm: {
// dataSource: 'BUSINESS', // 数据来源
lawsNo: '',
lawsName: '', // 政策名称
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
},
replaceLawsNumRow: [], // 代替政策号 数组内容
replaceTotal: 0,
selectedListRep: [],
replaceLoading: true,
replacePage: 1,
// 数据搜索 数据来源list
dataSourceOptions: [
{value: 'INLAND_STAND', label: '国内标准法规'},
{value: 'FOREIGN_STAND', label: '海外标准法规'},
{value: 'BUSINESS', label: '企业标准 '},
{value: 'LAWS_STAND', label: '国内外政策'}
],
dataSource: 'LAWS_STAND'
}
},
computed: {
placeholder () {
return `请输入${this.label}`
},
showMessage () {
return `${this.label}不能为空`
},
},
methods: {
getReplaceLawsNumRowSearch () {
this.replaceLawsNumForm.page = 1
this.replacePage = 1
this.getReplaceLawsNumRow()
},
handleChange (event) {
// const value = event.target.value
const value = event
this.$emit('input', value)
},
selectLaws () {
this.replaceLawsNumModel = true
this.getReplaceLawsNumRow()
},
// 代替政策号 请求数据
getReplaceLawsNumRow () {
const formData = {
...this.replaceLawsNumForm
}
let url = 'lawss/sarLawsInfo/page'
this.$http.get(url, formData, {
_this: this,
loading: 'replaceLoading'
}, res => {
this.replaceLawsNumRow = res.data.list
this.replaceTotal = res.data.count
if (this.selectedListRep.length !== 0) {
this.selectedListRep.map((list) => {
this.replaceLawsNumRow.map((item) => {
if (list.id === item.id) {
item._checked = true
}
})
})
}
}, e => {
})
},
// 代替政策编号-取消
replaceLawsNumModelCancel () {
this.$refs.selections.clearSelection()
},
// 代替政策号 table选择事件
selectReplaceStandNumRowChange (row) {
this.selectedListRep = row
},
// 代替政策分页
pageChangeReplace (page) {
this.replacePage = page
this.replaceLawsNumForm.page = page
this.getReplaceLawsNumRow()
},
pageSizeChangeReplace (pageSize) {
// this.replaceRows = pageSize
this.replaceLawsNumForm.pageSize = pageSize
this.getReplaceLawsNumRow()
},
// 代替政策编号确定
replaceLawsNumModelBt () {
let textArr = []
if (this.selectedListRep.length === 0) {
return this.$message({
message: '请先选择数据',
type: 'warning'
})
}
if (this.selectedListRep.length + textArr.length > 20) {
return this.$message({
message: '代替文件号最多选择20项',
type: 'warning'
})
}
this.selectedListRep.map((item) => {
let texts = ''
// 判断数据是国内外法规标准还是企业标准
if (this.dataSource === 'LAWS_STAND') {
texts = item.lawsNo
}
textArr.push(texts)
textArr = [...new Set(textArr)]
this.replaceLawsNumModel = false
})
this.$emit('input', textArr.join(','))
this.$refs.selections.clearSelection()
},
// 点击查看
handlePreview (item) {
let name = ''
let pageType = ''
switch (this.dataSource) {
case 'INLAND_STAND':
name = 'OtherStandardDetails'
pageType = 'INLAND_STAND'
break
case 'FOREIGN_STAND':
name = 'OtherStandardDetails'
pageType = 'FOREIGN_STAND'
break
case 'BUSINESS':
name = 'OtherBussStandardDetails'
pageType = 'BUSINESS_STAND'
break
case 'LAWS_STAND':
name = 'OtherLawsStandDetails'
pageType = 'LAWS_STAND'
break
}
let routeUrl = this.$router.resolve({
name: name,
params: {
id: item.id,
pageType: pageType
}
})
window.open(routeUrl.href, '_blank')
},
getResetLawsNumRow () {
this.replaceLawsNumForm = {
lawsNo: '',
lawsName: '', // 政策名称
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
}
this.getReplaceLawsNumRow()
}
}
}
</script>
<style scoped lang="less">
/deep/.el-dialog__body {
padding: 0 20px 0;
}
/deep/.el-dialog__footer {
padding: 0 20px 20px;
}
/deep/.input-width input.el-input__inner {
width: 220px;
}
</style>
@@ -0,0 +1,89 @@
<template>
<div class="wrapper">
<el-form-item :label="label" :prop="prop" :rules="rules" class="add-form-item form-item-disabled">
<el-input
:value="value"
:placeholder="placeholder"
:clearable="clearable"
:disabled="disabled"
@input="handleChange"
></el-input>
</el-form-item>
<slot />
</div>
</template>
<script>
export default {
name: "InputFormItem",
props: {
value: {
required: true
},
prop: {
type: String
},
label: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
clearable: {
type: Boolean,
default: true
},
rules: {
type: Array
}
},
computed: {
placeholder () {
return `请输入${this.label}`
},
},
methods: {
handleChange (event) {
this.$emit('input', event)
}
}
}
</script>
<style scoped lang="less">
.wrapper {
display: flex;
border-bottom: 1px dashed #e5e5e5;
}
.add-form-item {
margin-bottom: 0;
min-height: 50px;
line-height: 50px;
//border-bottom: 1px dashed #e5e5e5;
border-bottom: none;
clear: both;
flex: 1;
}
.add-form-item /deep/ .el-form-item__content .el-input .el-input__inner {
height: 45px;
//line-height: 49px;
//border: none;
//font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
//font-weight: lighter;
}
//.add-form-item /deep/ .el-form-item__label {
// padding: 0;
// line-height: 50px;
// font-size: 14px;
// color: #333333;
// text-align: left;
// overflow: hidden;
// white-space: nowrap;
// text-overflow: ellipsis;
//}
//.form-item-disabled /deep/ .el-form-item__label {
// color: #666666;
// background: transparent;
//}
</style>
@@ -0,0 +1,56 @@
<template>
<!--意见-->
<el-collapse v-model="activeName" accordion>
<el-collapse-item :title="title" name="1">
<div style="margin: 10px 0;">
<el-form-item :prop="prop" label-width="0">
<el-input :disabled="disabled"
type="textarea"
:rows="3"
resize="none"
placeholder="请输入意见"
:value="value"
@input="handleChange">
</el-input>
</el-form-item>
</div>
</el-collapse-item>
</el-collapse>
</template>
<script>
export default {
name: "ReceiptDescription",
data () {
return {
activeName:'1',
}
},
props: {
value: {
type: String,
default: true
},
disabled: {
type: Boolean,
default: false
},
title: {
type: String,
required: true
},
prop: {
type: String
}
},
methods: {
handleChange (event) {
this.$emit('input', event)
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,99 @@
<template>
<el-form-item :label="label" :prop="prop" class="add-form-item form-item-disabled">
<el-select
:value="value"
:disabled="disabled"
:placeholder="placeholder"
:filterable="filterable"
:clearable="clearable"
@change="handleChange">
<el-option
v-for="item in options"
:key="item.value"
:value="item.value"
:label="item.label"
></el-option>
</el-select>
</el-form-item>
</template>
<script>
export default {
name: "SelectFormItem",
props: {
value: {
required: true
},
prop: {
type: String
},
label: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
// 下拉选项
options: {
type: Array,
required: true
},
clearable: {
type: Boolean,
default: true
},
filterable: {
type: Boolean,
default: true
},
},
computed: {
placeholder () {
return `请选择${this.label}`
},
},
methods: {
handleChange (event) {
this.$emit('input', event)
}
}
}
</script>
<style scoped lang="less">
.add-form-item {
margin-bottom: 0;
min-height: 50px;
line-height: 50px;
border-bottom: 1px dashed #e5e5e5;
clear: both;
}
//.add-form-item /deep/ .el-form-item__content .el-input .el-input__inner {
// height: 45px;
// line-height: 49px;
// border: none;
// font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
// font-weight: lighter;
//}
//.add-form-item /deep/ .el-form-item__label {
// padding: 0;
// line-height: 50px;
// font-size: 14px;
// color: #333333;
// text-align: left;
// overflow: hidden;
// white-space: nowrap;
// text-overflow: ellipsis;
//}
//.form-item-disabled /deep/ .el-form-item__label {
// color: #666666;
// background: transparent;
//}
//.add-form-item /deep/ .el-form-item__content .el-select {
// width: 100%;
//}
//.add-form-item /deep/ .el-input--suffix {
// padding-right: 30px;
//}
</style>
@@ -0,0 +1,80 @@
<template>
<el-form-item :label="label" :prop="prop" class="add-form-item form-item-disabled">
<el-select
:value="data"
multiple
:disabled="disabled"
:placeholder="placeholder"
:filterable="filterable"
:clearable="clearable"
@change="handleChange">
<el-option
v-for="item in options"
:key="item.value"
:value="item.value"
:label="item.label"
></el-option>
</el-select>
</el-form-item>
</template>
<script>
export default {
name: "SelectMultipleFormItem",
props: {
value: {
required: true
},
prop: {
type: String
},
label: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
// 下拉选项
options: {
type: Array,
required: true
},
clearable: {
type: Boolean,
default: true
},
filterable: {
type: Boolean,
default: true
},
},
computed: {
placeholder () {
return `请选择${this.label}`
},
data () {
if (this.value && this.value !== '') {
return this.value.split(',')
} else {
return []
}
}
},
methods: {
handleChange (event) {
this.$emit('input', event.join(','))
}
}
}
</script>
<style scoped lang="less">
.add-form-item {
margin-bottom: 0;
min-height: 50px;
line-height: 50px;
border-bottom: 1px dashed #e5e5e5;
clear: both;
}
</style>
@@ -0,0 +1,101 @@
<template>
<div>
<div class="action-bar">
<el-button :disabled="disabled" type="primary" class="common-button-primary add-button" size="mini" @click="onAdd">
添加
</el-button>
<el-button :disabled="disabled || selectedList.length <= 0" type="primary" class="common-button-primary add-button" size="mini" @click="onDelete">
批量删除
</el-button>
</div>
<el-table border
class="table"
ref="selection"
:data="tableData"
tooltip-effect="dark"
style="width: 100%;"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',fontWeight: 'bold', height: '48px'}"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/>
<template v-for="item in options">
<el-table-column
:prop="item.prop"
:label="item.label"
align="center">
<template slot-scope="{ row, column, $index }">
<!--<el-form-item :prop="'meetingList.' + $index + '.meetingName'" :rules="rules.meetingName" label-width="0">-->
<!-- <el-input :disabled="disabled" style="margin: 10px 0;" v-model="row.meetingName"></el-input>-->
<!--</el-form-item>-->
<el-form-item :prop="parentProp + '.' + $index + '.' + item.prop" :rules="rules[item.prop]" label-width="0">
<el-input v-if="!disabled" :disabled="disabled" v-model="row[item.prop]"></el-input>
<span v-else>{{ row[item.prop] }}</span>
</el-form-item>
</template>
</el-table-column>
</template>
</el-table>
</div>
</template>
<script>
export default {
name: "TableFormItem",
props: {
data: {
type: Array,
required: true
},
// [ { label: '会议名称', prop: 'meetingName' } ]
options: {
type: Array,
required: true
},
parentProp: {
type: String,
required: true
},
disabled: {
type: Boolean,
default: () => false
},
rules: {
type: Object
}
},
computed: {
tableData () {
return this.data.map((item, index) => {
item.index = index
return item
})
}
},
data () {
return {
selectedList: [],
}
},
methods: {
handleSelectionChange (selection) {
this.selectedList = []
selection.forEach(item => {
this.selectedList.push(item.index)
})
},
onAdd () {
this.$emit('add')
},
onDelete () {
this.$emit('delete', this.selectedList)
}
}
}
</script>
<style scoped lang="less">
.table {
/deep/ .el-form-item {
margin-bottom: 0 !important;
}
}
</style>
@@ -0,0 +1,51 @@
<template>
<el-form-item :label="label" :prop="prop" :rules="rules" class="add-form-item form-item-disabled">
<el-input
type="textarea"
:value="value"
:placeholder="placeholder"
:disabled="disabled"
show-word-limit
:autosize="{minRows: 1,maxRows: 4}"
@input="handleChange"
></el-input>
</el-form-item>
</template>
<script>
export default {
name: "TextareaFormItem",
props: {
value: {
required: true
},
prop: {
type: String
},
label: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
rules: {
type: Array
}
},
computed: {
placeholder () {
return `请输入${this.label}`
},
},
methods: {
handleChange (event) {
this.$emit('input', event)
}
}
}
</script>
<style scoped lang="less">
</style>
@@ -0,0 +1,96 @@
<template>
<el-timeline-item :timestamp="timestamp" placement="top" :color="name ? '#66b1ff' : ''" class="timeline-item">
<el-card>
<el-form-item :prop="prop" style="margin-bottom: 0">
<h4>{{ title }}</h4>
<div style="margin-top: 10px;width: 300px;">
<el-input
:disabled="disabled"
:value="name"
:placeholder="`选择${title}`"
readonly
@click.native="choice(id)"></el-input>
</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>
</el-timeline-item>
</template>
<script>
export default {
name: "TimeLineFormItem",
props: {
id:{
type: String,
required: true
},
name:{
type: String,
required: true
},
prop: {
type: String
},
disabled: {
type: Boolean,
default: false
},
timestamp: {
type: String,
required: true
},
title: {
type: String,
required: true
},
multiple: {// 多选
type: Boolean,
default: false
}
},
data () {
return {
drawerTitle: '', //drawer标题
modalShowFlag: false, // drawer开关
nodeList: [],
}
},
methods: {
handleChange (event) {
this.$emit('input', event)
},
choice (id) {
this.nodeList = id.split(',')
this.modalShowFlag = true
},
checkedRole (data) {
const id = this.joint(data, 'id')
const name = this.joint(data, 'name')
this.$emit('update:id', id)
this.$emit('update:name', name)
},
joint (data, type) {
return data.reduce((init,item) => {
if (init === '') {
return item[type]
} else {
return init + ',' + item[type]
}
}, '')
}
}
}
</script>
<style scoped lang="less">
.timeline-item /deep/ .el-form-item__content{
margin: 0!important;
}
</style>
@@ -0,0 +1,209 @@
<template>
<el-form-item :label="label" :prop="prop" class="add-form-item form-item-disabled">
<el-input
disabled
style="display: none;"
:value="ids"
clearable
></el-input>
<div style="display: flex;justify-content: space-between">
<div style="width: 80%;margin-top: 13px">
<div v-for="file in FileList"
:key="file.id"
@click="onPreview(file)"
style="color: #409eff;cursor:pointer"
class="fileClass">
{{ file.name }}
</div>
</div>
<div style="width: 20%;">
<el-button :disabled="disabled"
type="primary"
class="common-button-primary"
size="mini"
@click="showUpload"
style="margin-left: 10px; margin-top: 11px; float: right;">
<i class="el-icon-upload"></i>
</el-button>
</div>
</div>
<el-dialog width='400px' :visible.sync="fileMadel" title="上传文件">
<el-upload
multiple
drag
:file-list="fileList"
:action="fileUrl"
ref="importfile"
name="file"
:accept="accept"
:before-upload="beforeUpload"
:on-success="onSuccess"
:on-preview="onPreview"
:on-remove="removeOneFile"
:show-file-list="true"
>
<div style="padding: 20px 0">
<i class="el-icon-upload" style="color: #3399ff"></i>
<p>点击或拖拽上传文件</p>
</div>
</el-upload>
</el-dialog>
</el-form-item>
</template>
<script>
export default {
name: "UploadFormItem",
props: {
ids: {
required: true,
type: String,
default: ''
},
names: {
required: true,
type: String
},
prop: {
type: String
},
label: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
fileUrl: {
type: String,
default: () => 'api/att/attFile/uploadNew'
},
accept: {
type: String,
default: '.pdf, .PDF, .doc, .DOC, .docx, .DOCX, .ppt, .PPT, .pptx, .PPTX, .xls, .XLS, .xlsx, .XLSX, .pdg, .PDG'
},
size: {
type: Number,
default: 200
}
},
created () {
this.initFileList()
},
data () {
return {
fileMadel: false,
fileList: [],// 用于el-upload
FileList: [],// 用于回显
}
},
methods: {
showUpload () {
this.fileMadel = true;
},
initFileList () {
if (this.ids && this.ids !== '' && this.names && this.names !== '') {
let fileList = []
const idArr = this.ids.split(',')
const nameArr = this.names.split(',')
for (let i = 0 ; i < idArr.length; i++) {
fileList.push({
id: idArr[i],
name: nameArr[i]
})
}
this.fileList = fileList
this.FileList = fileList
}
},
beforeUpload (file) {
const fileName = file.name
const fileSuffix = fileName.slice(fileName.lastIndexOf('.') + 1)
// 判断上传文件格式
const acceptArr = this.accept.split(',').map(type => type.slice(type.lastIndexOf('.') + 1))
// 判断上传文件格式
if (!acceptArr.includes(fileSuffix)) {
this.$message({
dangerouslyUseHTMLString: true,
message: <div style="word-break: break-all;;color: #F56C6C">文件{file.name}格式不正确请上传{this.allowType.join('、')}文件</div>,
type: 'error'
})
return false
}
// 判断文件上传大小
if (file.size / 1024 / 1024 > this.size) {// eslint-disable-line
this.$message.error('文件' + file.name + `超过${ this.size }M`)
return false
}
return true
},
// 导入标准数据成功后执行
onSuccess (response, file,fileList) {
// 上传成功后判断是否是两条数据是的话替换掉旧数据
if (response.ok) {
const fileObj = {
id: file.response.data.id,
name: file.response.data.name
}
let ids;
let names;
if (this.ids && this.ids.length > 0) {
ids = this.ids + ',' + fileObj.id
names = this.names + ',' + fileObj.name
} else {
ids = fileObj.id
names = fileObj.name
}
this.$set(this.FileList, this.FileList.length, fileObj)
this.$emit('update:ids', ids)
this.$emit('update:names', names)
this.$message({
message: response.message,
type: 'success'
})
}
},
removeOneFile(file, fileList) {
const ids = fileList.reduce((init, file) => {
if (init === '') {
return file.id || file.response.data.id
} else {
return init + ',' + (file.id || file.response.data.id)
}
}, '')
const names = fileList.reduce((init, file) => {
if (init === '') {
return file.name
} else {
return init + ',' + file.name
}
}, '')
this.FileList = fileList.map(file => ({
id: file.id || file.response.data.id,
name: file.name
}))
this.$emit('update:ids', ids)
this.$emit('update:names', names)
},
// 文件预览及下载
onPreview(file) {
let attId = ""
if(file && file.id){
attId = file.id
}else {
attId = file.response.data.id
}
this.$preview(attId)
},
}
}
</script>
<style scoped lang="less">
.fileClass{
line-height: 22px !important;
}
</style>
@@ -0,0 +1,62 @@
<template>
<!--导出文件改名字模态框-->
<el-dialog :visible.sync="exportModelFlag" title="导出文件" width="300px">
<el-form :inline="true" class="label-input-form search-area">
<el-form-item label="导出名称" class="search-item">
<el-input v-model="exportName" placeholder="请输入导出文件名称" :maxlength="30" clearable label="导出名称"/>
</el-form-item>
</el-form>
<span slot="footer" class="demo-drawer-footer">
<el-button class="common-button-default" icon="el-icon-close" @click="cancel">取消</el-button>
<el-button type="primary" round class="common-button-primary" icon="el-icon-check" @click="submit">提交</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
name: "exportDialog",
data () {
return {
exportModelFlag: false,
exportName: ''
}
},
methods: {
openModel () {
this.exportName = ''
this.exportModelFlag = true
},
cancel () {
this.exportModelFlag = false
},
submit () {
// 导出文件名
this.$emit('exportName', this.exportName)
}
}
}
</script>
<style scoped>
/deep/ .label-input-form .add-form-item .el-form-item__content .el-input .el-input__inner {
width: 280px;
}
/deep/ .el-dialog .el-dialog__header {
width: 100%;
font-size: 14px;
color: #17233d;
font-weight: bold;
border-bottom: 1px solid #e5e5e5;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/deep/ .el-dialog .el-dialog__body {
padding: 15px 20px;
}
/deep/ .el-dialog .el-dialog__footer .el-button {
height: 32px;
padding: 8px 23px;
}
</style>
+106
View File
@@ -0,0 +1,106 @@
<template>
<div>
<!-- 导入模态窗 -->
<el-dialog width='400px' v-if="visible" :visible="visible" @close="onClose" title="导入文件">
<el-upload
multiple
drag
:action="action"
ref="importfile"
name="file"
accept=".ZIP, .zip"
:before-upload="beginImportFile"
:on-success="importFileSuccess"
:show-file-list="true"
>
<div style="padding: 20px 0">
<i class="el-icon-upload" style="color: #3399ff"></i>
<p>点击或拖拽上传文件</p>
</div>
</el-upload>
</el-dialog>
<!-- 导入失败-->
<el-dialog :visible.sync="importFailed" :close-on-click-modal="false" width="400px">
<p slot="title" style="color:#f60">
<span>导入失败</span>
</p>
<div style="max-height: 300px;overflow: auto;padding: 10px 0;">
<p v-html="importForm.content"></p>
</div>
<div slot="footer" class="demo-drawer-footer">
<el-button type="primary" round class="common-button-default" icon="el-icon-check" @click="importFailed = false">
确认
</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: "importZip",
data () {
return {
importFailed: false,
importForm: {}
}
},
props: {
action: {
type: String,
required: true
},
visible: {
type: Boolean,
default: false
}
},
methods: {
onClose () {
this.$emit('update:visible', false)
},
// 导入按钮 上传之前的钩子
beginImportFile(file) {
var filename = file.name
var index1 = filename.lastIndexOf('.')
var index2 = filename.length
var fileSuffix = filename.substring(index1, index2)
// 判断上传文件格式
if (fileSuffix === '.ZIP' || fileSuffix === '.zip') {
return true
} else {
this.$message.error('文件' + file.name + '格式不正确,请上传ZIP压缩文件')
return false
}
// 判断文件上传大小
// eslint-disable-next-line no-unreachable
if (file.size / 1024 / 1024 <= 200) {
return true
} else {
this.$message.error('文件' + file.name + '大小不超过200M')
return false
}
return true
},
// 导入标准数据成功后执行
importFileSuccess(response, file) {
if (response.ok) {
this.$emit('update:visible', false)
// this.visible = false
this.$message({
message: response.message,
type: 'success'
})
this.getData()
} else {
this.importFailed = true
this.importForm.content = response.message
}
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,105 @@
<template>
<div>
<el-form-item :label="label" :prop="prop" class="add-form-item form-item-disabled">
<el-input
:value="value"
:placeholder="placeholder"
:clearable="clearable"
:disabled="disabled"
readonly
@click.native="choice('role', placeholder, value)">
></el-input>
</el-form-item>
<Role-tree
:is-title="choiceTitle"
:is-visible.sync="modalShowRoleFlag"
@checkedRole="checkedRole"
:nodeList="nodeList"
></Role-tree>
</div>
</template>
<script>
export default {
name: "personFormItem",
props: {
value: {
required: true
},
prop: {
type: String
},
label: {
type: String,
},
disabled: {
type: Boolean,
default: false
},
clearable: {
type: Boolean,
default: true
},
},
data () {
return {
choiceTitle: '', // 人员选择
modalShowRoleFlag: false,
nodeList: [],
}
},
computed: {
placeholder () {
return `选择${this.label}`
},
},
methods: {
handleChange (event) {
this.$emit('input', event)
},
choice(type, title, nameId) {
this.nodeList = []
if (nameId) {
let nameId1 = nameId.split(',')
let idList = []
nameId1.forEach(item => {
let a, b
a = item.substring(item.indexOf('(') +1)
b = a.substring(0, a.lastIndexOf(')'))
idList.push(b)
})
idList = idList.join(',')
// 管理员(admin),张兰英(zhanglanying) => ['admin', 'zhanglanying']
this.nodeList = idList.split(',')
}
this.choiceTitle = title
this.modalShowRoleFlag = true
},
checkedRole(data) {
let idList = ''
let nameList = ''
data.forEach(item => {
if (nameList.length > 0) {
nameList += ','
idList += ','
}
idList += item.id
nameList += item.name
})
this.$emit('input', nameList)
this.$emit('change', {
ids: this.unique(data.map(item => item.topUnitId)).join(","),
names: this.unique(data.map(item => item.topUnit)).join(",")
})
},
unique(newArr) {
const res = new Map();
return newArr.filter((newArr) => !res.has(newArr) && res.set(newArr, 1));
},
}
}
</script>
<style scoped>
</style>
+1
View File
@@ -6,6 +6,7 @@
:visible.sync="isVisible2"
:wrapperClosable="false"
@close="handleTreeDrawerCancel"
append-to-body
size="400px">
<el-form
@submit.native.prevent
+63 -43
View File
@@ -218,34 +218,54 @@
// }
]
},
// {
// title: '政策法规库',
// path: '/policyRegulation',
// 'icon-class': 'el-icon-s-management',
// menuId: 'asdzcfgk',
// children: [
// {
// title: '问题项管控',
// path: '/problemControl',
// menuId: '50d7a0c0af4740c486100c257ae6068e'
// },
// {
// title: '国内外政策',
// path: '/nationalPolicy',
// menuId: '6557e9c4ce672af71be5807052da126b'
// },
// {
// title: '标准跟踪清单',
// path: '/standardTrackingList',
// menuId: 'a26b92e156f68dbfe0d73b0dc068ebe4'
// },
// {
// title: '政策工作组',
// path: '/policyWorkGroup',
// menuId: 'f1a4b33a498e58a8a87c954ce5ce6ad6'
// }
// ]
// },
{
title: '政策法规库',
path: '/policyRegulation',
'icon-class': 'el-icon-s-management',
menuId: 'asdzcfgk',
children: [
{
title: '问题项管控',
path: '/problemControl',
menuId: '50d7a0c0af4740c486100c257ae6068e'
},
// {
// title: '国内外政策',
// path: '/nationalPolicy',
// menuId: '6557e9c4ce672af71be5807052da126b'
// },
{
title: '国内外政策',
path: '/Policy',
menuId: '6557e9c4ce672af71be5807052da126b'
},
{
title: '标准跟踪清单',
path: '/standardTrackingList',
menuId: 'a26b92e156f68dbfe0d73b0dc068ebe4'
},
{
title: '政策工作组',
path: '/policyWorkGroup',
menuId: 'f1a4b33a498e58a8a87c954ce5ce6ad6'
},
{
title: '内外部会议',
path: '/meeting',
menuId: 'e5681c5ccbef386fcf50e217afdd3ff4'
},
{
title: '政策课题',
path: '/policyTopics',
menuId: '627f66cd6746234edd4722e20d8c01bb'
},
{
title: '政策法规资料',
path: '/regulatoryMaterials',
menuId: '5b77e62147c5397178bc76f698e151c1'
},
]
},
{
title: '工作中心',
path: '/processCenter',
@@ -404,11 +424,11 @@
// path: '/convertDocView',
// menuId: '3F52K25546'
// },
// {
// title: '菜单管理',
// path: '/menuManage',
// menuId: '87b8b4f5817a7829696e63185c744d52'
// },
{
title: '菜单管理',
path: '/menuManage',
menuId: '87b8b4f5817a7829696e63185c744d52'
},
{
title: '链接管理',
path: '/linkManage',
@@ -423,16 +443,16 @@
// path: '/DynamicInformations',
// menuId: '3C87BSHJUF'
// },
// // {
// // title: '流程分类管理',
// // path: '/processClassificationManage',
// // menuId: 'N323F2UB9FTUV5SD3GTD'
// // },
// // {
// // title: '流程管理',
// // path: '/processManage',
// // menuId: 'K5KXSS3X9CF7CS8AMFJ5'
// // },
{
title: '流程分类管理',
path: '/processClassificationManage',
// menuId: 'N323F2UB9FTUV5SD3GTD'
},
{
title: '流程管理',
path: '/processManage',
// menuId: 'K5KXSS3X9CF7CS8AMFJ5'
},
// {
// title: 'SVPPS',
// path: '/svpps',
+1 -1
View File
@@ -55,7 +55,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
+160 -134
View File
@@ -1,11 +1,13 @@
<template>
<div class="roleTree">
<el-drawer
:title="isTitle"
:visible.sync="visible"
:wrapperClosable="false"
@close="handleTreeDrawerCancel"
size="460px">
:title="isTitle"
v-if="visible"
:visible.sync="visible"
:wrapperClosable="false"
@close="handleTreeDrawerCancel"
append-to-body
size="460px">
<el-form
ref="attributeEO"
class="label-input-form"
@@ -14,16 +16,16 @@
>
<el-form-item class="form-item-disabled" style="margin: 10px;">
<el-input
v-model="filterText"
placeholder="请输入姓名"
@keyup.enter.native="searchChange"
v-model="filterText"
placeholder="请输入姓名"
@keyup.enter.native="searchChange"
></el-input>
</el-form-item>
<el-form-item class="form-item-disabled" style="margin-top: 10px;">
<el-button size="medium " type="primary" @click="searchChange">
查询
</el-button>
</el-form-item>
<el-form-item class="form-item-disabled" style="margin-top: 10px;">
<el-button size="medium " type="primary" @click="searchChange">
查询
</el-button>
</el-form-item>
</el-form>
<div class="divTree">
<!-- 当前tree展示全部人员 -->
@@ -71,7 +73,7 @@
ref="tree"
:lazy="false"
:key="treeKey"
>
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span :class="node.disabled ? 'is-show' : 'is-leaf-none'"></span>
<span> {{ node.label }} </span>
@@ -89,13 +91,19 @@
closable>
{{tag.name}}
</el-tag>
<el-tag v-show="delList.length > 0 && !checkBox" type="danger" closable size="mini" @close="handleCloseAll()">全部删除</el-tag>
<el-tag v-show="delList.length > 0 && !checkBox" type="danger" closable size="mini"
@close="handleCloseAll()">全部删除
</el-tag>
</div>
</div>
<div id="roleFormButton" class="demo-drawer-footer">
<el-button class="common-button-primary" size="mini" icon="el-icon-check" type="primary" :loading="subLoading" @click="saveUserInfo">确定</el-button>
<el-button class="common-button-primary" size="mini" icon="el-icon-check" type="primary"
:loading="subLoading" @click="saveUserInfo">确定
</el-button>
<el-button class="common-button-default" size="mini" icon="el-icon-close" :loading="subLoading" @click="handleTreeDrawerCancel">取消</el-button>
<el-button class="common-button-default" size="mini" icon="el-icon-close" :loading="subLoading"
@click="handleTreeDrawerCancel">取消
</el-button>
</div>
<loading style="z-index: 2099;" :loading="treeLoading">导入中...</loading>
</el-drawer>
@@ -103,15 +111,16 @@
</template>
<script>
function debounce(func, wait = 500){
function debounce(func, wait = 500) {
let timeout;
return function(event){
return function (event) {
clearTimeout(timeout)
timeout = setTimeout(()=>{
timeout = setTimeout(() => {
func.call(this, event)
},wait)
}, wait)
}
}
export default {
name: "roleTree",
props: {
@@ -133,13 +142,13 @@
}
},
type: {
type: Number,
default: 0
type: Number,
default: 0
}
},
data () {
data() {
return {
treeKey:1,
treeKey: 1,
defaultKey: [],//默认展开的节点的 key 的数组
visible: false,
selectList: [],
@@ -160,13 +169,13 @@
}
},
methods: {
nameJoinAccount(treeData1){
treeData1.forEach(item=>{
if(item.account) item.name = `${item.name}(${item.account})`
if(item.children) this.nameJoinAccount(item.children)
})
},
handleClose (tag) {
nameJoinAccount(treeData1) {
treeData1.forEach(item => {
if (item.account) item.name = `${item.name}(${item.account})`
if (item.children) this.nameJoinAccount(item.children)
})
},
handleClose(tag) {
let arr = []
for (let a = 0; a < this.delList.length; a++) {
if (tag.id === this.delList[a].id) {
@@ -188,7 +197,7 @@
}
}
},
handleCloseAll () {
handleCloseAll() {
this.$msgbox({
title: '提示',
message: '是否删除当前选中人员',
@@ -208,41 +217,41 @@
}
)
},
searchChange(){
// 查询
if (this.filterText.length) {
this.open1 = false // 显示第二个tree
this.treeLoading = true
this.defaultKey = []
this.$http.get('SarInstitution/institution/getNextTwo', {
userName: this.filterText
}, {}, res => {
this.treeData1 = res
this.treeData1.forEach(item => {
this.defaultKey.push(item.id)
})
this.nameJoinAccount(this.treeData1)
this.treeLoading = false
})
// this.treeKey++
searchChange() {
// 查询
if (this.filterText.length) {
this.open1 = false // 显示第二个tree
this.treeLoading = true
this.defaultKey = []
this.$http.get('SarInstitution/institution/getNextTwo', {
userName: this.filterText
}, {}, res => {
this.treeData1 = res
this.treeData1.forEach(item => {
this.defaultKey.push(item.id)
})
this.nameJoinAccount(this.treeData1)
this.treeLoading = false
})
// this.treeKey++
// this.$http.get('SarInstitution/institution/institutionAndUser', {
// userName: this.filterText
// }, {}, res => {
// this.treeData1 = res.data
// this.treeData1.forEach(item => {
// this.defaultKey.push(item.id)
// })
// console.log(1);
// this.getChildren()
// this.treeLoading = false
// })
} else {
this.open1 = true
}
},
changeInput:debounce(function (val) {
// this.$http.get('SarInstitution/institution/institutionAndUser', {
// userName: this.filterText
// }, {}, res => {
// this.treeData1 = res.data
// this.treeData1.forEach(item => {
// this.defaultKey.push(item.id)
// })
// console.log(1);
// this.getChildren()
// this.treeLoading = false
// })
} else {
this.open1 = true
}
},
changeInput: debounce(function (val) {
if (val.length) {
this.open1 = false
this.treeLoading = true
@@ -256,28 +265,7 @@
this.open1 = true
}
}),
checkChange2 (row, type, c) {
if (this.checkBox) {
} else {
if (type) {
this.nodeList2.push(row.id)
this.delList.push(row)
} else {
for (let a = 0; a < this.nodeList2.length; a ++) {
if (row.id === this.nodeList2[a]) {
this.nodeList2.splice(a, 1)
}
}
for (let b = 0; b < this.delList.length; b++) {
if (row.id === this.delList[b].id) {
this.delList.splice(b, 1)
}
}
}
}
},
checkChange (row, type, c) {
//节点选中状态发生变化时的回调(传递给 data 属性的数组中该节点所对应的对象、节点本身是否被选中、节点的子树中是否有被选中的节点)
checkChange2(row, type, c) {
if (this.checkBox) {
} else {
if (type) {
@@ -297,14 +285,35 @@
}
}
},
handleTreeDrawerCancel () {
checkChange(row, type, c) {
//节点选中状态发生变化时的回调(传递给 data 属性的数组中该节点所对应的对象、节点本身是否被选中、节点的子树中是否有被选中的节点)
if (this.checkBox) {
} else {
if (type) {
this.nodeList2.push(row.id)
this.delList.push(row)
} else {
for (let a = 0; a < this.nodeList2.length; a++) {
if (row.id === this.nodeList2[a]) {
this.nodeList2.splice(a, 1)
}
}
for (let b = 0; b < this.delList.length; b++) {
if (row.id === this.delList[b].id) {
this.delList.splice(b, 1)
}
}
}
}
},
handleTreeDrawerCancel() {
this.filterText = ''
this.open1 = true
this.visible = false
},
saveUserInfo () {
if(this.roleList.length === 0){
this.roleList.push({id:"",name:""});
saveUserInfo() {
if (this.roleList.length === 0) {
this.roleList.push({id: "", name: ""});
}
if (this.checkBox) {
this.$emit('checkedRole', this.roleList)
@@ -341,9 +350,9 @@
}
this.open1 = true
},
drawerCheck (data) {
//当复选框被点击的时候触发
//共两个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、树目前的选中状态对象,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性
drawerCheck(data) {
//当复选框被点击的时候触发
//共两个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、树目前的选中状态对象,包含 checkedNodes、checkedKeys、halfCheckedNodes、halfCheckedKeys 四个属性
if (this.checkBox) { // 单选
// 单选判断
let getlist = this.$refs.tree.getCheckedNodes()
@@ -360,31 +369,31 @@
this.delList = [data]
}
} else { // 多选
if (this.roleList.length === 0) {
this.roleList.push(data)
} else {
let delFlag = true
this.roleList.forEach((item, index) => {
if (item.id === data.id) {
this.roleList.splice(index, 1)
delFlag = false
}
})
if (delFlag) {
this.roleList.push(data)
if (this.roleList.length === 0) {
this.roleList.push(data)
} else {
let delFlag = true
this.roleList.forEach((item, index) => {
if (item.id === data.id) {
this.roleList.splice(index, 1)
delFlag = false
}
})
if (delFlag) {
this.roleList.push(data)
}
}
}
// this.roleList = this.$refs.tree.getCheckedNodes().concat(this.$refs.tree.getHalfCheckedNodes())
// this.roleList = this.$refs.tree.getCheckedNodes().concat(this.$refs.tree.getHalfCheckedNodes())
}
},
loadNode(node, resolve) {
//加载子树数据的方法,仅当 lazy 属性为true 时生效
//加载子树数据的方法,仅当 lazy 属性为true 时生效
if (node.level === 0) {
return resolve(this.treeData);
}
this.getChildren(node, resolve)
},
getChildren (node, resolve) {
getChildren(node, resolve) {
this.$http.get('SarInstitution/institution/getNext', {
institutionId: node.key,
userName: this.filterText
@@ -392,16 +401,16 @@
resolve(res)
})
},
getTree () {
getTree() {
this.treeLoading = true
this.$http.get('SarInstitution/institution/getFirstInstitution', {}, {}, res=> {
this.$http.get('SarInstitution/institution/getFirstInstitution', {}, {}, res => {
this.treeData = res
this.treeLoading = false
})
}
},
watch: {
isVisible (val) {
isVisible(val) {
this.visible = val
if (val) {
this.nodeList2 = this.nodeList
@@ -433,7 +442,7 @@
this.$emit('update:isVisible', val)
}
},
mounted () {
mounted() {
this.getTree()
}
}
@@ -444,12 +453,15 @@
overflow: auto;
height: calc(~'100% - 300px');
}
.divDel {
border-top: 1px solid #000;
height: 300px;
.divDel_title {
margin: 10px;
}
.divDel_box {
height: 266px;
padding: 0px 0 10px;
@@ -457,50 +469,59 @@
flex-wrap: wrap;
overflow: auto;
margin: 10px;
align-content: flex-start;
align-content: flex-start;
span {
margin: 0px 5px 5px 0;
}
}
}
/deep/ .icon-tree {
margin: 0 5px 0 10px;
position: relative;
background: url('~@/assets/images/shangqi/img/tree-add.png');
background-size: 100% 100%;
}
/deep/.el-tree-node__content {
margin: 0 5px 0 10px;
position: relative;
background: url('~@/assets/images/shangqi/img/tree-add.png');
background-size: 100% 100%;
}
/deep/ .el-tree-node__content {
padding-left: 0px !important;
}
/deep/ .is-leaf{
background-image:none;
background-size:100% 100%;
/deep/ .is-leaf {
background-image: none;
background-size: 100% 100%;
}
/deep/ .is-leaf-none{
/deep/ .is-leaf-none {
position: relative;
display: inline-block;
width: 15px;
height: 15px;
background:url('~@/assets/images/shangqi/img/personnel.png');
background-size:100% 100%;
background: url('~@/assets/images/shangqi/img/personnel.png');
background-size: 100% 100%;
}
/deep/ .is-show{
/deep/ .is-show {
position: relative;
display: inline-block;
width: 15px;
height: 15px;
background:url('~@/assets/images/shangqi/img/mechanism.png');
background-size:100% 100%;
background: url('~@/assets/images/shangqi/img/mechanism.png');
background-size: 100% 100%;
}
/deep/.tree-line{
/deep/ .tree-line {
.el-tree-node {
position: relative;
padding-left: 0px; // 缩进量
line-height: 30px;
}
.el-tree-node__children {
padding-left: 16px; // 缩进量
}
// 竖线
.el-tree-node::before {
content: "";
@@ -512,10 +533,12 @@
border-width: 1px;
border-left: 1px dashed #858990e0;
}
// 当前层最后一个节点的竖线高度固定
.el-tree-node:last-child::before {
height: 38px; // 可以自己调节到合适数值
}
// 横线
.el-tree-node::after {
content: "";
@@ -527,18 +550,21 @@
border-width: 1px;
border-top: 1px dashed #858990e0;
}
// 去掉最顶层的虚线,放最下面样式才不会被上面的覆盖了
& > .el-tree-node::after {
border-top: none;
}
& > .el-tree-node::before {
border-left: none;
}
// 展开关闭的icon
.el-tree-node__expand-icon{
.el-tree-node__expand-icon {
font-size: 16px;
// 叶子节点(无子节点)
&.is-leaf{
&.is-leaf {
color: transparent;
// display: none; // 也可以去掉
}
+4
View File
@@ -298,6 +298,10 @@ router.beforeEach(function (to, from, next) {
}
}
} else {
localStorage.removeItem("routerUrl")
localStorage.setItem('routerUrl', 'home2')
localStorage.removeItem("routerParam")
localStorage.setItem('routerParam', '')
if ((token === null || token === '' ) && toName === 'OtherStandardDetails') {
if (document.cookie) {
next()
@@ -1,5 +1,6 @@
<template>
<div class="tree">
<loading :loading="loading">加载中...</loading>
<el-tree
:data="data"
:props="defaultProps"
@@ -100,6 +101,7 @@ export default {
drawerTitle: '',
drawerVisible: false,
addModel: {},
loading: false,
rules
};
},
@@ -111,7 +113,12 @@ export default {
console.log(data);
},
async getData () {
const res = await this.$http._getData(this.api.getListStandLimit,{dicId:'9m4qqqaansxmox5e82zm'})
const res = await this.$http._getData(this.api.getListStandLimit,{
dicId:'9m4qqqaansxmox5e82zm'
},{
_this:this,
loading: 'loading'
})
if (res.ok && res.data) {
this.data = res.data
}
@@ -34,15 +34,15 @@
<!--</table-tools-bar>-->
<div class="content">
<!--<div class="action-bar">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- class="common-button-primary add-button"-->
<!-- round-->
<!-- @click="addRow"-->
<!-- v-btn-permission="'XBRKH5BP5K'"-->
<!-- ><i class="el-icon-plus"></i>新增</el-button>-->
<!--</div>-->
<div class="action-bar">
<!-- v-btn-permission="'XBRKH5BP5K'"-->
<el-button
type="primary"
class="common-button-primary add-button"
round
@click="addRow"
><i class="el-icon-plus"></i>新增</el-button>
</div>
<loading :loading="tableDataLoading">{{$t('m.dataProcessing')}}</loading>
<el-table
border
@@ -85,7 +85,8 @@
<el-dropdown trigger="click" @command="handleCommand">
<i class="iconfont">&#xe61e;</i>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-btn-permission="'VTY972T56Q'" :command="[scope.row, '编辑']">{{$t('m.edit')}}</el-dropdown-item>
<!-- v-btn-permission="'VTY972T56Q'"-->
<el-dropdown-item :command="[scope.row, '编辑']">{{$t('m.edit')}}</el-dropdown-item>
<!--<el-dropdown-item v-btn-permission="'UCDDYPWEFT'" :command="[scope.row, '删除']">{{$t('m.delete')}}</el-dropdown-item>-->
</el-dropdown-menu>
</el-dropdown>
@@ -35,12 +35,12 @@
<div class="content">
<div class="action-bar">
<!-- v-btn-permission="'XBRKH5BP5K'"-->
<el-button
type="primary"
class="common-button-primary add-button"
round
@click="addRow"
v-btn-permission="'XBRKH5BP5K'"
><i class="el-icon-plus"></i>新增</el-button>
</div>
<loading :loading="tableDataLoading">{{$t('m.dataProcessing')}}</loading>
@@ -77,8 +77,10 @@
<el-dropdown trigger="click" @command="handleCommand">
<i class="iconfont">&#xe61e;</i>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-btn-permission="'VTY972T56Q'" :command="[scope.row, '编辑']">{{$t('m.edit')}}</el-dropdown-item>
<el-dropdown-item v-btn-permission="'UCDDYPWEFT'" :command="[scope.row, '删除']">{{$t('m.delete')}}</el-dropdown-item>
<!-- v-btn-permission="'VTY972T56Q'"-->
<el-dropdown-item :command="[scope.row, '编辑']">{{$t('m.edit')}}</el-dropdown-item>
<!-- v-btn-permission="'UCDDYPWEFT'"-->
<el-dropdown-item :command="[scope.row, '删除']">{{$t('m.delete')}}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
+440
View File
@@ -0,0 +1,440 @@
<template>
<div class="regulatoryMaterialsDetail">
<div class="container">
<div class="header">{{ form.meetingName }}</div>
<div class="content">
<el-collapse v-model="activeNames">
<el-collapse-item name="1">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>基础信息</span>
</div>
<div class="modular-header-btn">
<el-button class="relation-btn"
icon="icon-relation"
@click.stop="relateEvent()"
>更新记录</el-button>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 132px;">会议名称</label><span>{{ form.meetingName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">会议主办单位</label><span>{{ form.meetingOrganizer || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">会议时间</label><span>{{ form.meetingTime || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">会议地点</label><span>{{ form.meetingAddress || '-' }}</span></p>
<p style="" class="whole"><label style=" margin-right: 132px;">参会人员</label><span>{{ form.participants || '-' }}</span></p>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">会议纪要</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.meetingMinutesList && form.meetingMinutesList.length > 0">
<p class="file-item" v-for="file in form.meetingMinutesList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<p class="whole" style=""><label style=" margin-right: 100px;">会议主要内容</label><span>{{ form.meetingContent || '-' }}</span></p>
</div>
</el-collapse-item>
<el-collapse-item name="2">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>会议分类</span>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style="margin-right: 100px;">1级会议分类</label><span>{{ form.firstMeetingTypeName || '-' }}</span></p>
<p style="" class="half"><label style="margin-right: 100px;">2级会议分类</label><span>{{ form.secondMeetingTypeName || '-' }}</span></p>
</div>
</el-collapse-item>
<el-collapse-item v-for="(item, index) in form.meetingTopicList" :name="index">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>会议议题</span>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="whole"><label style=" margin-right: 132px;">议题名称</label><span>{{ item.agendaName || '-' }}</span></p>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">议题材料</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="item.agendaMaterialsList && item.agendaMaterialsList.length > 0">
<p class="file-item" v-for="file in item.agendaMaterialsList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<p style="" class="half"><label style=" margin-right: 148px;">汇报人</label><span>{{ item.reporter || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 116px;">汇报人单位</label><span>{{ item.reportingUnit || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">议题主要内容</label><span>{{ item.agendaContent || '-' }}</span></p>
</div>
</el-collapse-item>
</el-collapse>
</div>
</div>
<!-- 更新LOG -->
<el-dialog
title="更新记录"
:visible.sync="relateDialog"
width="60%"
class="relateClass"
:before-close="relateDialogClose">
<div
v-for="(item, index) in relateNowList"
:key="index"
v-if="relateNowList"
style="margin-bottom: 10px;line-height: 20px"
>
{{index+1}}. {{item.creationUserName}} {{item.creationTime}} {{item.content}}
<div v-if="relateNowList.length >1"><el-divider></el-divider></div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="relateDialogClose()"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getBusStandFileByAttId } from 'api/process'
export default {
name: "meetingDetail",
data () {
return {
url: {
getMeetingInfo: 'lawss/insideOutsideMeeting/getMeetingInfo',
getLogList: 'lawss/sarUpdLog/getLogList', // 更新记录
},
form: {},
activeNames: ['1', '2'],
// 更新记录
relateDialog: false,
relateNowList: [],
}
},
created() {
this.getData()
},
methods: {
getData () {
const id = this.$route.params.id
this.$http._getData(this.url.getMeetingInfo, { meetingId: id }).then(res => {
if (res.ok) {
if (res.data.meetingTopicList && res.data.meetingTopicList.length > 0) {
const activeNames = []
res.data.meetingTopicList.forEach((item, index) => {
activeNames.push(index)
})
this.activeNames = [...this.activeNames, ...activeNames]
}
this.$set(this, 'form', res.data)
}
})
},
// 更新LOG
relateEvent () {
const query = {
sarId: this.$route.params.id,
sarType: 'INSIDE_OUTSIDE_MEETING'
}
this.$http._getData(this.url.getLogList, query).then(res => {
if (res.ok && res.data.length > 0) {
this.relateDialog = true
const relateList = res.data
var i
for (i = 0; i < relateList.length; i++) {
let obj = {creationUserName: '', creationTime: '', content: ''}
obj.creationUserName = relateList[i].creationUserName
obj.creationTime = relateList[i].creationTime
obj.content = relateList[i].content
this.relateNowList.push(obj)
}
} else {
this.$message.warning('暂无数据')
}
})
},
relateDialogClose () {
this.relateDialog = false
this.relateNowList = []
},
downloadFile (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSarNew?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
downloadFileByWater (attId, fileSuffix) {
if (fileSuffix !== 'pdf' && fileSuffix !== 'PDF') {
this.$message.error('水印下载仅支持PDF,pdf格式文件')
} else {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSarWaterMarkNew?fileId=' + attId + '&userId=' + this.$store.getters.userInfo.userId
} else {
this.$message.error('请选择要下载的文件')
}
}
},
getBusStandFileByAttId(attId) {
return new Promise((resolve, reject) => {
getBusStandFileByAttId({
attId
}).then(res => {
if (res.ok) {
resolve(res.data)
} else {
reject()
}
}).catch(e => {
reject(e)
})
})
},
openFileInPdf (attId, fileName) {
// 判断是否是图片格式,图片格式不预览,直接下载
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
//把后缀转大写
if(fileSuffix !== undefined && fileSuffix !== null){
fileSuffix = fileSuffix.toUpperCase()
}
// 判断上传文件格式
if (fileSuffix === '.PNG'|| fileSuffix === '.JPG'|| fileSuffix === '.JPEG') {
this.downloadFile(attId)
return true
}
// 缺少文件
if (this.$hasPermission('fd83032ae5f41a0021b00e93c88edbbg')) {
if (fileSuffix === '.PDG' || fileSuffix === '.pdg') {
this.getBusStandFileByAttId(attId)
.then(res => {
if(res){
const editFileInfo = res
if(editFileInfo.fileSuffix === 'pdg' || editFileInfo.fileSuffix === 'PDG'){
window.open('book://ssreader/e0?url='+editFileInfo.downLoadUrl)
}
}
}).catch(e => {
this.$message.warning('文件不存在,预览失败')
})
}else {
this.$http.get('lawss/sarLawsFile/queryConvertAtt', {
attId: attId
}, {
_this: this
}, res => {
if (res.data) {
let fileObj = {}
fileObj.fileId = res.data.attId
fileObj.fileName = fileName
let fileList = []
let repeatData = 0
if (sessionStorage.getItem('fileInfo')) {
fileList = JSON.parse(sessionStorage.getItem('fileInfo'))
if (fileList != null && fileList.length > 0) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].fileId === res.data.attId) {
repeatData = 1
break
}
}
if (repeatData === 0) {
fileList.push(fileObj)
fileList = JSON.stringify(fileList)
sessionStorage.setItem('fileInfo', fileList)
}
}
} else {
fileList.push(fileObj)
fileList = JSON.stringify(fileList)
sessionStorage.setItem('fileInfo', fileList)
}
window.open('/static/pdf/web/viewer.html?file=' + encodeURIComponent('/api/att/attFile/getFileInfo?fileId=' + res.data.attId))
} else {
this.$message.error('文档未转换成功或本地读取不到该文档')
}
}, e => {
this.$message.error('文档未转换成功或本地读取不到该文档')
})
}
} else {
this.$message.error('没有在线预览文档权限!')
}
},
}
}
</script>
<style scoped lang="less">
.regulatoryMaterialsDetail {
width: 100%;
height: 100%;
background: #fff;
overflow: auto;
.container {
padding: 15px 30px 0;
width: 1200px;
margin: 0 auto;
height: 100%;
.header {
padding: 34px 0;
font-size: 20px;
font-weight: bold;
color: #555555;
text-align: center;
}
.content {
border-top: 2px dashed rgb(209, 209, 209);
.modular-header {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 50px;
border-bottom: 1px solid #E5E5E5;
.modular-header-title {
font-size: 18px;
font-weight: bold;
color: #3B424C;
> .icon-modular-title {
display: inline-block;
margin-left: -28px;
width: 18px;
height: 18px;
background-size: 100% 100%;
background-position: center center;
background-image: url("~assets/images/shangqi/standardDetails/modular-title.png");
position: relative;
top: 2px;
}
> span {
padding-left: 10px;
}
}
/deep/ .modular-header-btn{
> button {
height: 30px;
line-height: 30px;
font-size: 14px;
padding: 0 10px;
font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
> i{
display: inline-block;
margin-right: 3px;
width: 18px;
height: 18px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: text-bottom;
}
}
.collection-btn{
padding: 0;
border: none;
> i {
color: #F2CB51;
font-size: 18px;
width: 18px;
height: 18px;
}
> .el-icon-star-on {
font-size: 22px;
}
&:hover{
background: transparent;
}
}
.relation-btn {
color: #409EFF;
border: 1px solid #409EFF;
background: rgba(64, 158, 255, 0.1);
.icon-relation{
background-image: url("~assets/images/shangqi/standardDetails/relation.png");
}
}
}
}
.modular-content {
color: #333;
font-size: 16px;
> p {
min-height: 43px;
line-height: 43px;
border-bottom: 1px solid #E5E5E5;
}
.half {
width: 50%;
float: left;
}
.whole {
width: 100%;
float: left;
}
}
/deep/ .el-collapse-item__wrap {
border: none;
}
.file-item{
display: flex;
align-items: center;
.file-title {
display: inline-block;
font-size: 16px;
color: #409EFF;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
max-width: 780px;
white-space: nowrap;
}
}
/deep/ .el-collapse-item__content {
padding: 0;
}
}
}
}
/deep/ .icon-download {
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: sub;
cursor: pointer;
background-image: url("~assets/images/shangqi/img/download.png");
}
/deep/ .icon-download2 {
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: sub;
cursor: pointer;
background-image: url("~assets/images/shangqi/img/download2.png");
}
</style>
@@ -3,7 +3,7 @@
<div class="other-standard-details v-class" :class="{'hidden': !isMoreAwayBtn}">
<!--title 标题-->
<div class="details-header">
<span>{{sarStandardsInfoEO.lawsNumber}}-{{sarStandardsInfoEO.lawsYear}} {{sarStandardsInfoEO.lawsName}} 政策详情</span>
<span>{{sarStandardsInfoEO.lawsNo}}-{{sarStandardsInfoEO.lawsYear}} {{sarStandardsInfoEO.lawsName}} 政策详情</span>
</div>
<!--主体内容-->
<div class="details-content" style="position: relative">
@@ -40,27 +40,34 @@
<template v-if = "item.label === '基础信息'">
<div class="details-content-modular basic-information" style="margin-bottom: 0;border: none">
<div class="basic-information-content">
<p style="" class="half"><label style=" margin-right: 157px;">政策分类</label><span>{{ sarStandardsInfoEO.lawsType }}</span></p>
<p style="" class="half"><label style=" margin-right: 157px;">政策编号</label><span>{{ sarStandardsInfoEO.lawsNumber }}</span></p>
<p><label style=" margin-right: 157px;">政策名称</label><span>{{ sarStandardsInfoEO.lawsName || '-' }}</span></p>
<p v-if="activeState" style=""><label style=" margin-right: 157px;">英文名称</label><span>{{ sarStandardsInfoEO.lawsEnName || '-' }}</span></p>
<!--<p style="" class="half"><label style=" margin-right: 157px;">政策分类</label><span>{{ sarStandardsInfoEO.lawsType }}</span></p>-->
<p style="" class="half"><label style=" margin-right: 132px;">1级政策分类</label><span>{{ sarStandardsInfoEO.lawTypeFirstLevelName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">2级政策分类</label><span>{{ sarStandardsInfoEO.lawTypeFourthLevelName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">3级政策分类</label><span>{{ sarStandardsInfoEO.lawTypeSecondLevelName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">4级政策分类</label><span>{{ sarStandardsInfoEO.lawTypeThirdLevelName || '-' }}</span></p>
<!--<p style="" class="half"><label style=" margin-right: 157px;">政策编号</label><span>{{ sarStandardsInfoEO.lawsNumber }}</span></p>-->
<p class="half"><label style=" margin-right: 157px;">政策名称</label><span>{{ sarStandardsInfoEO.lawsName || '-' }}</span></p>
<p class="half"><label style=" margin-right: 157px;">英文名称</label><span>{{ sarStandardsInfoEO.lawsEnName || '-' }}</span></p>
<p class="half"><label style=" margin-right: 157px;">政策文号</label><span>{{ sarStandardsInfoEO.lawsNo || '-' }}</span></p>
<p class="half"><label style=" margin-right: 157px;">发文日期</label><span>{{ sarStandardsInfoEO.issueTime || '-' }}</span></p>
<p class="half"><label style=" margin-right: 157px;">发文单位</label><span>{{ sarStandardsInfoEO.issueCompany || '-' }}</span></p>
<p class="half"><label style=" margin-right: 125px;">征集意见周期</label><span>{{ formatDateFunc(sarStandardsInfoEO.commentCycleStart) || '' }} - {{formatDateFunc(sarStandardsInfoEO.commentCycleEnd) || ''}}</span></p>
<p class="half">
<label style=" margin-right: 156px;"
title=""
>文本状态</label><span style="">{{ sarStandardsInfoEO.standStatusShow || '-' }}</span>
</p>
<p class="half"><label style=" margin-right: 157px;">信息简报</label><span>{{ sarStandardsInfoEO.lawsBulletin || '-' }}</span></p>
<p class="half"><label style=" margin-right: 157px;">适用区域</label><span>{{ sarStandardsInfoEO.lawsSyqy || '-' }}</span></p>
<p class="half"><label style=" margin-right: 156px;">文本状态</label><span style="">{{ sarStandardsInfoEO.standStatusShow || '-' }}</span></p>
<p class="half"><label style=" margin-right: 157px;">适用车型</label><span>{{ sarStandardsInfoEO.lawsSycx || '-' }}</span></p>
<p class="half"><label style=" margin-right: 95px;">是否纳入认证清单</label><span>{{ sarStandardsInfoEO.isRelateAccess === '1' ? '是' : (sarStandardsInfoEO.isRelateAccess ? '否':'-')}}</span></p>
<p class="half"><label style=" margin-right: 95px;">福田转发通知文号</label><span>{{ sarStandardsInfoEO.lawsNotisyncNum || '-' }}</span></p>
<p class="half"><label style=" margin-right: 157px;">政策文号</label><span>{{ sarStandardsInfoEO.lawsNo || '-' }}</span></p>
<p class="half"><label style=" margin-right: 190px;">年度</label><span>{{ sarStandardsInfoEO.lawsYear || '-' }}</span></p>
<p class="half"><label style=" margin-right: 95px;">福田转发通知文号</label>
<a v-if="sarStandardsInfoEO.notisyncNumLink && sarStandardsInfoEO.notisyncNumLink!== ''" :href="sarStandardsInfoEO.notisyncNumLink" target="_blank" style="cursor: pointer;color: rgb(45, 140, 240);">
{{ sarStandardsInfoEO.lawsNotisyncNum || '-' }}
</a>
<span v-else>{{ sarStandardsInfoEO.lawsNotisyncNum || '-' }}</span>
</p>
<!--<p class="half"><label style=" margin-right: 125px;">通知文号链接</label><span>{{ sarStandardsInfoEO.notisyncNumLink || '-' }}</span></p>-->
<p class="half"><label style=" margin-right: 157px;">信息简报</label><span>{{ sarStandardsInfoEO.lawsBulletin || '-' }}</span></p>
<p class="half"><label style=" margin-right: 190px;">标签</label><span>{{ sarStandardsInfoEO.lawsLabel || '-' }}</span></p>
<p class="half"><label style=" margin-right: 62px;">备注最终政策发布</label><span>{{ sarStandardsInfoEO.lawsRemark || '-' }}</span></p>
<!--<p class="half"><label style=" margin-right: 157px;">适用区域</label><span>{{ sarStandardsInfoEO.lawsSyqy || '-' }}</span></p>-->
<!--<p class="half"><label style=" margin-right: 157px;">政策文号</label><span>{{ sarStandardsInfoEO.lawsNo || '-' }}</span></p>-->
<template v-for="(child, childIndex) in item.child2">
<p class="half">
<label style=" margin-right: 156px;">{{child.attrName}}</label>
@@ -0,0 +1,597 @@
<template>
<div class="regulatoryMaterialsDetail">
<div class="container">
<div class="header">{{ form.topicName }}</div>
<div class="content">
<el-collapse v-model="activeNames">
<el-collapse-item name="1">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>基础信息</span>
</div>
<div class="modular-header-btn">
<el-button class="relation-btn"
icon="icon-relation"
@click.stop="relateEvent()"
>更新记录</el-button>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 132px;">课题名称</label><span>{{ form.topicName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">课题承办单位</label><span>{{ form.organizer || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">课题指导单位</label><span>{{ form.guidanceUnit || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">课题参与单位</label><span>{{ form.participatingUnit || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">启动时间</label><span>{{ form.startTime || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">结题时间</label><span>{{ form.closeTime || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">课题状态</label><span>{{ form.topicStatus || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 68px;">课题费用万元</label><span>{{ form.topicCost || '-' }}</span></p>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 164px;line-height: 44px">协议</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.agreementList && form.agreementList.length > 0">
<p class="file-item" v-for="file in form.agreementList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
</div>
</el-collapse-item>
<el-collapse-item v-for="(item, index) in form.meetingList" :name="'meetingList' + index">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>课题组会议</span>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 132px;">会议名称</label><span>{{ item.meetingName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">会议时间</label><span>{{ item.meetingTime || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">会议地点</label><span>{{ item.meetingAddress || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 68px;">参会人员内部</label><span>{{ item.participants || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 100px;">会议主要内容</label><span>{{ item.meetingContent || '-' }}</span></p>
</div>
</el-collapse-item>
<el-collapse-item name="2">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>课题组资料</span>
</div>
</div>
</template>
<div class="modular-content">
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">研究方案</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.researchPlanList && form.researchPlanList.length > 0">
<p class="file-item" v-for="file in form.researchPlanList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">研究成果</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.researchFindingsList && form.researchFindingsList.length > 0">
<p class="file-item" v-for="file in form.researchFindingsList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 164px;line-height: 44px">其他</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.otherList && form.otherList.length > 0">
<p class="file-item" v-for="file in form.otherList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">会议资料</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.conferenceMaterialsList && form.conferenceMaterialsList.length > 0">
<p class="file-item" v-for="file in form.conferenceMaterialsList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
</div>
</el-collapse-item>
<el-collapse-item v-for="(item, index) in form.topicContactInformationList" :name="'topicContactInformationList' + index">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>课题组联系方式</span>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 164px;">姓名</label><span>{{ item.name || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">单位</label><span>{{ item.department || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">电话</label><span>{{ item.phone || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">邮箱</label><span>{{ item.email || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">身份</label><span>{{ item.identity || '-' }}</span></p>
</div>
</el-collapse-item>
<el-collapse-item name="3">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>内部资料</span>
</div>
</div>
</template>
<div class="modular-content">
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">立项报告</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.insideProjectProposalReportList && form.insideProjectProposalReportList.length > 0">
<p class="file-item" v-for="file in form.insideProjectProposalReportList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">研究方案</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.insideResearchPlanList && form.insideResearchPlanList.length > 0">
<p class="file-item" v-for="file in form.insideResearchPlanList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">会议资料</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.insideConferenceMaterialsList && form.insideConferenceMaterialsList.length > 0">
<p class="file-item" v-for="file in form.insideConferenceMaterialsList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 132px;line-height: 44px">研究成果</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.insideResearchFindingsList && form.insideResearchFindingsList.length > 0">
<p class="file-item" v-for="file in form.insideResearchFindingsList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<div class="whole" style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 164px;line-height: 44px">其他</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.insideOtherList && form.insideOtherList.length > 0">
<p class="file-item" v-for="file in form.insideOtherList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
</div>
</el-collapse-item>
<el-collapse-item v-for="(item, index) in form.insideContactInformationList" :name="'insideContactInformationList' + index">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>内部联系方式</span>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 164px;">姓名</label><span>{{ item.name || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">单位</label><span>{{ item.department || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">电话</label><span>{{ item.phone || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">邮箱</label><span>{{ item.email || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 164px;">身份</label><span>{{ item.identity || '-' }}</span></p>
</div>
</el-collapse-item>
</el-collapse>
</div>
</div>
<!-- 更新LOG -->
<el-dialog
title="更新记录"
:visible.sync="relateDialog"
width="60%"
class="relateClass"
:before-close="relateDialogClose">
<div
v-for="(item, index) in relateNowList"
:key="index"
v-if="relateNowList"
style="margin-bottom: 10px;line-height: 20px"
>
{{index+1}}. {{item.creationUserName}} {{item.creationTime}} {{item.content}}
<div v-if="relateNowList.length >1"><el-divider></el-divider></div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="relateDialogClose()"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getBusStandFileByAttId } from 'api/process'
export default {
name: "policyTopicsDetail",
data () {
return {
url: {
getLawsTopicInfo: 'lawss/sarLawsTopic/getLawsTopicInfo',
getLogList: 'lawss/sarUpdLog/getLogList', // 更新记录
},
form: {},
activeNames: ['1', '2', '3'],
// 更新记录
relateDialog: false,
relateNowList: [],
}
},
created() {
this.getData()
},
methods: {
getData () {
const id = this.$route.params.id
this.$http._getData(this.url.getLawsTopicInfo, { id }).then(res => {
if (res.ok) {
const activeNames = []
res.data.meetingList.forEach((item, index) => {
activeNames.push('meetingList' + index)
})
res.data.topicContactInformationList.forEach((item, index) => {
activeNames.push('topicContactInformationList' + index)
})
res.data.insideContactInformationList.forEach((item, index) => {
activeNames.push('insideContactInformationList' + index)
})
this.activeNames = [...this.activeNames, ...activeNames]
this.$set(this, 'form', res.data)
}
})
},
// 更新LOG
relateEvent () {
const query = {
sarId: this.$route.params.id,
sarType: 'LAWS_TOPIC'
}
this.$http._getData(this.url.getLogList, query).then(res => {
if (res.ok && res.data.length > 0) {
this.relateDialog = true
const relateList = res.data
var i
for (i = 0; i < relateList.length; i++) {
let obj = {creationUserName: '', creationTime: '', content: ''}
obj.creationUserName = relateList[i].creationUserName
obj.creationTime = relateList[i].creationTime
obj.content = relateList[i].content
this.relateNowList.push(obj)
}
} else {
this.$message.warning('暂无数据')
}
})
},
relateDialogClose () {
this.relateDialog = false
this.relateNowList = []
},
downloadFile (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSarNew?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
downloadFileByWater (attId, fileSuffix) {
if (fileSuffix !== 'pdf' && fileSuffix !== 'PDF') {
this.$message.error('水印下载仅支持PDF,pdf格式文件')
} else {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSarWaterMarkNew?fileId=' + attId + '&userId=' + this.$store.getters.userInfo.userId
} else {
this.$message.error('请选择要下载的文件')
}
}
},
getBusStandFileByAttId(attId) {
return new Promise((resolve, reject) => {
getBusStandFileByAttId({
attId
}).then(res => {
if (res.ok) {
resolve(res.data)
} else {
reject()
}
}).catch(e => {
reject(e)
})
})
},
openFileInPdf (attId, fileName) {
// 判断是否是图片格式,图片格式不预览,直接下载
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
//把后缀转大写
if(fileSuffix !== undefined && fileSuffix !== null){
fileSuffix = fileSuffix.toUpperCase()
}
// 判断上传文件格式
if (fileSuffix === '.PNG'|| fileSuffix === '.JPG'|| fileSuffix === '.JPEG') {
this.downloadFile(attId)
return true
}
// 缺少文件
if (this.$hasPermission('fd83032ae5f41a0021b00e93c88edbbg')) {
if (fileSuffix === '.PDG' || fileSuffix === '.pdg') {
this.getBusStandFileByAttId(attId)
.then(res => {
if(res){
const editFileInfo = res
if(editFileInfo.fileSuffix === 'pdg' || editFileInfo.fileSuffix === 'PDG'){
window.open('book://ssreader/e0?url='+editFileInfo.downLoadUrl)
}
}
}).catch(e => {
this.$message.warning('文件不存在,预览失败')
})
}else {
this.$http.get('lawss/sarLawsFile/queryConvertAtt', {
attId: attId
}, {
_this: this
}, res => {
if (res.data) {
let fileObj = {}
fileObj.fileId = res.data.attId
fileObj.fileName = fileName
let fileList = []
let repeatData = 0
if (sessionStorage.getItem('fileInfo')) {
fileList = JSON.parse(sessionStorage.getItem('fileInfo'))
if (fileList != null && fileList.length > 0) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].fileId === res.data.attId) {
repeatData = 1
break
}
}
if (repeatData === 0) {
fileList.push(fileObj)
fileList = JSON.stringify(fileList)
sessionStorage.setItem('fileInfo', fileList)
}
}
} else {
fileList.push(fileObj)
fileList = JSON.stringify(fileList)
sessionStorage.setItem('fileInfo', fileList)
}
window.open('/static/pdf/web/viewer.html?file=' + encodeURIComponent('/api/att/attFile/getFileInfo?fileId=' + res.data.attId))
} else {
this.$message.error('文档未转换成功或本地读取不到该文档')
}
}, e => {
this.$message.error('文档未转换成功或本地读取不到该文档')
})
}
} else {
this.$message.error('没有在线预览文档权限!')
}
},
}
}
</script>
<style scoped lang="less">
.regulatoryMaterialsDetail {
width: 100%;
height: 100%;
background: #fff;
overflow: auto;
.container {
padding: 15px 30px 0;
width: 1200px;
margin: 0 auto;
height: 100%;
.header {
padding: 34px 0;
font-size: 20px;
font-weight: bold;
color: #555555;
text-align: center;
}
.content {
border-top: 2px dashed rgb(209, 209, 209);
.modular-header {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 50px;
border-bottom: 1px solid #E5E5E5;
.modular-header-title {
font-size: 18px;
font-weight: bold;
color: #3B424C;
> .icon-modular-title {
display: inline-block;
margin-left: -28px;
width: 18px;
height: 18px;
background-size: 100% 100%;
background-position: center center;
background-image: url("~assets/images/shangqi/standardDetails/modular-title.png");
position: relative;
top: 2px;
}
> span {
padding-left: 10px;
}
}
/deep/ .modular-header-btn{
> button {
height: 30px;
line-height: 30px;
font-size: 14px;
padding: 0 10px;
font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
> i{
display: inline-block;
margin-right: 3px;
width: 18px;
height: 18px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: text-bottom;
}
}
.collection-btn{
padding: 0;
border: none;
> i {
color: #F2CB51;
font-size: 18px;
width: 18px;
height: 18px;
}
> .el-icon-star-on {
font-size: 22px;
}
&:hover{
background: transparent;
}
}
.relation-btn {
color: #409EFF;
border: 1px solid #409EFF;
background: rgba(64, 158, 255, 0.1);
.icon-relation{
background-image: url("~assets/images/shangqi/standardDetails/relation.png");
}
}
}
}
.modular-content {
color: #333;
font-size: 16px;
> p {
min-height: 43px;
line-height: 43px;
border-bottom: 1px solid #E5E5E5;
}
.half {
width: 50%;
float: left;
}
.whole {
width: 100%;
float: left;
}
}
/deep/ .el-collapse-item__wrap {
border: none;
}
.file-item{
display: flex;
align-items: center;
.file-title {
display: inline-block;
font-size: 16px;
color: #409EFF;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
max-width: 780px;
white-space: nowrap;
}
}
/deep/ .el-collapse-item__content {
padding: 0;
}
}
}
}
/deep/ .icon-download {
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: sub;
cursor: pointer;
background-image: url("~assets/images/shangqi/img/download.png");
}
/deep/ .icon-download2 {
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: sub;
cursor: pointer;
background-image: url("~assets/images/shangqi/img/download2.png");
}
</style>
@@ -0,0 +1,474 @@
<template>
<div class="regulatoryMaterialsDetail">
<div class="container">
<div class="header">{{ form.name }}</div>
<div class="content">
<el-collapse v-model="activeNames">
<el-collapse-item name="1">
<template slot="title">
<div class="modular-header">
<div class="modular-header-title">
<i class="icon-modular-title"/><span>基础信息</span>
</div>
<div class="modular-header-btn">
<el-button v-if="form.collectId"
@click.stop="collectClick(form.collectId)"
title="取消收藏"
class="collection-btn"
icon="el-icon-star-on"
:loading="isSubmit"
></el-button>
<el-button v-else
@click.stop="collectClick()"
title="收藏"
class="collection-btn"
icon="el-icon-star-off"
:loading="isSubmit"
></el-button>
<el-button class="relation-btn"
icon="icon-relation"
@click.stop="relateEvent()"
>更新记录</el-button>
</div>
</div>
</template>
<div class="modular-content">
<p style="" class="half"><label style=" margin-right: 132px;">1级资料分类</label><span>{{ form.firstTypeName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">2级资料分类</label><span>{{ form.secondTypeName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">3级资料分类</label><span>{{ form.thirdTypeName || '-' }}</span></p>
<p style="" class="half"><label style=" margin-right: 132px;">4级资料分类</label><span>{{ form.fourthTypeName || '-' }}</span></p>
<p style=""><label style=" margin-right: 156px;">资料名称</label><span>{{ form.name || '-' }}</span></p>
<p style=""><label style=" margin-right: 124px;">资料归属单位</label><span>{{ form.department || '-' }}</span></p>
<p style=""><label style=" margin-right: 186px;">作者</label><span>{{ form.author || '-' }}</span></p>
<p style=""><label style=" margin-right: 156px;">上传时间</label><span>{{ form.uploadTime || '-' }}</span></p>
<p style=""><label style=" margin-right: 156px;">资料说明</label><span>{{ form.description || '-' }}</span></p>
<div style="display: flex;border-bottom: 1px solid #E5E5E5">
<label style=" margin-right: 156px;line-height: 44px">资料文件</label>
<div style="min-height: 44px;padding: 8px 0;">
<template v-if="form.informationFileList && form.informationFileList.length > 0">
<p class="file-item" v-for="file in form.informationFileList">
<a class="file-title" target="_blank" :title="file.oldFileName" @click="openFileInPdf(file.id, file.oldFileName)">{{ file.oldFileName }}</a>
<i v-if="form.downloadable" title="下载" class="icon-download" @click="downloadFile(file.id)"></i>
<i v-if="form.downloadable" title="下载带水印" class="icon-download2" @click="downloadFileByWater(file.id, file.fileSuffix)"></i>
</p>
</template>
<p v-else>-</p>
</div>
</div>
<p style=""><label style=" margin-right: 156px;">可查看者</label><span>{{ form.viewableBy || '-' }}</span></p>
<p style=""><label style=" margin-right: 156px;">可下载者</label><span>{{ form.downloadableBy || '-' }}</span></p>
</div>
</el-collapse-item>
</el-collapse>
</div>
</div>
<!-- 更新LOG -->
<el-dialog
title="更新记录"
:visible.sync="relateDialog"
width="60%"
class="relateClass"
:before-close="relateDialogClose">
<div
v-for="(item, index) in relateNowList"
:key="index"
v-if="relateNowList"
style="margin-bottom: 10px;line-height: 20px"
>
{{index+1}}. {{item.creationUserName}} {{item.creationTime}} {{item.content}}
<div v-if="relateNowList.length >1"><el-divider></el-divider></div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="relateDialogClose()"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getBusStandFileByAttId } from 'api/process'
export default {
name: "regulatoryMaterialsDetail",
data () {
return {
url: {
getLawsInformationInfo: 'lawss/sarLawsInformation/getLawsInformationInfo',
getLogList: 'lawss/sarUpdLog/getLogList', // 更新记录
personCollect: 'person/personCollect', // 收藏
updateByUserId: 'person/personCollect/updateByUserId', // 取消收藏
},
form: {},
activeNames: ['1'],
isSubmit: false,
// 更新记录
relateDialog: false,
relateNowList: [],
}
},
created() {
this.getData()
},
methods: {
userToId (userStr) {
return (userStr && userStr !== '') ? userStr.split(',').map(item => item.split('(')[1].split(')')[0]) : []
},
// 下载权限
hasDownLoadPermission() {
const userId = this.$store.getters.userInfo.userId
// 未设置可下载者 创建人和审批人可下载
if (!this.form.downloadableBy || this.form.downloadableBy === '') {
if (this.userToId(this.form.createAndApproveBy).find(item => item === userId)) {
return true
}
} else {
// 设置可下载者 可下载者可下载
if (this.userToId(this.form.downloadableBy).find(item => item === userId)) {
return true
}
}
return false
},
getData () {
const id = this.$route.params.id
this.$http._getData(this.url.getLawsInformationInfo, { id }).then(res => {
if (res.ok) {
this.$set(this, 'form', res.data)
}
})
},
removeCommasAtStartAndEnd(inputString) {
// 检查字符串是否以逗号开头
if (inputString.charAt(0) === ',') {
inputString = inputString.slice(1); // 去除开头的逗号
}
// 检查字符串是否以逗号结尾
if (inputString.charAt(inputString.length - 1) === ',') {
inputString = inputString.slice(0, -1); // 去除结尾的逗号
}
return inputString;
},
/**
* 点击 加收藏 按钮事件
* @param collectId 有值:取消收藏 无值:加收藏
*/
collectClick (collectId) {
if (collectId) {
// 取消收藏
this.$http._put(this.url.updateByUserId, {
id: collectId
},{
_this: this,
loading: 'isSubmit'
}).then(res => {
this.form.collectId = ''
})
} else {
// 加收藏
let personCollect = {
userId: this.$store.getters.userInfo.userId,
collectResId: this.form.id,
collectTitle: this.form.name,
collectType: 'LAWS_INFORMATION' // 国内收藏type
}
this.$http._postData(this.url.personCollect, personCollect, {
_this: this,
loading: 'isSubmit'
}).then(res => {
if (res.ok) {
this.$message.success(res.message)
this.form.collectId = res.data.id
}
})
}
},
// 更新LOG
relateEvent () {
const query = {
sarId: this.$route.params.id,
sarType: 'LAWS_INFORMATION'
}
this.$http._getData(this.url.getLogList, query).then(res => {
if (res.ok && res.data.length > 0) {
this.relateDialog = true
const relateList = res.data
var i
for (i = 0; i < relateList.length; i++) {
let obj = {creationUserName: '', creationTime: '', content: ''}
obj.creationUserName = relateList[i].creationUserName
obj.creationTime = relateList[i].creationTime
obj.content = relateList[i].content
this.relateNowList.push(obj)
}
} else {
this.$message.warning('暂无数据')
}
})
},
relateDialogClose () {
this.relateDialog = false
this.relateNowList = []
},
downloadFile (attId) {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSarNew?fileId=' + attId
} else {
this.$message.error('请选择要下载的文件')
}
},
downloadFileByWater (attId, fileSuffix) {
if (fileSuffix !== 'pdf' && fileSuffix !== 'PDF') {
this.$message.error('水印下载仅支持PDF,pdf格式文件')
} else {
if (attId != null && attId !== '') {
window.location.href = '/api/att/attFile/downloadFileForSarWaterMarkNew?fileId=' + attId + '&userId=' + this.$store.getters.userInfo.userId
} else {
this.$message.error('请选择要下载的文件')
}
}
},
getBusStandFileByAttId(attId) {
return new Promise((resolve, reject) => {
getBusStandFileByAttId({
attId
}).then(res => {
if (res.ok) {
resolve(res.data)
} else {
reject()
}
}).catch(e => {
reject(e)
})
})
},
openFileInPdf (attId, fileName) {
// 判断是否是图片格式,图片格式不预览,直接下载
let index1 = fileName.lastIndexOf('.')
let index2 = fileName.length
let fileSuffix = fileName.substring(index1, index2)
//把后缀转大写
if(fileSuffix !== undefined && fileSuffix !== null){
fileSuffix = fileSuffix.toUpperCase()
}
// 判断上传文件格式
if (fileSuffix === '.PNG'|| fileSuffix === '.JPG'|| fileSuffix === '.JPEG') {
this.downloadFile(attId)
return true
}
// 缺少文件
if (this.$hasPermission('fd83032ae5f41a0021b00e93c88edbbg')) {
if (fileSuffix === '.PDG' || fileSuffix === '.pdg') {
this.getBusStandFileByAttId(attId)
.then(res => {
if(res){
const editFileInfo = res
if(editFileInfo.fileSuffix === 'pdg' || editFileInfo.fileSuffix === 'PDG'){
window.open('book://ssreader/e0?url='+editFileInfo.downLoadUrl)
}
}
}).catch(e => {
this.$message.warning('文件不存在,预览失败')
})
}else {
this.$http.get('lawss/sarLawsFile/queryConvertAtt', {
attId: attId
}, {
_this: this
}, res => {
if (res.data) {
let fileObj = {}
fileObj.fileId = res.data.attId
fileObj.fileName = fileName
let fileList = []
let repeatData = 0
if (sessionStorage.getItem('fileInfo')) {
fileList = JSON.parse(sessionStorage.getItem('fileInfo'))
if (fileList != null && fileList.length > 0) {
for (let i = 0; i < fileList.length; i++) {
if (fileList[i].fileId === res.data.attId) {
repeatData = 1
break
}
}
if (repeatData === 0) {
fileList.push(fileObj)
fileList = JSON.stringify(fileList)
sessionStorage.setItem('fileInfo', fileList)
}
}
} else {
fileList.push(fileObj)
fileList = JSON.stringify(fileList)
sessionStorage.setItem('fileInfo', fileList)
}
window.open('/static/pdf/web/viewer.html?file=' + encodeURIComponent('/api/att/attFile/getFileInfo?fileId=' + res.data.attId))
} else {
this.$message.error('文档未转换成功或本地读取不到该文档')
}
}, e => {
this.$message.error('文档未转换成功或本地读取不到该文档')
})
}
} else {
this.$message.error('没有在线预览文档权限!')
}
},
}
}
</script>
<style scoped lang="less">
.regulatoryMaterialsDetail {
width: 100%;
height: 100%;
background: #fff;
overflow: auto;
.container {
padding: 15px 30px 0;
width: 1200px;
margin: 0 auto;
height: 100%;
.header {
padding: 34px 0;
font-size: 20px;
font-weight: bold;
color: #555555;
text-align: center;
}
.content {
border-top: 2px dashed rgb(209, 209, 209);
.modular-header {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 50px;
border-bottom: 1px solid #E5E5E5;
.modular-header-title {
font-size: 18px;
font-weight: bold;
color: #3B424C;
> .icon-modular-title {
display: inline-block;
margin-left: -28px;
width: 18px;
height: 18px;
background-size: 100% 100%;
background-position: center center;
background-image: url("~assets/images/shangqi/standardDetails/modular-title.png");
position: relative;
top: 2px;
}
> span {
padding-left: 10px;
}
}
/deep/ .modular-header-btn{
> button {
height: 30px;
line-height: 30px;
font-size: 14px;
padding: 0 10px;
font-family: 'Microsoft Yahei', '\5FAE\8F6F\96C5\9ED1', Arial, sans-serif !important;
> i{
display: inline-block;
margin-right: 3px;
width: 18px;
height: 18px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: text-bottom;
}
}
.collection-btn{
padding: 0;
border: none;
> i {
color: #F2CB51;
font-size: 18px;
width: 18px;
height: 18px;
}
> .el-icon-star-on {
font-size: 22px;
}
&:hover{
background: transparent;
}
}
.relation-btn {
color: #409EFF;
border: 1px solid #409EFF;
background: rgba(64, 158, 255, 0.1);
.icon-relation{
background-image: url("~assets/images/shangqi/standardDetails/relation.png");
}
}
}
}
.modular-content {
color: #333;
font-size: 16px;
> p {
min-height: 43px;
line-height: 43px;
border-bottom: 1px solid #E5E5E5;
}
.half {
width: 50%;
float: left;
}
}
/deep/ .el-collapse-item__wrap {
border: none;
}
.file-item{
display: flex;
align-items: center;
.file-title {
display: inline-block;
font-size: 16px;
color: #409EFF;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
max-width: 780px;
white-space: nowrap;
}
}
}
}
}
/deep/ .icon-download {
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: sub;
cursor: pointer;
background-image: url("~assets/images/shangqi/img/download.png");
}
/deep/ .icon-download2 {
display: inline-block;
margin-left: 3px;
width: 18px;
height: 16px;
background-repeat: no-repeat;
background-size: 100% 100%;
background-position: center center;
vertical-align: sub;
cursor: pointer;
background-image: url("~assets/images/shangqi/img/download2.png");
}
</style>
+8 -1
View File
@@ -72,6 +72,12 @@ export default {
standardReleaseList: [], //标准发布数据
}
},
props: {
messageType: {
type: String,
required: true
}
},
computed: {},
watch: {},
mounted() {
@@ -113,7 +119,8 @@ export default {
getAdvice() {
this.loading = true
this.$http.get("/lawss/NewsFeed/getNewsFeed", {
messageType: 'GNWBZFG',
// messageType: 'GNWBZFG',
messageType: this.messageType,
page: this.page,
pageSize: this.pageSize
}, {
@@ -16,6 +16,9 @@
prop="problemDescription"
label="问题描述"
align="center">
<template slot-scope="scope">
<a class="table-jump" @click="handleClick(scope.row.id)">{{ scope.row.problemDescription }}</a>
</template>
</el-table-column>
<el-table-column
prop="questioner"
@@ -63,6 +66,12 @@ export default {
togo () {
this.$router.push({path:'/releaseQA2'})
},
handleClick (id) {
this.$router.push({
path:'/standQA',
query: { id }
})
},
getDate(){
this.loading = true
let form = this.form
+67 -4
View File
@@ -163,8 +163,10 @@ export default {
prcId: row.prcId,
prcNum: row.prcNum,
prcName: row.prcName,
prcType: row.prcType
prcType: row.prcType,
taskDefinitionKey: row.taskDefinitionKey
}
const params = {}
let name = ''
switch(prcType) {
case '1':
@@ -178,9 +180,11 @@ export default {
break
case 'laws1':
if (row.taskInfo === '政策入库审批') {
name = 'zcrkStep2'
// name = 'zcrkStep2'
name = 'policyWarehousing2'
}else if (row.taskInfo === '重新发起入库流程'){
name = 'zcrkStep3'
// name = 'zcrkStep3'
name = 'policyWarehousing1'
}
break
case 'buss1':
@@ -606,8 +610,67 @@ export default {
case '27':
name = 'MyQuestions2'
break
case '29':
if (row.taskInfo === '内外部会议入库审批') {
name = 'policyMeetings2'
} else if (row.taskInfo === '重新发起内外部会议入库流程') {
name = 'policyMeetings1'
}
break
case '30':
name = 'policyTopicEnrollment'
switch (row.taskInfo) {
case '审核':
params.type = 'step2'
break
case '审定':
params.type = 'step3'
break
case '批准':
params.type = 'step4'
break
case '重新起草':
params.type = 'step1_1'
break
}
break
case '31':
name = 'policyTopicParticipation'
switch (row.taskInfo) {
case '审核':
params.type = 'step2'
break
case '审定':
params.type = 'step3'
break
case '批准':
params.type = 'step4'
break
case '重新起草':
params.type = 'step1_1'
break
case '32': {
name = 'policyRegulatoryMaterials'
switch (row.taskInfo) {
case '批准':
params.type = 'step2'
break
case '重新起草':
params.type = 'step1_1'
break
}
}
break
case '33':
name = 'policyConsultation'
break
case '34':
name = 'policyComplianceReview'
break
}
this.$router.push({ name, query })
break
}
this.$router.push({ name, query, params })
},
},
}
+14 -10
View File
@@ -15,14 +15,22 @@
<span slot="label"><i class="el-icon-s-order"></i> 标准征求意见</span>
<solicitOpinions></solicitOpinions>
</el-tab-pane>
<el-tab-pane name="release" style="overflow-y: auto;height: 100%">
<span slot="label"><i class="el-icon-s-promotion"></i> 国内外标准法规入库</span>
<release></release>
<el-tab-pane name="releaseZL" style="overflow-y: auto;height: 100%">
<span slot="label"><i class="el-icon-chat-line-round"></i> 标准化动态</span>
<releaseZL></releaseZL>
</el-tab-pane>
<el-tab-pane name="releaseUs" style="overflow-y: auto;height: 100%">
<span slot="label"><i class="el-icon-s-operation"></i> 在研标准法规入库</span>
<el-tab-pane name="releaseUs" style="overflow-y: auto;height: 100%">
<span slot="label"><i class="el-icon-s-operation"></i> 在研标准法规动态</span>
<releaseUs></releaseUs>
</el-tab-pane>
</el-tab-pane>
<el-tab-pane name="releaseCn" style="overflow-y: auto;height: 100%">
<span slot="label"><i class="el-icon-s-promotion"></i> 国内标准法规动态</span>
<release messageType="GNBZFG"></release>
</el-tab-pane>
<el-tab-pane name="release" style="overflow-y: auto;height: 100%">
<span slot="label"><i class="el-icon-s-promotion"></i> 国外标准法规动态</span>
<release messageType="GWBZFG"></release>
</el-tab-pane>
<el-tab-pane name="releaseBuss" style="overflow-y: auto;height: 100%">
<span slot="label" style="position: relative"><i class="el-icon-s-promotion"></i>
企业标准发布
@@ -31,10 +39,6 @@
</span>
<releaseBuss></releaseBuss>
</el-tab-pane>
<el-tab-pane name="releaseZL" style="overflow-y: auto;height: 100%">
<span slot="label"><i class="el-icon-chat-line-round"></i> 标准化动态</span>
<releaseZL></releaseZL>
</el-tab-pane>
<el-tab-pane name="releaseQA" style="overflow-y: auto;height: 100%">
<span slot="label"><i class="el-icon-chat-line-round"></i> 标准问答</span>
<releaseQA></releaseQA>
+3 -1
View File
@@ -1017,7 +1017,9 @@ export default {
this.total = res.data.count
}else{
this.splitInfoPage = 1
this.getSarFileSplitInfoEOPage()
// this.getSarFileSplitInfoEOPage()
this.standInfoList = []
this.total = 0
}
}, e => {
})
@@ -0,0 +1,250 @@
<template>
<el-dialog
title="政策课题"
:visible.sync="show"
width="1100px"
custom-class="demo-drawer"
:close-on-click-modal="false"
@close=""
append-to-body
>
<!--搜索区-->
<div class="search-area">
<el-form :modal="searchForm" :inline="true" class="label-input-form">
<el-formItem label="课题名称" prop="topicName" class="search-item">
<el-input v-model="searchForm.topicName" clearable placeholder="请输入课题名称" :maxlength="100" @keyup.enter.native="onSearch"/>
</el-formItem>
<el-formItem label="课题承办单位" prop="organizer" class="search-item">
<el-input v-model="searchForm.organizer" clearable placeholder="请输入课题承办单位" :maxlength="100" @keyup.enter.native="onSearch"/>
</el-formItem>
<el-formItem label="启动时间" class="search-item" style="margin-right: 0">
<el-date-picker
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
clearable
:editable="true"
placeholder="请选择启动时间"
v-model="searchForm.startTimeBegin"
>
</el-date-picker>
</el-formItem>
<el-form-item label="至" label-width="25px" class="search-item">
<el-date-picker
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
clearable
:editable="true"
placeholder="选择结束时间"
v-model="searchForm.startTimeEnd"
>
</el-date-picker>
</el-form-item>
<el-formItem label="课题状态" prop="topicStatus" class="search-item">
<el-select v-model="searchForm.topicStatus"
placeholder="请选择课题状态"
clearable>
<el-option
v-for="opt in topicStatusOptions"
:key="opt.value"
:value="!opt.value ? '' : opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-formItem>
<el-form-item class="search-item btn-box">
<el-button
type="primary"
size="mini"
class="common-button-primary"
v-btn-permission="'91821ac75391d6e77388f13b68803396'"
@click="onSearch">
查询
</el-button>
<el-button
size="mini"
class="common-button-default"
v-btn-permission="'22a0ea67e20998458c519281980a3af2'"
@click="onClear">清空
</el-button>
</el-form-item>
</el-form>
</div>
<!-- 表格 -->
<div class="content">
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width: 100%;overflow-y: auto;overflow-x: hidden;"
:height="300"
border
class="drag-table"
@sort-change="sortChange"
: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>
<el-table-column
prop="topicName"
label="课题名称"
align="center"
sortable="custom"
>
<template slot-scope="{row, column, $index}">
<a class="table-jump" style="color: #2d8cf0" @click="handlePreview(row.id)">{{ row.topicName }}</a>
</template>
</el-table-column>
<el-table-column
prop="organizer"
label="课题承办单位"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
prop="startTime"
label="启动时间"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
prop="topicStatus"
label="课题状态"
align="center"
sortable="custom"
>
</el-table-column>
</el-table>
<pagination style="position: relative" :page="searchForm.page" :total="total" @pageChange="pageChange" @pageSizeChange="pageSizeChange"></pagination>
<loading :loading="loading">数据获取中...</loading>
</div>
<div slot="footer">
<el-button class="common-button-default" round icon="el-icon-close" @click="handleCancel">取消</el-button>
<el-button type="primary" round class="common-button-primary" icon="el-icon-check" @click="handleDragIn">带入</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: "TopicsTable",
data () {
const topicStatusOptions = [
{
label: '进行中',
value: '进行中'
},
{
label: '已结题',
value: '已结题'
},
]
return {
show: false,
searchForm: {},
api: {
page: 'lawss/sarLawsTopic/page'
},
// 列表
data: [],
total: 0,
loading: false,
selectedList: [],
topicStatusOptions,
}
},
methods: {
async getData () {
this.searchForm.pageSize = this.searchForm.pageSize || this.$store.getters.userInfo.configContent
this.searchForm.page = this.searchForm.page || 1
let params = { ...this.searchForm }
const res = await this.$http._getData(this.api.page, params, {_this:this,loading: 'loading'})
if (res.ok && res.data) {
this.data = res.data.list
this.total = res.data.count
}
},
open () {
this.$set(this, 'searchForm', {})
this.getData()
this.show = true
},
// 选择项勾选改变
selectionChange (data) {
this.selectedList = data
},
// 表格排序
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()
},
// 分页点击后方法
pageChange (page) {
this.searchForm.page = page
this.getData()
},
// 分页每页显示数改变后方法
pageSizeChange (pageSize) {
this.searchForm.pageSize = pageSize
this.getData()
},
// 点击查看
handlePreview(id) {
let routeUrl = this.$router.resolve({
name: 'policyTopicsDetail',
params: { id }
})
window.open(routeUrl.href, '_blank')
},
onSearch () {
this.searchForm.page = 1
this.getData()
},
onClear () {
this.$set(this, 'searchForm', {})
this.getData()
},
handleCancel () {
this.show = false
},
handleDragIn () {
if (this.selectedList.length === 0) {
return this.$message.warning('请选择要带入的课题信息')
}
if (this.selectedList.length > 1) {
return this.$message.warning('最多可以带入一条课题信息')
}
this.$emit('dragIn', this.selectedList[0])
this.show = false
},
}
}
</script>
<style scoped lang="less">
/deep/ .demo-drawer{
.el-dialog__body{
padding: 0 20px;
}
.el-dialog__footer {
padding: 0 20px 20px;
}
}
</style>
@@ -0,0 +1,197 @@
<template>
<el-drawer
title="高级搜索"
size="800px"
:visible="visible"
:wrapperClosable="false"
:before-close="beforeClose">
<div class="drawer-content">
<el-form
:model="form"
class="label-input-form table-lattice"
label-width="80px">
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<InputFormItem
label="参会人员"
title="参会人员"
v-model="form.participants">
</InputFormItem>
<InputFormItem
label="会议主要内容"
title="会议主要内容"
v-model="form.meetingContent">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="会议地点"
title="会议地点"
v-model="form.meetingAddress">
</InputFormItem>
</el-col>
</el-row>
</div>
<ProcessTitle>
<template slot="title">会议分类</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<SelectFormItem
label="1级会议分类"
title="1级会议分类"
v-model="form.firstMeetingType"
:options="dict.firstMeetingType">
</SelectFormItem>
</el-col>
<el-col :span="12">
<SelectFormItem
label="2级会议分类"
title="2级会议分类"
v-model="form.secondMeetingType"
:options="dict.secondMeetingType">
</SelectFormItem>
</el-col>
</el-row>
</div>
<ProcessTitle>
<template slot="title">会议议题</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<InputFormItem
label="议题名称"
title="议题名称"
v-model="form.agendaName">
</InputFormItem>
<InputFormItem
label="汇报人单位"
title="汇报人单位"
v-model="form.reportingUnit">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="汇报人"
title="汇报人"
v-model="form.reporter">
</InputFormItem>
<InputFormItem
label="议题主要内容"
title="议题主要内容"
v-model="form.agendaContent">
</InputFormItem>
</el-col>
</el-row>
</div>
</el-form>
</div>
<div class="drawer-footer">
<el-button
class="common-button-primary"
icon="el-icon-check"
type="primary"
@click="onSearch('search')">搜索
</el-button>
<el-button
class="common-button-default"
icon="el-icon-close"
@click="onCancel('cancel')">取消
</el-button>
</div>
</el-drawer>
</template>
<script>
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import SelectFormItem from "@/components/hzwlComponents/SelectFormItem";
import InputFormItem from "@/components/hzwlComponents/InputFormItem";
import DatePickerFormItem from "@/components/hzwlComponents/DatePickerFormItem";
import DataRangePickerFormItem from "@/components/hzwlComponents/DataRangePickerFormItem";
import SelectMultipleFormItem from "@/components/hzwlComponents/SelectMultipleFormItem";
import DatePickerGroupFormItem from "@/components/hzwlComponents/DatePickerGroupFormItem";
import DepartmentFormItem from "@/components/hzwlComponents/DepartmentFormItem";
import personFormItem from "@/components/hzwlComponents/personFormItem";
import InputForStandardsForLaws from "@/components/hzwlComponents/InputForStandardsForLaws";
export default {
name: "advancedSearch",
components: {
ProcessTitle,
SelectFormItem,
InputFormItem,
DatePickerFormItem,
DataRangePickerFormItem,
SelectMultipleFormItem,
DatePickerGroupFormItem,
DepartmentFormItem,
personFormItem,
InputForStandardsForLaws
},
props: {
visible: {
type: Boolean,
required: true
},
form: {
type: Object,
default: () => ({})
},
dict: {
type: Object,
default: () => ({})
},
},
data () {
return {
type: 'cancel'
}
},
methods: {
beforeClose (done) {
switch (this.type) {
case "search":
this.onSearch()
break
case 'cancel':
this.onCancel()
break
}
},
onSearch (type) {
this.type = type
this.$emit('search')
this.$emit('update:visible', false)
},
onCancel(type) {
this.type = type
this.$emit('resetAdvancedSearchForm')
this.$emit('update:visible', false)
}
}
}
</script>
<style scoped lang="less">
.drawer-content {
padding: 0 19px;
overflow-y: auto;
flex: auto;
}
.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>
@@ -0,0 +1,401 @@
<template>
<el-drawer :title="title"
:visible="showDrawer"
:wrapperClosable="false"
@close="onClose"
size="1050px">
<div class="drawer-content">
<el-form
v-if="showDrawer && reloadForm"
ref="formRef"
:model="form"
:rules="rules"
class="label-input-form"
>
<el-col :span="24"><div class="divider-line">基础信息</div></el-col>
<el-row>
<el-col :span="12">
<el-form-item label="会议名称" prop="meetingName" label-width="150px" class="add-form-item">
<el-input v-model="form.meetingName"
placeholder="请输入会议名称"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="课题名称" prop="topicName" label-width="150px" class="add-form-item">
<el-input v-model="form.topicName"
placeholder="请输入课题名称"
clearable></el-input>
<el-button
type="primary"
class="common-button-primary"
size="mini"
style="position:absolute;top: 10px;right: 0;"
@click="handleGetTopic"
>调取课题</el-button>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="会议主办单位" prop="meetingOrganizer" label-width="150px" class="add-form-item">
<el-input v-model="form.meetingOrganizer"
placeholder="请输入会议主办单位"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<CustomDatePick
:config="{
attrName: '会议时间',
attrField: 'meetingTime'
}"
v-model="form.meetingTime"
></CustomDatePick>
</el-col>
<el-col :span="12">
<el-form-item label="会议地点" prop="meetingAddress" label-width="150px" class="add-form-item">
<el-input v-model="form.meetingAddress"
placeholder="请输入会议地点"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="参会人员" prop="participants" label-width="150px" class="add-form-item">
<el-input v-model="form.participants"
placeholder="请输入参会人员"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<custom-file
:config="{
attrName: '会议纪要',
attrField: 'meetingMinutes'
}"
v-model="form.meetingMinutes"
></custom-file>
</el-col>
<el-col :span="24">
<CustomTextarea
:config="{
attrName: '会议主要内容',
attrField: 'meetingContent'
}"
v-model="form.meetingContent"
></CustomTextarea>
</el-col>
</el-row>
<el-col :span="24"><div class="divider-line">会议分类</div></el-col>
<el-row>
<el-col :span="12">
<el-form-item label="1级会议分类" prop="firstMeetingType" label-width="150px" class="add-form-item">
<template slot="label">1级会议分类</template>
<el-select v-model="form.firstMeetingType"
placeholder="请选择1级会议分类"
clearable>
<el-option
v-for="opt in dict.firstMeetingType"
:key="opt.value"
:value="opt.value === undefined ? '' :opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="2级会议分类" prop="secondMeetingType" label-width="150px" class="add-form-item">
<template slot="label">2级会议分类</template>
<el-select v-model="form.secondMeetingType"
placeholder="请选择2级会议分类"
clearable>
<el-option
v-for="opt in dict.secondMeetingType"
:key="opt.value"
:value="opt.value === undefined ? '' :opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<template v-for="(item, index) in form.meetingTopicList">
<el-col :span="24">
<div class="divider-line">
会议议题
<el-button type="primary" size="mini" icon="el-icon-plus" @click="addMeetingTopic"
:style="{visibility: (index === form.meetingTopicList.length - 1) ? 'visible' : 'collapse'}"></el-button>
<el-button type="primary" size="mini" icon="el-icon-minus" @click="removeMeetingTopic(index)"
:style="{visibility: (form.meetingTopicList.length < 2 && index === 0) ? 'collapse' : 'visible'}"></el-button>
</div>
</el-col>
<el-col :span="12">
<el-form-item label="议题名称" :prop="'meetingTopicList.' + index + '.agendaName'" :rules="rules.agendaName" label-width="150px" class="add-form-item">
<el-input v-model="item.agendaName"
placeholder="请输入议题名称"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<customFile
:config="{
attrName: '议题材料',
attrField: `meetingTopicList.${index}.agendaMaterials`
}"
:rules="rules.agendaMaterials"
v-model="item.agendaMaterials"
></customFile>
</el-col>
<el-col :span="12">
<el-form-item label="汇报人" :prop="'meetingTopicList.' + index + '.reporter'" :rules="rules.reporter" label-width="150px" class="add-form-item">
<el-input v-model="item.reporter"
placeholder="请输入汇报人"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="汇报人单位" :prop="'meetingTopicList.' + index + '.reportingUnit'" :rules="rules.reportingUnit" label-width="150px" class="add-form-item">
<el-input v-model="item.reportingUnit"
placeholder="请输入汇报人单位"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<CustomTextarea
:config="{
attrName: '议题主要内容',
attrField: `meetingTopicList.${index}.agendaContent`
}"
:rules="rules.agendaContent"
v-model="item.agendaContent"
></CustomTextarea>
</el-col>
</template>
</el-row>
</el-form>
</div>
<div class="drawer-footer">
<el-button icon="el-icon-check" type="primary" @click="onSubmit" :loading="isSubmit">提交</el-button>
<el-button icon="el-icon-close" @click="onClose">取消</el-button>
</div>
<TopicsTable ref="TopicsTableRef" @dragIn="dragIn"></TopicsTable>
</el-drawer>
</template>
<script>
import CustomDatePick from '@/components/CustomFormComponents/DatePicker'
import CustomFile from '@/components/CustomFormComponents/File'
import CustomTextarea from '@/components/CustomFormComponents/Textarea'
import TopicsTable from "./TopicsTable";
export default {
name: "editDrawer",
components: {
CustomDatePick,
CustomFile,
CustomTextarea,
TopicsTable
},
props: {
dict: {
type: Object
},
showDrawer: {
type: Boolean,
required: true
},
title: {
type: String,
default: '新增'
},
editForm: {
type: Object
}
},
data (){
const rules = {
meetingName: [
{required: true, type: 'string', message: '会议名称不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '会议名称不能超过500个字符', trigger: 'change'}
],
meetingOrganizer: [
{required: true, type: 'string', message: '会议主办单位不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '会议主办单位不能超过500个字符', trigger: 'change'}
],
meetingTime: [
{required: true, message: '会议时间不能为空', trigger: 'change'}
],
meetingAddress: [
{required: true, type: 'string', message: '会议地点不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '会议地点不能超过500个字符', trigger: 'change'}
],
participants: [
{required: true, type: 'string', message: '参会人员不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '参会人员不能超过500个字符', trigger: 'change'}
],
meetingContent: [
{required: true, type: 'string', message: '会议主要内容不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '会议主要内容不能超过500个字符', trigger: 'change'}
],
firstMeetingType: [
{required: true, message: '1级会议分类不能为空', trigger: 'change'}
],
secondMeetingType: [
{required: true, message: '2级会议分类不能为空', trigger: 'change'}
],
agendaName: [
{required: true, type: 'string', message: '议题名称不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '议题名称不能超过500个字符', trigger: 'change'}
],
reporter: [
{required: true, type: 'string', message: '汇报人不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '汇报人不能超过500个字符', trigger: 'change'}
],
reportingUnit: [
{required: true, type: 'string', message: '汇报人单位不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '汇报人单位不能超过500个字符', trigger: 'change'}
],
agendaContent: [
{required: true, type: 'string', message: '议题主要内容不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '议题主要内容不能超过500个字符', trigger: 'change'}
],
}
const form = {
meetingName: '',
meetingOrganizer: '',
meetingTime: '',
meetingAddress: '',
participants: '',
meetingMinutes: '',
meetingContent: '',
firstMeetingType: '',
secondMeetingType: '',
meetingTopicList: [
{
agendaName: '',
agendaMaterials: '',
reporter: '',
reportingUnit: '',
agendaContent: ''
}
]
}
return {
rules,
form,
isSubmit: false,
reloadForm: true,
api: {
add: 'lawss/insideOutsideMeeting/addMeetingInfo',
delete :'lawss/insideOutsideMeeting/deleteMeetingInfo',
update: 'lawss/insideOutsideMeeting/updateMeetingInfo'
}
}
},
watch: {
showDrawer (val) {
if (this.title === '编辑') {
this.form = { ...this.editForm }
} else {
this.resetForm()
}
}
},
methods: {
addMeetingTopic () {
const meetingTopicItem = {
agendaName: '',
agendaMaterials: '',
reporter: '',
reportingUnit: '',
agendaContent: ''
}
this.form.meetingTopicList = [...this.form.meetingTopicList, meetingTopicItem]
},
removeMeetingTopic (index) {
let res = []
this.form.meetingTopicList.forEach((item, i) => {
if (i !== index) {
res.push(item)
}
})
this.form.meetingTopicList = [ ...res ]
},
resetForm () {
this.form = {
meetingName: '',
meetingOrganizer: '',
meetingTime: '',
meetingAddress: '',
participants: '',
meetingMinutes: '',
meetingContent: '',
firstMeetingType: '',
secondMeetingType: '',
meetingTopicList: [
{
agendaName: '',
agendaMaterials: '',
reporter: '',
reportingUnit: '',
agendaContent: ''
}
]
}
},
onClose () {
this.$emit('update:showDrawer', false)
this.$refs['formRef'].resetFields()
this.resetForm()
},
onSubmit () {
this.$refs.formRef.validate(valid => {
if (valid) {
if (this.title === '新增') {
this.$http._postData(this.api.add, this.form).then(res => {
if (res.ok) {
this.$message.success('新增成功')
this.onClose()
this.$emit('load')
}
})
} else {
this.$http._putData(this.api.update, this.form).then(res => {
if (res.ok) {
this.$message.success('修改成功')
this.onClose()
this.$emit('load')
}
})
}
}
})
},
handleGetTopic () {
this.$refs.TopicsTableRef.open()
},
dragIn (val) {
this.$set(this.form, 'topicName', val.topicName)
}
}
}
</script>
<style scoped lang="less">
.drawer-content {
padding: 0 19px;
overflow-y: auto;
flex: auto;
}
.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>
@@ -0,0 +1,381 @@
<template>
<div class="meeting-root">
<!--搜索区-->
<div class="search-area">
<el-form :modal="searchForm" :inline="true" class="label-input-form">
<el-formItem label="会议名称" prop="meetingName" class="search-item">
<el-input v-model="searchForm.meetingName" clearable placeholder="请输入会议名称" :maxlength="100" @keyup.enter.native="onSearch"/>
</el-formItem>
<el-formItem label="会议主办单位" prop="meetingOrganizer" class="search-item">
<el-input v-model="searchForm.meetingOrganizer" clearable placeholder="请输入会议主办单位" :maxlength="100" @keyup.enter.native="onSearch"/>
</el-formItem>
<el-formItem label="会议时间" class="search-item" style="margin-right: 0">
<el-date-picker
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
clearable
:editable="true"
placeholder="选择开始时间"
v-model="searchForm.meetingTimeBegin"
>
</el-date-picker>
</el-formItem>
<el-form-item label="至" label-width="25px" class="search-item">
<el-date-picker
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
clearable
:editable="true"
placeholder="选择结束时间"
v-model="searchForm.meetingTimeEnd"
>
</el-date-picker>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
type="primary"
size="mini"
class="common-button-primary"
v-btn-permission="'520f8524252e76e751a883a0a8a8615c'"
@click="onSearch">
查询
</el-button>
<el-button
size="mini"
class="common-button-default"
v-btn-permission="'6a9483964b7b49dd473ef9e6fd4a649e'"
@click="onClear">清空
</el-button>
<el-button
size="mini"
type="primary"
class="common-button-primary"
v-btn-permission="'7f98cd8b424d6ad83b1770a6576993fc'"
@click="advancedSearch">高级检索
</el-button>
</el-form-item>
</el-form>
</div>
<!--按钮区-->
<div class="action-bar">
<el-button class="common-button-default export-button"
size="mini"
title="不勾选时默认导出所有筛选项;勾选时仅导出勾选项"
v-btn-permission="'6d749caee927a480fa99e5ddc48d8e05'"
@click="exportData"><i class="iconfont">&#xe6e9;</i>导出
</el-button>
<el-button class="common-button-default in-button"
size="mini"
v-btn-permission="'b168e0381ec7ba5d762c36ad2935542f'"
@click="addImportModal"><i class="iconfont">&#xe6de;</i>导入
</el-button>
<el-button class="common-button-default in-button"
size="mini"
v-btn-permission="'7990fb64c468c2d37cc2246fc3cb694e'"
@click="handleMoudel"><i class="iconfont">&#xe6de;</i>模板下载
</el-button>
<el-button type="primary"
class="common-button-primary add-button"
size="mini"
v-btn-permission="'f0e663244c1f823caa07e99bfc6535dc'"
@click="openDrawer('add')"
><i class="el-icon-plus"></i>新增
</el-button>
</div>
<!-- 表格 -->
<div class="content">
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width:100%;height: calc(100% - 57px)"
height="string"
border
class="drag-table"
@sort-change="sortChange"
: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>
<el-table-column
prop="meetingName"
label="会议名称"
align="center"
sortable="custom"
>
<template slot-scope="{row, column, $index}">
<a class="table-jump" style="color: #2d8cf0" @click="handlePreview(row.id)">{{ row.meetingName }}</a>
</template>
</el-table-column>
<el-table-column
prop="meetingOrganizer"
label="会议主办单位"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
prop="meetingTime"
label="会议时间"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
prop="meetingAddress"
label="会议地点"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
prop="agendaName"
label="议题名称"
align="center"
sortable="custom"
>
<template slot-scope="scope">
<span>{{ scope.row.meetingTopicList.map(item => item.agendaName).join(',') }}</span>
</template>
</el-table-column>
<el-table-column
v-if="isPermission('62cdf3d570941c154d28371632ccfa2e,71155d105e930bb8e7881a8a9809646a') > 0"
prop="action"
label="操作"
align="center"
>
<template slot-scope="scope">
<a class="table-jump" v-btn-permission="'62cdf3d570941c154d28371632ccfa2e'" style="color: #2d8cf0" @click="openDrawer('edit', scope.row)">编辑</a>
<a class="table-jump" v-btn-permission="'71155d105e930bb8e7881a8a9809646a'" style="color: #f56c6c;margin-left: 10px" @click="onDelete(scope.row.id)">删除</a>
</template>
</el-table-column>
</el-table>
<pagination :page="searchForm.page" :total="total" @pageChange="pageChange" @pageSizeChange="pageSizeChange"></pagination>
<loading :loading="loading">数据获取中...</loading>
</div>
<!-- 高级搜索 -->
<AdvancedSearch :visible.sync="advancedSearchVisible" :form="advancedSearchForm" :dict="dict" @search="onSearch" @resetAdvancedSearchForm="resetAdvancedSearchForm"></AdvancedSearch>
<!-- 新增编辑 -->
<editDrawer ref="editDrawerRef" :dict="dict" :showDrawer.sync="showDrawer" :title="titleDrawer" :editForm="editForm" @load="getData"></editDrawer>
<!-- 导入 -->
<ImportZip :visible.sync="importModalShowFlag" :action="importExcelUrl"></ImportZip>
<!-- 导出 -->
<ExportDialog ref="exportDialogRef" @exportName="handleExport"></ExportDialog>
</div>
</template>
<script>
import editDrawer from "./components/editDrawer";
import AdvancedSearch from './components/advancedSearch'
import ImportZip from '@/components/hzwlComponents/importZip'
import ExportDialog from '@/components/hzwlComponents/exportDialog'
import store from "@/store";
export default {
name: "meeting",
components: {
editDrawer,
AdvancedSearch,
ImportZip,
ExportDialog
},
data(){
return {
searchForm: {},
advancedSearchForm: {},
data: [],
total: 0,
selectedList: [],
loading: false,
dict: {},
showDrawer: false,
titleDrawer: '',
// 导入
importModalShowFlag: false,
importExcelUrl: '',
// 高级搜索
advancedSearchVisible: false,
editForm: void 0,
api: {
page: 'lawss/insideOutsideMeeting/page',
delete :'lawss/insideOutsideMeeting/deleteMeetingInfo'
}
}
},
created() {
this.getDicTypeListCode()
this.getData()
},
methods: {
// 点击查看
handlePreview(id) {
let routeUrl = this.$router.resolve({
name: 'meetingDetail',
params: { id }
})
window.open(routeUrl.href, '_blank')
},
isPermission (value) {
let hasCount = 0
let set =new Set( value.split(","))
let menuList = store.getters.getMenuList
if (menuList === '') {
return hasCount
} else {
menuList.map((menu) => {
if ( set.has(menu.id)|| value === undefined || value === '') {
hasCount++
}
})
}
return hasCount
},
async getData () {
this.searchForm.pageSize = this.searchForm.pageSize || this.$store.getters.userInfo.configContent
this.searchForm.page = this.searchForm.page || 1
let params = { ...this.searchForm, ...this.advancedSearchForm }
const res = await this.$http._getData(this.api.page, params, {_this:this,loading: 'loading'})
if (res.ok && res.data) {
this.data = res.data.list
this.total = res.data.count
}
},
onSearch(){
this.getData()
},
onClear () {
this.$set(this, 'searchForm', {})
this.$set(this, 'advancedSearchForm', {})
this.getData()
},
resetAdvancedSearchForm () {
this.$set(this, 'advancedSearchForm', {})
this.getData()
},
// 高级搜索
advancedSearch () {
this.$set(this, 'advancedSearchForm', {})
this.advancedSearchVisible = true
},
// 选择项勾选改变
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()
},
// 分页点击后方法
pageChange (page) {
this.searchForm.page = page
this.getData()
},
// 分页每页显示数改变后方法
pageSizeChange (pageSize) {
this.searchForm.pageSize = pageSize
this.getData()
},
// 导出
exportData () {
this.$refs.exportDialogRef.openModel()
},
handleExport (exportName) {
const params = {
...this.searchForm,
exportName: exportName,
exportIds: this.selectedList.join(',')
}
let query = '?'
for(let i in params){
if (params[i] && params[i]!=='') {
query = query + i + '=' + params[i] + '&'
}
}
query = query.slice(0,-1)
window.open('/api/lawss/insideOutsideMeeting/exportMeetingInfo' + query)
this.$refs.exportDialogRef.cancel()
this.$message.success('导出信息成功')
},
// 导入
addImportModal() {
this.importModalShowFlag = true
this.importExcelUrl = '/api/lawss/insideOutsideMeeting/importMeetingInfo'
},
// 模板下载
handleMoudel(){
window.open('/api/lawss/insideOutsideMeeting/exportTemplateFile?fileName=内外部会议导入模板')
},
// 新增编辑
openDrawer (type, row) {
this.showDrawer = false
switch (type) {
case 'add':
this.titleDrawer = '新增'
break
case 'edit':
this.titleDrawer = '编辑'
this.$set(this, 'editForm', row)
break
}
this.$nextTick(()=>{
this.showDrawer = true
})
},
onDelete (id) {
this.$confirm('确认删除这些数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
}).then(() => {
this.$http._deleteData(this.api.delete, { meetingId: id }).then(res => {
if (res.ok) {
this.$message.success('删除成功')
this.getData()
}
})
})
},
getDicTypeListCode () {
// 查询各下拉框数据
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.dict = { ...res.data }
}, e => {
})
},
}
}
</script>
<style scoped lang="less">
.meeting-root{
height: 100%;
display: flex;
flex-direction: column;
.content{
flex: 1;
}
}
</style>
@@ -0,0 +1,185 @@
<template>
<!-- 新增体系 -->
<el-drawer
:wrapperClosable="false"
:title="productTitle"
:visible.sync="productModal"
size="800px"
:before-close="closeDrawer"
label-width="130px"
>
<div class="demo-drawer-content">
<el-form :model="productModelAdd"
ref="productModelAdd"
:rules="productRules"
class="label-input-form"
label-width="130px">
<el-row>
<el-col>
<el-form-item label="菜单名称" prop="menuName" class="add-form-item">
<el-input v-model.trim="productModelAdd.menuName" placeholder="请输入菜单名称" clearable></el-input>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="排序号" prop="displaySeq" class="add-form-item">
<el-input v-model.number="productModelAdd.displaySeq"
number
placeholder="请输入排序号"
:maxlength="4"
clearable></el-input>
</el-form-item>
</el-col>
<el-col>
<el-form-item v-if="modalType === 2" label="上级菜单" prop="parentIdsName" class="add-form-item">
<el-input v-model="productModelAdd.parentIdsName" disabled
clearable></el-input>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="描述" prop="remarks" class="add-form-item">
<el-input v-model.trim="productModelAdd.remarks"
placeholder="请输入描述"
clearable></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="demo-drawer-footer">
<el-button
class="common-button-primary"
icon="el-icon-check"
type="primary"
@click="saveProduct('productModelAdd')">提交</el-button>
<el-button
class="common-button-default"
icon="el-icon-close"
@click="closeDrawer">取消</el-button>
</div>
</el-drawer>
</template>
<script>
export default {
name: "addStructure",
data(){
return {
productTitle: '', // 模态框标题
productModal: false, // 模态框是否打开
modalType: '',
productModelAdd: {
id : "",
sorDivide : "FOREIGN_LAWS",
menuName : "",
parentId : null,
parentIds : null,
parentIdsName : "",
displaySeq : "",
creationTime : "",
modifyTime : "",
remarks : "",
children : [],
},
productRules: {
menuName: [
{required: true, message: '一级菜单不能为空', trigger: 'blur'},
{type: 'string', max: 100, message: '最多输入100位', trigger: 'blur'}
],
displaySeq: [
{type: 'number', required: true, message: '排序号不能为空且为正整数', trigger: 'blur'},
{type: 'string', validator: this.verify.validStandNumInCompile2, trigger: 'blur'}
],
remarks: [
{type: 'string', max: 500, message: '最多输入500位', trigger: 'blur'}
],
},
}
},
methods: {
append(data) {
this.modalType = 1
this.selectChildMenu(data)
this.productModal = true
this.productTitle = '新增体系'
this.productModelAdd.dicTypeCode = ''
},
update(data) {
this.modalType = 2
this.selectChildMenu(data)
this.productModal = true
this.productTitle = '编辑体系'
},
// 查询二级菜单
selectChildMenu (row) {
this.$http.get('sarResource/ts-resource/getMenuById', {
menuId: row.id
}, {}, res => {
if (res.ok) {
if(this.modalType === 1){
let idsName = ""
if (row.parentIds !== null) {
if (row.parentIds.indexOf(res.data.id) != -1) {
this.productModelAdd.parentIds = row.parentIds
} else {
if(row.parentIds && row.parentIds.substr(-1,1) === ','){
this.productModelAdd.parentIds = row.parentIds + res.data.id+','
idsName = row.parentIdsName + ',' + res.data.menuName
}else {
this.productModelAdd.parentIds = row.parentIds + ',' + res.data.id+','
idsName = row.parentIdsName + ',' + res.data.menuName
}
}
} else {
this.productModelAdd.parentIds = ','+res.data.id+','
idsName = res.data.menuName;
}
this.productModelAdd.parentId = res.data.id
this.productModelAdd.parentIdsName = idsName
this.$forceUpdate()
}else {
this.productModelAdd = res.data
}
}
})
},
// 提交新增/修改
saveProduct (name) {
this.$refs[name].validate((valid) => {
if (valid) {
this.productModelAdd.sorDivide = 'FOREIGN_LAWS'
this.productModelAdd.validFlag = '0'
if (this.modalType === 1) {
this.$http.postData('sarResource/ts-resource/add', this.productModelAdd, {
_this: this
}, res => {
if (res.ok) {
this.$emit('selectMenuList')
this.closeDrawer()
} else {
this.productModal = true
}
}, e => {})
} else if (this.modalType === 2) {
this.$http.putData('sarResource/ts-resource', this.productModelAdd, {
_this: this
}, res => {
this.$emit('selectMenuList')
this.closeDrawer()
}, e => {
})
}
} else {
}
})
},
closeDrawer () {
this.$refs['productModelAdd'].resetFields()
this.productModal = false
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,531 @@
<template>
<el-drawer
title="高级搜索"
size="800px"
:wrapperClosable="false"
:visible.sync="isAdvancedSearch">
<div class="demo-drawer-content">
<el-form
:model="lawsStandInfoSearch"
class="label-input-form table-lattice"
label-width="80px">
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<SelectFormItem label="1级政策分类"
title="1级政策分类"
v-model="lawsStandInfoSearch.lawsTypeFirstLevel"
:options="dict.lawsTypeFirstLevelOptions">
</SelectFormItem>
<SelectFormItem label="3级政策分类"
title="3级政策分类"
v-model="lawsStandInfoSearch.lawsTypeThirdLevel"
:options="dict.lawsTypeThirdLevelOptions">
</SelectFormItem>
<InputFormItem label="政策名称"
title="政策名称"
v-model="lawsStandInfoSearch.lawsName">
</InputFormItem>
<InputFormItem label="政策文号"
title="政策文号"
v-model="lawsStandInfoSearch.lawsNo">
</InputFormItem>
<InputFormItem label="发文单位"
title="发文单位"
v-model="lawsStandInfoSearch.issueCompany">
</InputFormItem>
<SelectFormItem label="文本状态"
title="文本状态"
v-model="lawsStandInfoSearch.lawsTextState"
:options="dict.lawsTextStateOptions">
</SelectFormItem>
<SelectFormItem label="是否纳入认证清单"
title="是否纳入认证清单"
v-model="lawsStandInfoSearch.isRelateAccess"
:options="isRelateAccessOptions || []">
</SelectFormItem>
<InputFormItem label="福田转发通知文号"
title="福田转发通知文号"
v-model="lawsStandInfoSearch.lawsNotisyncNum">
</InputFormItem>
<InputFormItem label="信息简报"
title="信息简报"
v-model="lawsStandInfoSearch.lawsBulletin">
</InputFormItem>
<InputFormItem label="备注(最终政策发布)"
title="备注(最终政策发布)"
v-model="lawsStandInfoSearch.lawsRemark">
</InputFormItem>
<!--#region-->
<!--<el-form-item label="政策分类" title="政策分类" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.lawsType" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.lawsTypeOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="发文日期" class="add-form-item form-item-disabled">-->
<!-- <el-datePicker v-model="lawsStandInfoSearch.issueTime"-->
<!-- :editable="false"-->
<!-- placeholder="请选择发文日期"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- clearable></el-datePicker>-->
<!--</el-form-item>-->
<!--<el-form-item label="适用区域" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.lawsSyqy" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.lawsSyqyOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="年度" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.lawsYear" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.lawsYearOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="信息简报" class="add-form-item form-item-disabled">-->
<!-- <el-input v-model="lawsStandInfoSearch.lawsBulletin" clearable-->
<!-- placeholder="请输入政策文号"-->
<!-- ></el-input>-->
<!--</el-form-item>-->
<!--#endregion-->
</el-col>
<el-col :span="12">
<SelectFormItem label="2级政策分类"
title="2级政策分类"
v-model="lawsStandInfoSearch.lawsTypeSecondLevel"
:options="dict.lawsTypeSecondLevelOptions">
</SelectFormItem>
<SelectFormItem label="4级政策分类"
title="4级政策分类"
v-model="lawsStandInfoSearch.lawsTypeFourthLevel"
:options="dict.lawsTypeFourthLevelOptions">
</SelectFormItem>
<InputFormItem label="英文名称"
title="英文名称"
v-model="lawsStandInfoSearch.lawsEnName">
</InputFormItem>
<DatePickerFormItem label="发文日期"
title="发文日期"
v-model="lawsStandInfoSearch.issueTime">
</DatePickerFormItem>
<DataRangePickerFormItem label="征集意见周期"
title="征集意见周期"
:startTime.sync="lawsStandInfoSearch.commentCycleStart"
:endTime.sync="lawsStandInfoSearch.commentCycleEnd">
</DataRangePickerFormItem>
<SelectMultipleFormItem label="适用车型"
title="适用车型"
v-model="lawsStandInfoSearch.lawsSycx"
:options="dict.lawsSycxOptions || []">
</SelectMultipleFormItem>
<SelectFormItem label="年度"
title="年度"
v-model="lawsStandInfoSearch.lawsYear"
:options="dict.lawsYearOptions">
</SelectFormItem>
<InputFormItem label="通知文号链接"
title="通知文号链接"
v-model="lawsStandInfoSearch.notisyncNumLink">
</InputFormItem>
<SelectMultipleFormItem label="标签"
title="标签"
v-model="lawsStandInfoSearch.lawsLabel"
:options="dict.lawsLabelOptions">
</SelectMultipleFormItem>
<!--#region-->
<!--<el-form-item label="政策文号" class="add-form-item form-item-disabled">-->
<!-- <el-input v-model="lawsStandInfoSearch.lawsNo" clearable-->
<!-- placeholder="请输入政策文号"></el-input>-->
<!--</el-form-item>-->
<!--<el-form-item label="发文单位" title="发文单位" class="add-form-item form-item-disabled">-->
<!-- <el-input v-model="lawsStandInfoSearch.issueCompany" placeholder="请输入发文单位" clearable></el-input>-->
<!--</el-form-item>-->
<!--<el-form-item label="适用车型" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.lawsSycx" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.lawsSycxOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="是否纳入认证清单" title="是否纳入认证清单" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.isRelateAccess">-->
<!-- <el-option value="1" label="是" key="1"></el-option>-->
<!-- <el-option value="2" label="否" key="2"></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="福田转发通知文号" title="福田转发通知文号" class="add-form-item form-item-disabled">-->
<!-- <el-input v-model="lawsStandInfoSearch.lawsNotisyncNum" placeholder="请输入福田转发通知文号" clearable></el-input>-->
<!--</el-form-item>-->
<!--<el-form-item label="标签" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.lawsLabel" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.lawsLabelOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--#endregion-->
</el-col>
</el-row>
<!--#region-->
<!--<el-row :gutter="24">-->
<!-- <el-col :span="24">-->
<!-- <el-form-item label="征集意见周期" title="征集意见周期" class="add-form-item form-item-disabled">-->
<!-- <el-date-picker-->
<!-- v-model="commentCycleDate"-->
<!-- :picker-options="pickerOptions"-->
<!-- type="daterange"-->
<!-- range-separator="至"-->
<!-- start-placeholder="起始时间"-->
<!-- end-placeholder="结束时间"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- align="right">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!--</el-row>-->
<!--#endregion-->
</div>
<ProcessTitle>
<template slot="title">实施日期</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<DatePickerGroupFormItem label="实施日期"
title="实施日期"
v-model="lawsStandInfoSearch.SSRQLAWS"
></DatePickerGroupFormItem>
<DatePickerFormItem label="新生产实施日期"
title="新生产实施日期"
v-model="lawsStandInfoSearch.ZCXSSRQLAWS">
</DatePickerFormItem>
<DatePickerFormItem label="生效日期"
title="生效日期"
v-model="lawsStandInfoSearch.SXRQLAWS">
</DatePickerFormItem>
<!--#region-->
<!--<el-form-item label="实施日期" class="add-form-item form-item-disabled">-->
<!-- <el-datePicker v-model="lawsStandInfoSearch.SSRQLAWS"-->
<!-- :editable="false"-->
<!-- placeholder="请选择实施日期"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- clearable></el-datePicker>-->
<!--</el-form-item>-->
<!--<el-form-item label="新车型实施日期" title="新车型实施日期" class="add-form-item form-item-disabled">-->
<!-- <el-datePicker v-model="lawsStandInfoSearch.XCXSSRQLAWS"-->
<!-- :editable="false"-->
<!-- placeholder="请选择实施日期"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- clearable></el-datePicker>-->
<!--</el-form-item>-->
<!--#endregion-->
</el-col>
<el-col :span="12">
<DatePickerFormItem label="新认证实施日期"
title="新认证实施日期"
v-model="lawsStandInfoSearch.XRZSSRQLAWS"
></DatePickerFormItem>
<DatePickerFormItem label="在用车实施日期"
title="在用车实施日期"
v-model="lawsStandInfoSearch.XCXSSRQLAWS"
></DatePickerFormItem>
<!--#region-->
<!--<el-form-item label="在产车实施日期" title="在产车实施日期" class="add-form-item form-item-disabled">-->
<!-- <el-datePicker v-model="lawsStandInfoSearch.ZCXSSRQLAWS"-->
<!-- :editable="false"-->
<!-- placeholder="请选择实施日期"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- clearable></el-datePicker>-->
<!--</el-form-item>-->
<!--#endregion-->
</el-col>
</el-row>
</div>
<ProcessTitle>
<template slot="title">适用范围</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<SelectFormItem label="我司参与深度"
title="我司参与深度"
v-model="lawsStandInfoSearch.CYSDLAWS"
:options="dict.CYSDLAWSOptions">
</SelectFormItem>
<DepartmentFormItem label="投稿单位"
title="投稿单位"
v-model="lawsStandInfoSearch.TGDWLAWS"
:ids.sync="lawsStandInfoSearch.TGDWLAWSID">
</DepartmentFormItem>
<DepartmentFormItem label="责任部门"
title="责任部门"
v-model="lawsStandInfoSearch.ZRBMLAWS"
:ids.sync="lawsStandInfoSearch.ZRBMLAWSID">
</DepartmentFormItem>
<!--#region-->
<!--<el-form-item label="发布机构" title="发布机构" class="add-form-item form-item-disabled">-->
<!-- <el-input v-model="lawsStandInfoSearch.FBJGLAWS" placeholder="请输入发布机构" clearable></el-input>-->
<!--</el-form-item>-->
<!--<el-form-item label="投稿人" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.TGRLAWS" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.TGRLAWSOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="能源类型" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.NYLXLAWS" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.NYLXLAWSOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="责任部门" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.ZRBMLAWS" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.ZRBMLAWSOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--#endregion-->
</el-col>
<el-col :span="12">
<personFormItem label="投稿人"
title="投稿人"
v-model="lawsStandInfoSearch.TGRLAWS">
</personFormItem>
<SelectMultipleFormItem label="适用认证"
title="适用认证"
v-model="lawsStandInfoSearch.SYRZLAWS"
:options="dict.syrzOptions">
</SelectMultipleFormItem>
<personFormItem label="责任工程师"
title="责任工程师"
v-model="lawsStandInfoSearch.ZRGCSLAWS">
</personFormItem>
<!--#region-->
<!--<el-form-item label="我司参与深度" title="我司参与深度" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.CYSDLAWS" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.CYSDLAWSOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="投稿单位" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.TGDWLAWS" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.TGDWLAWSOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="适用认证" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.YYRZLAWS" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.YYRZLAWSOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--<el-form-item label="责任工程师" class="add-form-item form-item-disabled">-->
<!-- <el-select v-model="lawsStandInfoSearch.ZRGCSLAWS" filterable clearable>-->
<!-- <el-option-->
<!-- v-for="item in dict.ZRGCSLAWSOptions"-->
<!-- placeholder="请选择"-->
<!-- :key="item.value"-->
<!-- :value="item.value"-->
<!-- :label="item.label"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!--</el-form-item>-->
<!--#endregion-->
</el-col>
</el-row>
</div>
<ProcessTitle>
<template slot="title">关联信息</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<InputForStandardsForLaws label="代替文件号"
title="代替文件号"
v-model="lawsStandInfoSearch.DTWJHLAWS"
></InputForStandardsForLaws>
<InputForStandardsForLaws label="引用标准&政策"
title="引用标准&政策"
v-model="lawsStandInfoSearch.YYBZZCLAWS"
></InputForStandardsForLaws>
<InputFormItem label="参会记录"
title="参会记录"
v-model="lawsStandInfoSearch.CHJLLAWS">
</InputFormItem>
<!--#region-->
<!--<el-form-item label="代替文件号" title="代替文件号" class="add-form-item form-item-disabled">-->
<!-- <el-input v-model="lawsStandInfoSearch.DTWJHLAWS" placeholder="请输入代替文件号" clearable></el-input>-->
<!--</el-form-item>-->
<!--#endregion-->
</el-col>
<el-col :span="12">
<InputForStandardsForLaws label="被代替文件号"
title="被代替文件号"
v-model="lawsStandInfoSearch.BDTWJHLAWS"
></InputForStandardsForLaws>
<InputFormItem label="相关流程"
title="相关流程"
v-model="lawsStandInfoSearch.XGLC">
</InputFormItem>
<!--#region-->
<!--<el-form-item label="被代替文件号" title="被代替文件号" class="add-form-item form-item-disabled">-->
<!-- <el-input v-model="lawsStandInfoSearch.BDTWJHLAWS" placeholder="请输入被代替文件号" clearable></el-input>-->
<!--</el-form-item>-->
<!--#endregion-->
</el-col>
</el-row>
</div>
</el-form>
</div>
<div class="demo-drawer-footer">
<el-button
class="common-button-primary"
icon="el-icon-check"
type="primary"
@click="getBussionStandTableBtn(lawsStandInfoSearch,'','sel')">搜索
</el-button>
<el-button
class="common-button-default"
icon="el-icon-close"
@click="clearAllSearch('lawsStandInfoSearch')">取消
</el-button>
</div>
</el-drawer>
</template>
<script>
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import SelectFormItem from "@/components/hzwlComponents/SelectFormItem";
import InputFormItem from "@/components/hzwlComponents/InputFormItem";
import DatePickerFormItem from "@/components/hzwlComponents/DatePickerFormItem";
import DataRangePickerFormItem from "@/components/hzwlComponents/DataRangePickerFormItem";
import SelectMultipleFormItem from "@/components/hzwlComponents/SelectMultipleFormItem";
import DatePickerGroupFormItem from "@/components/hzwlComponents/DatePickerGroupFormItem";
import DepartmentFormItem from "@/components/hzwlComponents/DepartmentFormItem";
import personFormItem from "@/components/hzwlComponents/personFormItem";
import InputForStandardsForLaws from "@/components/hzwlComponents/InputForStandardsForLaws";
export default {
name: "advancedSearch",
components: {
ProcessTitle,
SelectFormItem,
InputFormItem,
DatePickerFormItem,
DataRangePickerFormItem,
SelectMultipleFormItem,
DatePickerGroupFormItem,
DepartmentFormItem,
personFormItem,
InputForStandardsForLaws
},
data () {
return{
isAdvancedSearch: false,
isRelateAccessOptions: [
{
label: '是',
value: '1'
},
{
label: '否',
value: '2'
}
]
}
},
props: {
lawsStandInfoSearch: {
type: Object,
default: () => ({})
},
dict: {
type: Object,
default: () => ({})
},
},
methods: {
open () {
this.isAdvancedSearch = true
},
close () {
this.isAdvancedSearch = false
},
// 搜索
getBussionStandTableBtn (item, advancedSearch, type) {
this.$emit('advancedSearch')
this.close()
},
// 清空搜索框
clearAllSearch (flag) {
this.$emit('clearSearch', {})
this.close()
},
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,376 @@
<template>
<!-- 配置标准 -->
<el-drawer
title="配置政策"
:wrapperClosable="false"
:visible.sync="configStandFlag"
size="1200px"
@close="cancelConfigStand"
>
<div class="demo-drawer-content">
<div class="search-area">
<div class="left">
<el-form :model="sarConfigStandSearch" :inline="true" class="label-input-form">
<!-- <el-formItem label="标准名称" prop="standName" class="search-item">-->
<!-- <el-input v-model="sarConfigStandSearch.standName" @keyup.enter.native="searchConfiguraStand"-->
<!-- placeholder="根据标准名称查找" clearable/>-->
<!-- </el-formItem>-->
<el-formItem label="政策文号" prop="lawsNo" class="search-item">
<el-input v-model="sarConfigStandSearch.lawsNo" @keyup.enter.native="searchConfiguraStand"
placeholder="根据政策文号查找" clearable/>
</el-formItem>
<!-- <el-formItem label="企标类别" prop="standSort" class="search-item">-->
<!-- <el-select v-model="sarConfigStandSearch.standSort" placeholder="根据企标类别查找"-->
<!-- @keyup.enter.native="searchConfiguraStand" clearable>-->
<!-- <el-option v-for="opt in standSortOptions" :value="opt.value === undefined ? '' :opt.value" :key="opt.value" :label="opt.label">{{ opt.label }}-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-formItem>-->
<el-formItem label="政策名称" prop="lawsName" class="search-item">
<el-input v-model="sarConfigStandSearch.lawsName" @keyup.enter.native="searchConfiguraStand" placeholder="根据政策名称查找" clearable :maxlength="100"/>
</el-formItem>
<el-form-item class="search-item btn-box">
<el-button
type="primary"
class="common-button-primary"
size="small"
:loading="searching"
@click="searchConfiguraStand">
查询
</el-button>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
class="common-button-default"
size="small"
@click="clearAllSearch(3)"
>清空
</el-button>
</el-form-item>
</el-form>
</div>
</div>
<div class="drawer-content">
<el-table
ref="selection"
:data="configStandList"
tooltip-effect="dark"
style="width: 100%; flex: auto;"
height="100%"
border
:header-cell-style="{background: '#f8f8f9', color: '#515a6e'}"
@sort-change="sortChangeConfig"
@selection-change="selectConfigStandChange">
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="lawsNo"
label="政策文号"
width="150"
align="center"
>
</el-table-column>
<el-table-column
prop="lawsName"
label="政策名称"
align="center">
</el-table-column>
<el-table-column
prop="lawsEnName"
label="英文名称"
align="center">
</el-table-column>
<el-table-column
prop="issueTime"
label="发文日期"
width="120"
sortable
align="center">
<template slot-scope="scope">
<span>{{formatDate(scope.row.issueTime)}}</span>
</template>
</el-table-column>
<el-table-column
prop="ssrqlaws"
label="实施日期"
width="120"
sortable
align="center">
<template slot-scope="scope">
<span>{{formatDate(scope.row.ssrqlaws)}}</span>
</template>
</el-table-column>
<el-table-column
prop="standStatusShow"
label="文本状态"
width="100"
align="center">
</el-table-column>
</el-table>
</div>
<pagination
style="position: relative;"
:page="configPage"
:pageSize="configRows"
:total="configTotal"
@pageChange="configuraPageChange"
@pageSizeChange="configuraPageSizeChange"></pagination>
<div class="divDel">
<div class="divDel_title">已选政策</div>
<div class="divDel_box">
<el-tag
v-for="tag in selectConfigStand"
:key="tag.id"
size="mini"
closable
@close="handleTagClose(tag)">
<a v-if="tag.standStatusShow === '作废' "
class="table-jump" style="color: #F56C6C"
@click="handlePreview(tag)">{{ tag.lawsName }}</a>
<a v-else @click="handlePreview(tag)" class="table-jump" style="color: #333333">{{ tag.lawsName }}</a>
</el-tag>
</div>
</div>
<loading :loading="configLoading">加载中...</loading>
</div>
<div class="demo-drawer-footer">
<el-button
type="primary"
round class="common-button-primary"
icon="el-icon-check"
@click="saveConfigStand"
:loading="isSubmit"
>提交</el-button>
<el-button class="common-button-default" style="padding: 7px 12px;" icon="el-icon-close" type="primary"
round @click="cancelConfigStand">取消</el-button>
</div>
</el-drawer>
</template>
<script>
export default {
name: "configStandDrawer",
data () {
return {
configStandFlag: false, // 控制配置标准表格是否显示
configPage: 1,
configTotal: 0,
configRows: this.$store.getters.userInfo.configContent,
searching: false,
configStandList: [],
configLoading: false, // 配置表格加载中
isSubmit: false,
sarConfigStandSearch: {
page: this.configPage,
pageSize: this.$store.getters.userInfo.configContent,
standType: 'INLAND',
validFlag: '0',
// menuId: '',
// classifyCode: '',
lawsName: '',
lawsNo: '',
// quoteStand: '',
// standCode: '',
// standName: '',
// standGenera: '',
// standSubclass: '',
// issueTime: '',
// putTime: '',
// orgName: '',
// responsibleUnit: '',
// standSort: '',
// replaceStandNum: ''
}, // 分页查询过程中用到的对象
selectConfigStand: []
}
},
props: {
selectSarMenu: {
type: Object,
required: true
},
getBussionStandTable: {
type: Function,
required: true
}
},
methods: {
open () {
this.configStandFlag = true
this.sarConfigStandSearch.menuId = 'nomenu'
this.sarConfigStandSearch.page = 1
this.selectConfiguraStand()
},
searchConfiguraStand () {
this.configPage = 1
this.sarConfigStandSearch.page = 1
this.selectConfiguraStand()
},
clearAllSearch (flag) {
this.sarConfigStandSearch.lawsNo=''
this.sarConfigStandSearch.lawsName=''
this.configPage = 1
this.sarConfigStandSearch.page = 1
this.selectConfiguraStand()
},
// 取消配置标准
cancelConfigStand () {
this.configStandFlag = false
this.sarConfigStandSearch.lawsNo=''
this.sarConfigStandSearch.lawsName=''
this.configPage = 1
this.selectConfigStand = []
},
selectConfiguraStand () {
this.$http.get('lawss/sarLawsInfo/page', this.sarConfigStandSearch, {
_this: this,
loading: 'configLoading'
}, res => {
this.configStandList = res.data.list
this.configTotal = res.data.count
this.selectConfigStand = []
}, e => {
})
},
// 配置标准-表格排序
sortChangeConfig(sortObj) {
if (sortObj.column.order !== 'normal') {
switch (sortObj.prop) {
case 'issueTime' :
// 后台联调
if (sortObj.order === null) {
this.sarConfigStandSearch.nowOrderBy = ''
} else {
this.sarConfigStandSearch.nowOrderBy = '1'
}
break;
case 'XCXSSRQLAWS' :
// 后台联调
if (sortObj.order === null) {
this.sarConfigStandSearch.nowOrderBy = ''
} else {
this.sarConfigStandSearch.nowOrderBy = '2'
}
break;
}
switch (sortObj.order) {
case 'ascending' :
this.sarConfigStandSearch.nowOrder = '2'
break;
case 'descending' :
this.sarConfigStandSearch.nowOrder = '1'
break;
default:
this.sarConfigStandSearch.nowOrder = ''
break;
}
}
this.selectConfiguraStand()
},
selectConfigStandChange (alldata) {
this.selectConfigStand = alldata
},
// 分页点击后方法
configuraPageChange (page) {
this.configPage = page
this.sarConfigStandSearch.page = page
this.selectConfiguraStand()
},
// 分页每页显示数改变后方法
configuraPageSizeChange (pageSize) {
this.configRows = pageSize
this.sarConfigStandSearch.pageSize = pageSize
this.selectConfiguraStand()
this.getBussionStandTable()
},
// 提交配置搜索项
saveConfigStand () {
let search = {}
search.menuId = this.selectSarMenu.id
if (this.selectConfigStand.length === 0) {
this.$message({
showClose: true,
message: '请至少选择一条标准',
type: 'warning'
})
} else {
search.idlist = this.selectConfigStand.map(item => item.id)
this.$http.postData('lawss/sarLawsInfo/saveStandardsMenu', search, {
_this: this,
loading: 'isSubmit'
}, res => {
if (res.ok) {
this.$message.success('配置成功')
this.configStandFlag = false
this.getBussionStandTable()
} else {
this.$message.warning(res.message)
}
}, e => {
})
}
},
formatDate (dateStr) {
if (dateStr && dateStr!== '') {
let dateArr = dateStr.split(',')
return dateArr.map(date => date.slice(0,10)).join(',')
}
return dateStr
},
handleTagClose (tag) {
this.$set(this, 'selectConfigStand', this.selectConfigStand.filter(item => item.id !== tag.id))
this.$refs.selection.toggleRowSelection(tag, false)
},
handlePreview (tag) {
let routeUrl = this.$router.resolve({
name: 'OtherLawsStandDetails',
params: {
id: tag.id,
pageType: 'FOREIGN_LAWS'
}
})
window.open(routeUrl.href, '_blank')
}
}
}
</script>
<style scoped lang="less">
.el-drawer__wrapper{
.demo-drawer-content{
.drawer-content{
//height: calc(~'100% - 52px - 56px');
//flex: auto;
height: calc(100% - 220px);
display: flex;
flex-direction: column;
}
.divDel {
border-top: 1px solid #000;
height: 100px;
.divDel_title {
margin: 10px;
}
.divDel_box {
height: 55px;
padding: 0px;
display: flex;
flex-wrap: wrap;
overflow: auto;
margin: 10px;
align-content: flex-start;
span {
margin: 0px 5px 5px 0;
}
}
}
}
.demo-drawer-footer{
height: 60px;
}
}
</style>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,78 @@
<template>
<!--导出文件改名字模态框-->
<el-dialog :visible.sync="exportModelFlag" title="导出文件" width="300px">
<el-form :inline="true" class="label-input-form search-area">
<el-form-item label="导出名称" class="search-item">
<el-input v-model="exportName" placeholder="请输入导出文件名称" :maxlength="30" clearable label="导出名称"/>
</el-form-item>
</el-form>
<span slot="footer" class="demo-drawer-footer">
<el-button class="common-button-default" icon="el-icon-close" @click="cancal">取消</el-button>
<el-button type="primary" round class="common-button-primary" icon="el-icon-check" @click="exportTestItem">提交</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
name: "exportFileDialog",
data () {
return {
exportModelFlag: false,
exportName: '',
saveExportType: 'all',
}
},
props: {
selectedList: {
type: Array,
default: () => []
},
SarExportSearchEo: {
type: Object,
default: () => {}
}
},
methods: {
open () {
this.exportModelFlag = true
},
cancal () {
this.exportModelFlag = false
},
// 导出选中的标准 此处因为复选框没有设置好,所以先设置导出所有数据
exportStandard () {
// 区别是选择导出还是全部导出
if (this.selectedList.length > 0) {
this.saveExportType = 'apart'
} else {
this.saveExportType = 'all'
}
this.exportName = ''
this.exportModelFlag = true
},
exportTestItem () {
if (this.saveExportType === 'apart') {
window.open('/api/lawss/sarLawsInfo/exportStandardsInfoExcel?exportContent=' + this.selectedList.join(',') + '&exportType=' + this.saveExportType + '&exportName=' + this.exportName + '&userId=' + this.$store.getters.userInfo.userId)
this.$message({
message: '导出信息成功',
type: 'success'
})
} else if (this.saveExportType === 'all') {
let exportEOStr = JSON.stringify(this.SarExportSearchEo)
exportEOStr = exportEOStr.replace(/""/g, null)
window.open('/api/lawss/sarLawsInfo/exportStandardsInfoExcel?exportContent=' + exportEOStr + '&exportType=' + this.saveExportType + '&exportName=' + this.exportName + '&userId=' + this.$store.getters.userInfo.userId)
this.$message({
message: '导出信息成功',
type: 'success'
})
}
this.exportModelFlag = false
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,635 @@
<template>
<!--表格-->
<div class="content">
<el-table
ref="selection"
:data="standinfoList"
tooltip-effect="dark"
style="width:100%;"
:height="tableHeight"
border
class="drag-table"
:row-class-name="dragRowClassName"
@sort-change="sortChange"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
@selection-change="standSelectChange"
>
<el-table-column
type="selection"
min-width="5%"
align="center">
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="lawsName"
label="政策名称"
min-width="120"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.lawsName }}</a>
<a v-if="scope.row.standStatusShow === '参考' " style="color: #E6A23C" @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.lawsName }}</a>
<a v-if="scope.row.standStatusShow !== '作废' && scope.row.standStatusShow !== '参考'" style="color: #333333" @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.lawsName }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="lawsNo"
label="政策文号"
sortable
min-width="120"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.lawsNo }}</a>
<a v-else-if="scope.row.standStatusShow === '参考' " style="color: #E6A23C" @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.lawsNo }}</a>
<a v-else style="color: #333333" @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.lawsNo }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="issueCompany"
label="发文单位"
sortable
min-width="120"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.issueCompany }}</a>
<a v-else-if="scope.row.standStatusShow === '参考' " style="color: #E6A23C" @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.issueCompany }}</a>
<a v-else style="color: #333333" @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.issueCompany }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="issueTime"
label="发文日期"
sortable
min-width="120"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" @click="handlePreview(scope.row)" class="table-jump">{{ formatDate(scope.row.issueTime) }}</a>
<a v-else-if="scope.row.standStatusShow === '参考' " style="color: #E6A23C" @click="handlePreview(scope.row)" class="table-jump">{{ formatDate(scope.row.issueTime) }}</a>
<a v-else style="color: #333333" @click="handlePreview(scope.row)" class="table-jump">{{ formatDate(scope.row.issueTime) }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="ssrqlaws"
label="实施日期"
sortable
min-width="120"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" @click="handlePreview(scope.row)" class="table-jump">{{ formatDate(scope.row.ssrqlaws) }}</a>
<a v-else-if="scope.row.standStatusShow === '参考' " style="color: #E6A23C" @click="handlePreview(scope.row)" class="table-jump">{{ formatDate(scope.row.ssrqlaws) }}</a>
<a v-else style="color: #333333" @click="handlePreview(scope.row)" class="table-jump">{{ formatDate(scope.row.ssrqlaws) }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="lawsSycx"
label="适用车型"
sortable
min-width="120"
>
<template slot-scope="scope">
<a v-if="scope.row.standStatusShow === '作废'" style="color: #F56C6C" @click="handlePreview(scope.row)" class="table-jump">{{ convert(scope.row.lawsSycx, 'lawsSycxOptions') }}</a>
<a v-else-if="scope.row.standStatusShow === '参考' " style="color: #E6A23C" @click="handlePreview(scope.row)" class="table-jump">{{ convert(scope.row.lawsSycx, 'lawsSycxOptions') }}</a>
<a v-else style="color: #333333" @click="handlePreview(scope.row)" class="table-jump">{{ convert(scope.row.lawsSycx, 'lawsSycxOptions') }}</a>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
sortable
prop="standStatusShow"
label="文本状态"
min-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>
<el-table-column
v-if="isPermission('1a8b50a3541387dc2818fc361ea3ab31,dca69b895a88c2e3a3bf16d44e34fc04,b98579c3d0514ba75c4d1b21c9d5aa17,c158e787202d1e67f75d5a2f9da889df') > 0"
prop="action"
label="操作"
align="center"
min-width="120"
>
<template slot-scope="scope">
<a class="table-jump" v-btn-permission="'1a8b50a3541387dc2818fc361ea3ab31'" v-if="scope.row.collectBtn" style="color: #2d8cf0" @click="handleCommand([scope.row, '收藏'])">收藏</a>
<a class="table-jump" v-btn-permission="'dca69b895a88c2e3a3bf16d44e34fc04'" v-else style="color: #2d8cf0" @click="handleCommand([scope.row, '取消收藏'])">取消收藏</a>
<a class="table-jump" v-btn-permission="'b98579c3d0514ba75c4d1b21c9d5aa17'" style="color: #2d8cf0;margin-left: 10px" @click="handleCommand([scope.row, '编辑'])">编辑</a>
<a class="table-jump" v-btn-permission="'c158e787202d1e67f75d5a2f9da889df'" style="color: #f56c6c;margin-left: 10px" @click="handleCommand([scope.row, '删除'])">删除</a>
</template>
</el-table-column>
</el-table>
<pagination :page="lawsStandInfoSearch.page" :total="total"
@pageChange="pageChange" @pageSizeChange="pageSizeChange"></pagination>
<loading :loading="loading">数据获取中</loading>
<editDrawer
ref="editDrawerRef"
:formFieldListData="formFieldListData"
:selectSarMenu="selectSarMenu"
:getBussionStandTable="getBussionStandTable">
</editDrawer>
</div>
</template>
<script>
import editDrawer from "./editDrawer";
import store from "@/store";
export default {
name: "mainTable",
data () {
return {
standinfoList: [],
tableHeight: null,
tableFlag: '',
total: 0,
loading: false,
selectedList: [],
formFieldListData: [],
dict: {}
}
},
components: {
editDrawer
},
props: {
// 搜索条件
lawsStandInfoSearch: {
type: Object,
default: () => {}
},
// 用来记录当前选中的二级菜单对象
selectSarMenu: {
type: Object,
required: true
}
},
watch: {
selectedList: {
handler: function(newValue, oldValue) {
this.$emit('selectedList', newValue)
},
deep: true
}
},
created() {
this.getBussionStandTable()
this.getDicTypeListCode()
},
mounted() {
// 加载动态表单数据
this.getAddFormFieldList()
this.tableHeight = $('.content').height() - 44 - 20
window.onresize = () => {
this.tableHeight = $('.content').height() - 44 - 20
}
},
destroyed() {
window.onresize = null
this.tableHeight = ''
},
methods: {
addModal () {
this.$refs.editDrawerRef.addModal()
},
// 分页查询企业标准---表格
getBussionStandTable (item, nodeId,type) {
if (item !== '' && item !== null && item !== undefined) {
item.pageSize = this.$store.getters.userInfo.configContent
}
this.lawsStandInfoSearch.pageSize = this.$store.getters.userInfo.configContent
const data = item || this.lawsStandInfoSearch
const formData = {...data}
if (nodeId !== undefined) {
formData.menuId = nodeId
}
if ( (this.lawsStandInfoSearch.menuId == null || this.lawsStandInfoSearch.menuId === '') && this.selectSarMenu.id) {
formData.menuId = this.selectSarMenu.id
}
// 处理我的收藏和个性化标签传参
if (this.selectSarMenu.menuName === '我的收藏') {
formData.menuId = undefined
formData.labelMenuId = undefined
formData.collectMenuId = 'zcwdsc'
} else if (this.selectSarMenu.id === 'gxhbq' || this.selectSarMenu.pId === 'gxhbq') {
formData.menuId = undefined
formData.labelMenuId = this.selectSarMenu.id
formData.collectMenuId = undefined
} else {
formData.labelMenuId = undefined
formData.collectMenuId = undefined
}
formData.userId = this.$store.getters.userInfo.userId
if(type === 'sel'){
const advanceSearchVOList = [];
if(this.formFieldListData !== undefined && this.formFieldListData !== null){
const formFieldList = this.formFieldListData
formFieldList.forEach((item) => {
const value = this.lawsStandInfoSearch[item.attrField]
// 时间格式处理
if (value !== undefined && value !== null && value !== '') {
advanceSearchVOList.push({
connect: advanceSearchVOList.length > 0 ? "and" : "",
field: item.attrField || '',
type: 'like',
value: value
})
}
})
}
formData.advanceSearchVOStr = JSON.stringify(advanceSearchVOList);
if(this.commentCycleDate && this.commentCycleDate.length === 2){
formData.commentCycleStart = this.commentCycleDate[0]
formData.commentCycleEnd = this.commentCycleDate[1]
}
}
const attrSearchMap = {
applyArctic: formData.applyArctic
}
formData['attrSearchStr'] = JSON.stringify(attrSearchMap)
// 排序
if (this.nowOrder) {
formData.nowOrderBy = this.nowOrderBy
formData.nowOrder = this.nowOrder
}
// this.SarExportSearchEo = formData
this.$emit('SarExportSearchEo', formData)
this.$http.get('lawss/sarLawsInfo/page', formData, {
_this: this, loading: 'loading'
}, res => {
for (let i = 0; i < res.data.list.length; i++) {
res.data.list[i].checked = false
if (res.data.list[i].collectId != null && res.data.list[i].collectId !== '') {
res.data.list[i].collectBtn = false
res.data.list[i].cancelCollectBtn = true
} else {
res.data.list[i].collectBtn = true
res.data.list[i].cancelCollectBtn = false
}
res.data.list[i].isSubmit = false
}
this.standinfoList = res.data.list
this.total = res.data.count
if ((this.standinfoList.length === 0 || this.standinfoList === []) && this.lawsStandInfoSearch.page !== 1) {
this.pageChange(1)
}
}, e => {
})
},
// 获取拖拽行的id
dragRowClassName (row, index) {
return 'drag-row' + ' ' + 'id=' + row.row.id
},
// 表格排序
sortChange(sortObj) {
this.nowOrderBy = sortObj.column.property
// this.nowOrder = sortObj.order
switch (sortObj.order) {
case 'descending':
this.nowOrder = 'desc';
break;
case 'ascending':
this.nowOrder = 'asc';
break;
default:
this.nowOrder = void 0
break;
}
// if (sortObj.column.order !== 'normal') {
// this.nowOrder = ''
// this.orderBy = ''
// switch (sortObj.column.property) {
// case 'issueTime' :
// // 后台联调
// this.orderBy = 1;
// this.nowOrder = sortObj.column.order
// if (this.nowOrder === 'ascending') {
// this.nowOrder = 2
// } else if (this.nowOrder === 'descending') {
// this.nowOrder = 1
// }
// break
// // case 'putTime' :
// case 'XCXSSRQLAWS' :
// // 后台联调
// this.orderBy = 2;
// this.nowOrder = sortObj.column.order
// if (this.nowOrder === 'ascending') {
// this.nowOrder = 2
// } else if (this.nowOrder === 'descending') {
// this.nowOrder = 1
// }
// break
// case 'standStatusShow' :
// this.orderBy = 3;
// this.nowOrder = sortObj.column.order
// if (this.nowOrder === 'ascending') {
// this.nowOrder = 2
// } else if (this.nowOrder === 'descending') {
// this.nowOrder = 1
// }
// break
// }
// }
//搜索后排序,应该以被搜索后的数据排序
this.getBussionStandTable(this.lawsStandInfoSearch)
},
// 选择项勾选改变
standSelectChange (data) {
this.selectedList = []
for (let i = 0; i < data.length; i++) {
this.selectedList.push(data[i].id)
}
},
// 点击查看
handlePreview (item) {
let routeUrl = this.$router.resolve({
name: 'OtherLawsStandDetails',
params: {
id: item.id,
pageType: 'FOREIGN_LAWS'
}
})
window.open(routeUrl.href, '_blank')
},
isPermission (value) {
let hasCount = 0
let set =new Set( value.split(","))
let menuList = store.getters.getMenuList
if (menuList === '') {
return hasCount
} else {
menuList.map((menu) => {
if ( set.has(menu.id)|| value === undefined || value === '') {
hasCount++
}
})
}
return hasCount
},
// 分页点击后方法
pageChange (page) {
this.lawsStandInfoSearch.page = page
this.getBussionStandTable()
},
// 分页每页显示数改变后方法
pageSizeChange (pageSize) {
this.lawsStandInfoSearch.pageSize = pageSize
this.getBussionStandTable()
},
arr(data){
if(data){
if(data.indexOf(",") !== -1){
let arr = data.split(",");
let list = []
arr.forEach(item =>{
list.push(item.slice(0, 10));
})
return list.join(",");
}else {
return data.slice(0, 10)
}
}
return ""
},
// 更多
handleCommand (command) {
switch (command[1]) {
case '编辑':
this.$refs.editDrawerRef.selectStandardPro(command[0], 'edit')
break
case '收藏':
this.collectStandard(command[0])
break
// case '分享':
// this.visibleShare = true
// this.resPk = JSON.parse(JSON.stringify(command[0]))
// break
// case '移除政策':
// this.deleteEnterStandFromKind(1, command[0].id)
// break
case '删除':
this.deleteStand(1, command[0].id)
break
// case '流程':
// break
case '取消收藏':
this.cancelCollectStandard(command[0])
break
// case '授权':
// this.givePower(command[0])
// break
}
},
collectStandard (item) {
const query = {}
query.collectResId = item.id
query.collectTitle = ' ( 编号:' + item.lawsNumber + ')'
query.collectType = 'FOREIGN_LAWS'
query.userId = this.$store.getters.userInfo.userId
this.$http.postData('person/personCollect', query, {
_this: this
}, res => {
item.collectBtn = !item.collectBtn
item.collectId = res.data.id
}, e => {
})
},
// 取消收藏法规
cancelCollectStandard (item) {
this.$http.put('person/personCollect/updateByUserId', {
id: item.collectId
}, {
_this: this
}, res => {
this.$message.success('取消收藏成功')
item.collectBtn = !item.collectBtn
item.collectId = ''
this.getBussionStandTable()
}, e => {
})
},
// 删除标准
deleteStand (flag, itemid) {
if (flag === 1) {
this.$confirm('确认删除这些数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
}).then(() => {
this.$http.post('lawss/sarLawsInfo/deleteSarLawsStandInfo', {ids: itemid}, {
_this: this
}, res => {
this.getBussionStandTable()
this.selectedList = []
}, e => {
})
}).catch(() => {
})
} else {
if (this.selectedList.length === 0) {
this.$confirm('请选择一条数据进行删除', '提示', {
showCancelButton: false,
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
})
} else {
this.$confirm('确认删除这些数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
}).then(() => {
this.$http.post('lawss/sarLawsInfo/deleteSarLawsStandInfo', {ids: this.selectedList.join(',')}, {
_this: this
}, res => {
this.getBussionStandTable()
this.selectedList = []
}, e => {
})
}).catch(() => {
})
}
}
},
getAddFormFieldList (isEdit) {
this.$http.get('lawss/sarStandAttrDetails/list', {}, {_this: this},
res => {
if (res.ok) {
const { data = {} } = res
this.formFieldListData = data['FOREIGN_LAWS']
// 追加高级查询动态下拉框数据s
// this.twoOptions = [
// // {
// // label: '企标类别',
// // value: 'stand_sort',
// // type: 'SEL_OPTION',
// // disabled: false
// // },
// {
// label: '标准状态',
// value: 'stand_status',
// type: 'SEL_OPTION',
// disabled: false
// },
// {
// label: '企标编号',
// value: 'stand_code',
// type: 'INPUT',
// disabled: false
// },
// {
// label: '中文名称',
// value: 'stand_name',
// type: 'INPUT',
// disabled: false
// },
// {
// label: '英文名称',
// value: 'stand_en_name',
// type: 'INPUT',
// disabled: false
// },
// {
// label: '发文日期',
// value: 'issue_time',
// type: 'DATE_PIC_OPTS',
// disabled: false
// },
// {
// label: '标准实施日期',
// value: 'put_time',
// type: 'DATE_PIC_OPTS',
// disabled: false
// },
// // {
// // label: '代替企标编号',
// // value: 'replace_stand_num',
// // type: 'INPUT',
// // disabled: false
// // },
// // {
// // label: '被代替企标编号',
// // value: 'replaced_stand_num',
// // type: 'INPUT',
// // disabled: false
// // }
// ]
// this.formFieldListData.map(item => {
// if (item.attrType !== 'FILE' && item.attrField !== 'FZRQ' && item.attrField !== 'ZYQCR'
// && item.attrField !== 'QTQCR' && item.attrField !== 'WFSPJS' && item.attrField !== 'XGLC' && item.attrField !== 'XGJH') {
// this.twoOptions.push({
// value: item.attrField,
// label: item.attrName,
// selVal: item.selVal,
// type: item.attrType,
// disabled: false,
// __wx__: item
// })
// }
// })
}
}, e => {})
},
convert(value, dict) {
if (this.dict[dict]) {
return value.split(',').map(v => this.dict[dict].find(item => item.value === v)?.label || v).join(',')
// return this.dict[dict].find(item => item.value === value)?.label || value
} else {
return value
}
},
formatDate (dateStr) {
if (dateStr && dateStr!== '') {
let dateArr = dateStr.split(',')
return dateArr.map(date => date.slice(0,10)).join(',')
}
return dateStr
},
getDicTypeListCode () {
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
// this.dict.lawsSycxOptions = res.data.lawsSycx// 政策_适用车型
this.$set(this.dict, 'lawsSycxOptions', res.data.lawsSycx)
}, e => {
})
},
}
}
</script>
<style scoped lang="less">
// 表格
.content{
//height: calc(~'100% - 43.5px - 56px');
display: flex;
flex-direction: column;
position: relative;
flex: auto;
.pagination {
position: static;
/deep/ .pagination-slot {
padding: 0;
}
}
}
</style>
@@ -0,0 +1,117 @@
<template>
<table-tools-bar
@search="getBussionStandTableBtn(lawsStandInfoSearch)"
@reset="clearAllSearch('lawsStandInfoSearch')"
>
<div slot="left">
<div class="search-area">
<div class="left">
<el-form :modal="lawsStandInfoSearch" :inline="true" class="label-input-form" @submit.native.prevent="getBussionStandTableBtn(lawsStandInfoSearch)">
<!--<el-formItem label="政策编号" prop="lawsNumber" class="search-item">-->
<!-- <el-input v-model="lawsStandInfoSearch.lawsNumber" clearable placeholder="根据编号查找" :maxlength="100" @keyup.enter.native="getBussionStandTableBtn(lawsStandInfoSearch)"/>-->
<!--</el-formItem>-->
<el-formItem label="政策名称" prop="numberName" class="search-item">
<el-input v-model="lawsStandInfoSearch.lawsName" clearable placeholder="根据政策名称查找" :maxlength="100" @keyup.enter.native="getBussionStandTableBtn(lawsStandInfoSearch)"/>
</el-formItem>
<el-formItem label="政策文号" prop="lawsNo" class="search-item">
<el-input v-model="lawsStandInfoSearch.lawsNo" clearable placeholder="根据政策文号查找" :maxlength="100" @keyup.enter.native="getBussionStandTableBtn(lawsStandInfoSearch)"/>
</el-formItem>
<el-formItem label="发文单位" prop="issueCompany" class="search-item">
<el-input v-model="lawsStandInfoSearch.issueCompany" clearable placeholder="根据发文单位查找" :maxlength="100" @keyup.enter.native="getBussionStandTableBtn(lawsStandInfoSearch)"/>
</el-formItem>
<el-formItem label="适用车型" prop="lawsSycx" class="search-item">
<el-select :value="lawsSycx" multiple filterable clearable collapse-tags @change="lawsSycxChange">
<el-option
v-for="item in dict.lawsSycxOptions"
placeholder="请选择适用车型"
:key="item.value"
:value="item.value"
:label="item.label"
></el-option>
</el-select>
</el-formItem>
<el-formItem label="文本状态" prop="lawsTextState" class="search-item">
<el-select v-model="lawsStandInfoSearch.lawsTextState" filterable clearable>
<el-option
v-for="item in dict.lawsTextStateOptions"
placeholder="请选择文本状态"
:key="item.value"
:value="item.value"
:label="item.label"
></el-option>
</el-select>
</el-formItem>
<el-form-item class="search-item btn-box">
<el-button
type="primary"
size="mini"
class="common-button-primary"
v-btn-permission="'776298201c756873ddc8000eb716e347'"
@click="getBussionStandTableBtn(lawsStandInfoSearch)">
查询
</el-button>
<el-button
size="mini"
class="common-button-default"
v-btn-permission="'f0e6ba2b9736b77f9a271addf692b9c0'"
@click="clearAllSearch('lawsStandInfoSearch')">清空
</el-button>
<el-button size="mini" type="primary" class="common-button-primary"
v-btn-permission="'2e08f0dcb187e214127f971419f91174'" @click="selectMoreBtn">高级检索
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
<div slot="right" class="right shaixuan-button">
<!-- <el-button icon="shaixuan" type="primary" class="common-button-primary" round @click="isAdvancedSearch = true">高级检索</el-button>-->
</div>
</table-tools-bar>
</template>
<script>
export default {
name: "policySearch",
data() {
return {
}
},
props: {
lawsStandInfoSearch: {
type: Object,
default: () => ({})
},
dict: {
type: Object,
required: true
}
},
computed: {
lawsSycx () {
return this.lawsStandInfoSearch.lawsSycx ? this.lawsStandInfoSearch.lawsSycx.split(',') : []
}
},
methods:{
// 搜索
getBussionStandTableBtn (item, advancedSearch, type) {
this.$emit('getBussionStandTableBtn')
},
// 高级检索
selectMoreBtn () {
this.$emit('selectMoreBtn')
},
// 清空搜索框
clearAllSearch (flag) {
this.$emit('clearSearch')
},
lawsSycxChange (value) {
this.$set(this.lawsStandInfoSearch, 'lawsSycx', value.join(','))
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,324 @@
<template>
<!--右侧内容-->
<div id="right" class="tree-right v-class">
<!-- 普通搜索 -->
<policySearch ref="policySearchRef"
:lawsStandInfoSearch="lawsStandInfoSearch"
:dict="dict"
@getBussionStandTableBtn="getBussionStandTableBtn"
@clearSearch="clearSearch"
@selectMoreBtn="selectMoreBtn"></policySearch>
<!--按钮区-->
<div class="action-bar">
<!--<el-button-->
<!-- type="primary"-->
<!-- class="common-button-primary add-button"-->
<!-- round-->
<!-- @click="addModal"-->
<!--&gt;<i class="el-icon-plus"></i>新增</el-button>-->
<!--<el-button-->
<!-- class="common-button-default in-button"-->
<!-- round-->
<!-- :loading="searching"-->
<!-- @click="addImportModal(1)"-->
<!-- v-btn-permission="'SKNTPDKZFF'"-->
<!-- ><i class="iconfont">&#xe6de;</i>导入-->
<!--</el-button>-->
<el-button
class="common-button-default export-button"
round
@click="exportStandard"
title="不勾选时默认导出所有筛选项;勾选时仅导出勾选项"
v-btn-permission="'15e322e28629ee9e55283d12e3167e21'"
><i class="iconfont">&#xe6e9;</i>导出</el-button>
<!-- <el-button-->
<!-- class="common-button-default"-->
<!-- round-->
<!-- :loading="searching"-->
<!-- @click="uploadImportModal(1)"-->
<!-- v-btn-permission="'afX1p2gh3c'"-->
<!-- ><i class="iconfont">&#xe825;</i>模板下载</el-button>-->
<!-- <el-button
class="common-button-default delete-button"
round
@click="deleteStand(2)"
v-btn-permission="'fd83032ae5f41a0021b00e93c88edbbe'"
><i class="iconfont">&#xe61b;</i>批量删除</el-button>-->
<el-button
class="common-button-default"
round
@click="configurationStandard"
v-btn-permission="'1a6c9118cd677304924f81e02d58ac06'"
><i class="iconfont">&#xe669;</i>配置政策</el-button>
<el-button
class="common-button-default"
round
@click="deleteEnterStandFromKind(2)"
v-btn-permission="'0f54e3b982693ff122287b85785c9c37'"
><i class="iconfont">&#xe611;</i>移除政策</el-button>
</div>
<!--table-->
<mainTable
ref="mainTableRef"
:lawsStandInfoSearch="lawsStandInfoSearch"
:selectSarMenu="selectSarMenu"
@selectedList="getSelectedList"
@SarExportSearchEo="getSarExportSearchEo"
/>
<!--高级搜索-->
<advancedSearch
ref="advancedSearchRef"
:lawsStandInfoSearch="lawsStandInfoSearch"
@clearSearch="clearSearch"
@advancedSearch="advancedSearch"
:dict="dict">
</advancedSearch>
<!--导出-->
<exportFileDialog ref="exportFileDialogRef" :selectedList="selectedList" :SarExportSearchEo="SarExportSearchEo" />
<!-- 配置政策 -->
<configStandDrawer
ref="configStandDrawerRef"
:selectSarMenu="selectSarMenu"
:getBussionStandTable="() => {this.$refs.mainTableRef.getBussionStandTable()}" />
</div>
</template>
<script>
import policySearch from './policySearch'
import advancedSearch from './advancedSearch'
import mainTable from "./mainTable";
import exportFileDialog from './exportFileDialog'
import configStandDrawer from "./configStandDrawer";
export default {
name: "policyTable",
components: {
policySearch,
advancedSearch,
mainTable,
exportFileDialog,
configStandDrawer
},
data () {
const lawsStandInfoSearch = {}
return {
lawsStandInfoSearch, // 分页查询过程中用到的对象
dict: {},
// 导出相关
selectedList: [],
SarExportSearchEo: {}, // 查询条件
}
},
props: {
// 用来记录当前选中的二级菜单对象
selectSarMenu: {
type: Object,
required: true
},
},
mounted() {
this.getDicTypeListCode() // 字典项
},
methods: {
// 打开高级搜索
selectMoreBtn () {
this.$set(this, 'lawsStandInfoSearch', {
commentCycleStart: '',
commentCycleEnd: ''
})
this.$refs.advancedSearchRef.open()
},
// 清除搜索条件
clearSearch () {
this.$set(this, 'lawsStandInfoSearch', {})
this.$refs.advancedSearchRef.close()
this.$nextTick(() => {
this.getBussionStandTableBtn()
})
},
// 左侧树点击后 重新获取数据
treeClickGetBussionStandTable (menuId) {
this.$set(this.lawsStandInfoSearch, 'menuId', menuId)
this.$set(this.lawsStandInfoSearch, 'page', 1)
this.$refs.mainTableRef.getBussionStandTable(this.lawsStandInfoSearch, menuId)
},
// 普通搜索
getBussionStandTableBtn () {
this.$set(this.lawsStandInfoSearch, 'page', 1)
this.$refs.mainTableRef.getBussionStandTable()
},
// 高级搜索
advancedSearch () {
this.$set(this.lawsStandInfoSearch, 'page', 1)
this.lawsStandInfoSearch = { ...this.lawsStandInfoSearch }
this.$refs.mainTableRef.getBussionStandTable(this.lawsStandInfoSearch, '', 'sel')
},
// --------------新增----------------
// addModal () {
// this.getMenu().then(boolean => {
// if (boolean) {
// this.$refs.mainTableRef.addModal()
// }
// })
// },
// -------------导出相关---------------
// 选中项
getSelectedList (val) {
this.$set(this, 'selectedList', val)
},
exportStandard () {
this.$refs.exportFileDialogRef.exportStandard()
},
// 设置查询条件
getSarExportSearchEo (val) {
this.$set(this, 'SarExportSearchEo', val)
},
// -------------配置政策----------
// 点击配置标准弹出相应模态框
configurationStandard () {
this.getMenu().then(boolean => {
if (boolean) {
const winWidth = window.screen.width
if (winWidth > 1920) {
this.drawerWidth = 1400
} else {
this.drawerWidth = winWidth - 200
}
let menuId = this.selectSarMenu.id
if (menuId == null || menuId === '') {
this.$message.error('请选择要配置的目录')
} else {
if (this.selectSarMenu.parentId == null || this.selectSarMenu.parentId === '') {
this.$message.error('请选择二级及以下目录')
} else {
this.$refs.configStandDrawerRef.open()
}
}
}
})
},
// -------------移除政策-----------
// 判断当前左侧树节点是否是我的收藏和个性化标签
getMenu () {
return new Promise((resolve, reject) => {
let menu = this.selectSarMenu
if (menu.id === 'zcwdsc') {
this.$message.warning('请选择海外标准法规及以下节点')
} else {
resolve(true)
}
})
},
// 移除政策
deleteEnterStandFromKind (flag, item) {
this.getMenu().then(boolean => {
if (boolean) {
if (this.selectSarMenu.parentId == null || this.selectSarMenu.parentId === '') {
this.$message({
showClose: true,
message: '请选择二级及以下目录',
type: 'error'
})
} else {
let search = {}
// 取最外层目录id
search.menuId = this.selectSarMenu.id
// search.menuId = this.removeOneId
search.idlist = []
// search.menuId = this.removeOneId
if (this.selectedList.length === 0) {
this.$message.error('请先选择要移除的数据!')
} else {
this.$confirm('确认移除选中数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
}).then(() => {
for (let i = 0; i < this.selectedList.length; i++) {
search.idlist.push(this.selectedList[i])
}
this.$http.putData('lawss/sarLawsMenu/removeStandInfo', search, {
_this: this
}, res => {
this.$refs.mainTableRef.getBussionStandTable()
}, e => {
})
}).catch(() => {
})
}
}
}
})
},
getDicTypeListCode () {
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.dict.lawsTextStateOptions = res.data.lawsTextState
this.dict.lawsTypeOptions = res.data.lawsType
this.dict.lawsSyqyOptions = res.data.lawsSyqy
this.dict.lawsYearOptions = res.data.lawsYear
this.dict.lawsLabelOptions = res.data.lawsLabel
this.dict.TGRLAWSOptions = res.data.TGRLAWS
this.dict.NYLXLAWSOptions = res.data.NYLXLAWS
this.dict.ZRBMLAWSOptions = res.data.ZRBMLAWS
this.dict.CYSDLAWSOptions = res.data.CYSDLAWS
this.dict.TGDWLAWSOptions = res.data.TGDWLAWS
this.dict.ZRGCSLAWSOptions = res.data.ZRGCSLAWS
this.dict.lawsSycxOptions = res.data.lawsSycx
this.dict.lawsTypeFirstLevelOptions = res.data.lawsTypeFirstLevel
this.dict.lawsTypeSecondLevelOptions = res.data.lawsTypeSecondLevel
this.dict.lawsTypeThirdLevelOptions = res.data.lawsTypeThirdLevel
this.dict.lawsTypeFourthLevelOptions = res.data.lawsTypeFourthLevel
this.dict.lawsTextStateOptions = res.data.lawsTextState
this.dict.lawsSyqyOptions = res.data.lawsSyqy
this.dict.lawsSycxOptions = res.data.lawsSycx
this.dict.lawsYearOptions = res.data.lawsYear
this.dict.lawsLabelOptions = res.data.lawsLabel
this.dict.CYSDLAWSOptions = res.data.CYSDLAWS
this.dict.TGRLAWSOptions = res.data.TGRLAWS
this.dict.TGDWLAWSOptions = res.data.TGDWLAWS
this.dict.NYLXLAWSOptions = res.data.NYLXLAWS
this.dict.YYRZLAWSOptions = res.data.YYRZLAWS
this.dict.ZRBMLAWSOptions = res.data.ZRBMLAWS
this.dict.ZRGCSLAWSOptions = res.data.ZRGCSLAWS
this.dict.syrzOptions = res.data.YYRZLAWS
this.dict = { ...this.dict }
}, e => {
})
},
}
}
</script>
<style scoped lang="less">
#right{
float:right;
width:70%;
height:100%;
}
.tree-right {
overflow-y: hidden;
padding:0 0;
position: relative;
width: 84%;
height: 100%;
display: flex;
flex-direction: column;
}
</style>
@@ -0,0 +1,261 @@
<template>
<div style="width: 100%" class="wrapper">
<el-input
placeholder="输入树状图体系"
v-model="filterText">
</el-input>
<div class="tree">
<el-card style="height: 100%;padding-right: 120px;overflow-y:auto">
<el-tree
ref="tree"
node-key="id"
class="tree-line"
icon-class="icon-tree"
:indent="0"
:props="props"
:data="treeList"
:default-expanded-keys="['64df1d5522bb49c09af6']"
highlight-current
@node-click="treeClick"
:filter-node-method="filterNode">
<span class="custom-tree-node" slot-scope="{ node, data }" @mouseenter="mouseenter(data)" @mouseleave="mouseleave(data)">
<span :class="data.children.length !== 0 ? 'is-show' : 'is-leaf-none'"></span>
<span style="font-size:12px"> {{ node.label }} </span>
<span>
<el-button
type="text"
size="mini"
v-show="data.show"
v-btn-permission="'a3109949cc30dae1ef523c037b2651b8'"
@click="() => append(data)">
新增
</el-button>
<el-button
type="text"
size="mini"
v-show="data.show"
v-btn-permission="'61a33c05ed689934f7d4a0de4220c9ce'"
@click="() => update(data)">
编辑
</el-button>
<el-button
type="text"
size="mini"
v-show="data.showDel"
v-btn-permission="'b123231eb8c42b2a61e3dc5f59654f79'"
@click="() => remove(node, data)">
删除
</el-button>
</span>
</span>
</el-tree>
</el-card>
</div>
<addStructure ref="addStructureRef" @selectMenuList="selectMenuList"></addStructure>
</div>
</template>
<script>
import addStructure from "./addStructure";
export default {
name: "policyTree",
components: {
addStructure
},
data(){
return {
treeList: [],
filterText: '', // 企业标准库过滤
props: {
label: 'menuName',
children: 'children'
},
}
},
created() {
this.selectMenuList()
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
},
},
methods: {
selectMenuList () {
this.$http.get('sarResource/ts-resource/getListStand', {
sorDivide: 'FOREIGN_LAWS',
userId: this.$store.getters.userInfo.userId
}, {}, res => {
if (res.ok) {
this.treeList = res.data
}
})
this.$emit('treeClick', {})
},
filterNode(value, data) {
if (!value) return true;
return data.menuName.indexOf(value) !== -1;
},
treeClick (treeNode) {
this.$emit('treeClick', treeNode)
},
append(data) {
this.$refs.addStructureRef.append(data)
},
update(data) {
this.$refs.addStructureRef.update(data)
},
remove(node, data) {
this.$confirm('是否删除菜单?', '提示', {
confirmButtonText: '确定',
confirmButtonClass: 'common-button-primary',
cancelButtonText: '取消',
roundButton: true,
type: 'warning'
}).then(() => {
this.$http.put("sarResource/ts-resource/delResourceById", {
resourceId: data.id
}, res => {
}, e => {
if(e.ok){
this.$message({
type: 'success',
message: "删除成功"
})
this.selectMenuList()
}else {
this.$message({
type: 'warning',
message: e.message
})
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
})
})
},
// 树节点鼠标移入移出
mouseenter(data){
this.$set(data, 'show', true)
if(data.parentId !== null && data.id !== 'zcwdsc'){
this.$set(data, 'showDel', true)
}
},
mouseleave(data){
this.$set(data, 'show', false)
this.$set(data, 'showDel', false)
},
}
}
</script>
<style scoped lang="less">
/deep/ .icon-tree {
margin:0 5px 0 10px;
position:relative;
background:url('~@/assets/images/shangqi/img/tree-add.png');
background-size:100% 100%;
}
/deep/ .expanded{
background:url('~@/assets/images/shangqi/img/tree-sub.png');
background-size:100% 100%;
}
/deep/ .is-leaf{
background-image:none;
background-size:100% 100%;
}
/deep/ .is-leaf-none{
position: relative;
display: inline-block;
width: 15px;
height: 15px;
background: url('~@/assets/images/shangqi/img/none-file-new.png');
background-size:100% 100%;
}
/deep/ .is-show{
position: relative;
display: inline-block;
width: 15px;
height: 15px;
background:url('~@/assets/images/shangqi/img/tree.png');
background-size:100% 100%;
}
/deep/.tree-line{
.el-tree-node {
position: relative;
padding-left: 0px; // 缩进量
line-height: 30px;
}
.el-tree-node__children {
padding-left: 16px; // 缩进量
}
// 竖线
.el-tree-node::before {
content: "";
height: 100%;
width: 1px;
position: absolute;
left: -3px;
top: -26px;
border-width: 1px;
border-left: 1px dashed #858990e0;
}
// 当前层最后一个节点的竖线高度固定
.el-tree-node:last-child::before {
height: 38px; // 可以自己调节到合适数值
}
// 横线
.el-tree-node::after {
content: "";
width: 11px;
height: 20px;
position: absolute;
left: -3px;
top: 12px;
border-width: 1px;
border-top: 1px dashed #858990e0;
}
// 去掉最顶层的虚线,放最下面样式才不会被上面的覆盖了
& > .el-tree-node::after {
border-top: none;
}
& > .el-tree-node::before {
border-left: none;
}
// 展开关闭的icon
.el-tree-node__expand-icon{
font-size: 16px;
// 叶子节点(无子节点)
&.is-leaf{
color: transparent;
// display: none; // 也可以去掉
}
}
}
</style>
<style scoped lang="less">
.tree{
/deep/ .el-card__body {
padding: 0 !important;
}
.el-card {
width: 500px;
min-width: 2000px;
max-width: 100%;
/* min-width: min-content;*/
}
height: 95%;
width: 95%;
position: absolute;
left: 0;
}
</style>
+123
View File
@@ -0,0 +1,123 @@
<template>
<div class="nationalPolicy">
<div id="foreignRegulationsDatabase" :class="{ 'tree-close': sideClose }" class="v-class">
<!--左侧树-->
<div id="left" class="tree-content" :class="{ 'tree-closed': sideClose }" >
<!-- 政策树 -->
<policyTree ref="policyTreeRef" @treeClick="treeClick"></policyTree>
<div class="tree-collapse" @click="treeCollapse" :class="{ 'tree-close': sideClose }">
<!--切换折叠样式-->
<i class="el-icon-arrow-left" v-if="sideClose === false"></i>
<i class="el-icon-arrow-right" v-if="sideClose === true"></i>
</div>
</div>
<!-- 可拖拽 -->
<div id="resize"></div>
<policyTable ref="policyTableRef" :selectSarMenu="selectSarMenu"></policyTable>
</div>
</div>
</template>
<script>
import policyTree from "./components/policyTree";
import policyTable from "./components/policyTable";
export default {
name: 'NationalPolicy',
components: {
policyTree,
policyTable
},
data() {
return {
sideClose: false, // 边栏收展状态
selectSarMenu: {}// 用来记录当前选中的二级菜单对象
}
},
mounted() {
this.dragControllerLR()
},
methods: {
treeClick (treeNode) {
// 点击左侧树 重新获取数据
this.$set(this, 'selectSarMenu', treeNode)
this.$nextTick(() => {
this.$refs.policyTableRef.treeClickGetBussionStandTable(treeNode.id || '')
})
},
treeCollapse () {
this.sideClose = !this.sideClose
},
// 左右拖动事件
dragControllerLR: function() {
var resize = document.getElementById("resize");
var left = document.getElementById("left");
var right = document.getElementById("right");
var box = document.getElementById("foreignRegulationsDatabase");
resize.onmousedown = function(e){
var startX = e.clientX;
resize.left = resize.offsetLeft;
document.onmousemove = function(e){
var endX = e.clientX;
var moveLen = resize.left + (endX - startX);
var maxT = box.clientWidth - resize.offsetWidth;
if(moveLen<150) moveLen = 150;
if(moveLen>maxT-150) moveLen = maxT-150;
resize.style.left = moveLen;
left.style.width = moveLen + "px";
right.style.width = (box.clientWidth - moveLen - 5) + "px";
}
document.onmouseup = function(evt){
document.onmousemove = null;
document.onmouseup = null;
resize.releaseCapture && resize.releaseCapture();
}
resize.setCapture && resize.setCapture();
return false;
}
},
}
}
</script>
<style scoped lang="less">
#left{
width:calc(30% - 5px);
height:100%;
float:left;
}
#resize{
width:5px;
height:100%;
cursor: w-resize;
float:left;
}
</style>
<style lang="less" scoped>
@import '~@/assets/styles/mixins';
@import '~@/assets/styles/style';
.nationalPolicy{
height: 100%;
}
#foreignRegulationsDatabase {
display: flex;
position: relative;
height: 100%;
//background: #fff;
.tree-content {
width: 20%;
position: relative;
/*height: 100%;*/
background: #fff;
.tree-collapse {
position: absolute;
right: 0;
}
}
}
</style>
@@ -0,0 +1,276 @@
<template>
<el-drawer
title="高级搜索"
size="800px"
:visible="visible"
:wrapperClosable="false"
:before-close="beforeClose">
<div class="drawer-content">
<el-form
:model="form"
class="label-input-form table-lattice"
label-width="80px">
<ProcessTitle>
<template slot="title">基础信息</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<InputFormItem
label="课题指导单位"
title="课题指导单位"
v-model="form.guidanceUnit">
</InputFormItem>
<InputFormItem
label="课题参与单位"
title="课题参与单位"
v-model="form.participatingUnit">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="结题时间"
title="结题时间"
v-model="form.closeTime">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="课题费用(万元)"
title="课题费用(万元)"
v-model="form.topicCost">
</InputFormItem>
</el-col>
</el-row>
</div>
<ProcessTitle>
<template slot="title">课题组会议</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<InputFormItem
label="会议名称"
title="会议名称"
v-model="form.meetingName">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="会议时间"
title="会议时间"
v-model="form.meetingTime">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="会议地点"
title="会议地点"
v-model="form.meetingAddress">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="参会人员(内部)"
title="参会人员(内部)"
v-model="form.participants">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="会议主要内容"
title="会议主要内容"
v-model="form.meetingContent">
</InputFormItem>
</el-col>
</el-row>
</div>
<ProcessTitle>
<template slot="title">课题组联系方式</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<InputFormItem
label="姓名"
title="姓名"
v-model="form.topicGroupName">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="单位"
title="单位"
v-model="form.topicGroupDepartment">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="电话"
title="电话"
v-model="form.topicGroupPhone">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="邮箱"
title="邮箱"
v-model="form.topicGroupEmail">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="身份"
title="身份"
v-model="form.topicGroupIdentity">
</InputFormItem>
</el-col>
</el-row>
</div>
<ProcessTitle>
<template slot="title">内部联系方式</template>
</ProcessTitle>
<div class="prc-content-border">
<el-row :gutter="24">
<el-col :span="12">
<InputFormItem
label="姓名"
title="姓名"
v-model="form.insideName">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="单位"
title="单位"
v-model="form.insideDepartment">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="电话"
title="电话"
v-model="form.insidePhone">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="邮箱"
title="邮箱"
v-model="form.insideEmail">
</InputFormItem>
</el-col>
<el-col :span="12">
<InputFormItem
label="身份"
title="身份"
v-model="form.insideIdentity">
</InputFormItem>
</el-col>
</el-row>
</div>
</el-form>
</div>
<div class="drawer-footer">
<el-button
class="common-button-primary"
icon="el-icon-check"
type="primary"
@click="onSearch('search')">搜索
</el-button>
<el-button
class="common-button-default"
icon="el-icon-close"
@click="onCancel('cancel')">取消
</el-button>
</div>
</el-drawer>
</template>
<script>
import ProcessTitle from '@/pages/processCenter/pages/components/ProcessTitle'
import SelectFormItem from "@/components/hzwlComponents/SelectFormItem";
import InputFormItem from "@/components/hzwlComponents/InputFormItem";
import DatePickerFormItem from "@/components/hzwlComponents/DatePickerFormItem";
import DataRangePickerFormItem from "@/components/hzwlComponents/DataRangePickerFormItem";
import SelectMultipleFormItem from "@/components/hzwlComponents/SelectMultipleFormItem";
import DatePickerGroupFormItem from "@/components/hzwlComponents/DatePickerGroupFormItem";
import DepartmentFormItem from "@/components/hzwlComponents/DepartmentFormItem";
import personFormItem from "@/components/hzwlComponents/personFormItem";
import InputForStandardsForLaws from "@/components/hzwlComponents/InputForStandardsForLaws";
export default {
name: "advancedSearch",
components: {
ProcessTitle,
SelectFormItem,
InputFormItem,
DatePickerFormItem,
DataRangePickerFormItem,
SelectMultipleFormItem,
DatePickerGroupFormItem,
DepartmentFormItem,
personFormItem,
InputForStandardsForLaws
},
props: {
visible: {
type: Boolean,
required: true
},
form: {
type: Object,
default: () => ({})
},
dict: {
type: Object,
default: () => ({})
},
},
data () {
return {
type: 'cancel'
}
},
methods: {
beforeClose (done) {
switch (this.type) {
case "search":
this.onSearch()
break
case 'cancel':
this.onCancel()
break
}
},
onSearch (type) {
this.type = type
this.$emit('search')
this.$emit('update:visible', false)
},
onCancel(type) {
this.type = type
this.$emit('resetAdvancedSearchForm')
this.$emit('update:visible', false)
}
}
}
</script>
<style scoped lang="less">
.drawer-content {
padding: 0 19px;
overflow-y: auto;
flex: auto;
}
.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>
@@ -0,0 +1,609 @@
<template>
<el-drawer :title="title"
:visible="showDrawer"
:wrapperClosable="false"
@close="onClose"
size="1050px">
<div class="drawer-content">
<el-form
v-if="showDrawer && reloadForm"
ref="formRef"
:model="form"
:rules="rules"
class="label-input-form"
>
<el-col :span="24"><div class="divider-line">基础信息</div></el-col>
<el-row>
<el-col :span="12">
<el-form-item label="课题名称" prop="topicName" label-width="150px" class="add-form-item">
<el-input v-model="form.topicName"
placeholder="请输入课题名称"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="课题承办单位" prop="organizer" label-width="150px" class="add-form-item">
<el-input v-model="form.organizer"
placeholder="请输入课题承办单位"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="课题指导单位" prop="guidanceUnit" label-width="150px" class="add-form-item">
<el-input v-model="form.guidanceUnit"
placeholder="请输入课题指导单位"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="课题参与单位" prop="participatingUnit" label-width="150px" class="add-form-item">
<el-input v-model="form.participatingUnit"
placeholder="请输入课题参与单位"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<CustomDatePick
:config="{
attrName: '启动时间',
attrField: 'startTime'
}"
v-model="form.startTime"
></CustomDatePick>
</el-col>
<el-col :span="12">
<CustomDatePick
:config="{
attrName: '结题时间',
attrField: 'closeTime'
}"
v-model="form.closeTime"
></CustomDatePick>
</el-col>
<el-col :span="12">
<el-form-item label="课题状态" prop="topicStatus" label-width="150px" class="add-form-item">
<el-select v-model="form.topicStatus"
placeholder="请选择课题状态"
disabled
clearable>
<el-option
v-for="opt in topicStatusOptions"
:key="opt.value"
:value="!opt.value ? '' : opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="课题费用(万元)" prop="topicCost" label-width="150px" class="add-form-item">
<el-input v-model="form.topicCost"
placeholder="请输入课题费用(万元)"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<customFile
:config="{
attrName: '协议',
attrField: 'agreement'
}"
v-model="form.agreement"
></customFile>
</el-col>
</el-row>
<el-row>
<template v-for="(item, index) in form.meetingList">
<el-col :span="24">
<div class="divider-line">
课题组会议
<el-button type="primary" size="mini" icon="el-icon-plus" @click="add('meetingList')"
:style="{visibility: (index === form.meetingList.length - 1) ? 'visible' : 'collapse'}"></el-button>
<el-button type="primary" size="mini" icon="el-icon-minus" @click="remove('meetingList', index)"
:style="{visibility: (form.meetingList.length < 2 && index === 0) ? 'collapse' : 'visible'}"></el-button>
</div>
</el-col>
<el-col :span="12">
<el-form-item label="会议名称" :prop="'meetingList.' + index + '.meetingName'" :rules="rules.meetingName" label-width="150px" class="add-form-item">
<el-input v-model="item.meetingName"
placeholder="请输入会议名称"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="会议时间" :prop="'meetingList.' + index + '.meetingTime'" :rules="rules.meetingTime" label-width="150px" class="add-form-item">
<el-input v-model="item.meetingTime"
placeholder="请输入会议时间"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="会议地点" :prop="'meetingList.' + index + '.meetingAddress'" :rules="rules.meetingAddress" label-width="150px" class="add-form-item">
<el-input v-model="item.meetingAddress"
placeholder="请输入会议地点"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="参会人员(内部)" :prop="'meetingList.' + index + '.participants'" :rules="rules.participants" label-width="150px" class="add-form-item">
<el-input v-model="item.participants"
placeholder="请输入参会人员(内部)"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="会议主要内容" :prop="'meetingList.' + index + '.meetingContent'" :rules="rules.meetingContent" label-width="150px" class="add-form-item">
<el-input v-model="item.meetingContent"
placeholder="请输入会议主要内容"
clearable></el-input>
</el-form-item>
</el-col>
</template>
</el-row>
<el-col :span="24"><div class="divider-line">课题组资料</div></el-col>
<el-row>
<el-col :span="12">
<customFile
:config="{
attrName: '研究方案',
attrField: 'researchPlan'
}"
v-model="form.researchPlan"
></customFile>
</el-col>
<el-col :span="12">
<customFile
:config="{
attrName: '研究成果',
attrField: 'researchFindings'
}"
v-model="form.researchFindings"
></customFile>
</el-col>
<el-col :span="12">
<customFile
:config="{
attrName: '其他',
attrField: 'other'
}"
v-model="form.other"
></customFile>
</el-col>
<el-col :span="12">
<customFile
:config="{
attrName: '会议资料',
attrField: 'conferenceMaterials'
}"
v-model="form.conferenceMaterials"
:allowType="['.pdf', '.PDF', '.doc','.DOC', '.docx','.DOCX', '.pptx', '.PPTX', '.ppt', '.PPT', '.xls','.XLS', '.xlsx','.XLSX', '.pdg', '.PDG', '.mp3', '.MP3', '.Ogg', '.Wav']"
:size="500"
></customFile>
</el-col>
</el-row>
<el-row>
<template v-for="(item, index) in form.topicContactInformationList">
<el-col :span="24">
<div class="divider-line">
课题组联系方式
<el-button type="primary" size="mini" icon="el-icon-plus" @click="add('topicContactInformationList')"
:style="{visibility: (index === form.topicContactInformationList.length - 1) ? 'visible' : 'collapse'}"></el-button>
<el-button type="primary" size="mini" icon="el-icon-minus" @click="remove('topicContactInformationList', index)"
:style="{visibility: (form.topicContactInformationList.length < 2 && index === 0) ? 'collapse' : 'visible'}"></el-button>
</div>
</el-col>
<el-col :span="12">
<el-form-item label="姓名" :prop="'topicContactInformationList.' + index + '.name'" :rules="rules.name" label-width="150px" class="add-form-item">
<el-input v-model="item.name"
placeholder="请输入姓名"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位" :prop="'topicContactInformationList.' + index + '.department'" :rules="rules.department" label-width="150px" class="add-form-item">
<el-input v-model="item.department"
placeholder="请输入单位"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电话" :prop="'topicContactInformationList.' + index + '.phone'" :rules="rules.phone" label-width="150px" class="add-form-item">
<el-input v-model="item.phone"
placeholder="请输入电话"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" :prop="'topicContactInformationList.' + index + '.email'" :rules="rules.email" label-width="150px" class="add-form-item">
<el-input v-model="item.email"
placeholder="请输入邮箱"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份" :prop="'topicContactInformationList.' + index + '.identity'" :rules="rules.identity" label-width="150px" class="add-form-item">
<el-input v-model="item.identity"
placeholder="请输入身份"
clearable></el-input>
</el-form-item>
</el-col>
</template>
</el-row>
<el-col :span="24"><div class="divider-line">内部资料</div></el-col>
<el-row>
<el-col :span="12">
<customFile
:config="{
attrName: '立项报告',
attrField: 'insideProjectProposalReport'
}"
v-model="form.insideProjectProposalReport"
></customFile>
</el-col>
<el-col :span="12">
<customFile
:config="{
attrName: '研究方案',
attrField: 'insideResearchPlan'
}"
v-model="form.insideResearchPlan"
></customFile>
</el-col>
<el-col :span="12">
<customFile
:config="{
attrName: '会议资料',
attrField: 'insideConferenceMaterials'
}"
v-model="form.insideConferenceMaterials"
></customFile>
</el-col>
<el-col :span="12">
<customFile
:config="{
attrName: '研究成果',
attrField: 'insideResearchFindings'
}"
v-model="form.insideResearchFindings"
></customFile>
</el-col>
<el-col :span="12">
<customFile
:config="{
attrName: '其他',
attrField: 'insideOther'
}"
v-model="form.insideOther"
></customFile>
</el-col>
</el-row>
<el-row>
<template v-for="(item, index) in form.insideContactInformationList">
<el-col :span="24">
<div class="divider-line">
内部联系方式
<el-button type="primary" size="mini" icon="el-icon-plus" @click="add('insideContactInformationList')"
:style="{visibility: (index === form.insideContactInformationList.length - 1) ? 'visible' : 'collapse'}"></el-button>
<el-button type="primary" size="mini" icon="el-icon-minus" @click="remove('insideContactInformationList', index)"
:style="{visibility: (form.insideContactInformationList.length < 2 && index === 0) ? 'collapse' : 'visible'}"></el-button>
</div>
</el-col>
<el-col :span="12">
<el-form-item label="姓名" :prop="'insideContactInformationList.' + index + '.name'" :rules="rules.name" label-width="150px" class="add-form-item">
<el-input v-model="item.name"
placeholder="请输入姓名"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位" :prop="'insideContactInformationList.' + index + '.department'" :rules="rules.department" label-width="150px" class="add-form-item">
<el-input v-model="item.department"
placeholder="请输入单位"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电话" :prop="'insideContactInformationList.' + index + '.phone'" :rules="rules.phone" label-width="150px" class="add-form-item">
<el-input v-model="item.phone"
placeholder="请输入电话"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" :prop="'insideContactInformationList.' + index + '.email'" :rules="rules.email" label-width="150px" class="add-form-item">
<el-input v-model="item.email"
placeholder="请输入邮箱"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份" :prop="'insideContactInformationList.' + index + '.identity'" :rules="rules.identity" label-width="150px" class="add-form-item">
<el-input v-model="item.identity"
placeholder="请输入身份"
clearable></el-input>
</el-form-item>
</el-col>
</template>
</el-row>
</el-form>
</div>
<div class="drawer-footer">
<el-button icon="el-icon-check" type="primary" @click="onSubmit" :loading="isSubmit">提交</el-button>
<el-button icon="el-icon-close" @click="onClose">取消</el-button>
</div>
</el-drawer>
</template>
<script>
import CustomDatePick from '@/components/CustomFormComponents/DatePicker'
import CustomFile from '@/components/CustomFormComponents/File'
import CustomTextarea from '@/components/CustomFormComponents/Textarea'
export default {
name: "editDrawer",
components: {
CustomDatePick,
CustomFile,
CustomTextarea
},
props: {
dict: {
type: Object
},
showDrawer: {
type: Boolean,
required: true
},
title: {
type: String,
default: '新增'
},
editForm: {
type: Object
}
},
data (){const rules = {
topicName: [
{required: true, type: 'string', message: '课题名称不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '课题名称不能超过500个字符', trigger: 'change'}
],
organizer: [
{required: true, type: 'string', message: '课题承办单位不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '课题承办单位不能超过500个字符', trigger: 'change'}
],
guidanceUnit: [
{type: 'string', max: 500, message: '课题指导单位不能超过500个字符', trigger: 'change'}
],
participatingUnit: [
{type: 'string', max: 500, message: '课题参与单位不能超过500个字符', trigger: 'change'}
],
startTime: [
{required: true, message: '启动时间不能为空', trigger: 'change'}
],
topicStatus: [
{required: true, type: 'string', message: '课题状态不能为空', trigger: 'change'},
],
topicCost: [
{type: 'string', max: 500, message: '课题费用(万元)不能超过500个字符', trigger: 'change'}
],
meetingName: [
{type: 'string', max: 500, message: '会议名称不能超过500个字符', trigger: 'change'}
],
meetingTime: [
{type: 'string', max: 500, message: '会议时间不能超过500个字符', trigger: 'change'}
],
meetingAddress: [
{type: 'string', max: 500, message: '会议地点不能超过500个字符', trigger: 'change'}
],
participants: [
{type: 'string', max: 500, message: '参会人员(内部)不能超过500个字符', trigger: 'change'}
],
meetingContent: [
{type: 'string', max: 500, message: '会议主要内容不能超过500个字符', trigger: 'change'}
],
name: [
{type: 'string', max: 500, message: '姓名不能超过500个字符', trigger: 'change'}
],
department: [
{type: 'string', max: 500, message: '单位不能超过500个字符', trigger: 'change'}
],
phone: [
{type: 'string', max: 500, message: '电话不能超过500个字符', trigger: 'change'}
],
email: [
{type: 'string', max: 500, message: '邮箱不能超过500个字符', trigger: 'change'}
],
identity: [
{type: 'string', max: 500, message: '身份不能超过500个字符', trigger: 'change'}
],
}
const form = {
// 基础信息
topicName: '',
organizer: '',
guidanceUnit: '',
participatingUnit: '',
startTime: '',
closeTime: '',
topicStatus: '',
topicCost: '',
agreement: '',
// 课题组会议
meetingList: [
{
meetingName: '',
meetingTime: '',
meetingAddress: '',
participants: '',
meetingContent: '',
}
],
// 课题组资料
researchPlan: '',
researchFindings: '',
other: '',
conferenceMaterials: '',
// 课题组联系方式
topicContactInformationList: [
{
name: '',
department: '',
phone: '',
email: '',
identity: ''
}
],
// 内部资料
insideProjectProposalReport: '',
insideResearchPlan: '',
insideConferenceMaterials: '',
insideResearchFindings: '',
insideOther: '',
// 内部联系方式
insideContactInformationList: [
{
name: '',
department: '',
phone: '',
email: '',
identity: ''
}
]
}
const topicStatusOptions = [
{
label: '进行中',
value: '进行中'
},
{
label: '已结题',
value: '已结题'
},
]
return {
rules,
form,
initForm: { ...form },
topicStatusOptions,
isSubmit: false,
reloadForm: true,
api: {
add: 'lawss/sarLawsTopic/addLawsTopic',
update: 'lawss/sarLawsTopic/updateLawsTopicInfo'
}
}
},
watch: {
showDrawer (val) {
if (this.title === '编辑') {
this.form = { ...this.editForm }
} else {
this.resetForm()
}
},
'form.startTime' () {
this.setTopicStatus()
},
'form.closeTime' () {
this.setTopicStatus()
},
},
methods: {
setTopicStatus () {
if (!this.form.startTime) {
this.form.topicStatus = ''
}
if (this.form.startTime && !this.form.closeTime) {
this.form.topicStatus = '进行中'
}
if (this.form.startTime && this.form.closeTime) {
this.form.topicStatus = '已结题'
}
},
onClose () {
this.$emit('update:showDrawer', false)
this.$refs['formRef'].resetFields()
this.resetForm()
},
onSubmit () {
this.$refs.formRef.validate(valid => {
if (valid) {
if (this.title === '新增') {
this.$http._postData(this.api.add, this.form).then(res => {
if (res.ok) {
this.$message.success('新增成功')
this.onClose()
this.$emit('load')
}
})
} else {
this.$http._putData(this.api.update, this.form).then(res => {
if (res.ok) {
this.$message.success('修改成功')
this.onClose()
this.$emit('load')
}
})
}
}
})
},
add (type) {
let item = {}
switch (type) {
case 'meetingList':
item = {
meetingName: '',
meetingTime: '',
meetingAddress: '',
participants: '',
meetingContent: ''
}
break
case 'topicContactInformationList':
case 'insideContactInformationList':
item = {
name: '',
department: '',
phone: '',
email: '',
identity: ''
}
break
}
this.form[type] = [...this.form[type], item]
},
remove (type, index) {
let res = []
this.form[type].forEach((item, i) => {
if (i !== index) {
res.push(item)
}
})
this.form[type] = [ ...res ]
},
resetForm () {
this.form = this.initForm
},
}
}
</script>
<style scoped lang="less">
.drawer-content {
padding: 0 19px;
overflow-y: auto;
flex: auto;
}
.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>
@@ -0,0 +1,388 @@
<template>
<div class="root">
<!--搜索区-->
<div class="search-area">
<el-form :modal="searchForm" :inline="true" class="label-input-form">
<el-formItem label="课题名称" prop="topicName" class="search-item">
<el-input v-model="searchForm.topicName" clearable placeholder="请输入课题名称" :maxlength="100" @keyup.enter.native="onSearch"/>
</el-formItem>
<el-formItem label="课题承办单位" prop="organizer" class="search-item">
<el-input v-model="searchForm.organizer" clearable placeholder="请输入课题承办单位" :maxlength="100" @keyup.enter.native="onSearch"/>
</el-formItem>
<el-formItem label="启动时间" class="search-item" style="margin-right: 0">
<el-date-picker
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
clearable
:editable="true"
placeholder="选择开始时间"
v-model="searchForm.startTimeBegin"
>
</el-date-picker>
</el-formItem>
<el-form-item label="至" label-width="25px" class="search-item">
<el-date-picker
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
clearable
:editable="true"
placeholder="选择结束时间"
v-model="searchForm.startTimeEnd"
>
</el-date-picker>
</el-form-item>
<el-formItem label="课题状态" prop="topicStatus" class="search-item">
<el-select v-model="searchForm.topicStatus"
placeholder="请选择课题状态"
clearable>
<el-option
v-for="opt in topicStatusOptions"
:key="opt.value"
:value="!opt.value ? '' : opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-formItem>
<el-form-item class="search-item btn-box">
<el-button
type="primary"
size="mini"
class="common-button-primary"
v-btn-permission="'91821ac75391d6e77388f13b68803396'"
@click="onSearch">
查询
</el-button>
<el-button
size="mini"
class="common-button-default"
v-btn-permission="'22a0ea67e20998458c519281980a3af2'"
@click="onClear">清空
</el-button>
<el-button
size="mini"
type="primary"
class="common-button-primary"
v-btn-permission="'e66b04cb8113ff11b4b1a8240846996e'"
@click="advancedSearch">高级检索
</el-button>
</el-form-item>
</el-form>
</div>
<!--按钮区-->
<div class="action-bar">
<el-button class="common-button-default export-button"
size="mini"
title="不勾选时默认导出所有筛选项;勾选时仅导出勾选项"
v-btn-permission="'31f23e4d699588b08aa8f81f3e3ea42c'"
@click="exportData"><i class="iconfont">&#xe6e9;</i>导出
</el-button>
<el-button class="common-button-default in-button"
size="mini"
v-btn-permission="'0f2b3075261e335f91f9b8e470899aa9'"
@click="addImportModal"><i class="iconfont">&#xe6de;</i>导入
</el-button>
<el-button class="common-button-default in-button"
size="mini"
v-btn-permission="'a136ee2c452b4340c563e3b8d76ba5e6'"
@click="handleMoudel"><i class="iconfont">&#xe6de;</i>模板下载
</el-button>
<el-button type="primary"
class="common-button-primary add-button"
size="mini"
v-btn-permission="'46d989bf6115a26d5875843197d3d573'"
@click="openDrawer('add')"
><i class="el-icon-plus"></i>新增
</el-button>
</div>
<!-- 表格 -->
<div class="content">
<el-table
ref="selection"
:data="data"
tooltip-effect="dark"
style="width:100%;height: calc(100% - 57px)"
height="string"
border
class="drag-table"
@sort-change="sortChange"
: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>
<el-table-column
prop="topicName"
label="课题名称"
align="center"
sortable="custom"
>
<template slot-scope="{row, column, $index}">
<a class="table-jump" style="color: #2d8cf0" @click="handlePreview(row.id)">{{ row.topicName }}</a>
</template>
</el-table-column>
<el-table-column
prop="organizer"
label="课题承办单位"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
prop="startTime"
label="启动时间"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
prop="topicStatus"
label="课题状态"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
v-if="isPermission('4930216cff743a9e8235bcc71ec54b34,0cfab6ab180c2d080a8ba9ef8b8449f8') > 0"
prop="action"
label="操作"
align="center"
>
<template slot-scope="scope">
<a class="table-jump" v-btn-permission="'4930216cff743a9e8235bcc71ec54b34'" style="color: #2d8cf0" @click="openDrawer('edit', scope.row)">编辑</a>
<a class="table-jump" v-btn-permission="'0cfab6ab180c2d080a8ba9ef8b8449f8'" style="color: #f56c6c;margin-left: 10px" @click="onDelete(scope.row.id)">删除</a>
</template>
</el-table-column>
</el-table>
<pagination :page="searchForm.page" :total="total" @pageChange="pageChange" @pageSizeChange="pageSizeChange"></pagination>
<loading :loading="loading">数据获取中...</loading>
</div>
<!-- 高级搜索 -->
<AdvancedSearch :visible.sync="advancedSearchVisible" :form="advancedSearchForm" @search="onSearch" @resetAdvancedSearchForm="resetAdvancedSearchForm"></AdvancedSearch>
<!-- 新增编辑 -->
<editDrawer ref="editDrawerRef" :showDrawer.sync="showDrawer" :title="titleDrawer" :editForm="editForm" @load="getData"></editDrawer>
<!-- 导入 -->
<ImportZip :visible.sync="importModalShowFlag" :action="importExcelUrl"></ImportZip>
<!-- 导出 -->
<ExportDialog ref="exportDialogRef" @exportName="handleExport"></ExportDialog>
</div>
</template>
<script>
import AdvancedSearch from './components/advancedSearch'
import editDrawer from "./components/editDrawer";
import ImportZip from '@/components/hzwlComponents/importZip'
import ExportDialog from '@/components/hzwlComponents/exportDialog'
import store from "@/store";
export default {
name: "policyTopics",
components: {
AdvancedSearch,
editDrawer,
ImportZip,
ExportDialog
},
data () {
const topicStatusOptions = [
{
label: '进行中',
value: '进行中'
},
{
label: '已结题',
value: '已结题'
},
]
return {
// 搜索
searchForm: {},
advancedSearchVisible: false,
advancedSearchForm: {},
topicStatusOptions,
// 列表
data: [],
total: 0,
loading: false,
selectedList: [],
// 新增编辑
showDrawer: false,
titleDrawer: '',
editForm: void 0,
// 导入
importModalShowFlag: false,
importExcelUrl: '',
api: {
page: 'lawss/sarLawsTopic/page',
delete: 'lawss/sarLawsTopic/deleteLawsTopicById'
}
}
},
created() {
this.getData()
},
methods: {
// 点击查看
handlePreview(id) {
let routeUrl = this.$router.resolve({
name: 'policyTopicsDetail',
params: { id }
})
window.open(routeUrl.href, '_blank')
},
isPermission (value) {
let hasCount = 0
let set =new Set( value.split(","))
let menuList = store.getters.getMenuList
if (menuList === '') {
return hasCount
} else {
menuList.map((menu) => {
if ( set.has(menu.id)|| value === undefined || value === '') {
hasCount++
}
})
}
return hasCount
},
async getData () {
this.searchForm.pageSize = this.searchForm.pageSize || this.$store.getters.userInfo.configContent
this.searchForm.page = this.searchForm.page || 1
let params = { ...this.searchForm, ...this.advancedSearchForm }
const res = await this.$http._getData(this.api.page, params, {_this:this,loading: 'loading'})
if (res.ok && res.data) {
this.data = res.data.list
this.total = res.data.count
}
},
onSearch(){
this.getData()
},
onClear () {
this.$set(this, 'searchForm', {})
this.$set(this, 'advancedSearchForm', {})
this.getData()
},
resetAdvancedSearchForm () {
this.$set(this, 'advancedSearchForm', {})
this.getData()
},
// 高级搜索
advancedSearch () {
this.$set(this, 'advancedSearchForm', {})
this.advancedSearchVisible = true
},
// 选择项勾选改变
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()
},
// 分页点击后方法
pageChange (page) {
this.searchForm.page = page
this.getData()
},
// 分页每页显示数改变后方法
pageSizeChange (pageSize) {
this.searchForm.pageSize = pageSize
this.getData()
},
// 导出
exportData () {
this.$refs.exportDialogRef.openModel()
},
handleExport (exportName) {
const params = {
...this.form,
exportName: exportName,
exportIds: this.selectedList.join(',')
}
let query = '?'
for(let i in params){
if (params[i] && params[i]!=='') {
query = query + i + '=' + params[i] + '&'
}
}
query = query.slice(0,-1)
window.open('/api/lawss/sarLawsTopic/exportLawsTopicInfo' + query)
this.$refs.exportDialogRef.cancel()
this.$message.success('导出信息成功')
},
// 导入
addImportModal() {
this.importModalShowFlag = true
this.importExcelUrl = '/api/lawss/sarLawsTopic/importLawsTopicInfo'
},
// 模板下载
handleMoudel(){
window.open('/api/lawss/sarLawsTopic/exportTemplateFile?fileName=政策课题导入模板')
},
// 新增编辑
openDrawer (type, row) {
this.showDrawer = false
switch (type) {
case 'add':
this.titleDrawer = '新增'
break
case 'edit':
this.titleDrawer = '编辑'
this.$set(this, 'editForm', row)
break
}
this.$nextTick(()=>{
this.showDrawer = true
})
},
onDelete (id) {
this.$confirm('确认删除这些数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
}).then(() => {
this.$http._deleteData(this.api.delete, { id }).then(res => {
if (res.ok) {
this.$message.success('删除成功')
this.getData()
}
})
})
},
}
}
</script>
<style scoped lang="less">
.root{
height: 100%;
display: flex;
flex-direction: column;
.content{
flex: 1;
}
}
</style>
@@ -0,0 +1,410 @@
<template>
<div class="main">
<!-- 搜索区 -->
<div class="search-area">
<el-form :modal="searchForm" :inline="true" class="label-input-form">
<el-formItem label="1级资料分类" prop="firstType" class="search-item">
<el-select v-model="searchForm.firstType"
placeholder="请选择1级资料分类"
clearable>
<el-option
v-for="opt in dict.firstMaterialType"
:key="opt.value"
:value="!opt.value ? '' : opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-formItem>
<el-formItem label="2级资料分类" prop="secondType" class="search-item">
<el-select v-model="searchForm.secondType"
placeholder="请选择2级资料分类"
clearable>
<el-option
v-for="opt in dict.secondMaterialType"
:key="opt.value"
:value="!opt.value ? '' : opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-formItem>
<el-formItem label="资料名称" prop="name" class="search-item">
<el-input v-model="searchForm.name" clearable placeholder="请输入资料名称" :maxlength="100" @keyup.enter.native="onSearch"/>
</el-formItem>
<el-formItem label="上传时间" class="search-item" style="margin-right: 0">
<el-date-picker
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
clearable
:editable="true"
placeholder="选择开始时间"
v-model="searchForm.uploadTimeBegin"
>
</el-date-picker>
</el-formItem>
<el-form-item label="至" label-width="25px" class="search-item">
<el-date-picker
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
clearable
:editable="true"
placeholder="选择结束时间"
v-model="searchForm.uploadTimeEnd"
>
</el-date-picker>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
type="primary"
size="mini"
class="common-button-primary"
v-btn-permission="'17af98fabcda36aae6a8c3915f48b31a'"
@click="onSearch">
查询
</el-button>
<el-button
size="mini"
class="common-button-default"
v-btn-permission="'aa73f0af9e46aed8bb9fba7340a6b739'"
@click="onClear">清空
</el-button>
</el-form-item>
</el-form>
</div>
<!--按钮区-->
<div class="action-bar">
<el-button class="common-button-default export-button"
size="mini"
title="不勾选时默认导出所有筛选项;勾选时仅导出勾选项"
v-btn-permission="'cca3e020321a3443f38435fd86bb62f0'"
@click="exportData"><i class="iconfont">&#xe6e9;</i>导出
</el-button>
<el-button class="common-button-default in-button"
size="mini"
v-btn-permission="'11f125d942b845db01d077a8021bac10'"
@click="addImportModal"><i class="iconfont">&#xe6de;</i>导入
</el-button>
<el-button class="common-button-default in-button"
size="mini"
v-btn-permission="'be26878aa645671c5b16b38c2d44b4eb'"
@click="handleMoudel"><i class="iconfont">&#xe6de;</i>模板下载
</el-button>
<el-button
type="primary"
size="mini"
class="common-button-primary add-button"
v-btn-permission="'3c0bc511645234732bc7e4ea6b7103c6'"
@click="openDrawer('add')">
<i class="el-icon-plus"></i>新增
</el-button>
</div>
<!-- 表格 -->
<div class="content">
<el-table
ref="tableRef"
:data="data"
tooltip-effect="dark"
style="width:100%;height: calc(100% - 57px)"
height="string"
border
class="drag-table"
@sort-change="sortChange"
: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>
<el-table-column
prop="firstTypeName"
label="1级资料类别"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
prop="secondTypeName"
label="2级资料类别"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
prop="name"
label="资料名称"
align="center"
sortable="custom"
>
<template slot-scope="{row, column, $index}">
<a class="table-jump" style="color: #2d8cf0" @click="handlePreview(row.id)">{{ row.name }}</a>
</template>
</el-table-column>
<el-table-column
prop="uploadTime"
label="上传时间"
align="center"
sortable="custom"
>
</el-table-column>
<el-table-column
v-if="isPermission('5ba6c5466021b86fc9d00b25fd46d5c6,ead39a6339efe11b1077982ff12fd3cd') > 0"
prop="action"
label="操作"
align="center"
>
<template slot-scope="scope">
<a class="table-jump" v-btn-permission="'5ba6c5466021b86fc9d00b25fd46d5c6'" style="color: #2d8cf0" @click="openDrawer('edit', scope.row)">编辑</a>
<a class="table-jump" v-btn-permission="'ead39a6339efe11b1077982ff12fd3cd'" style="color: #f56c6c;margin-left: 10px" @click="onDelete(scope.row.id)">删除</a>
</template>
</el-table-column>
</el-table>
<pagination :page="searchForm.page" :total="total" @pageChange="pageChange" @pageSizeChange="pageSizeChange"></pagination>
<loading :loading="loading">数据获取中...</loading>
</div>
<!-- 新增编辑 -->
<editDrawer ref="editDrawerRef" :dict="dict" @load="getData"></editDrawer>
<!-- 导入 -->
<ImportZip :visible.sync="importModalShowFlag" :action="importExcelUrl"></ImportZip>
<!-- 导出 -->
<ExportDialog ref="exportDialogRef" @exportName="handleExport"></ExportDialog>
</div>
</template>
<script>
import editDrawer from "./editDrawer";
import ImportZip from '@/components/hzwlComponents/importZip'
import ExportDialog from '@/components/hzwlComponents/exportDialog'
import store from "@/store";
export default {
name: "RegulatoryMaterialsMain",
components: {
editDrawer,
ImportZip,
ExportDialog
},
props: {
treeNodeId: {
type: String
}
},
data () {
return {
url: {
page: 'lawss/sarLawsInformation/page',
delete: 'lawss/sarLawsInformation/deleteLawsInformation',
},
searchForm: {},
dict: {},
// 列表
data: [],
total: 0,
loading: false,
selectedList: [],
// 新增编辑
showDrawer: false,
// 导入
importModalShowFlag: false,
importExcelUrl: '',
}
},
mounted() {
this.getDicTypeListCode()
this.getData()
},
watch: {
treeNodeId: {
handler: function (val, oldVal) {
this.getData()
},
deep: true
}
},
methods: {
isPermission (value) {
let hasCount = 0
let set =new Set( value.split(","))
let menuList = store.getters.getMenuList
if (menuList === '') {
return hasCount
} else {
menuList.map((menu) => {
if ( set.has(menu.id)|| value === undefined || value === '') {
hasCount++
}
})
}
return hasCount
},
userToId (userStr) {
return (userStr && userStr !== '') ? userStr.split(',').map(item => item.split('(')[1].split(')')[0]) : []
},
hasViewPermission(row) {
const userId = this.$store.getters.userInfo.userId
// 未设置可查看者 所有用户 可查看
if (!row.viewableBy || row.viewableBy === '') {
return true
} else {
// 设置了查看者 可查看者可查看
if (this.userToId(row.viewableBy).find(item => item === userId)) {
return true
}
// 可下载者需要查看权限
// 未设置可下载者 创建人和审批人可查看
if (!row.downloadableBy || row.downloadableBy === '') {
if (this.userToId(row.createAndApproveBy).find(item => item === userId)) {
return true
}
} else {
// 设置可下载者 可下载者可查看
if (this.userToId(row.downloadableBy).find(item => item === userId)) {
return true
}
}
}
return false
},
getDicTypeListCode () {
this.$http._getData('sys/dictype/getDicTypeListCode').then(res => {
this.dict = { ...res.data }
})
},
async getData () {
this.searchForm.pageSize = this.searchForm.pageSize || this.$store.getters.userInfo.configContent
this.searchForm.page = this.searchForm.page || 1
this.searchForm.treeNodeId = this.treeNodeId
let params = { ...this.searchForm}
const res = await this.$http._getData(this.url.page, params, {_this:this,loading: 'loading'})
if (res.ok && res.data) {
this.data = res.data.list
this.total = res.data.count
}
},
onSearch(){
this.getData()
},
onClear () {
this.$set(this, 'searchForm', {})
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()
},
// 分页点击后方法
pageChange (page) {
this.searchForm.page = page
this.getData()
},
// 分页每页显示数改变后方法
pageSizeChange (pageSize) {
this.searchForm.pageSize = pageSize
this.getData()
},
// 点击查看
handlePreview(id) {
let routeUrl = this.$router.resolve({
name: 'regulatoryMaterialsDetail',
params: { id }
})
window.open(routeUrl.href, '_blank')
},
// 导出
exportData () {
this.$refs.exportDialogRef.openModel()
},
handleExport (exportName) {
const params = {
...this.form,
exportName: exportName,
userId: this.$store.getters.userInfo.userId,
exportIds: this.selectedList.join(',')
}
let query = '?'
for(let i in params){
if (params[i] && params[i]!=='') {
query = query + i + '=' + params[i] + '&'
}
}
query = query.slice(0,-1)
window.open('/api/lawss/sarLawsInformation/exportLawsInformationInfo' + query)
this.$refs.exportDialogRef.cancel()
this.$message.success('导出信息成功')
},
// 导入
addImportModal() {
this.importModalShowFlag = true
this.importExcelUrl = '/api/lawss/sarLawsInformation/importLawsInformationInfo'
},
// 模板下载
handleMoudel(){
window.open('/api/lawss/sarLawsInformation/exportTemplateFile?fileName=政策法规资料导入模板')
},
// 新增编辑
openDrawer (type, row) {
this.showDrawer = false
switch (type) {
case 'add':
this.$refs.editDrawerRef.add(this.treeNodeId)
break
case 'edit':
this.$refs.editDrawerRef.edit(row.id)
break
}
},
onDelete (id) {
this.$confirm('确认删除这些数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'common-button-primary',
roundButton: true
}).then(() => {
this.$http._deleteData(this.url.delete, { id }).then(res => {
if (res.ok) {
this.$message.success('删除成功')
this.getData()
}
})
})
},
}
}
</script>
<style scoped lang="less">
.main{
display: flex;
flex-direction: column;
height: 100%;
.content{
flex: 1;
position: relative;
}
}
</style>
@@ -0,0 +1,344 @@
<template>
<div style="width: 100%" class="wrapper">
<el-input
placeholder="输入树状图体系"
v-model="filterText">
</el-input>
<div class="tree">
<el-card style="height: 100%;padding-right: 120px;overflow-y:auto">
<el-tree
ref="tree"
node-key="id"
class="tree-line"
icon-class="icon-tree"
:expand-on-click-node="false"
:indent="0"
:props="props"
:data="treeList"
:default-expanded-keys="['1716336011358269441']"
highlight-current
@node-click="treeClick"
:filter-node-method="filterNode">
<span class="custom-tree-node" slot-scope="{ node, data }" @mouseenter="mouseenter(data)" @mouseleave="mouseleave(data)">
<span :class="data.children.length !== 0 ? 'is-show' : 'is-leaf-none'"></span>
<span style="font-size:12px"> {{ node.label }} </span>
<span>
<el-button
type="text"
size="mini"
v-show="data.show"
v-btn-permission="'a7fee733685bf16abb9dffb4e423d632'"
@click="() => append(data)">
新增
</el-button>
<el-button
type="text"
size="mini"
v-show="data.show"
v-btn-permission="'1e96ef8234a8f7a50cafab999e2e7bdf'"
@click="() => update(data)">
编辑
</el-button>
<el-button
type="text"
size="mini"
v-show="data.showDel"
v-btn-permission="'b6fa8bd927d679c28109d1c72f0d1d72'"
@click="() => remove(node, data)">
删除
</el-button>
</span>
</span>
</el-tree>
</el-card>
</div>
<el-drawer
:wrapperClosable="false"
:title="DrawerTitle"
:visible.sync="DrawerVisible"
size="800px"
:before-close="handleCancel"
label-width="130px"
>
<div class="demo-drawer-content">
<el-form :model="DrawerModel"
ref="DrawerModelRef"
:rules="DrawerRules"
class="label-input-form"
label-width="130px">
<el-row>
<el-col>
<el-form-item label="目录名称" prop="name" class="add-form-item">
<el-input v-model.trim="DrawerModel.name" placeholder="请输入目录名称" clearable></el-input>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="目录顺序" prop="sort" class="add-form-item">
<el-input v-model.number="DrawerModel.sort"
number
placeholder="请输入目录顺序"
:maxlength="4"
clearable></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="demo-drawer-footer">
<el-button
class="common-button-primary"
icon="el-icon-check"
type="primary"
@click="handleSubmit">提交
</el-button>
<el-button
class="common-button-default"
icon="el-icon-close"
@click="handleCancel">取消
</el-button>
</div>
</el-drawer>
</div>
</template>
<script>
export default {
name: "RegulatoryMaterialsTree",
data(){
return {
treeList: [],
filterText: '',
props: {
label: 'name',
children: 'children'
},
// drawer
DrawerTitle: '',
DrawerVisible: false,
DrawerModel: {
name: '',
parentId: '',
sort: ''
},
DrawerRules: {
name: [
{required: true, message: '目录名称不能为空', trigger: 'change'}
],
sort: [
{required: true, message: '目录顺序不能为空', trigger: 'change'}
]
},
url: {
getTree: 'lawss/sarLawsInformation/tree/getTree',
addTreeNode: 'lawss/sarLawsInformation/tree/addTreeNode',
updateTreeNode: 'lawss/sarLawsInformation/tree/updateTreeNode',
deleteTreeNode: 'lawss/sarLawsInformation/tree/deleteTreeNode',
}
}
},
created() {
this.getMenuList()
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
},
},
methods: {
getMenuList () {
this.$http._getData(this.url.getTree).then(res => {
if (res.ok) {
this.treeList = res.data
this.$emit('treeClick', res.data[0])
}
})
},
filterNode(value, data) {
if (!value) return true;
return data.menuName.indexOf(value) !== -1;
},
treeClick (treeNode) {
this.$emit('treeClick', treeNode)
},
append(data) {
this.DrawerTitle = '新增目录'
this.DrawerModel.name = ''
this.DrawerModel.parentId = data.id
this.DrawerVisible = true
},
update(data) {
this.DrawerModel = data
this.DrawerTitle = '编辑目录'
this.DrawerVisible = true
},
remove(node, data) {
this.$confirm(data.children.length > 0 ? '该节点下有记录,是否删除?' : '是否删除菜单', '提示', {
confirmButtonText: '确定',
confirmButtonClass: 'common-button-primary',
cancelButtonText: '取消',
roundButton: true,
type: 'warning'
}).then(() => {
this.$http._deleteData(this.url.deleteTreeNode, { id: data.id }).then(res => {
if (res.ok) {
this.$message.success('删除成功')
this.getMenuList()
} else {
this.$message.warning(res.message)
}
})
}).catch(() => {
this.$message.info('已取消删除')
})
},
// 树节点鼠标移入移出
mouseenter(data){
this.$set(data, 'show', true)
if(data.parentId !== null){
this.$set(data, 'showDel', true)
}
},
mouseleave(data){
this.$set(data, 'show', false)
this.$set(data, 'showDel', false)
},
handleCancel () {
this.$refs.DrawerModelRef.resetFields()
this.DrawerModel = {
name: '',
parentId: '',
sort: ''
}
this.DrawerVisible = false
},
handleSubmit () {
this.$refs.DrawerModelRef.validate(valid => {
if (valid) {
let method = this.DrawerTitle === '新增目录' ? '_postData' : '_putData'
let url = this.DrawerTitle === '新增目录' ? this.url.addTreeNode : this.url.updateTreeNode
this.$http[method](url, this.DrawerModel).then(res => {
if (res.ok) {
this.$message.success('操作成功')
this.getMenuList()
this.handleCancel()
} else {
this.$message.warning(res.message)
}
})
}
})
},
}
}
</script>
<style scoped lang="less">
/deep/ .icon-tree {
margin:0 5px 0 10px;
position:relative;
background:url('~@/assets/images/shangqi/img/tree-add.png');
background-size:100% 100%;
}
/deep/ .expanded{
background:url('~@/assets/images/shangqi/img/tree-sub.png');
background-size:100% 100%;
}
/deep/ .is-leaf{
background-image:none;
background-size:100% 100%;
}
/deep/ .is-leaf-none{
position: relative;
display: inline-block;
width: 15px;
height: 15px;
background: url('~@/assets/images/shangqi/img/none-file-new.png');
background-size:100% 100%;
}
/deep/ .is-show{
position: relative;
display: inline-block;
width: 15px;
height: 15px;
background:url('~@/assets/images/shangqi/img/tree.png');
background-size:100% 100%;
}
/deep/.tree-line{
.el-tree-node {
position: relative;
padding-left: 0px; // 缩进量
line-height: 30px;
}
.el-tree-node__children {
padding-left: 16px; // 缩进量
}
// 竖线
.el-tree-node::before {
content: "";
height: 100%;
width: 1px;
position: absolute;
left: -3px;
top: -26px;
border-width: 1px;
border-left: 1px dashed #858990e0;
}
// 当前层最后一个节点的竖线高度固定
.el-tree-node:last-child::before {
height: 38px; // 可以自己调节到合适数值
}
// 横线
.el-tree-node::after {
content: "";
width: 11px;
height: 20px;
position: absolute;
left: -3px;
top: 12px;
border-width: 1px;
border-top: 1px dashed #858990e0;
}
// 去掉最顶层的虚线,放最下面样式才不会被上面的覆盖了
& > .el-tree-node::after {
border-top: none;
}
& > .el-tree-node::before {
border-left: none;
}
// 展开关闭的icon
.el-tree-node__expand-icon{
font-size: 16px;
// 叶子节点(无子节点)
&.is-leaf{
color: transparent;
// display: none; // 也可以去掉
}
}
}
</style>
<style scoped lang="less">
.tree{
/deep/ .el-card__body {
padding: 0 !important;
}
.el-card {
width: 500px;
min-width: 2000px;
max-width: 100%;
/* min-width: min-content;*/
}
height: 95%;
width: 95%;
position: absolute;
left: 0;
}
</style>
@@ -0,0 +1,352 @@
<template>
<el-drawer :title="title"
:visible="showDrawer"
:wrapperClosable="false"
@close="onClose"
size="1050px">
<div class="drawer-content">
<el-form
v-if="showDrawer && reloadForm"
ref="formRef"
:model="form"
:rules="rules"
class="label-input-form"
>
<el-col :span="24"><div class="divider-line">基础信息</div></el-col>
<el-row>
<el-col :span="12">
<el-form-item prop="firstType" label-width="150px" class="add-form-item">
<template slot="label">1级资料分类</template>
<el-select :value="stringToArr(form.firstType)"
@change="handleChange($event,'firstType')"
multiple
placeholder="请选择1级资料分类"
clearable>
<el-option
v-for="opt in dict.firstMaterialType"
:key="opt.value"
:value="opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="thirdType" label-width="150px" class="add-form-item">
<template slot="label">3级资料分类</template>
<el-select :value="stringToArr(form.thirdType)"
@change="handleChange($event,'thirdType')"
multiple
placeholder="请选择3级资料分类"
clearable>
<el-option
v-for="opt in dict.thirdMaterialType"
:key="opt.value"
:value="opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
<el-form-item label="资料名称" prop="name" label-width="150px" class="add-form-item">
<el-input v-model="form.name"
placeholder="请输入资料名称"
clearable></el-input>
</el-form-item>
<el-form-item label="作者" prop="author" label-width="150px" class="add-form-item">
<el-input v-model="form.author"
placeholder="请输入作者"
clearable></el-input>
</el-form-item>
<el-form-item label="资料说明" prop="description" label-width="150px" class="add-form-item">
<el-input v-model="form.description"
placeholder="请输入资料说明"
clearable></el-input>
</el-form-item>
<el-form-item label="可查看者" prop="viewableBy" label-width="150px" class="add-form-item">
<el-input
clearable
v-model="form.viewableBy"
placeholder="选择可查看者"
readonly
@click.native="choice( '选择可查看者', form.viewableBy)">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="secondType" label-width="150px" class="add-form-item">
<template slot="label">2级资料分类</template>
<el-select :value="stringToArr(form.secondType)"
@change="handleChange($event,'secondType')"
multiple
placeholder="请选择2级资料分类"
clearable>
<el-option
v-for="opt in dict.secondMaterialType"
:key="opt.value"
:value="opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="fourthType" label-width="150px" class="add-form-item">
<template slot="label">4级资料分类</template>
<el-select :value="stringToArr(form.fourthType)"
@change="handleChange($event,'fourthType')"
multiple
placeholder="请选择4级资料分类"
clearable>
<el-option
v-for="opt in dict.fourthMaterialType"
:key="opt.value"
:value="opt.value" :label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
<el-form-item label="资料归属部门" prop="department" label-width="150px" class="add-form-item">
<el-input v-model="form.department"
placeholder="请输入资料归属部门"
clearable></el-input>
</el-form-item>
<CustomDatePick
:config="{
attrName: '上传时间',
attrField: 'uploadTime'
}"
v-model="form.uploadTime"
disabled
placeholder="系统自动生成"
></CustomDatePick>
<customFile
:config="{
attrName: '资料文件',
attrField: 'informationFile'
}"
v-model="form.informationFile"
:allowType="['.pdf', '.PDF', '.doc','.DOC', '.docx','.DOCX', '.pptx', '.PPTX', '.ppt', '.PPT', '.xls','.XLS', '.xlsx','.XLSX', '.pdg', '.PDG', '.zip']"
:size="100"
></customFile>
<el-form-item label="可下载者" prop="viewableBy" label-width="150px" class="add-form-item">
<el-input
clearable
v-model="form.downloadableBy"
placeholder="选择可下载者"
readonly
@click.native="choice( '选择可下载者', form.downloadableBy)">
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="drawer-footer">
<el-button icon="el-icon-check" type="primary" @click="onSubmit" :loading="isSubmit">提交</el-button>
<el-button icon="el-icon-close" @click="onClose">取消</el-button>
</div>
<Role-tree
:is-title="choiceTitle"
:is-visible.sync="modalShowRoleFlag"
@checkedRole="checkedRole"
:nodeList="nodeList"
></Role-tree>
</el-drawer>
</template>
<script>
import CustomDatePick from '@/components/CustomFormComponents/DatePicker'
import CustomFile from '@/components/CustomFormComponents/File'
import SelectMultipleFormItem from '@/components/hzwlComponents/SelectMultipleFormItem'
export default {
name: "editDrawer",
components: {
CustomDatePick,
CustomFile,
SelectMultipleFormItem
},
props: {
dict: {
type: Object
},
},
data (){
const rules = {
firstType: [
{required: true, message: '1级资料分类不能为空', trigger: 'change'}
],
secondType: [
{required: true, message: '2级资料分类不能为空', trigger: 'change'}
],
thirdType: [
{required: true, message: '3级资料分类不能为空', trigger: 'change'}
],
fourthType: [
{required: true, message: '4级资料分类不能为空', trigger: 'change'}
],
name: [
{required: true, type: 'string', message: '资料名称不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '资料名称不能超过500个字符', trigger: 'change'}
],
department: [
{required: true, type: 'string', message: '资料归属部门不能为空', trigger: 'change'},
{type: 'string', max: 500, message: '资料归属部门不能超过500个字符', trigger: 'change'}
],
author: [
{type: 'string', max: 500, message: '作者不能超过500个字符', trigger: 'change'}
],
}
const form = {
// 基础信息
firstType: '',
secondType: '',
thirdType: '',
fourthType: '',
name: '',
department: '',
author: '',
uploadTime: '',
description: '',
informationFile: '',
viewableBy: '',
downloadableBy: '',
}
return {
title: '',
showDrawer: false,
rules,
form,
initForm: { ...form },
isSubmit: false,
reloadForm: true,
// 人员选择
choiceTitle: '',
modalShowRoleFlag: false,
nodeList: [],
url: {
add: 'lawss/sarLawsInformation/addLawsInformation',
update: 'lawss/sarLawsInformation/updateLawsInformationInfo',
getLawsInformationInfo: 'lawss/sarLawsInformation/getLawsInformationInfo'
}
}
},
methods: {
stringToArr (str) {
if (str && this.value !== '') {
return str.split(',')
} else {
return []
}
},
handleChange (val, field) {
this.form[field] = val.join(',')
},
add (treeNodeId) {
this.form = { ...this.initForm }
this.form.treeNodeId = treeNodeId
this.title = '新增'
this.showDrawer = true
this.$nextTick(() => {
this.$refs['formRef'].resetFields()
})
},
edit (id) {
this.title = '修改'
this.showDrawer = true
this.$http._getData(this.url.getLawsInformationInfo, { id }).then(res => {
if (res.ok) {
this.$set(this, 'form', res.data)
this.reloadForm = false
this.$nextTick(() => {
this.reloadForm = true
})
}
})
},
onClose () {
this.showDrawer = false
},
onSubmit () {
this.$refs.formRef.validate(valid => {
if (valid) {
if (this.title === '新增') {
this.$http._postData(this.url.add, this.form, { _this: this, loading: 'isSubmit' }).then(res => {
if (res.ok) {
this.$message.success('新增成功')
this.onClose()
this.$emit('load')
}
})
} else {
this.$http._putData(this.url.update, this.form,{ _this: this, loading: 'isSubmit' }).then(res => {
if (res.ok) {
this.$message.success('修改成功')
this.onClose()
this.$emit('load')
}
})
}
}
})
},
choice(title, nameId) {
this.nodeList = []
if (nameId) {
let nameId1 = nameId.split(',')
let idList = []
nameId1.forEach(item => {
let a, b
a = item.substring(item.indexOf('(') +1)
b = a.substring(0, a.lastIndexOf(')'))
idList.push(b)
})
idList = idList.join(',')
this.nodeList = idList.split(',')
}
this.choiceTitle = title
this.modalShowRoleFlag = true
},
checkedRole(data) {
let idList = ''
let nameList = ''
data.forEach(item => {
if (nameList.length > 0) {
nameList += ','
idList += ','
}
idList += item.id
nameList += item.name
})
let field = ''
switch (this.choiceTitle) {
case '选择可查看者':
field = 'viewableBy'
break
case '选择可下载者':
field = 'downloadableBy'
break
}
this.$set(this.form, field, nameList)
},
}
}
</script>
<style scoped lang="less">
.drawer-content {
padding: 0 19px;
overflow-y: auto;
flex: auto;
}
.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>
@@ -0,0 +1,121 @@
<template>
<div id="regulatoryMaterials">
<!--左侧树-->
<div id="left" class="tree-content" :class="{ 'tree-closed': sideClose }" >
<!-- 政策树 -->
<RegulatoryMaterialsTree ref="RegulatoryMaterialsTreeRef" @treeClick="treeClick"></RegulatoryMaterialsTree>
<div class="tree-collapse" @click="treeCollapse" :class="{ 'tree-close': sideClose }">
<!--切换折叠样式-->
<i class="el-icon-arrow-left" v-if="sideClose === false"></i>
<i class="el-icon-arrow-right" v-if="sideClose === true"></i>
</div>
</div>
<!-- 可拖拽 -->
<div id="resize"></div>
<div id="right">
<RegulatoryMaterialsMain :treeNodeId="treeNodeId"></RegulatoryMaterialsMain>
</div>
</div>
</template>
<script>
import RegulatoryMaterialsTree from './components/RegulatoryMaterialsTree'
import RegulatoryMaterialsMain from './components/RegulatoryMaterialsMain'
export default {
name: "regulatoryMaterials",
data() {
return {
sideClose: false, // 边栏收展状态
treeNodeId: ''
}
},
components: {
RegulatoryMaterialsTree,
RegulatoryMaterialsMain
},
mounted() {
this.dragControllerLR()
},
methods: {
treeClick (treeNode) {
// 点击左侧树 重新获取数据
this.treeNodeId = treeNode.id || ''
// this.$nextTick(() => {
// this.$refs.policyTableRef.treeClickGetBussionStandTable(treeNode.id || '')
// })
},
// 左侧树收展
treeCollapse () {
this.sideClose = !this.sideClose
},
// 左右拖动事件
dragControllerLR: function() {
var resize = document.getElementById("resize");
var left = document.getElementById("left");
var right = document.getElementById("right");
var box = document.getElementById("regulatoryMaterials");
resize.onmousedown = function(e){
var startX = e.clientX;
resize.left = resize.offsetLeft;
document.onmousemove = function(e){
var endX = e.clientX;
var moveLen = resize.left + (endX - startX);
var maxT = box.clientWidth - resize.offsetWidth;
if(moveLen<150) moveLen = 150;
if(moveLen>maxT-150) moveLen = maxT-150;
resize.style.left = moveLen;
left.style.width = moveLen + "px";
right.style.width = (box.clientWidth - moveLen - 5) + "px";
}
document.onmouseup = function(evt){
document.onmousemove = null;
document.onmouseup = null;
resize.releaseCapture && resize.releaseCapture();
}
resize.setCapture && resize.setCapture();
return false;
}
},
}
}
</script>
<style scoped lang="less">
#regulatoryMaterials {
height: 100%;
display: flex;
position: relative;
.tree-content {
position: relative;
background: #fff;
.tree-collapse {
position: absolute;
right: 0;
}
}
#left{
width: 20%;
height:100%;
float:left;
}
#resize{
width:5px;
height:100%;
cursor: w-resize;
float:left;
}
#right{
flex: 1;
}
}
</style>
@@ -115,6 +115,15 @@
:loading="submitLoading"
v-if="showOver2"
>驳回</el-button>
<el-button
type="danger"
size="small"
class="common-button-danger"
icon="el-icon-close"
@click="rejectClick"
:loading="rejectLoading"
v-if="showReject"
>驳回</el-button>
<el-button
type="primary"
size="mini"
@@ -351,6 +360,14 @@ export default {
type: Boolean,
default: false
},
rejectLoading:{
type: Boolean,
default: false
},
showReject:{
type: Boolean,
default: false
},
backBTNTexts: {
type: String
},
@@ -372,6 +389,9 @@ export default {
}
},
methods: {
rejectClick(){
this.$emit('reject')
},
handleOver() {
this.$emit('over')
},
@@ -115,7 +115,31 @@ export default {
{
label: "问答流程",
value: "27"
}
},
{
label: "内外部会议入库流程",
value: "29"
},
{
label: "政策课题入会流程",
value: "30"
},
{
label: "政策课题参会流程",
value: "31"
},
{
label: "政策法规资料入库流程",
value: "32"
},
{
label: "政策征求意见流程",
value: "33"
},
{
label: '重点认证标准/政策合规性项目审查流程',
value: "34"
}
],
formDisableFlag: false,
pickerOptions: {
@@ -0,0 +1,118 @@
<template>
<el-dialog width='400px' :visible.sync="fileMadel" :title="title">
<el-upload
v-if="fileMadel"
multiple
class="upload-demo"
drag
:action="fileUrl"
ref="importfile"
name="file"
:before-upload="beginImportFile"
:on-success="importFileSuccess"
:on-remove="importFileRemove"
:show-file-list="true"
:file-list="fileList"
>
<div style="padding: 20px 0">
<i class="el-icon-upload" style="color: #3399ff"></i>
<p>点击或拖拽上传文件</p>
</div>
</el-upload>
</el-dialog>
</template>
<script>
export default {
name: "processFile",
props: {
title: {
type: String,
default: '上传文件'
},
fileMax_M: {
type: Number,
default: 0
},
accept: {
type: String,
default: '*'
}
},
data() {
return {
fileMadel: false,
fileUrl: 'api/att/attFile/uploadNew',
fileList: [],
}
},
methods: {
getFile(fileList) {
this.fileList = fileList || []
this.fileMadel = true
},
beginImportFile(file) {
var filename = file.name
var index1 = filename.lastIndexOf('.')
var index2 = filename.length
var fileSuffix = filename.substring(index1, index2)
fileSuffix = fileSuffix.toLowerCase()
if (this.fileMax_M > 0) {
if (file.size / 1024 / 1024 > this.fileMax_M) {
this.$message({
message: '文件' + file.name + '大小不超过' + this.fileMax_M + 'M',
type: 'warning'
})
return false
}
}
if (this.accept == '*') {
} else {
if (this.accept.includes(fileSuffix)) {
return true
} else {
this.$message.error('文件' + file.name + '格式不正确,请上传' + this.accept + '文件')
return false
}
}
return true
},
//
importFileSuccess(response, file, fileList) {
if (response.ok) {
let templateFileList = []
let list = []
fileList.forEach(item => {
let data = item.response ? item.response.data : item
templateFileList.push(data)
list.push(data.id)
})
let templateFileId = list.join(',')
this.$emit('uploadSuccess', templateFileList, templateFileId)
this.$message({
// showClose: true,
message: response.message,
type: 'success'
})
} else {
this.$message.error('程序异常,上传失败')
}
},
importFileRemove(file, fileList) {
let list = []
let templateFileList = []
fileList.forEach(item => {
templateFileList.push(item)
list.push(item.name)
})
let templateFileName = list.join(',')
this.$emit('uploadSuccess', templateFileList, templateFileName)
},
}
}
</script>
<style scoped>
</style>
@@ -188,7 +188,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -162,7 +162,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -200,7 +200,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -201,7 +201,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -199,7 +199,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -195,7 +195,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -190,7 +190,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -190,7 +190,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -190,7 +190,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -222,7 +222,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -197,7 +197,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -287,7 +287,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -216,7 +216,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -287,7 +287,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -204,7 +204,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -215,7 +215,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -190,7 +190,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -193,7 +193,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -247,7 +247,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -198,7 +198,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -249,7 +249,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -192,7 +192,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -201,7 +201,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -328,7 +328,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -228,7 +228,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -259,7 +259,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -247,7 +247,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -247,7 +247,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -250,7 +250,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -250,7 +250,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -191,7 +191,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -211,7 +211,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -257,7 +257,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? '已完成' : '未完成'}}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -433,7 +433,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -340,7 +340,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>
@@ -349,7 +349,7 @@
label="状态"
align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime ? "已完成" : "未完成" }}</span>
<span>{{ scope.row.endTime ? '已完成' : scope.row.receiveStatus ? '已接收' : '未完成' }}</span>
</template>
</el-table-column>
</el-table>

Some files were not shown because too many files have changed in this diff Show More