Files
income_payments_enterprise_…/src/views/meetingActivity/MeetingActivity.vue
T

474 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="meeting main-box">
<div class="title">
<a-icon type="user"/>
<span class="my-meeting">我的会议</span>
</div>
<div class="content">
<section class="meeting—status">
<span>会议分类:</span>
<span @click="filterMeeting(item.key)" class="inactive-status"
:class="{'active-status':item.key === meetingKey}" v-for="item of meetingStatusArr"
:key="item.key">{{ item.value }}</span>
</section>
<!--查询区域begin-->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :xl="7" :lg="8" :md="8" :sm="24">
<a-form-item label="会议名称">
<a-input placeholder="请输入会议名称" v-model="queryParam.meetingName" :maxLength="50"></a-input>
</a-form-item>
</a-col>
<a-col :xl="7" :lg="8" :md="8" :sm="24">
<a-form-item label="会议类型">
<j-dict-select-tag dict-code="meeting_type" placeholder="请选择会议类型"
v-model="queryParam.meetingType"></j-dict-select-tag>
</a-form-item>
</a-col>
<a-col :xxl="7" :xl="10" :md="10" :sm="24">
<a-form-item label="会议时间">
<j-date
placeholder="请选择开始日期"
class="query-group-cust"
v-model="queryParam.meetingStartTime"
:disabled-date="disabledStartDate">
</j-date>
<span class="query-group-split-cust"></span>
<j-date
placeholder="请选择结束日期"
class="query-group-cust"
v-model="queryParam.meetingEndTime"
:disabled-date="disabledEndDate">
</j-date>
</a-form-item>
</a-col>
<a-col :xl="7" :lg="8" :md="8" :sm="24">
<a-form-item label="会议状态">
<j-dict-select-tag dict-code="meeting_status" placeholder="请选择会议状态"
v-model="queryParam.meetingStatus"></j-dict-select-tag>
</a-form-item>
</a-col>
<a-col :xl="7" :lg="8" :md="8" :sm="24">
<a-form-item label="报名状态">
<j-dict-select-tag dict-code="sign_up_status" placeholder="请选择报名状态"
v-model="queryParam.signUpStatus"></j-dict-select-tag>
</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-->
<!--列表区域begin-->
<a-spin :spinning="loading">
<div class="list" v-if="tableData.length > 0">
<div class="item-meeting" v-for="(item,index) of tableData" :key="index">
<p class="item-meeting-meetingName">
<j-ellipsis class="primary-color" @click="openMeetingDetail(item)" :value="item.meetingName"
:length="20"></j-ellipsis>
</p>
<!--这里需要修改 会议费用分人显示不同的会议费用 2021-09-29 跟需求沟通说是不显示-->
<!-- <p class="item-meeting-meetingCost"><span>¥</span>{{ item.meetingCosts }}</p>-->
<p class="item-meeting-img item-meeting-meetingDirector">
<img src="../../assets/meetingImgs/meeting-user.png"/>
负责人:{{ item.directorName }}
</p>
<p class="item-meeting-img item-meeting-meetingAddress">
<img src="../../assets/meetingImgs/meeting-address.png"/>
召开地点:
<j-ellipsis :value="item.venue + '/' + item.address " :length="20"></j-ellipsis>
</p>
<p class="item-meeting-img item-meeting-meetingTime">
<img src="../../assets/meetingImgs/meeting-time.png"/>
召开时间:{{ item.startTime }}~{{ item.endTime }}
<!-- <j-ellipsis :value="item.startTime + '~' + item.endTime" :length="30"></j-ellipsis>-->
</p>
<!-- 报名状态 -->
<p class="item-meeting-img item-meeting-meetingTime" v-show="item.signUpStatus !== null">
<img src="../../assets/meetingImgs/meeting-audit.png"
class="audit-img"/>报名状态:{{ item.signUpStatus_dictText }}
</p>
<p class="item-meeting-img item-meeting-meetingPaymode">
<img src="../../assets/meetingImgs/meeting_paymode.png"/>
缴费方式:{{ item.payMode_dictText }}
<!-- 缴费方式为线上缴费或者汇款的, 审核通过才显示 只有在会议召开时间期间才显示”上传凭证“按钮 "-->
<!-- 报名状态为 凭证审核中 显示查看凭证 -->
<!-- 报名成功不显示-->
<a-button
v-show="(item.payMode === 2 || item.payMode === 1) && (item.meetingStatus == 2 || item.meetingStatus === 3) && item.registerCheckResult === 1 && item.meetingStatus === 3 && item.signUpStatus !== 6 "
type="primary" @click="uploadPaymentRecord(item)">
{{ item.signUpStatus === 2 ? '查看凭证' : '上传凭证' }}
</a-button>
</p>
<img v-if="item.meetingStatus === 2 " class="meeting-img-status"
src="../../assets/meetingImgs/no-start.png"/>
<img v-if="item.meetingStatus === 3 " class="meeting-img-status" src="../../assets/meetingImgs/ing.png"/>
<img v-if="item.meetingStatus === 4 " class="meeting-img-status" src="../../assets/meetingImgs/end.png"/>
</div>
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
</div>
<section v-else class="list-empty">
<a-list :data-source="[]"/>
</section>
</a-spin>
<!--列表区域end-->
<div class="fenye">
<!--分页-->
<a-pagination
v-model="current"
:page-size.sync="pageSize"
class="pagination"
show-size-changer
:show-total="(total, range) => `${range[0]}-${range[1]} 共 ${total} 条`"
:pageSizeOptions="['10','20', '30', '50','100']"
show-quick-jumper
:total="total"
@change="changePagination"
@showSizeChange="onShowSizeChange"
/>
</div>
</div>
<!--上传凭证-->
<upload-meeting-certificate-modal ref="upload" @ok="initData"></upload-meeting-certificate-modal>
<!-- 会议详情-->
<meeting-detail-modal ref="meetingDetail" :is-meeting-bool="true"></meeting-detail-modal>
</div>
</template>
<script>
import JDictSelectTag from '@comp/dict/JDictSelectTag'
import {RangeDateMixin} from '@/mixins/RangeDateMixin'
import JDate from '@comp/tools/JDate'
import UploadMeetingCertificateModal from '@views/MessagePage/UploadMeetingCertificateModal'
import {getAction} from '@api/manage'
import JEllipsis from '@comp/jero/JEllipsis'
import MeetingDetailModal from '@views/MessagePage/MeetingDetailModal'
export default {
name: 'MeetingActivity',
mixins: [RangeDateMixin],
components: {
MeetingDetailModal,
JDictSelectTag,
JDate,
UploadMeetingCertificateModal,
JEllipsis
},
data() {
return {
// 会议分类 全部 0 可报名 1 已报名 2
meetingStatusArr: [
{
key: '0',
value: '全部'
},
{
key: '1',
value: '可报名'
},
{
key: '2',
value: '已报名'
}
],
// 会议的key值 默认是全部
meetingKey: '0',
// 禁用时间的key值
dateKeyObj: {
beginKey: 'meetingStartTime',
endKey: 'meetingEndTime'
},
url: {
list: '/meeting/payMeeting/pageContract'
},
tableData: [],
// 查询参数
queryParam: {},
lastQueryParam: {},
filter: {},
// 分页参数
pageNo: 1,
pageSize: 10,
total: 0,
// 当前页
current: 1,
// 加载状态
loading: false,
// 会议类型
meetingType: ''
}
},
computed: {
// 会议报名 审核状态
auditStatus() {
// 报名信息审核中 工作组会议或者分标委会议 非成员报名 需要审核报名信息
// 凭证审核中 上传了汇款凭证待审核的
// 不可参会 非成员单位报名信息审核被拒绝的
// 待上传凭证 来款方式为线上或者汇款
// 凭证被拒绝 上传审核凭证被拒绝的
// 报名成功 审核凭证通过或者不需要审核的
return '报名成功'
}
},
created() {
// 会议类型
if (this.$route.query.meetingType) {
this.meetingType = this.$route.query.meetingType
this.filter.meetingType = this.$route.query.meetingType
}
this.initData(1)
},
methods: {
/*
* 会议分类筛选
* */
filterMeeting(key) {
this.meetingKey = key
this.filter.meetingSignUpType = this.meetingKey
this.initData(1)
},
/*
* 分页
* */
onShowSizeChange(current, pageSize) {
this.pageNo = current
this.pageSize = pageSize
console.log(current, pageSize)
this.initData()
},
/*
* 页码改变后的回调
* */
changePagination(pageNo, pageSize) {
this.pageSize = pageSize
this.pageNo = pageNo
this.initData()
},
/*
* 初始化加载数据
* */
initData(arg) {
if (!this.url.list) {
this.$message.error('请设置url.list属性!')
return
}
//加载数据 若传入参数1则加载第一页的内容
if (arg === 1) {
this.pageNo = 1
}
var params = Object.assign({}, this.lastQueryParam, this.filter)
params.pageNo = this.pageNo
params.pageSize = this.pageSize
this.loading = true
getAction(this.url.list, params).then((res) => {
if (res.success) {
this.tableData = [...res.result.records] || res.result
this.current = res.result.current
if (res.result.total) {
this.total = res.result.total
} else {
this.total = 0
}
}
if (res.code === 510) {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
},
/*
* 查询
* */
searchQuery() {
this.queryParam.meetingStartTime = this.queryParam.meetingStartTime ? this.queryParam.meetingStartTime + ' ' + '00:00:00' : undefined
this.queryParam.meetingEndTime = this.queryParam.meetingEndTime ? this.queryParam.meetingEndTime + ' ' + '23:59:59' : undefined
this.queryParam.createTime_begin = this.queryParam.createTime_begin ? this.queryParam.createTime_begin + ' ' + '00:00:00' : undefined
this.queryParam.createTime_end = this.queryParam.createTime_end ? this.queryParam.createTime_end + ' ' + '23:59:59' : undefined
this.lastQueryParam = {...this.queryParam}
this.initData(1)
},
/*
* 重置
* */
searchReset() {
this.queryParam = {}
this.lastQueryParam = {}
this.pageNo = 1
this.pageSize = 10
this.initData(1)
},
/*
* 上传凭证
* */
uploadPaymentRecord(item) {
if (item) {
this.$refs.upload.open(item)
}
},
/*
* 打开会议详情
* */
openMeetingDetail(item) {
// 可报名的点击应该是去报名
if (item.meetingSignUpType === 1) {
let url = `${window._CONFIG['singUpQRCodeURL']}?id=${item.id}`
window.open(url, '_blank')
} else {
// 打开会议详情
this.$refs.meetingDetail.open(item)
}
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.meeting {
background: #fff;
}
.title {
height: 56px;
line-height: 56px;
background: #fff;
border-bottom: 2px solid #f2f2f2;
padding: 0 20px;
.my-meeting {
margin-left: 6px;
font-size: 16px;
}
}
/*内容begin*/
.content {
padding: 0 20px 20px 20px;
}
.meeting—status {
height: 56px;
box-sizing: border-box;
line-height: 56px;
color: #666;
}
.inactive-status {
user-select: none;
padding: 0 20px;
cursor: pointer;
}
.active-status {
background: #069f99;
padding: 8px 20px;
border-radius: 4px;
color: white;
}
.list {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
& > i {
width: 323px;
}
}
.item-meeting {
position: relative;
margin-bottom: 20px;
display: flex;
flex-direction: column;
justify-content: space-between;
font-size: 14px;
color: #999;
padding: 10px;
width: 323px;
height: 219px;
opacity: 1;
background: #ffffff;
border-radius: 4px;
box-shadow: -2px 0px 10px 10px rgba(51, 51, 51, 0.10);
& > p {
margin: 0;
padding: 0;
}
&-img > img {
margin-right: 4px;
margin-bottom: 2px;
user-select: none;
}
&-meetingName {
color: #333;
font-size: 16px;
font-weight: 700;
}
&-meetingCost {
color: #FF5252;
font-size: 22px;
font-weight: 700;
font-family: Acre, Acre-Medium;
& > span {
font-size: 16px;
}
}
&-meetingPaymode {
.ant-btn {
float: right;
}
}
}
.meeting-img-status {
position: absolute;
right: 0;
top: 0;
}
.audit-img {
transform: translate(-3px);
width: 20px;
height: 20px;
}
/*内容end*/
.fenye {
background: #fff;
height: 50px;
}
.pagination {
float: right;
margin-right: 20px;
}
.list-empty {
margin: 20px auto !important;
}
</style>