add 添加起草组

This commit is contained in:
danshihao
2024-01-10 16:36:39 +08:00
parent 342d6bcd58
commit ea03c4c5f9
8 changed files with 697 additions and 2 deletions
+1 -1
View File
@@ -158,7 +158,7 @@ export default {
},
props: {
/**
* @Description: 会议类型 1-工作组会议 2-标协会议 3-国际研讨会 4-其他会议 5-分标委会议 6-理事会会议
* @Description: 会议类型 1-工作组会议 2-标协会议 3-国际研讨会 4-其他会议 5-分标委会议 6-理事会会议 7-起草组会议
* @author:fengchenchen @Date:2021-12-15
*/
meetingType: {
+29
View File
@@ -120,6 +120,20 @@ export const routerData = [
name: 'work-team',
id: '2'
},
{
redirect: null,
path: '/draftTeam/DraftTeam',
component: 'draftTeam/DraftTeam',
route: '1',
meta: {
icon: 'cus_member', // 菜单前图标
componentName: 'DraftTeam',
keepAlive: false,
title: '起草组' // 菜单名称
},
name: 'draft-team',
id: '18'
},
{
redirect: null,
path: '/subBidCommittee/SubBidCommittee',
@@ -530,6 +544,21 @@ export const routerData = [
name: 'work-team-detail',
id: '14'
},
{
path: '/draftTeam/DraftTeamDetail',
component: 'draftTeam/DraftTeamDetail',
redirect: null,
hidden: true,
route: '1',
meta: {
icon: '', // 菜单前图标
componentName: 'DraftTeamDetail',
keepAlive: false,
title: '起草组详情' // 菜单名称
},
name: 'draft-team-detail',
id: '19'
},
{
path: "/standardsAssociation/problemCollection/problemCollectionDetailList",
component: 'standardsAssociation/problemCollection/ProblemCollectionDetailList',
@@ -1125,6 +1125,8 @@ export default {
return '分标委会议'
case '6':
return '理事会会议'
case '7':
return '起草组会议'
default:
return '其他会议'
}
+239
View File
@@ -0,0 +1,239 @@
<template>
<div class="main-box">
<a-card :bordered="false">
<!--查询区域begin-->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :xl="6" :lg="8" :md="8" :sm="24">
<a-form-item label="项目名称">
<a-input placeholder="请输入项目名称" v-model="queryParam.chargeProject" :maxLength="50"></a-input>
</a-form-item>
</a-col>
<!-- <a-col :xl="6" :lg="8" :md="8" :sm="24">-->
<!-- <a-form-item label="需要发票">-->
<!-- <j-dict-select-tag dict-code="invoice_type" placeholder="请选择是否需要发票"-->
<!-- v-model="queryParam.needInvoice"></j-dict-select-tag>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :xl="6" :lg="8" :md="8" :sm="24">-->
<!-- <a-form-item label="打包项目">-->
<!-- <j-dict-select-tag dict-code="yn" placeholder="请选择是否打包"-->
<!-- v-model="queryParam.pack"></j-dict-select-tag>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<a-col :xl="6" :lg="8" :md="8" :sm="24">
<a-form-item label="运行年份">
<j-year-date style="width:100%" placeholder="请选择运行年份" v-model="queryParam.year"></j-year-date>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="8" :md="8" :sm="24">
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
<a-button class="reset-button" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!--查询区域end-->
<!-- 表格区域-->
<div>
<a-table
ref="table"
rowKey="id"
:scroll="{x: 1200}"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
@change="handleTableChange"
class="j-table-force-nowrap">
<!-- 项目名称-->
<template slot="projectName" slot-scope="text, record">
<j-ellipsis :value="text" :length="20" class="project-name" @click="toDetail(record)"></j-ellipsis>
</template>
<template slot="text" slot-scope="text">
<j-ellipsis :value="text" :length="11"></j-ellipsis>
</template>
<!-- 联系人-->
<span slot="action" class="action-span-cell" slot-scope="text,record">
<a @click="handleContacts(record)">联系人</a>
</span>
</a-table>
</div>
<!-- 表格区域end-->
</a-card>
<project-detail-modal ref="projectDetail" @openContractModule="handleOpenContractModule"></project-detail-modal>
<mine-contract-module :contract-id="contractId" :visible.sync="contractModuleVisible"
@openProjectDetail="openDetailModal"></mine-contract-module>
</div>
</template>
<script>
import { JeroListMixin } from '@/mixins/JeroListMixin'
import ProjectDetailModal from '@views/MessagePage/ProjectDetailModal'
import MineContractModule from '@views/mineContract/modules/MineContractModule'
import JYearDate from '@comp/jero/JYearDate'
export default {
name: 'DraftTeam',
components: { ProjectDetailModal, MineContractModule, JYearDate },
mixins: [JeroListMixin],
data() {
return {
columns: [
{
title: '序号',
dataIndex: '',
key: 'rowIndex',
width: 60,
align: 'center',
customRender: function (t, r, index) {
return parseInt(index) + 1
}
}, {
title: '项目名称',
dataIndex: 'chargeProject',
align: 'center',
scopedSlots: { customRender: 'projectName' }
}, {
title: '项目负责人',
dataIndex: 'principalName',
align: 'center',
width: 200,
scopedSlots: { customRender: 'text' }
}, {
title: '负责人联系电话',
dataIndex: 'principalPhone',
align: 'center',
width: 140,
scopedSlots: { customRender: 'text' }
}, {
title: '负责人邮箱',
dataIndex: 'principalEmail',
align: 'center',
width: 140,
scopedSlots: { customRender: 'text' }
}, {
title: '运行周期',
dataIndex: 'operationCycle',
align: 'center',
width: 140,
scopedSlots: { customRender: 'text' }
}, {
title: '任务及目标',
dataIndex: 'missionAndObjectives',
align: 'center',
scopedSlots: { customRender: 'text' }
}, {
title: '缴费凭证状态',
dataIndex: 'paymentStatus_dictText',
align: 'center',
width: 120,
scopedSlots: { customRender: 'text' }
}, {
title: '操作',
dataIndex: 'action',
align: 'center',
width: 100,
fixed: 'right',
scopedSlots: { customRender: 'action' }
}
],
contractId: null,
contractModuleVisible: false,
url: {
list: '/project/payWorkingGroupSubitem/queryCompanyPageList'
},
disableMixinCreated: true
}
},
created() {
this.queryParam = {
year: this.getCurrentYear()
}
this.lastQueryParam = {
year: this.getCurrentYear()
}
this.loadData()
},
methods: {
toMeeting() {
this.$router.push({
path: '/meetingActivity/MeetingActivity',
query: {
meetingType: '7'
}
})
},
/**
* 打开合同详情
* @param contractId
*/
handleOpenContractModule(contractId) {
this.contractId = contractId
this.contractModuleVisible = true
},
/**
* 缴费凭证
* @param record
*/
handleContacts(record) {
this.$router.push({
path: '/MessagePage/PaymentVoucher',
query: {
projectId: record.id,
projectName: record.chargeProject,
projectType: 2
}
})
},
/**
* 跳转至详情
* @param record
*/
toDetail(record) {
this.$router.push({
path: '/draftTeam/DraftTeamDetail',
query: {
projectId: record.id,
draftingGroupId: record.draftingGroupId
}
})
},
searchReset() {
this.queryParam = {
year: this.getCurrentYear()
}
this.lastQueryParam = {
year: this.getCurrentYear()
}
this.loadData(1)
},
getCurrentYear() {
return new Date().getFullYear().toString()
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.project-name {
cursor: pointer;
font-size: 16px;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
color: #069f99;
//overflow: hidden;
//word-break: keep-all;
//text-overflow: ellipsis;
}
</style>
+417
View File
@@ -0,0 +1,417 @@
<template>
<div class="main-box">
<a-card :bordered="false">
<a-spin :spinning="loading">
<!-- 基本信息-->
<div class="basic-info basic-box">
<h3 class="title">基本信息</h3>
<a-spin :spinning="basicLoading">
<a-row :gutter="10">
<a-col :span="24" class="basic-info-item"><label>项目名称</label><span>{{ detail.chargeProject }}</span>
</a-col>
<a-col :span="8" class="basic-info-item"><label>项目负责人</label><span>{{ detail.principalName }}</span>
</a-col>
<!-- 合同-->
<a-col :span="8" class="basic-info-item" v-if="detail.chargeWay === 2">
<label>合同编号</label>
<span>{{ detail.contractNum }}</span>
</a-col>
<!-- 收费通知-->
<a-col :span="8" class="basic-info-item" v-if="detail.chargeWay === 3">
<label>收费通知号</label>
<span>{{ detail.chargeNoticeNo }}</span>
</a-col>
<a-col :span="12" class="basic-info-item" v-if="detail.chargeWay === 3">
<label>收费通知</label>
<span style="width: 100%;">
<preview-file style="width: 80%" :file-id="detail.chargeNoticeId"></preview-file>
</span>
</a-col>
<a-col :span="24" class="basic-info-item">
<label>任务及目标</label>
<span>{{ detail.missionAndObjectives }}</span>
</a-col>
</a-row>
</a-spin>
</div>
</a-spin>
<!-- 在研项目-->
<div class="under-study basic-box">
<h3 class="title">在研项目</h3>
<a-table
ref="table"
size="middle"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="underStudyLoading"
@change="handleTableChange"
class="j-table-force-nowrap">
<template slot="text" slot-scope="text">
<j-ellipsis :value="text" :length="18"></j-ellipsis>
</template>
<!-- 过程文件-->
<span slot="project-approval" class="action-span-cell" slot-scope="text, record">
<a @click="viewFiles(record)">查看</a>
</span>
</a-table>
</div>
<!-- 起草组会议-->
<div class="meeting basic-box">
<h3 class="title">起草组会议</h3>
<meeting-list :other-params="meetingOtherParams" :meeting-type="7"></meeting-list>
</div>
<a-spin :spinning="loading">
<!-- 付款信息-->
<div class="payment-info basic-box">
<div class="collapsible-title">
<h3 class="title">付款信息</h3>
<a-button type="link" @click="viewPaymentInfo">{{ showPaymentInfo ? '收起' : '查看' }}</a-button>
</div>
<div class="payment-info-box" v-show="showPaymentInfo">
<section class="payment-info-title">付款信息</section>
<template v-if="paymentInfoList && paymentInfoList.length > 0">
<div class="payment-info-content" v-for="item of paymentInfoList" :key="item.id">
{{ item.paymentDate }}付款{{ item.amountReceived }}
</div>
</template>
<a-list v-else :data-source="[]"/>
</div>
</div>
</a-spin>
<!-- 其他分发资料-->
<div class="meeting basic-box">
<div class="file-title"><h3 class="title">其他分发资料</h3><span>(如月报调研表等)</span></div>
<file-list ref="fileListTable" :data-source="fileList" :file-loading="fileLoading"></file-list>
</div>
</a-card>
<under-study-files-modal ref="filesModal" :columns="fileColumns" :is-committee="false"></under-study-files-modal>
</div>
</template>
<script>
import MeetingList from '@comp/detailPage/MeetingList'
import FileList from '@comp/detailPage/FileList'
import { getWorkingGroupUnderStudyProject, queryCommonProjectById } from '@api/incomePaymentsApi'
import UnderStudyFilesModal from '@views/MessagePage/modules/UnderStudyFilesModal'
import PreviewFile from '@comp/jero/PreviewFile'
import { getFileInfo } from '@api/api'
const columns = [
{
title: '序号',
dataIndex: '',
key: 'rowIndex',
width: 60,
align: 'center',
customRender: function (t, r, index) {
return parseInt(index) + 1
}
}, {
title: '项目名称',
align: 'center',
dataIndex: 'projectName',
scopedSlots: { customRender: 'text' }
}, {
title: '主要起草单位',
align: 'center',
dataIndex: 'draftCompany',
scopedSlots: { customRender: 'text' }
}, {
title: '项目进度',
align: 'center',
dataIndex: 'projectSchedule',
scopedSlots: { customRender: 'text' }
}, {
title: '过程文件',
align: 'center',
width: 100,
dataIndex: 'filesList',
scopedSlots: { customRender: 'project-approval' }
}
]
const fileColumns = [
{
title: '文件名',
align: 'center',
dataIndex: 'fileName',
scopedSlots: { customRender: 'text' }
}, {
title: '上传时间',
align: 'center',
dataIndex: 'createTime',
scopedSlots: { customRender: 'time' }
}, {
title: '操作',
align: 'center',
dataIndex: 'action',
width: 160,
scopedSlots: { customRender: 'action' }
}]
export default {
name: 'DraftTeamDetail',
components: { MeetingList, FileList, UnderStudyFilesModal, PreviewFile },
data() {
return {
basicLoading: false,
// 详情数据
detail: {},
// 文件数据
fileList: [],
// 在研项目
columns,
// 过程文件表头
fileColumns,
// 到账信息
paymentInfoList: [],
dataSource: [],
/* 分页参数 */
ipagination: {
current: 1,
pageSize: 10,
pageSizeOptions: ['10', '20', '30'],
showTotal: (total, range) => {
return range[0] + '-' + range[1] + ' 共' + total + '条'
},
showQuickJumper: true,
showSizeChanger: true,
total: 0
},
loading: false,
underStudyLoading: false,
// 显示付款信息
showPaymentInfo: false,
fileLoading: false,
// 起草组会议的其他字段
meetingOtherParams: {
draftingGroupId: this.$route.query.draftingGroupId
}
}
},
created() {
this.getUnderStudyProjectList()
this.getWorkingGroupDetail()
},
methods: {
/**
* 获取在研项目
*/
getUnderStudyProjectList() {
this.underStudyLoading = true
let param = {
draftingGroupId: this.$route.query.draftingGroupId,
pageNo: this.ipagination.current,
pageSize: this.ipagination.pageSize
}
getWorkingGroupUnderStudyProject(param).then(res => {
if (res.success) {
this.dataSource = res.result.records
if (res.result.total) {
this.ipagination.total = res.result.total
} else {
this.ipagination.total = 0
}
} else {
this.$message.warn(res.message)
}
}).finally(() => {
this.underStudyLoading = false
})
},
/**
* 查看文件
* @param record
*/
viewFiles(record) {
this.$refs.filesModal.title = '过程文件'
this.$refs.filesModal.dataSource = record.filesList
this.$refs.filesModal.visible = true
},
/**
* 获取工作组详情
*/
getWorkingGroupDetail() {
this.loading = true
let param = {
id: this.$route.query.projectId
}
queryCommonProjectById(param).then(res => {
if (res.success) {
this.detail = res.result
// 到账信息
this.paymentInfoList = res.result.paymentRecord
// 获取其他分发资料
this.initFileList(this.detail.files)
} else {
this.$message.warn(res.message)
}
}).finally(() => {
this.loading = false
})
},
/**
* 控制付款信息显隐
*/
viewPaymentInfo() {
this.showPaymentInfo = !this.showPaymentInfo
},
/*
* 通过文件id获取文件的相关信息
* */
getFileInfo(id) {
return new Promise(resolve => {
let result = {}
getFileInfo({ id: id }).then(res => {
if (res.success) {
result = res.result
}
}).finally(() => {
resolve(result)
})
})
},
/*
* 获取文件信息
* */
async initFileList(fileIds) {
this.fileLoading = true
if (fileIds) {
const fileList = []
let arr = fileIds.split(',')
for (let i = 0; i < arr.length; i++) {
let fileObj = {}
fileObj = await this.getFileInfo(arr[i])
fileList.push({ fileId: fileObj.id, fileName: fileObj.fileName, createTime: fileObj.createTime })
}
this.fileList = [...fileList]
} else {
this.fileList = []
}
this.fileLoading = false
console.log(this.fileList)
},
/**
* 分页变化
* @param pagination
* @param filters
* @param sorter
*/
handleTableChange(pagination) {
//分页变化时触发
this.ipagination = pagination
this.getUnderStudyProjectList()
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.title {
position: relative;
}
.title::before {
position: absolute;
top: 4px;
left: -10px;
content: "";
height: 20px;
width: 2px;
background: #069f99;
}
.basic-box {
padding: 0 20px 10px 20px;
}
.basic-info {
.ant-col {
margin: 5px 0;
}
&-item {
display: flex;
label {
flex-shrink: 0;
}
}
}
.file-title {
display: flex;
align-items: center;
span {
margin-left: 10px;
margin-bottom: 5px;
}
}
/*可收起的标题样式*/
.collapsible-title {
display: flex;
justify-content: space-between;
}
/* 到账信息 */
.payment-info {
&-box {
border: 1px solid #ccc;
}
&-title {
text-align: center;
font-size: 14px;
height: 35px;
line-height: 35px;
letter-spacing: 1px;
color: #fff;
background: #a2e6e4;
}
&-content {
color: #424242;
//background: #efefef;
padding: 5px;
padding-left: 10px;
//border: 1px solid #ccc;
border-top: none;
}
}
/* 查看 开票邮寄信息*/
.logistics-info {
position: relative;
.wrap-table.hide {
height: 0;
display: none;
transition: all 0.5s ease-out;
}
.wrap-table {
transition: all 0.5s ease-out;
}
//.ant-table.hide{
// height: 0;
// display: none;
//}
}
</style>
@@ -302,7 +302,8 @@ export default {
{name: '理事会会议', value: '6'},
{name: '信息交流会', value: '7'},
{name: '培训会', value: '8'},
{name: '宣贯会', value: '9'}
{name: '宣贯会', value: '9'},
{name: '起草组会议', value: '10'}
]
}
},
@@ -474,6 +475,9 @@ export default {
// 宣贯会
this.queryParam.meetingType = '2'
this.queryParam.tbMeetingType = '1'
} else if (val === '10') {
// 起草组会议
this.queryParam.meetingType = '7'
} else {
this.queryParam.meetingType = val
this.queryParam.tbMeetingType = undefined
+2
View File
@@ -335,6 +335,8 @@ export default {
return '分标委会议'
case '6':
return '理事会会议'
case '7':
return '起草组会议'
}
} else {
return ''
+2
View File
@@ -638,6 +638,8 @@ export default {
return '分标委会议'
case '6':
return '理事会会议'
case '7':
return '起草组会议'
}
} else {
return ''