123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- import { CellGroup, Cell, Image, Button, Popup, List } from 'vant'
- import { defineComponent } from 'vue'
- import styles from './index.module.less'
- import award from './images/award.png'
- import cert from './images/cert.png'
- import request from '@/helpers/request'
- import ColResult from '@/components/col-result'
- import { state } from '@/state'
- import dayjs from 'dayjs'
- import ColPopup from '@/components/col-popup'
- import UserAuth from '../order-detail/userAuth'
- import ColHeader from '@/components/col-header'
- export default defineComponent({
- name: 'award-activity',
- data() {
- return {
- status: false,
- type: 'auth',
- list: [],
- dataShow: true, // 判断是否有数据
- loading: false,
- finished: false,
- params: {
- // receive: 2,
- page: 1,
- rows: 20
- },
- exists: false,
- popupShow: false,
- receiveRewardId: null as any
- }
- },
- // /student-server/activity/receiveRewardList 学生端查看未领奖列表接口
- // /student-server/activity/receiveReward/{receiveRewardId} 学生端领奖接口
- // /teacher-server/activity/receiveRewardList 老师端查看未领奖列表接口
- // /teacher-server/activity/receiveReward/{receiveRewardId} 学生端领奖接口
- async mounted() {
- this.getUserRegisterProtocol()
- this.getList()
- },
- methods: {
- async getUserRegisterProtocol() {
- // 获取是否签署过《用户注册协议》
- try {
- const res = await request.get(
- state.platformApi + '/sysUserContractRecord/checkContractSign',
- {
- params: {
- contractType: 'REGISTER'
- }
- }
- )
- this.exists = res.data
- } catch {
- //
- }
- },
- async onGetAward() {
- try {
- const users = state.user.data
- // 判断是否需要实名认证, 姓名,卡号,是否签协议
- if (!users?.realName || !users?.idCardNo || !this.exists) {
- this.status = true
- this.type = 'auth'
- return
- }
- await request.post(
- `${state.platformApi}/activity/receiveReward/${this.receiveRewardId}`
- )
- this.status = true
- this.type = 'success'
- this.receiveRewardId = null
- } catch {
- //
- }
- },
- async onAuthSuccess() {
- this.popupShow = false
- this.status = false
- await this.getUserRegisterProtocol()
- this.onGetAward()
- },
- async getList() {
- try {
- const params = this.params
- const res = await request.post(
- `${state.platformApi}/activity/receiveRewardList`,
- {
- data: {
- ...params
- }
- }
- )
- this.loading = false
- const result = res.data || {}
- // 处理重复请求数据
- if (this.list.length > 0 && result.pageNo === 1) {
- return
- }
- this.list = this.list.concat(result.rows || [])
- this.finished = result.pageNo >= result.totalPage
- this.params.page = result.pageNo + 1
- this.dataShow = this.list.length > 0
- } catch {
- this.dataShow = false
- this.finished = true
- }
- }
- },
- render() {
- return (
- <div class={styles.award}>
- <ColHeader />
- {this.dataShow ? (
- <List
- class={styles.videoList}
- v-model:loading={this.loading}
- finished={this.finished}
- finishedText=" "
- immediateCheck={false}
- onLoad={this.getList}
- >
- {this.list.map((item: any) => (
- <CellGroup inset class={styles.cellGroup}>
- <Cell
- v-slots={{
- icon: () => (
- <Image src={item.imgUrl} class={styles.image} />
- ),
- title: () => (
- <div class={styles.title}>{item.rewardName}</div>
- ),
- label: () => (
- <div class={styles.label}>{item.rewardDescribe}</div>
- )
- }}
- />
- <Cell
- center
- title={`获奖时间:${dayjs(item.winningTime).format(
- 'YYYY-MM-DD'
- )}`}
- titleClass={styles.cellTitle}
- v-slots={{
- value: () => (
- <Button
- color="linear-gradient(180deg, #FF8636 0%, #FF4E19 100%)"
- size="small"
- class={styles.button}
- onClick={() => {
- this.receiveRewardId = item.receiveRewardId
- this.onGetAward()
- }}
- >
- 立即领取
- </Button>
- )
- }}
- />
- </CellGroup>
- ))}
- </List>
- ) : (
- <ColResult btnStatus={false} classImgSize="SMALL" tips="暂无数据" />
- )}
- <Popup v-model:show={this.status} class={styles.popup}>
- <div class={styles.popupContainer}>
- {this.type === 'auth' && (
- <>
- <Image src={cert} class={styles.cert} />
- <h3>您还没有实名认证</h3>
- <p>完成实名认证后即可领取奖品</p>
- <div class={[styles.btnGroup, styles.btnMore]}>
- <Button
- type="primary"
- block
- class={styles.lastBtn}
- onClick={() => {
- this.status = false
- }}
- >
- 以后再说
- </Button>
- <Button
- type="primary"
- block
- color="linear-gradient(180deg, #59E5D5 0%, #2DC7AA 100%)"
- onClick={() => {
- this.popupShow = true
- }}
- >
- 立即认证
- </Button>
- </div>
- </>
- )}
- {this.type === 'success' && (
- <>
- <Image src={award} class={styles.award} />
- <h3>奖品领取成功!</h3>
- <p>请耐心等待,活动奖品将会到达~</p>
- <div class={[styles.btnGroup]}>
- <Button
- type="primary"
- block
- color="linear-gradient(180deg, #59E5D5 0%, #2DC7AA 100%)"
- onClick={() => {
- this.status = false
- this.list = []
- this.params.page = 1
- this.getList()
- }}
- >
- 我知道了
- </Button>
- </div>
- </>
- )}
- </div>
- </Popup>
- <ColPopup v-model={this.popupShow}>
- <UserAuth exists={this.exists} onSuccess={this.onAuthSuccess} />
- </ColPopup>
- </div>
- )
- }
- })
|