| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948 |
- <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;
- }
- // 已登录
- // isLogin.value = true;
- try {
- uni.showLoading({
- title: '加载中',
- mask: true
- });
- // 获取用户信息
- getUserInfo();
- // 获取打卡
- getPunchIns();
- } 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>
|