Files
dvcp_v2_wxcp_app/src/project/activeAnalysis/AppWechatActivities/AppWechatActivities.vue

262 lines
6.7 KiB
Vue
Raw Normal View History

2023-01-17 09:28:01 +08:00
<template>
<div class="AppActive">
2023-01-29 13:55:41 +08:00
<!-- <u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="96" bg-color="#3975C6" inactive-color="#fff" active-color="#fff" @change="change"></u-tabs> -->
2023-01-17 09:28:01 +08:00
<div class="dataTop">
<div class="dataLeft">活动列表</div>
2023-01-29 18:02:51 +08:00
<!-- <div class="dataRight">
2023-01-17 09:28:01 +08:00
<span></span>
<span class="specialColor">{{ total }}</span>
<span>个活动</span>
2023-01-29 18:02:51 +08:00
</div> -->
2023-01-17 09:28:01 +08:00
</div>
<template v-if="datas.length > 0">
2023-01-29 13:55:41 +08:00
<AiCard v-for="(item, i) in datas" :key="i" @click.native="toDetail(item)">
2023-01-17 09:28:01 +08:00
<template #custom>
<div class="left">
<div class="titles">{{ item.title }}</div>
<div class="nums">
2023-01-29 13:55:41 +08:00
<span class="specialColor">{{ item.signUpCount }}</span>
2023-01-17 09:28:01 +08:00
<span>已报名</span>
</div>
<div class="times">
2023-01-29 14:06:30 +08:00
<span class="timesCont">{{ item.createTime }}</span>
2023-01-17 09:28:01 +08:00
</div>
2023-01-29 08:55:02 +08:00
<div class="areaName" v-if="item.areaName || item.address">{{ item.areaName }}{{ item.address }}</div>
2023-01-17 09:28:01 +08:00
</div>
2023-01-29 13:55:41 +08:00
<!-- <img :src="items.url" alt="" v-for="(items, index) in JSON.parse(item.url || '[]')" :key="index" @click.stop="previewImage(JSON.parse(item.url || '[]'), item.url[0].url)" />
2023-01-17 09:28:01 +08:00
2023-01-29 13:55:41 +08:00
<div class="hints" :style="{ background: item.status == 0 ? '#000000' : item.status == 1 ? '#42D784' : '#E4E4E4' }">{{ $dict.getLabel('villageActivityStatus', item.status) }}</div> -->
2023-01-17 09:28:01 +08:00
</template>
</AiCard>
</template>
<AiEmpty description="暂无数据" v-else></AiEmpty>
2023-01-29 14:06:30 +08:00
<div class="add-btn" @click="toCalendar">
<div>打卡</div>
</div>
<u-modal v-model="show" :show-cancel-button="true" @confirm="bindPhoneConfirm" @cancel="cancel">
<div class="item">
<span class="label"><span class="tips">*</span>手机号</span>
<div class="value">
<u-input type="tel" placeholder="请填写手机号" v-model="phone" input-align="right" placeholder-style="color:#999;font-size:15px;" height="42" :maxlength="11" :clearable="false" />
</div>
</div>
<!-- <div class="item">
<span class="label"><span class="tips">*</span>验证码</span>
<div class="value">
<u-input type="tel" placeholder="请填写验证码" v-model="form.code" input-align="right" placeholder-style="color:#999;font-size:15px;" height="42" :maxlength="6" :clearable="false" />
</div>
</div> -->
</u-modal>
2023-01-17 09:28:01 +08:00
</div>
</template>
<script>
import { mapState } from 'vuex'
export default {
name: 'AppWechatActivities',
2023-01-18 10:04:50 +08:00
appName: '运营活动',
2023-01-17 09:28:01 +08:00
data() {
return {
datas: [],
tabList: [{ name: '全部活动'}, { name: '报名中'}],
currentTabs: 0,
current: 1,
size: 6,
total: '',
2023-01-29 14:06:30 +08:00
show: false,
phone: ''
2023-01-17 09:28:01 +08:00
}
},
computed: {
...mapState(['user']),
},
watch: {},
onLoad() {
2023-01-29 14:06:30 +08:00
this.getList()
2023-01-17 09:28:01 +08:00
},
onShow() {
2023-01-18 10:04:50 +08:00
document.title = '运营活动'
2023-01-17 09:28:01 +08:00
},
methods: {
getList() {
2023-01-29 13:55:41 +08:00
this.$http.post('/app/appactivityinfo/listForWX', null, {
2023-01-17 10:09:16 +08:00
params: {
size: this.size,
current: this.current,
},
}).then((res) => {
if (res.code == 0) {
this.datas = this.current > 1 ? [...this.datas, ...res.data.records] : res.data.records
this.$forceUpdate()
this.total = res.data.total
this.pages = res.data.pages
}
})
2023-01-17 09:28:01 +08:00
},
toDetail(item) {
2023-01-29 13:55:41 +08:00
uni.navigateTo({ url: `./Detail?id=${item.id}` })
2023-01-17 09:28:01 +08:00
},
2023-01-29 14:06:30 +08:00
bindPhoneConfirm() {
if(!this.phone) {
return this.$u.toast('请输入手机号')
}
let regTel = /^1(3\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\d|9[0-35-9])\d{8}$/
if (!regTel.test(this.phone)) {
return this.$u.toast('请输入正确的手机号')
}
this.$http.post(`/appactivityinfo/bindPhone?phone=${this.phone}`).then((res) => {
if (res.code == 0) {
this.getUserInfo()
this.$u.toast('绑定成功')
}
})
},
cancel() {
this.phone = ''
this.show = false
},
getUserInfo () {
this.$http.post('/api/user/info').then(res => {
if (res.code === 0) {
this.$store.commit('setUser', res.data)
}
2023-01-17 09:28:01 +08:00
})
},
2023-01-29 14:06:30 +08:00
toCalendar() {
uni.navigateTo({url: './ActiveCalendar'})
}
2023-01-17 09:28:01 +08:00
},
onReachBottom() {
this.current = this.current + 1
this.getList()
},
}
</script>
<style scoped lang="scss">
uni-page-body {
height: 100%;
}
.AppActive {
height: 100%;
// background: #f3f6f9;
.dataTop {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 48px;
margin-bottom: 8px;
padding: 0 32px;
.dataLeft {
font-size: 38px;
font-weight: 600;
}
.dataRight {
font-size: 28px;
color: #666666;
.specialColor {
color: #4181ff;
}
}
}
::v-deep .AiCard {
background: #f3f6f9;
.start {
background: #fff;
padding: 32px;
border-radius: 16px;
.fill {
display: flex;
justify-content: space-between;
// align-items: center;
.left {
width: calc(100% - 205px);
// background: pink;
.titles {
margin-bottom: 8px;
color: #333333;
font-weight: 500;
font-size: 30px;
line-height: 1.3;
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.nums {
margin-top: 8px;
.specialColor {
color: #4181ff;
}
}
.times {
margin-top: 8px;
.timesCont {
margin-right: 10px;
}
}
2023-01-29 08:55:02 +08:00
.areaName {
2023-01-17 09:28:01 +08:00
margin-top: 8px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
img {
position: relative;
width: 182px;
height: 182px;
}
.hints {
position: absolute;
right: 52px;
width: 96px;
height: 44px;
font-size: 26px;
color: #ffffff;
line-height: 44px;
text-align: center;
}
}
}
}
2023-01-29 14:06:30 +08:00
.add-btn {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
box-sizing: border-box;
div {
width: 100%;
height: 100px;
background: #3975C6;
text-align: center;
line-height: 100px;
color: #fff;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 34px;
2023-01-17 09:28:01 +08:00
}
}
}
</style>