|
@@ -1,949 +0,0 @@
|
|
|
-<template>
|
|
|
|
|
- <main-layout>
|
|
|
|
|
- <!-- 用户信息区 -->
|
|
|
|
|
- <view class="user-info">
|
|
|
|
|
- <span class="nickname" v-if="!userInfoStore.isLogin" @click="goUserInfoPage">登录</span>
|
|
|
|
|
- <view class="user-icon" v-if="userInfoStore.isLogin">
|
|
|
|
|
- <uni-icons type="person" size="30"></uni-icons>
|
|
|
|
|
- </view>
|
|
|
|
|
- <span class="nickname" v-if="userInfoStore.isLogin" @click="goUserInfoPage">{{ userInfoStore.nickname
|
|
|
|
|
- }}</span>
|
|
|
|
|
- <span class="user-btn" v-if="userInfoStore.isLogin" @click="goUserInfoPage">用户中心</span>
|
|
|
|
|
- </view>
|
|
|
|
|
-
|
|
|
|
|
- <!-- 结算 -->
|
|
|
|
|
- <view class="settle-container">
|
|
|
|
|
- <!-- 刮刮乐、奖励数相关区域 -->
|
|
|
|
|
- <view class="left-box">
|
|
|
|
|
- <view class="split-box">
|
|
|
|
|
- <view class="line-box">
|
|
|
|
|
- <span>投入</span>
|
|
|
|
|
- <span class="number-box" @click="addScratchRecord(SCRATCH_ACTION_TYPE_INVEST)">
|
|
|
|
|
- ¥{{ userInfo.lotteryInvestAmount }}
|
|
|
|
|
- <uni-icons type="compose" color="#FFFFFF"></uni-icons>
|
|
|
|
|
- </span>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view class="under-line-box">
|
|
|
|
|
- <span>产出</span>
|
|
|
|
|
- <span class="number-box" @click="addScratchRecord(SCRATCH_ACTION_TYPE_WIN)">
|
|
|
|
|
- ¥{{ userInfo.lotteryWinAmount }}
|
|
|
|
|
- <uni-icons type="compose" color="#FFFFFF"></uni-icons>
|
|
|
|
|
- </span>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view class="split-box">
|
|
|
|
|
- <view class="line-box">
|
|
|
|
|
- <span>已领取</span>
|
|
|
|
|
- <span class="number-box">{{ userInfo.claimedRewardNum }}</span>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view class="under-line-box">
|
|
|
|
|
- <span>总奖励</span>
|
|
|
|
|
- <span class="number-box">{{ userInfo.totalRewardNum }}</span>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
- <!-- 待领取奖励区 -->
|
|
|
|
|
- <view class="right-box">
|
|
|
|
|
- <view class="reward-title">待领取奖励数</view>
|
|
|
|
|
- <view class="reward-num">{{ userInfo.unclaimedRewardNum }}</view>
|
|
|
|
|
- <view class="reward-btn-group">
|
|
|
|
|
- <view class="reward-btn reward-btn-left" @click="claimReward('all')">全部领取</view>
|
|
|
|
|
- <view class="reward-btn reward-btn-right" @click="claimReward('part')">部分领取</view>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
- <!-- 刷新按钮 -->
|
|
|
|
|
- <view class="refresh-btn" @click="getUserInfo">
|
|
|
|
|
- <uni-icons type="refreshempty" color="#406CE7"></uni-icons>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
-
|
|
|
|
|
- <!-- 打卡任务 -->
|
|
|
|
|
- <view class="task-container">
|
|
|
|
|
- <view class="task-header">
|
|
|
|
|
- <view class="task-title" v-if="punchIns.length && punchIns.length > 0">任务({{ punchIns.length }}个)
|
|
|
|
|
- </view>
|
|
|
|
|
- <view class="task-title" v-else>任务</view>
|
|
|
|
|
- <view class="task-add-btn" @click="goPunchInEditPage">
|
|
|
|
|
- <uni-icons type="plusempty" size="30" color="#406CE7"></uni-icons>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view class="task-item" v-for="punchIn in punchIns" :key="punchIn.punchInId">
|
|
|
|
|
- <view class="main-box" @click="goPunchInDetailPage(punchIn.punchInId)">
|
|
|
|
|
- <view class="item-header">
|
|
|
|
|
- <span class="item-title">{{ punchIn.taskName }}</span>
|
|
|
|
|
- <span class="item-reward">x{{ punchIn.rewardNum }}</span>
|
|
|
|
|
- <view class="item-tag" v-if="punchIn.fullAttendanceFlag">全勤奖励</view>
|
|
|
|
|
- <view class="item-tag" v-if="punchIn.weekendDoubleFlag">周末双倍</view>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view class="item-desc" v-if="punchIn.category == 1 || punchIn.category == 2">
|
|
|
|
|
- <span v-if="punchIn.category == 1">规则:打卡次数</span>
|
|
|
|
|
- <span v-if="punchIn.category == 2">规则:计时时间</span>
|
|
|
|
|
- <dict-item :dictCode="dictConst.PUNCH_IN_RULE" :itemCode="punchIn.rule"></dict-item>
|
|
|
|
|
- <span v-if="punchIn.category == 1">{{ punchIn.countTrack }}次</span>
|
|
|
|
|
- <span v-if="punchIn.category == 2">{{ punchIn.timeTrack.slice(0, 5) }}</span>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view class="item-desc">
|
|
|
|
|
- 描述:{{ punchIn.description }}
|
|
|
|
|
- </view>
|
|
|
|
|
- <view class="item-detail-list">
|
|
|
|
|
- <view class="item-detail" v-for="punchInRecord in punchIn.punchInRecords"
|
|
|
|
|
- :key="punchInRecord.punchInDate">
|
|
|
|
|
- <view class="detail-text">
|
|
|
|
|
- <uni-dateformat :date="punchInRecord.punchInDate" format="M/d"></uni-dateformat>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view class="detail-box" style="background-color: #E5E5E5;"
|
|
|
|
|
- v-if="punchInRecord.punchInStatus == 'uncreated'"></view>
|
|
|
|
|
- <view class="detail-box" style="background-color: #A5D63F;"
|
|
|
|
|
- v-if="punchInRecord.punchInStatus == 'punchIn'"></view>
|
|
|
|
|
- <view class="detail-box" style="background-color: #D43030;"
|
|
|
|
|
- v-if="punchInRecord.punchInStatus == 'unPunchIn'"></view>
|
|
|
|
|
- <view class="detail-box"
|
|
|
|
|
- v-if="punchInRecord.punchInStatus == 'futureTime' || punchInRecord.punchInStatus == 'todayUnknown'">
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view
|
|
|
|
|
- :class="punchIn.punchInStatus == 'punchIn' ? 'func-box func-box-finish' : 'func-box func-box-unfinish'"
|
|
|
|
|
- v-if="punchIn.category == 0" @click="doPunchIn(punchIn.punchInId)">
|
|
|
|
|
- <span
|
|
|
|
|
- v-if="punchIn.punchInStatus == 'unPunchIn' || punchIn.punchInStatus == 'todayUnknown'">打卡</span>
|
|
|
|
|
- <span v-else>已完成</span>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view
|
|
|
|
|
- :class="punchIn.punchInStatus == 'punchIn' ? 'func-box func-box-finish' : 'func-box func-box-unfinish'"
|
|
|
|
|
- v-if="punchIn.category == 1" @click="doPunchIn(punchIn.punchInId)">
|
|
|
|
|
- <span>{{ punchIn.recordCountTrack }}</span>
|
|
|
|
|
- <span>计数</span>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view
|
|
|
|
|
- :class="punchIn.punchInStatus == 'punchIn' ? 'func-box func-box-finish' : 'func-box func-box-unfinish'"
|
|
|
|
|
- v-if="punchIn.category == 2" @click="doPunchInForTimeTrack(punchIn.punchInId, punchIn.timeTrack)">
|
|
|
|
|
- <span>
|
|
|
|
|
- {{ punchIn.recordTimeTrack.slice(0, 5) }}
|
|
|
|
|
- </span>
|
|
|
|
|
- <span>计时</span>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
-
|
|
|
|
|
- <uni-load-more status="no-more" v-if="!punchIns || punchIns.length == 0" />
|
|
|
|
|
- </view>
|
|
|
|
|
-
|
|
|
|
|
- <!-- 刮刮乐弹出框 -->
|
|
|
|
|
- <uni-popup ref="scratchInputDialog" type="dialog" :is-mask-click="false">
|
|
|
|
|
- <uni-popup-dialog mode="input" :before-close="true"
|
|
|
|
|
- :title="scratchFormData.actionType == SCRATCH_ACTION_TYPE_INVEST ? '投入金额' : '中奖金额'" confirmText="保存"
|
|
|
|
|
- @confirm="scratchFormConfirm" @close="scratchFormClose">
|
|
|
|
|
- <view style="width: 100%;">
|
|
|
|
|
- <uni-forms ref="scratchForm" :modelValue="scratchFormData" :rules="scratchFormRules"
|
|
|
|
|
- label-position="top" :label-width="150">
|
|
|
|
|
- <uni-forms-item label="刮刮乐来源" name="source" required>
|
|
|
|
|
- <uni-data-select :localdata="dictStore.LOTTERY_SCRATCH_SOURCE"
|
|
|
|
|
- v-model="scratchFormData.source"></uni-data-select>
|
|
|
|
|
- </uni-forms-item>
|
|
|
|
|
- <uni-forms-item label="刮刮乐种类" name="category" required>
|
|
|
|
|
- <uni-data-select :localdata="dictStore[scratchFormData.source]"
|
|
|
|
|
- v-model="scratchFormData.category"></uni-data-select>
|
|
|
|
|
- </uni-forms-item>
|
|
|
|
|
- <uni-forms-item
|
|
|
|
|
- :label="scratchFormData.actionType == SCRATCH_ACTION_TYPE_INVEST ? '投入金额' : '中奖金额'"
|
|
|
|
|
- name="amount" required>
|
|
|
|
|
- <uni-easyinput type="digit" placeholder="请输入金额"
|
|
|
|
|
- v-model="scratchFormData.amount"></uni-easyinput>
|
|
|
|
|
- </uni-forms-item>
|
|
|
|
|
- </uni-forms>
|
|
|
|
|
- </view>
|
|
|
|
|
- </uni-popup-dialog>
|
|
|
|
|
- </uni-popup>
|
|
|
|
|
-
|
|
|
|
|
- <!-- 领取奖励弹出框 -->
|
|
|
|
|
- <uni-popup ref="claimRewardInputDialog" type="dialog" :is-mask-click="false">
|
|
|
|
|
- <uni-popup-dialog mode="input" :before-close="true" title="领取奖励" confirmText="领取"
|
|
|
|
|
- @confirm="claimRewardFormConfirm" @close="claimRewardFormClose">
|
|
|
|
|
- <view style="width: 100%;">
|
|
|
|
|
- <uni-forms ref="claimRewardForm" :modelValue="claimRewardFormData" :rules="claimRewardFormRules"
|
|
|
|
|
- label-position="top" :label-width="150">
|
|
|
|
|
- <uni-forms-item name="claimRewardNum">
|
|
|
|
|
- <uni-easyinput type="digit" placeholder="请输入领取的奖励数"
|
|
|
|
|
- v-model="claimRewardFormData.claimRewardNum"></uni-easyinput>
|
|
|
|
|
- </uni-forms-item>
|
|
|
|
|
- </uni-forms>
|
|
|
|
|
- </view>
|
|
|
|
|
- </uni-popup-dialog>
|
|
|
|
|
- </uni-popup>
|
|
|
|
|
-
|
|
|
|
|
- <!-- 计时弹出框 -->
|
|
|
|
|
- <uni-popup ref="timeTrackInputDialog" type="dialog" :is-mask-click="false">
|
|
|
|
|
- <uni-popup-dialog mode="input" :before-close="true" title="计时记录" confirmText="保存"
|
|
|
|
|
- @confirm="timeTrackFormConfirm" @close="timeTrackFormClose">
|
|
|
|
|
- <view class="pick-box" @click="timeTrackClick">
|
|
|
|
|
- <picker mode="time" :value="timeTrackFormData.timeTrack" @change="timeTrackChange">
|
|
|
|
|
- <view class="pick-box-time">{{ timeTrackFormData.timeTrack }}</view>
|
|
|
|
|
- </picker>
|
|
|
|
|
- </view>
|
|
|
|
|
- <view style="display: none;">
|
|
|
|
|
- <uni-forms ref="timeTrackForm" :modelValue="timeTrackFormData" :rules="timeTrackFormRules">
|
|
|
|
|
- <uni-forms-item name="timeTrack">
|
|
|
|
|
- <uni-easyinput v-model="timeTrackFormData.timeTrack" />
|
|
|
|
|
- </uni-forms-item>
|
|
|
|
|
- </uni-forms>
|
|
|
|
|
- </view>
|
|
|
|
|
- </uni-popup-dialog>
|
|
|
|
|
- </uni-popup>
|
|
|
|
|
- </main-layout>
|
|
|
|
|
-</template>
|
|
|
|
|
-
|
|
|
|
|
-<script setup>
|
|
|
|
|
-import { ref } from 'vue';
|
|
|
|
|
-import { onPullDownRefresh, onShow } from "@dcloudio/uni-app";
|
|
|
|
|
-import { rewardApi, punchInApi, userApi, scratchApi } from '@/service/apis.js';
|
|
|
|
|
-import router from '@/common/constants/router.js';
|
|
|
|
|
-import { SCRATCH_ACTION_TYPE_INVEST, SCRATCH_ACTION_TYPE_WIN } from '@/common/constants/scratch';
|
|
|
|
|
-import { useUserInfoStore } from '@/stores/userInfo.js';
|
|
|
|
|
-import { useDictStore } from '@/stores/dict';
|
|
|
|
|
-import dictConst from '@/common/constants/dict.js';
|
|
|
|
|
-
|
|
|
|
|
-// 组件
|
|
|
|
|
-/**
|
|
|
|
|
- * 刮刮乐弹出框
|
|
|
|
|
- */
|
|
|
|
|
-const scratchInputDialog = ref(null);
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 刮刮乐表单
|
|
|
|
|
- */
|
|
|
|
|
-const scratchForm = ref(null);
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 领取奖励弹出框
|
|
|
|
|
- */
|
|
|
|
|
-const claimRewardInputDialog = ref(null);
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 领取奖励表单
|
|
|
|
|
- */
|
|
|
|
|
-const claimRewardForm = ref(null);
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 计时弹出框
|
|
|
|
|
- */
|
|
|
|
|
-const timeTrackInputDialog = ref(null);
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 计时表单
|
|
|
|
|
- */
|
|
|
|
|
-const timeTrackForm = ref(null);
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-// 属性
|
|
|
|
|
-/**
|
|
|
|
|
- * 字典信息
|
|
|
|
|
- */
|
|
|
|
|
-const dictStore = useDictStore();
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 用户信息
|
|
|
|
|
- */
|
|
|
|
|
-const userInfoStore = useUserInfoStore();
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 用户信息
|
|
|
|
|
- */
|
|
|
|
|
-const userInfo = ref({
|
|
|
|
|
- totalRewardNum: 0,
|
|
|
|
|
- unclaimedRewardNum: 0,
|
|
|
|
|
- claimedRewardNum: 0,
|
|
|
|
|
- lotteryInvestAmount: 0.00,
|
|
|
|
|
- lotteryWinAmount: 0.00
|
|
|
|
|
-});
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 打卡任务
|
|
|
|
|
- */
|
|
|
|
|
-const punchIns = ref([]);
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 刮刮乐表单数
|
|
|
|
|
- */
|
|
|
|
|
-const scratchFormData = ref({});
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 刮刮乐表单校验规则
|
|
|
|
|
- */
|
|
|
|
|
-const scratchFormRules = ref({
|
|
|
|
|
- "source": {
|
|
|
|
|
- rules: [{
|
|
|
|
|
- required: true,
|
|
|
|
|
- errorMessage: "请选择来源"
|
|
|
|
|
- }]
|
|
|
|
|
- },
|
|
|
|
|
- "category": {
|
|
|
|
|
- rules: [{
|
|
|
|
|
- required: true,
|
|
|
|
|
- errorMessage: "请选择种类"
|
|
|
|
|
- }]
|
|
|
|
|
- },
|
|
|
|
|
- "amount": {
|
|
|
|
|
- rules: [{
|
|
|
|
|
- required: true,
|
|
|
|
|
- errorMessage: "请输入金额"
|
|
|
|
|
- }, {
|
|
|
|
|
- format: 'number',
|
|
|
|
|
- errorMessage: "请输入有效数字"
|
|
|
|
|
- }, {
|
|
|
|
|
- minimum: 0.01,
|
|
|
|
|
- errorMessage: "最小{minimum}元"
|
|
|
|
|
- }]
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-});
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 领取奖励表单数据
|
|
|
|
|
- */
|
|
|
|
|
-const claimRewardFormData = ref({
|
|
|
|
|
- claimRewardNum: 1
|
|
|
|
|
-});
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 领取奖励表单规则
|
|
|
|
|
- */
|
|
|
|
|
-const claimRewardFormRules = ref({
|
|
|
|
|
- claimRewardNum: {
|
|
|
|
|
- rules: [{
|
|
|
|
|
- required: true,
|
|
|
|
|
- errorMessage: "请输入领取的奖励数"
|
|
|
|
|
- }, {
|
|
|
|
|
- format: 'number',
|
|
|
|
|
- errorMessage: "请输入有效数字"
|
|
|
|
|
- }, {
|
|
|
|
|
- minimum: 1,
|
|
|
|
|
- errorMessage: "最少领取{minimum}个"
|
|
|
|
|
- }]
|
|
|
|
|
- }
|
|
|
|
|
-});
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 计时表单数据
|
|
|
|
|
- */
|
|
|
|
|
-const timeTrackFormData = ref({
|
|
|
|
|
- timeTrack: '00:00'
|
|
|
|
|
-});
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 计时表单规则
|
|
|
|
|
- */
|
|
|
|
|
-const timeTrackFormRules = ref({
|
|
|
|
|
- timeTrack: {
|
|
|
|
|
- rules: [{
|
|
|
|
|
- required: true,
|
|
|
|
|
- errorMessage: "请输入时间"
|
|
|
|
|
- }]
|
|
|
|
|
- }
|
|
|
|
|
-});
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-// 方法
|
|
|
|
|
-/**
|
|
|
|
|
- * 获取用户信息
|
|
|
|
|
- */
|
|
|
|
|
-const getUserInfo = async () => {
|
|
|
|
|
- let res = await userApi.queryUserInfo();
|
|
|
|
|
- userInfo.value = res;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 获取打卡
|
|
|
|
|
- */
|
|
|
|
|
-const getPunchIns = async () => {
|
|
|
|
|
- let res = await punchInApi.queryPunchIns();
|
|
|
|
|
- punchIns.value = res;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 增加刮刮乐记录
|
|
|
|
|
- */
|
|
|
|
|
-const addScratchRecord = async (e) => {
|
|
|
|
|
- // 重置上一轮的表单数据
|
|
|
|
|
- scratchFormData.value = {
|
|
|
|
|
- actionType: e
|
|
|
|
|
- };
|
|
|
|
|
- scratchInputDialog.value.open();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 刮刮乐表单提交
|
|
|
|
|
- */
|
|
|
|
|
-const scratchFormConfirm = async () => {
|
|
|
|
|
- scratchForm.value.validate(['actionType']).then(data => {
|
|
|
|
|
- return scratchApi.addScratchRecord(data);
|
|
|
|
|
- }).then(e => {
|
|
|
|
|
- scratchInputDialog.value.close();
|
|
|
|
|
- getUserInfo();
|
|
|
|
|
- });
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 刮刮乐表单取消
|
|
|
|
|
- */
|
|
|
|
|
-const scratchFormClose = async () => {
|
|
|
|
|
- scratchInputDialog.value.close();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 领取奖励(部分)
|
|
|
|
|
- * @param {String} claimType 部分领取或全部领取(part-部分/all-全部)
|
|
|
|
|
- */
|
|
|
|
|
-const claimReward = (claimType) => {
|
|
|
|
|
- if (userInfo.value.unclaimedRewardNum == 0) {
|
|
|
|
|
- uni.showToast({
|
|
|
|
|
- title: "没有可领取的奖励",
|
|
|
|
|
- icon: "none"
|
|
|
|
|
- });
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- // 重置上一轮的表单数据
|
|
|
|
|
- claimRewardFormData.value = {
|
|
|
|
|
- claimRewardNum: claimType == 'part' ? 1 : userInfo.value.unclaimedRewardNum
|
|
|
|
|
- };
|
|
|
|
|
- claimRewardInputDialog.value.open();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 领取奖励表单提交
|
|
|
|
|
- */
|
|
|
|
|
-const claimRewardFormConfirm = async () => {
|
|
|
|
|
- claimRewardForm.value.validate().then(data => {
|
|
|
|
|
- return rewardApi.claimReward(data);
|
|
|
|
|
- }).then(e => {
|
|
|
|
|
- claimRewardInputDialog.value.close();
|
|
|
|
|
- getUserInfo();
|
|
|
|
|
- });
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 领取奖励表单取消
|
|
|
|
|
- */
|
|
|
|
|
-const claimRewardFormClose = async () => {
|
|
|
|
|
- claimRewardInputDialog.value.close();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 确认领取奖励
|
|
|
|
|
- */
|
|
|
|
|
-const claimRewardConfirm = async (val) => {
|
|
|
|
|
- await rewardApi.claimReward({
|
|
|
|
|
- "claimRewardNum": val
|
|
|
|
|
- });
|
|
|
|
|
- // getReward();
|
|
|
|
|
- claimRewardDialog.value.close();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 计时时间选择监听
|
|
|
|
|
- */
|
|
|
|
|
-const timeTrackChange = (e) => {
|
|
|
|
|
- timeTrackFormData.value.timeTrack = e.detail.value;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 打卡(计时)
|
|
|
|
|
- */
|
|
|
|
|
-const doPunchInForTimeTrack = (id, timeTrack) => {
|
|
|
|
|
- // 重置上一轮的表单数据
|
|
|
|
|
- timeTrackFormData.value = {
|
|
|
|
|
- id,
|
|
|
|
|
- timeTrack: timeTrack ? timeTrack.slice(0, 5) : '00:00'
|
|
|
|
|
- };
|
|
|
|
|
- timeTrackInputDialog.value.open();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 计时表单提交
|
|
|
|
|
- */
|
|
|
|
|
-const timeTrackFormConfirm = async () => {
|
|
|
|
|
- timeTrackForm.value.validate(['id']).then(data => {
|
|
|
|
|
- return punchInApi.doPunchIn(data);
|
|
|
|
|
- }).then(e => {
|
|
|
|
|
- timeTrackInputDialog.value.close();
|
|
|
|
|
- getPunchIns();
|
|
|
|
|
- });
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 刮刮乐表单取消
|
|
|
|
|
- */
|
|
|
|
|
-const timeTrackFormClose = async () => {
|
|
|
|
|
- timeTrackInputDialog.value.close();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 打卡
|
|
|
|
|
- */
|
|
|
|
|
-const doPunchIn = async (id) => {
|
|
|
|
|
- await punchInApi.doPunchIn({
|
|
|
|
|
- id
|
|
|
|
|
- });
|
|
|
|
|
- getPunchIns();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 跳转用户用心
|
|
|
|
|
- */
|
|
|
|
|
-const goUserInfoPage = () => {
|
|
|
|
|
- uni.navigateTo({
|
|
|
|
|
- url: router.USER_INFO_URL
|
|
|
|
|
- });
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 跳转打卡编辑页面
|
|
|
|
|
- */
|
|
|
|
|
-const goPunchInEditPage = () => {
|
|
|
|
|
- uni.navigateTo({
|
|
|
|
|
- url: router.PUNCHIN_EDIT_URL
|
|
|
|
|
- });
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 跳转打卡详情页面
|
|
|
|
|
- */
|
|
|
|
|
-const goPunchInDetailPage = (id) => {
|
|
|
|
|
- uni.navigateTo({
|
|
|
|
|
- url: router.PUNCHIN_DETAIL_URL + "?id=" + id
|
|
|
|
|
- });
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * 加载数据
|
|
|
|
|
- */
|
|
|
|
|
-const loadData = async () => {
|
|
|
|
|
- // 如果还没登录就结束获取数据
|
|
|
|
|
- if (!userInfoStore.isLogin) {
|
|
|
|
|
- userInfo.value = {
|
|
|
|
|
- totalRewardNum: 0,
|
|
|
|
|
- unclaimedRewardNum: 0,
|
|
|
|
|
- claimedRewardNum: 0,
|
|
|
|
|
- lotteryInvestAmount: 0.00,
|
|
|
|
|
- lotteryWinAmount: 0.00
|
|
|
|
|
- };
|
|
|
|
|
- punchIns.value = [];
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 已登录
|
|
|
|
|
- try {
|
|
|
|
|
- uni.showLoading({
|
|
|
|
|
- title: '加载中',
|
|
|
|
|
- mask: true
|
|
|
|
|
- });
|
|
|
|
|
- // 获取用户信息
|
|
|
|
|
- getUserInfo();
|
|
|
|
|
- // 获取打卡
|
|
|
|
|
- getPunchIns();
|
|
|
|
|
- // 刷新字典
|
|
|
|
|
- dictStore.refresh();
|
|
|
|
|
- } finally {
|
|
|
|
|
- uni.hideLoading();
|
|
|
|
|
- }
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-onShow(() => {
|
|
|
|
|
- loadData();
|
|
|
|
|
-});
|
|
|
|
|
-
|
|
|
|
|
-onPullDownRefresh(() => {
|
|
|
|
|
- loadData();
|
|
|
|
|
- uni.stopPullDownRefresh();
|
|
|
|
|
-});
|
|
|
|
|
-</script>
|
|
|
|
|
-
|
|
|
|
|
-<style lang="scss" scoped>
|
|
|
|
|
-.user-info {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- position: relative;
|
|
|
|
|
-
|
|
|
|
|
- .user-icon {
|
|
|
|
|
- display: inline-flex !important;
|
|
|
|
|
-
|
|
|
|
|
- width: 72rpx;
|
|
|
|
|
- height: 72rpx;
|
|
|
|
|
- background: #FFFFFF;
|
|
|
|
|
- border-radius: 50%;
|
|
|
|
|
-
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .nickname {
|
|
|
|
|
- margin-left: 16rpx;
|
|
|
|
|
- font-size: 24rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- line-height: 34.75rpx;
|
|
|
|
|
- color: #000000;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .user-btn {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- right: 0px;
|
|
|
|
|
-
|
|
|
|
|
- width: 122rpx;
|
|
|
|
|
- height: 40rpx;
|
|
|
|
|
- opacity: 1;
|
|
|
|
|
- border-radius: 24rpx;
|
|
|
|
|
- background: #FFFFFF;
|
|
|
|
|
- border: 1px solid #406CE7;
|
|
|
|
|
-
|
|
|
|
|
- /** 文本1 */
|
|
|
|
|
- font-size: 18rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- line-height: 26.06rpx;
|
|
|
|
|
- color: #406CE7;
|
|
|
|
|
-
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-.settle-container {
|
|
|
|
|
- margin-top: 16rpx;
|
|
|
|
|
- display: flex;
|
|
|
|
|
-
|
|
|
|
|
- padding: 16rpx 24rpx;
|
|
|
|
|
- height: 266rpx;
|
|
|
|
|
-
|
|
|
|
|
- opacity: 1;
|
|
|
|
|
- background: #406CE7;
|
|
|
|
|
- border-radius: 21.35rpx;
|
|
|
|
|
- border: 0.5px solid #E4E4E4;
|
|
|
|
|
- box-shadow: 0px 1px 6px #D8D8D8;
|
|
|
|
|
-
|
|
|
|
|
- position: relative;
|
|
|
|
|
-
|
|
|
|
|
- .left-box {
|
|
|
|
|
- flex: 1;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- flex-direction: column;
|
|
|
|
|
-
|
|
|
|
|
- border-right: 1px solid #FFFFFF;
|
|
|
|
|
- padding-right: 24rpx;
|
|
|
|
|
- font-size: 22rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- line-height: 31.86rpx;
|
|
|
|
|
- color: #FFFFFF;
|
|
|
|
|
-
|
|
|
|
|
- .line-box {
|
|
|
|
|
- padding-bottom: 16rpx;
|
|
|
|
|
- border-bottom: 1px solid #FFFFFF;
|
|
|
|
|
- position: relative;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .under-line-box {
|
|
|
|
|
- padding-top: 16rpx;
|
|
|
|
|
- position: relative;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .number-box {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- right: 0px;
|
|
|
|
|
- text-align: right;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .split-box {
|
|
|
|
|
- flex: 1;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- align-content: center;
|
|
|
|
|
- flex-direction: column;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .right-box {
|
|
|
|
|
- flex: 2;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- flex-direction: column;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
-
|
|
|
|
|
- .reward-title {
|
|
|
|
|
- font-size: 26rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- line-height: 37.65rpx;
|
|
|
|
|
- color: #FFFFFF;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .reward-num {
|
|
|
|
|
- flex-grow: 1;
|
|
|
|
|
- font-size: 110rpx;
|
|
|
|
|
- font-weight: 700;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- color: #FFFFFF;
|
|
|
|
|
-
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .reward-btn-group {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 36rpx;
|
|
|
|
|
-
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
-
|
|
|
|
|
- .reward-btn {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- width: 108rpx;
|
|
|
|
|
- height: 36rpx;
|
|
|
|
|
- opacity: 1;
|
|
|
|
|
- background: #FFFFFF;
|
|
|
|
|
- font-size: 20rpx;
|
|
|
|
|
- font-weight: 700;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- line-height: 28.96rpx;
|
|
|
|
|
- color: #406CE7;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .reward-btn-left {
|
|
|
|
|
- border-radius: 24rpx 0rpx 0rpx 24rpx;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .reward-btn-right {
|
|
|
|
|
- border-radius: 0rpx 24rpx 24rpx 0rpx;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .refresh-btn {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- top: 16rpx;
|
|
|
|
|
- right: 24rpx;
|
|
|
|
|
- border-radius: 50%;
|
|
|
|
|
-
|
|
|
|
|
- width: 36rpx;
|
|
|
|
|
- height: 36rpx;
|
|
|
|
|
- opacity: 1;
|
|
|
|
|
- background: #F7F7F7;
|
|
|
|
|
-
|
|
|
|
|
- display: flex;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-.task-container {
|
|
|
|
|
- margin-top: 16rpx;
|
|
|
|
|
-
|
|
|
|
|
- .task-header {
|
|
|
|
|
- position: relative;
|
|
|
|
|
- height: 80rpx;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- /* 水平居中 */
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- /* 垂直居中 */
|
|
|
|
|
-
|
|
|
|
|
- .task-title {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- left: 0rpx;
|
|
|
|
|
- font-size: 30rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- line-height: 43.44rpx;
|
|
|
|
|
- color: rgba(0, 0, 0, 1);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .task-add-btn {
|
|
|
|
|
- display: inline-flex;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- right: 0rpx;
|
|
|
|
|
- width: 60rpx;
|
|
|
|
|
- height: 60rpx;
|
|
|
|
|
- border-radius: 10rpx;
|
|
|
|
|
- border: 3px solid rgba(64, 108, 231, 1);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .task-item {
|
|
|
|
|
- margin-top: 16rpx;
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- // height: 239rpx;
|
|
|
|
|
- border-radius: 24rpx;
|
|
|
|
|
- background: #FFFFFF;
|
|
|
|
|
- border: 0.5px solid #E4E4E4;
|
|
|
|
|
- box-shadow: 0px 1px 6px #D8D8D8;
|
|
|
|
|
-
|
|
|
|
|
- display: flex;
|
|
|
|
|
-
|
|
|
|
|
- .main-box {
|
|
|
|
|
- flex-grow: 1;
|
|
|
|
|
- padding: 16rpx 16rpx 16rpx 24rpx;
|
|
|
|
|
-
|
|
|
|
|
- .item-header {
|
|
|
|
|
- // position: relative;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
-
|
|
|
|
|
- .item-title {
|
|
|
|
|
- font-size: 30rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- line-height: 43.44rpx;
|
|
|
|
|
- color: #000000;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .item-reward {
|
|
|
|
|
- margin-left: 8rpx;
|
|
|
|
|
- font-size: 24rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- line-height: 34.75rpx;
|
|
|
|
|
- color: #000000;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .item-tag:first-child {
|
|
|
|
|
- margin-left: 24rpx;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .item-tag {
|
|
|
|
|
- margin-left: 16rpx;
|
|
|
|
|
- width: 94rpx;
|
|
|
|
|
- height: 38rpx;
|
|
|
|
|
- opacity: 1;
|
|
|
|
|
- border-radius: 24rpx;
|
|
|
|
|
- background: #FFFFFF;
|
|
|
|
|
- border: 1px solid #406CE7;
|
|
|
|
|
-
|
|
|
|
|
- display: inline-flex;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
-
|
|
|
|
|
- font-size: 18rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- // line-height: 26.06rpx;
|
|
|
|
|
- color: #406CE7;
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .item-btn {
|
|
|
|
|
- display: inline-flex;
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- right: 0rpx;
|
|
|
|
|
- width: 123rpx;
|
|
|
|
|
- height: 42rpx;
|
|
|
|
|
- border-radius: 30rpx;
|
|
|
|
|
- border: 1rpx solid #2A82E4;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
-
|
|
|
|
|
- font-size: 20rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- line-height: 28.96px;
|
|
|
|
|
- color: rgba(64, 108, 231, 1);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .item-desc {
|
|
|
|
|
- margin-top: 16rpx;
|
|
|
|
|
- font-size: 24rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- line-height: 34.75rpx;
|
|
|
|
|
- color: #000000;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .item-detail-list {
|
|
|
|
|
- margin-top: 16rpx;
|
|
|
|
|
- display: grid;
|
|
|
|
|
- grid-template-columns: repeat(7, 1fr);
|
|
|
|
|
-
|
|
|
|
|
- .item-detail {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- flex-direction: column;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
-
|
|
|
|
|
- .detail-text {
|
|
|
|
|
- font-size: 20rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- line-height: 28.96rpx;
|
|
|
|
|
- color: rgba(0, 0, 0, 1);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .detail-box {
|
|
|
|
|
- // display: block;
|
|
|
|
|
- width: 42rpx;
|
|
|
|
|
- height: 42rpx;
|
|
|
|
|
- margin-top: 5rpx;
|
|
|
|
|
- border: 5rpx solid #000000;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .func-box {
|
|
|
|
|
- flex-shrink: 0;
|
|
|
|
|
- width: 160rpx;
|
|
|
|
|
- border-radius: 0rpx 24rpx 24rpx 0rpx;
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- font-size: 36rpx;
|
|
|
|
|
- font-weight: 400;
|
|
|
|
|
- letter-spacing: 0rpx;
|
|
|
|
|
- line-height: 52.13rpx;
|
|
|
|
|
- color: #FFFFFF;
|
|
|
|
|
-
|
|
|
|
|
- display: flex;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- flex-direction: column;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .func-box-finish {
|
|
|
|
|
- background: #F2607A;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .func-box-unfinish {
|
|
|
|
|
- background: #406CE7;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-.pick-box {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 100rpx;
|
|
|
|
|
- border-radius: 8px;
|
|
|
|
|
- background: #ffffff;
|
|
|
|
|
- // 阴影
|
|
|
|
|
- border: 0.5px solid #e4e4e4;
|
|
|
|
|
-
|
|
|
|
|
- picker {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 100%;
|
|
|
|
|
-
|
|
|
|
|
- .pick-box-time {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- height: 100rpx;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- justify-content: center;
|
|
|
|
|
- color: #000000;
|
|
|
|
|
- border-radius: 24rpx;
|
|
|
|
|
- text-align: center;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-</style>
|
|
|