浏览代码

个人中心-任务中心:已购会员套餐的状态修改

Xiao_123 2 月之前
父节点
当前提交
ea3956ae15

+ 0 - 46
src/views/recruit/personal/PersonalCenter/memberBenefits/taskCenter/components/daily.vue

@@ -1,46 +0,0 @@
-<!-- 每日任务 -->
-<template>
-  <div>
-    <div class="d-flex align-center justify-space-between">
-      <div class="resume-title my-5">{{ $t('taskCenter.dailyTask') }}</div>
-      <v-btn prepend-icon="mdi-refresh" color="primary" variant="text" class="mr-4" @click="getDailyTaskList">刷新</v-btn>
-    </div>
-    <div v-if="list.length">
-      <v-progress-linear v-if="loading" color="primary" height="6" indeterminate rounded></v-progress-linear>
-      <div v-for="(item, index) in list" :key="'suggest' + index">
-        <div class="d-flex ml-2 my-5">
-          <div class="ellipsis" style="width: 50%;">{{ item.title }}</div>
-          <div class="ellipsis d-flex" style="width: calc(50% - 88px);">
-            <svg-icon class="mx-1" name="integral" size="24"></svg-icon>
-            <span style="color: #10897bad;">{{ item.point }}</span>
-          </div>
-          <v-chip label :color="item.complete ? 'success' : 'error'">{{ item.complete ? '已完成' : '未完成' }}</v-chip>
-        </div>
-      </div>
-    </div>
-    <Empty v-else :elevation="false"></Empty>
-  </div>
-</template>
-
-<script setup>
-defineOptions({name: 'personal-taskCenter-daily'})
-import { ref } from 'vue'
-import { getTaskList } from '@/api/integral'
-
-const loading = ref(false)
-const list = ref([])
-
-// 每日任务列表
-const getDailyTaskList = async () => {
-  loading.value = true
-  try {
-    const data = await getTaskList({ mark: '每日任务', type: 1 })
-    list.value = data
-  } finally {
-    loading.value = false
-  }
-}
-getDailyTaskList()
-</script>
-<style lang="scss" scoped>
-</style>

+ 0 - 105
src/views/recruit/personal/PersonalCenter/memberBenefits/taskCenter/components/signIn.vue

@@ -1,105 +0,0 @@
-<!-- 签到 -->
-<template>
-  <div>
-    <integralShow ref="integralRef"></integralShow>
-    <div class="d-flex justify-center mt-10">
-      <div v-for="(item, index) in configList" :key="'signInKey' + index" >
-        <div
-          class="borderRadius-5 mx-5 py-3 px-4"
-          style="text-align: center;"
-          :style="{'background-color': index < continuousDay ? '#10897ba8' : 'var(--color-f2f4f7)'}"
-        >
-          <!-- 图标 -->
-          <div class="mt-1">
-            <svg-icon v-if="index < continuousDay" name="tick" size="36"></svg-icon>
-            <svg-icon v-else name="integral" size="38"></svg-icon>
-          </div>
-          <div class="mt-2" :style="{'color': index < continuousDay ? '#fff' : 'var(--color-333)'}">
-            <span class="font-12">+</span>
-            <span>{{ item.point }}</span>
-          </div>
-        </div>
-        <div class="mt-2 font-13" style="text-align: center;" :style="{'color': index < continuousDay ? '#10897b' : 'var(--color-333)'}">
-          {{ `${index === todayNumber ? '今天' : '第' + item.day + '天'}` }}
-        </div>
-      </div>
-    </div>
-    <div class="mt-8" style="text-align: right;">
-      <span v-if="continuousDay > 0" class="font-13 color-777 mr-3">
-        您已经连续签到
-        <span class="mx-1" style="color: var(--v-primary-base); font-weight: 600;"> {{ continuousDay }} </span>
-        天,明天再来吧
-      </span>
-      <v-btn class="half-button" color="primary" size="small" :loading="signLoading" :disabled="todaySignIn" @click="handleSignIn">{{ todaySignIn ? '已签到' : '签到' }}</v-btn>
-    </div>
-  </div>
-</template>
-
-<script setup>
-defineOptions({name: 'personal-taskCenter-signIn'})
-import { ref } from 'vue'
-import { useUserStore } from '@/store/user'
-import { useI18n } from '@/hooks/web/useI18n'
-import { getRewardSignInRecordSummary, getRewardSignInConfigList, createRewardSignInRecord } from '@/api/sign'
-import integralShow from '@/views/integral/pointsManagement/components/integralShow.vue'
-import Snackbar from '@/plugins/snackbar'
-
-const { t } = useI18n()
-const userStore = useUserStore()
-const integralRef = ref()
-// 连续签到天数
-const continuousDay = ref(0)
-// 今天有无签到
-const todaySignIn = ref(false)
-// 规则列表
-const configList = ref([])
-const todayNumber = ref()
-const signLoading = ref(false)
-
-// 获取签到规则列表
-const getConfigList = async () => {
-  const data = await getRewardSignInConfigList()
-  configList.value = data
-}
-getConfigList()
-
-// 获取个人签到统计
-const getSummary = async () => {
-  const data = await getRewardSignInRecordSummary()
-  if (!data) return
-  continuousDay.value = data.continuousDay // 连续签到第n天
-  todaySignIn.value = data.todaySignIn // 今天有无签到
-  todayNumber.value = todaySignIn.value ? continuousDay.value - 1 : continuousDay.value
-}
-getSummary()
-
-// 签到
-const handleSignIn = async () => {
-  signLoading.value = true
-  await createRewardSignInRecord()
-  setTimeout(async () => {
-    await getSummary()
-    Snackbar.success(t('taskCenter.signInSuccess'))
-    signLoading.value = false
-
-    // 更新积分数
-    await userStore.getUserAccountInfo()
-  }, 1000)
-}
-</script>
-
-<style lang="scss" scoped>
-.color-333 { color: var(--color-333); }
-.color-fff { color: #fff; }
-.color-777 { color: var(--color-666); }
-.font-12 { font-size: 12px; }
-.font-13 { font-size: 13px; }
-.font-14 { font-size: 14; }
-.font-16 { font-size: 16px; }
-.borderRadius-5 { border-radius: 5px; }
-.signInRecord {
-  font-size: 14px;
-  color: var(--v-primary-base);
-  cursor: pointer;
-}
-</style>

+ 0 - 61
src/views/recruit/personal/PersonalCenter/memberBenefits/taskCenter/components/suggest.vue

@@ -1,61 +0,0 @@
-<!-- 推荐任务 -->
-<template>
-  <div>
-    <div class="d-flex align-center justify-space-between">
-      <div class="resume-title my-5">{{ $t('taskCenter.suggestTask') }}</div>
-      <v-btn prepend-icon="mdi-refresh" color="primary" variant="text" class="mr-4" @click.stop="getRecommendTaskList">刷新</v-btn>
-    </div>
-    <div v-if="list.length">
-      <v-progress-linear v-if="loading" color="primary" height="6" indeterminate rounded></v-progress-linear>
-      <div v-for="(item, index) in list" :key="'suggest' + index">
-        <div class="d-flex ml-2 my-5">
-          <div class="ellipsis" style="width: 50%;">{{ item.title }}</div>
-          <div class="ellipsis d-flex" style="width: calc(50% - 88px);">
-            <!-- <svg-icon class="mx-1" name="integral" size="24"></svg-icon>
-            <span style="color: #10897bad;">{{ item.point }}</span> -->
-          </div>
-          <v-chip label :color="item.complete ? 'success' : 'error'" @click.stop="handleClick(item)">{{ item.complete ? '已完成' : '未完成' }}</v-chip>
-        </div>
-      </div>
-    </div>
-    <Empty v-else :elevation="false"></Empty>
-  </div>
-</template>
-
-<script setup>
-defineOptions({name: 'personal-taskCenter-suggest'})
-import { ref } from 'vue'
-import { getTaskList } from '@/api/integral'
-import { useRouter } from 'vue-router'; const router = useRouter()
-
-const loading = ref(false)
-const list = ref([])
-
-// 推荐任务列表
-const getRecommendTaskList = async () => {
-  loading.value = true
-  try {
-    const data = await getTaskList({ mark: '推荐任务', type: 0 })
-    list.value = data
-    list.value.push({
-      complete: false,
-      operation: '+',
-      point: 50,
-      sort: 99,
-      title: '购买会员套餐',
-      path: '/recruit/personal/personalCenter/memberBenefits/membershipPackage',
-    })
-  } finally {
-    loading.value = false
-  }
-}
-getRecommendTaskList()
-
-const handleClick = (item) => {
-  if (item.complete || !item.path) return
-  router.push(item.path)
-}
-</script>
-
-<style lang="scss" scoped>
-</style>

+ 53 - 9
src/views/recruit/personal/PersonalCenter/memberBenefits/taskCenter/index.vue

@@ -2,21 +2,65 @@
 <template>
   <div class="py-3">
     <integralShow></integralShow>
-    <!-- 签到 -->
-    <!-- <signIn class="white-bgc mb-3 pa-3"></signIn> -->
-    <!-- 推荐任务 -->
-    <suggest class="white-bgc mb-3 pa-3"></suggest>
-    <!-- 每日任务 -->
-    <!-- <daily class="white-bgc mb-3 pa-3"></daily> -->
+    <div class="pa-3">
+      <div class="d-flex align-center justify-space-between">
+        <div class="resume-title my-5">{{ $t('taskCenter.suggestTask') }}</div>
+        <v-btn prepend-icon="mdi-refresh" color="primary" variant="text" class="mr-4" @click.stop="getRecommendTaskList">刷新</v-btn>
+      </div>
+      <div v-if="list.length">
+        <v-progress-linear v-if="loading" color="primary" height="6" indeterminate rounded></v-progress-linear>
+        <div v-for="(item, index) in list" :key="'suggest' + index">
+          <div class="d-flex ml-2 my-5">
+            <div class="ellipsis" style="width: 50%;">{{ item.title }}</div>
+            <div class="ellipsis d-flex" style="width: calc(50% - 88px);">
+            </div>
+            <v-chip label :color="item.complete ? 'success' : 'error'" @click.stop="handleClick(item)">{{ item.complete ? '已完成' : '未完成' }}</v-chip>
+          </div>
+        </div>
+      </div>
+      <Empty v-else :elevation="false"></Empty>
+    </div>
   </div>
 </template>
 
 <script setup>
 defineOptions({name: 'personal-taskCenter-index'})
-// import signIn from './components/signIn.vue'
-import suggest from './components/suggest.vue'
-// import daily from './components/daily.vue'
+import { ref } from 'vue'
+import { getTaskList } from '@/api/integral'
+import { useRouter } from 'vue-router'; const router = useRouter()
 import integralShow from '@/views/integral/pointsManagement/components/integralShow.vue'
+
+const loading = ref(false)
+const list = ref([])
+
+const userInfo = JSON.parse(localStorage.getItem('userInfo')) ?? null
+const buyPackage = ref({
+  complete: userInfo ? userInfo.vipExpireDate > Date.now() && userInfo.vipFlag : false,
+  operation: '+',
+  point: 50,
+  sort: 99,
+  title: '购买会员套餐',
+  path: '/recruit/personal/personalCenter/memberBenefits/membershipPackage',
+})
+
+// 推荐任务列表
+const getRecommendTaskList = async () => {
+  loading.value = true
+  try {
+    const data = await getTaskList({ mark: '推荐任务', type: 0 })
+    list.value = data
+    list.value.push(buyPackage.value)
+  } finally {
+    loading.value = false
+  }
+}
+getRecommendTaskList()
+
+const handleClick = (item) => {
+  if (item.complete || !item.path) return
+  router.push(item.path)
+}
 </script>
+
 <style lang="scss" scoped>
 </style>