Files
dvcp_v2_webapp/packages/work/AppConference/list.vue
2022-05-10 20:02:37 +08:00

260 lines
7.5 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>
<ai-list isTabs>
<template #content>
<ai-search-bar>
<template #left>
<el-button type="primary" @click="addMetting()">发起会议</el-button>
<ai-select
v-model="search.meetingStatus"
@change="getTableData()"
placeholder="会议状态"
:selectList="dict.getDict($parent.name==0 ? 'meetingStatusSelect' : 'meetingStatus')"
></ai-select>
<ai-select
v-if="$parent.name==0"
v-model="search.confirmStatus"
@change="getTableData()"
placeholder="确认状态"
:selectList="dict.getDict('confirmStatus')"
></ai-select>
</template>
<template #right>
<el-input
v-model="search.param"
v-throttle="() => {search.current=1,getTableData()}"
@keyup.enter.native="search.current=1,getTableData()"
placeholder="会议标题/地点"
size="small" suffix-icon="iconfont iconSearch" clearable @clear="getTableData()"></el-input>
</template>
</ai-search-bar>
<div class="list_main">
<div class="no-data" style="height:160px;" v-if="tableData.length==0"></div>
<ul v-if="tableData.length>0">
<li v-for="(item,index) in tableData" :key="index" @click="goDetail(item)">
<p>
<span class="conference_title">{{ item.title }}</span>
<span class="time" v-if="item.status==1">{{ item.expirationTime }}</span>
</p>
<p style="width:80%;">
<el-row type="flex" align="middle" class="unit">发起人{{ item.userName }}
</el-row>
<el-row type="flex" align="middle" class="unit">发起单位{{ item.unitName }}
</el-row>
</p>
<p style="width:80%;">
<span class="unit">会议时间{{ item.startTime.substring(0, 16) + '至' + item.endTime.substring(0, 16) }}</span>
<el-tooltip :content="item.address" placement="top-start" effect="light">
<span class="unit" v-if="item.address.length>12">会议地点{{
item.address.substring(0, 12) + '....'
}}</span>
<span class="unit" v-else>会议地点{{ item.address }}</span>
</el-tooltip>
</p>
<!-- <p style="width:80%;">
<span
class="unit">会议时间{{
item.startTime.substring(0, 16) + '至' + item.endTime.substring(0, 16)
}}</span>
<el-tooltip :content="item.address" placement="top-start" effect="light">
<span class="unit address"
v-if="item.address.length>12">会议地点{{ item.address.substring(0, 12) + '....' }}</span>
<span class="unit address" v-else>会议地点{{ item.address }}</span>
</el-tooltip>
</p> -->
<h5 :class="{color0:item.status==0,color1:item.status==1,color2:item.status==2,color3:item.status==3,color4:item.status==4}">
<span v-if="item.status==0">草稿箱</span>
<span v-if="item.status==1">未开始</span>
<span v-if="item.status==2">进行中</span>
<span v-if="item.status==3">已取消</span>
<span v-if="item.status==4">已结束</span>
</h5>
<ai-icon class="svg" v-if="item.joinStatus==0" type="svg" icon="iconunidentified"/>
<ai-icon class="svg" v-else-if="item.joinStatus==1" type="svg" icon="iconidentified"/>
<ai-icon class="svg" v-else-if="item.joinStatus==2" type="svg" icon="iconyiqingjia"/>
<ai-icon class="svg" v-else-if="item.joinStatus==3" type="svg" icon="icondaiding"/>
</li>
</ul>
</div>
<div class="pagination" v-if="tableData.length>0">
<el-pagination
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
background
:current-page.sync="search.current"
:page-sizes="[5, 10, 50, 100,200]"
:page-size="search.size"
layout="total,prev, pager, next,sizes,jumper"
:total="total">
</el-pagination>
</div>
</template>
</ai-list>
</template>
<script>
export default {
name: "list",
props: {
instance: Function,
dict: Object,
permissions: Function,
listType: String
},
data() {
return {
search: {
meetingStatus: '',
confirmStatus: '',
param: '',
current: 1,
size: 10,
listType: ''
},
tableData: [],
total: 0,
}
},
methods: {
goDetail(item) {
this.$emit('goPage', {
row: item,
comp: 'detail'
});
},
addMetting() {
this.$emit('goPage', {
row: {},
comp: 'addMeeting'
});
},
getTableData() {
this.instance.post(`/app/appmeetinginfo/list`, null, {
params: {
...this.search,
listType: this.listType
}
}).then(res => {
if (res && res.data) {
this.tableData = res.data.records;
this.total = res.data.total;
}
});
},
handleCurrentChange(val) {
this.search.current = val;
this.getTableData();
},
handleSizeChange(val) {
this.search.size = val;
this.getTableData();
},
},
created() {
this.dict.load("confirmStatus", "meetingStatus", "meetingStatusSelect").then(_ => this.getTableData())
}
}
</script>
<style lang="scss" scoped>
.list_main {
width: 100%;
ul {
overflow: hidden;
padding: 0;
margin: 0;
li {
width: 100%;
height: 107px;
background: rgba(255, 255, 255, 1);
border-radius: 4px;
border: 1px solid rgba(216, 224, 232, 1);
box-sizing: border-box;
padding: 16px 16px 16px 50px;
margin-top: 8px;
cursor: pointer;
position: relative;
overflow: hidden;
p {
width: 100%;
height: 25px;
display: flex;
justify-content: space-between;
align-items: center;
.conference_title {
color: rgba(51, 51, 51, 1);
font-size: 16px;
font-weight: bold;
}
.time {
font-size: 14px;
color: #2266FF;
}
.unit {
font-size: 14px;
width: 50%;
}
}
h5 {
width: 100px;
height: 20px;
line-height: 20px;
text-align: center;
position: absolute;
left: -22px;
top: 10px;
box-sizing: border-box;
padding-right: 8px;
font-size: 12px;
transform: rotate(-45deg);
background: #FFF3E8;
color: rgba(255, 136, 34, 1);
box-shadow: -1px 1px 0px 0px rgba(216, 224, 232, 1), 1px -1px 0px 0px rgba(216, 224, 232, 1);
margin: 0;
}
.color0 {
color: #2244FF;
background: #EFF6FF;
}
.color1 {
background: #FFF3E8;
color: rgba(255, 136, 34, 1);
}
.color2 {
background: #EFF6FF;
color: #2266FF;
}
.color3 {
background-color: #D8E0E8;
color: #999999;
}
.color4 {
color: #2EA222;
background-color: #D8E0E8;
}
.svg {
width: 88px;
height: 88px;
position: absolute;
right: -20px;
bottom: -20px;
}
}
}
}
</style>