Files
2026-09-20 15:46:34 +08:00

433 lines
16 KiB
HTML

<!--#
layout("/mobile/platform.html"){
#-->
<style>
.van-doc-card {
margin: 10px;
padding: 12px 12px 12px 12px;
background-color: #fff;
border-radius: 6px;
box-shadow: 0 8px 12px #ebedf0;
line-height: 20px;
position: relative;
}
.list-card {
position: relative;
margin: 10px;
background-color: #fff;
border-radius: 6px;
box-shadow: 0 8px 12px #ebedf0;
width: auto;
}
.list-card > .content {
padding: 16px 10px;
display: flex;
max-height: 100px;
}
.content-right {
width: calc(100% - 150px);
max-width: calc(100% - 150px);
padding-left: 15px;
overflow: hidden;
text-overflow: ellipsis;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.cr-title {
/*max-height: 40px;*/
line-height: 20px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-weight: bold;
}
.van-grid-item__content {
padding: 0;
}
.choose_button .button_text {
font-size: 14px;
margin-top: 6px;
}
.concat, .mobile, .union {
font-size: 13px;
line-height: 18px;
width: 100%;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.footer {
background-color: white;
position: fixed;
bottom: 0;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.footer .van-button {
height: 34px;
border-radius: 6px;
}
.active {
background-color: #1867b0;
color: white;
}
.no_active {
background-color: #e7e9f0;
color: #69707a;
}
.van-row {
text-align: center;
color: #1867b0;
font-weight: bold;
padding: 0px 0px 10px 0px;
font-family: cursive;
}
.van-col {
line-height: 24px;
}
.van-list {
padding-bottom: 10px;
}
.popVisible {
width: 100%;
height: 100%;
background-color: white;
}
.pop_footer {
background-color: white;
position: fixed;
bottom: 0;
width: 100%;
height: 60px;
display: flex;
justify-content: space-evenly;
align-items: center;
left: 0;
}
.pop_footer .van-button {
height: 34px;
border-radius: 6px;
width: 90%;
}
.cus_button {
background-color: #0e78c5;
color: white;
}
.van-tag {
padding: 2px 7px;
border-radius: 4px;
}
.cus_content {
height: calc(100% - 40px - 46px - 60px);
overflow-y: auto;
}
.van-col {
line-height: 24px;
}
.desc_info div {
font-size: 12px;
}
</style>
<div id="app" v-cloak>
<van-sticky>
<van-nav-bar @click-left="history.back()" fixed left-arrow placeholder title="我的疗休养"></van-nav-bar>
</van-sticky>
<!--按钮导航-->
<div class="choose_button van-doc-card">
<van-grid :column-num="3" :border="false">
<van-grid-item @click="pageForm.theRapyRecuperationType = item.value; getData()" v-for="item in chooseButton">
<van-image width="46" height="46" :src="item.imgUrl"></van-image>
<div :style="pageForm.theRapyRecuperationType == item.value ? 'color: #1867b0; font-weight: bold' : 'color: black; font-weight: normal'"
class="button_text">{{item.label}}</div>
</van-grid-item>
</van-grid>
</div>
<van-list
:finished="finished"
:immediate-check="true"
@load="onLoad"
finished-text="没有更多了"
v-model="loading">
<div class="list-card" v-for="o in tableData">
<div @click="findOne(o)" class="content">
<van-image
height="100"
radius="8"
:src="APP_DOMAIN + '/file_server/fileStreamPreview?id=' + o.fileId"
width="150"
></van-image>
<div v-if="pageForm.theRapyRecuperationType != '2'" class="content-right">
<div class="cr-title">
<span>{{o.lineName}}</span>
<div>
<van-tag color="#1867b0">{{moment(o.playEndTime).diff(moment(o.playStartTime), 'day')}}日</van-tag>
<van-tag color="#1867b0">{{o.createMode === 2 && o.signUpMode === 2 ? '校工会' : o.signUpUnionName}}</van-tag>
</div>
</div>
<div class="desc_info">
<!--<div class="union">
<span>分工会:</span>{{o.signUpUnionName}}
</div>-->
<!--<div class="concat">
<span>时间:</span>{{o.YEAR}}
</div>-->
<!--<div class="concat">
<span>已报人数:</span>{{o.signUpUserNum + o.signUpUserFamilyNum + '(家属' + o.signUpUserFamilyNum + '人)'}}
</div>-->
<div class="mobile">
<span>旅&ensp;行&ensp;社:</span>{{o.travelAgencyName}}
</div>
<div class="mobile">
<span>联系方式:</span>{{o.contactMobileNumber}}
</div>
<div class="mobile">
<span>随行家属:</span>{{o.companionUserNames ? o.companionUserNames : '无'}}
</div>
</div>
</div>
<div v-if="pageForm.theRapyRecuperationType == '2'" class="content-right">
<div class="cr-title">
<span>{{o.travelAgencyName}}</span>
</div>
<div>
<div class="concat">
<span>联系人:</span>{{o.contact}}
</div>
<div class="mobile">
<span>联系电话:</span>{{o.contactMobileNumber}}
</div>
<!--<div class="mobile">
<span>邮箱:</span>{{o.email}}
</div>-->
<div class="union" style="margin-top: 0">
<span>官网:</span><span style="color: #0e5996"
@click.stop="window.open(o.officialWebsite.indexOf('http') !== -1 ? o.officialWebsite : 'https://' + o.officialWebsite)">{{o.officialWebsite}}</span>
</div>
</div>
</div>
</div>
<div>
<van-row gutter="20" v-if="o.isTakePartIn == true">
<van-col v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() < moment(o.changeEndTime).unix()" @click="edit(o)" span="8" style="border-right: 1px lightgrey solid">修&ensp;改</van-col>
<van-col v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() >= moment(o.changeEndTime).unix()" span="8"
style="color: grey; border-right: 1px lightgrey solid">修&ensp;改</van-col>
<van-col @click="cancel(o)" :span="pageForm.theRapyRecuperationType != '2' ? 8 : 12" style="border-right: 1px lightgrey solid">取&ensp;消</van-col>
<van-col @click="satisfaction(o)" :span="pageForm.theRapyRecuperationType != '2' ? 8 : 12">满意度反馈</van-col>
</van-row>
<van-row gutter="20" v-if="o.isTakePartIn == false">
<van-col v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() < moment(o.changeEndTime).unix()" @click="edit(o)" span="12" style="border-right: 1px lightgrey solid">修&ensp;改</van-col>
<van-col v-if="pageForm.theRapyRecuperationType != '2' && moment().unix() >= moment(o.changeEndTime).unix()" span="12"
style="color: grey; border-right: 1px lightgrey solid">修&ensp;改</van-col>
<van-col v-if="pageForm.theRapyRecuperationType == '2'" span="12"></van-col>
<van-col @click="cancel(o)" span="12">取&ensp;消</van-col>
</van-row>
</div>
</div>
</van-list>
<div class="footer">
<van-button @click="pageForm.signUpStateId = 1; getData()" :class="pageForm.signUpStateId == 1 ? 'active' : 'no_active'">已报名</van-button>
<van-button @click="pageForm.signUpStateId = 2; getData()" :class="pageForm.signUpStateId == 2 ? 'active' : 'no_active'">已参加</van-button>
<van-button @click="pageForm.signUpStateId = 3; getData()" :class="pageForm.signUpStateId == 3 ? 'active' : 'no_active'">未参加</van-button>
</div>
<van-popup class="popVisible" position="right" v-model="popVisible">
<van-nav-bar @click-left="popVisible = false" fixed left-arrow placeholder title="满意度评分"></van-nav-bar>
<div class="cus_content">
<van-field name="rate" label="旅行社评分">
<template #input>
<van-rate v-model="satisfactionForm.evaluationForTravelAgency" allow-half void-icon="star" color="#ffd21e"></van-rate>
</template>
</van-field>
<van-field name="rate" label="路线评分">
<template #input>
<van-rate v-model="satisfactionForm.evaluationForLine" allow-half void-icon="star" color="#ffd21e"></van-rate>
</template>
</van-field>
<van-field name="rate" label="风景评分">
<template #input>
<van-rate v-model="satisfactionForm.evaluationForJourney" allow-half void-icon="star" color="#ffd21e"></van-rate>
</template>
</van-field>
<van-field
v-model="satisfactionForm.feedbackContent"
rows="4"
autosize
label="其他建议"
type="textarea"
maxlength="100"
placeholder="请输入其他建议"
show-word-limit>
</van-field>
</div>
<div class="pop_footer">
<van-button @click="satisfactionSubmit" class="cus_button">提交评分</van-button>
</div>
</van-popup>
</div>
<script>
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURI(r[2]);
return null;
}
const vue = new Vue({
el: '#app',
mixins: [mobileMixins],
data() {
return {
popVisible: false,
chooseButton: [],
pageForm: {
theRapyRecuperationType: 0,
signUpStateId: 1,
},
loading: false,
finished: false,
refreshing: false,
satisfactionForm: {},
}
},
methods: {
satisfaction(o) {
this.satisfactionForm = {
id: o.id,
evaluationForJourney: o.evaluationForJourney ? o.evaluationForJourney * 1 : '',
evaluationForLine: o.evaluationForLine ? o.evaluationForLine * 1 : '',
evaluationForTravelAgency: o.evaluationForTravelAgency ? o.evaluationForTravelAgency * 1 : '',
feedbackContent: o.feedbackContent ? o.feedbackContent : '',
}
this.popVisible = true
},
async satisfactionSubmit() {
for (const key in this.satisfactionForm) {
if(key !== 'feedbackContent' && this.satisfactionForm[key] === '') {
vant.Toast('请先评分再提交')
return
}
}
const res = await $.post('/platform/theRapyRecuperation/line/enroll/doFeedBack', this.satisfactionForm)
if(res.code === 0) {
this.popVisible = false
vant.Toast('操作成功')
this.getData()
}else {
vant.Toast(res.msg)
}
},
async edit(o) {
const res = await $.post('/platform/theRapyRecuperation/line/enroll/validSignUpInfo', {
enroll: JSON.stringify({
takePartInLineId: o.takePartInLineId,
id: o.id,
takePartInUnionId: o.takePartInUnionId
}),
})
if(res.code === 0) {
location.href = '/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.takePartInLineId +
'&index=' + this.pageForm.theRapyRecuperationType + '&enrollId=' + o.id + '&fromUrlByMy=editDo' +
'&takePartInUnionId=' + o.takePartInUnionId
} else {
vant.Toast(res.msg)
}
},
async cancel(o) {
if(this.pageForm.theRapyRecuperationType != '2') {
const re = await $.post('/platform/theRapyRecuperation/line/enroll/canDelete/' + o.id)
if(re.code !== 0) {
vant.Toast(re.msg)
return
}
}
vant.Dialog.confirm({
title: '温馨提醒',
message: '您确定要取消此报名吗?',
}).then(async () => {
const res = await $.post('/platform/theRapyRecuperation/line/enroll/doDeleteMyEnrollInfoById/' + o.id)
if(res.code === 0) {
vant.Toast('取消成功')
this.getData()
}else {
vant.Toast(res.msg)
}
}).catch(() => {});
},
async findOne(o) {
if(this.pageForm.theRapyRecuperationType != '2') {
location.href = '/platform/mobile/theRapyRecuperation/lineInfo?id=' + o.takePartInLineId + '&fromUrlByMy=edit&takePartInUnionId=' + o.takePartInUnionId
}
},
getData() {
this.loading = true
this.pageForm.pageNumber = 1
this.tableData = []
this.onLoad()
},
async onLoad() {
const res = await $.post('/platform/theRapyRecuperation/line/enroll/mySignUpPageData', this.pageForm)
if (res.code === 0 && res.data) {
this.tableData = this.tableData.concat(res.data.list)
if (this.tableData.length === res.data.totalCount) {
this.finished = true
} else {
this.pageForm.pageNumber++
}
}
this.loading = false
}
},
async created() {
this.pageForm.theRapyRecuperationType = getQueryString('index') ? getQueryString('index') : 1
this.chooseButton = await getEnumOptions('TheRapyRecuperationType')
}
})
</script>
<!--#
}
#-->