政策课题模块

This commit is contained in:
zyn
2023-10-17 17:32:29 +08:00
parent 04d62065a8
commit a57f930011
7 changed files with 1284 additions and 6 deletions
+7 -2
View File
@@ -201,6 +201,11 @@ export default {
},
rules: {
type: Array
},
// 单位 M
size: {
type: Number,
default: 200
}
},
watch: {
@@ -322,8 +327,8 @@ export default {
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
+5
View File
@@ -253,6 +253,11 @@
title: '内外部会议',
path: '/meeting',
menuId: 'e5681c5ccbef386fcf50e217afdd3ff4'
},
{
title: '政策课题',
path: '/policyTopics',
menuId: '627f66cd6746234edd4722e20d8c01bb'
}
]
},
+14 -4
View File
@@ -4,13 +4,22 @@
<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-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-input v-model="searchForm.meetingOrganizer" clearable placeholder="请输入会议主办单位" :maxlength="100" @keyup.enter.native="onSearch"/>
</el-formItem>
<el-formItem label="会议时间" prop="meetingTime" class="search-item">
<el-input v-model="searchForm.meetingTime" clearable placeholder="根据会议时间查找" :maxlength="100" @keyup.enter.native="onSearch"/>
<el-date-picker
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
clearable
:editable="true"
placeholder="请选择会议时间"
v-model="searchForm.meetingTime"
>
</el-date-picker>
</el-formItem>
<el-form-item class="search-item btn-box">
<el-button
@@ -170,6 +179,7 @@ export default {
advancedSearchVisible: false,
editForm: void 0,
api: {
page: 'lawss/insideOutsideMeeting/page',
delete :'lawss/insideOutsideMeeting/deleteMeetingInfo'
}
}
@@ -183,7 +193,7 @@ export default {
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('lawss/insideOutsideMeeting/page', params, {_this:this,loading: 'loading'})
const res = await this.$http._getData(this.api.page, params, {_this:this,loading: 'loading'})
if (res.ok && res.data) {
if (res.data.list && res.data.list.length > 0) {
this.data = res.data.list
@@ -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,632 @@
<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="addMeeting"
:style="{visibility: (index === form.meetingList.length - 1) ? 'visible' : 'collapse'}"></el-button>
<el-button type="primary" size="mini" icon="el-icon-minus" @click="removeMeeting(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', 'mp4', 'MP4']"
:size="2048"
></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="addTopicContactInformation"
:style="{visibility: (index === form.topicContactInformationList.length - 1) ? 'visible' : 'collapse'}"></el-button>
<el-button type="primary" size="mini" icon="el-icon-minus" @click="removeTopicContactInformation(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="addInsideContactInformation"
:style="{visibility: (index === form.insideContactInformationList.length - 1) ? 'visible' : 'collapse'}"></el-button>
<el-button type="primary" size="mini" icon="el-icon-minus" @click="removeInsideContactInformation(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: {
editForm (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')
}
})
}
}
})
},
addMeeting () {
const meetingListItem = {
meetingName: '',
meetingTime: '',
meetingAddress: '',
participants: '',
meetingContent: '',
}
this.form.meetingList = [...this.form.meetingList, meetingListItem]
},
removeMeeting (index) {
let res = []
this.form.meetingList.forEach((item, i) => {
if (i !== index) {
res.push(item)
}
})
this.form.meetingList = [ ...res ]
},
addTopicContactInformation () {
const topicContactInformationListItem = {
name: '',
department: '',
phone: '',
email: '',
identity: ''
}
this.form.topicContactInformationList = [...this.form.topicContactInformationList, topicContactInformationListItem]
},
removeTopicContactInformation (index) {
let res = []
this.form.topicContactInformationList.forEach((item, i) => {
if (i !== index) {
res.push(item)
}
})
this.form.topicContactInformationList = [ ...res ]
},
addInsideContactInformation () {
const insideContactInformationListItem = {
name: '',
department: '',
phone: '',
email: '',
identity: ''
}
this.form.insideContactInformationListItem = [...this.form.insideContactInformationListItem, insideContactInformationListItem]
},
removeInsideContactInformation (index) {
let res = []
this.form.insideContactInformationListItem.forEach((item, i) => {
if (i !== index) {
res.push(item)
}
})
this.form.insideContactInformationListItem = [ ...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,340 @@
<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="启动时间" prop="startTime" class="search-item">
<el-date-picker
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
type="date"
clearable
:editable="true"
placeholder="请选择启动时间"
v-model="searchForm.startTime"
>
</el-date-picker>
</el-formItem>
<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%;"
border
class="drag-table"
@sort-change="sortChange"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px', fontWeight: 'bold', height: '48px'}"
@selection-change="selectionChange"
>
<el-table-column
type="selection"
width="55"
align="center">
</el-table-column>
<el-table-column
prop="topicName"
label="课题名称"
align="center"
>
</el-table-column>
<el-table-column
prop="organizer"
label="课题承办单位"
align="center"
>
</el-table-column>
<el-table-column
prop="startTime"
label="启动时间"
align="center"
>
</el-table-column>
<el-table-column
prop="topicStatus"
label="课题状态"
align="center"
>
</el-table-column>
<el-table-column
prop="action"
label="操作"
align="center"
>
<template slot-scope="scope">
<a class="table-jump" style="color: #2d8cf0" @click="openDrawer('edit', scope.row)">编辑</a>
<a class="table-jump" 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'
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: {
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) {
if (res.data.list && res.data.list.length > 0) {
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(sortObj) {
},
// 分页点击后方法
pageChange (page) {
this.searchForm.page = page
this.getData()
},
// 分页每页显示数改变后方法
pageSizeChange (pageSize) {
this.searchForm.pageSize = pageSize
this.getData()
},
// 导出
exportData () {
this.$refs.exportDialogRef.openModel()
},
handleExport (exportName) {
alert('导出' + exportName)
const params = {
...this.form,
exportName: exportName,
userId: this.$store.getters.userInfo.userId,
exportIds: this.ids.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/esRevisePlan/es-revise-plan/exportEsRevisePlanInfoExcel' + query)
this.$refs.exportDialogRef.cancel()
this.$message.success('导出信息成功')
},
// 导入
addImportModal() {
alert('导入')
this.importModalShowFlag = true
this.importExcelUrl = '/api/lawss/sarBussionessStand/importSarBussionessStandFile?'+ 'userId=' + this.$store.getters.userInfo.userId
},
// 模板下载
handleMoudel(){
alert('模板下载')
window.open('/api/lawss/sarBussionessStand/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(() => {
alert('delete')
this.$http._deleteData(this.api.delete, { meetingId: 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>
+10
View File
@@ -3983,6 +3983,16 @@ const routes = [
title: '内外部会议',
menuId: 'e5681c5ccbef386fcf50e217afdd3ff4'
}
},
{
path: '/policyTopics',
name: 'policyTopics',
component: () => import('@/pages/policyRegulation/policyTopics'),
meta: {
requireAuth: true,
title: '政策课题',
menuId: '627f66cd6746234edd4722e20d8c01bb'
}
}
]
},