소스 검색

每日任务&推荐任务展示

Xiao_123 7 달 전
부모
커밋
2336b26cdc

+ 7 - 0
src/api/integral.js

@@ -27,4 +27,11 @@ export const getUserRewardPointPage = async (params) => {
     url: `/app-api/menduner/system/user/account/record/page`,
     params
   })
+}
+
+// 获取每日任务&推荐任务
+export const getTaskList = async (mark) => {
+  return await request.post({
+    url: '/admin-api/menduner/reward/event-track/get/mark/task?mark=' + mark
+  })
 }

+ 2 - 2
src/config/axios/service.js

@@ -43,9 +43,9 @@ const RETURNED_API = '/admin-api/menduner/reward/event-track/click'
 // 规则配置跟踪列表
 const eventRules = localStorage.getItem('eventList')
 // 请求成功后触发
-const requestCompletionTrigger = (eventRules ? JSON.parse(eventRules) : []).filter(_e => _e.type === '0')
+const requestCompletionTrigger = (eventRules ? JSON.parse(eventRules) : []).filter(_e => _e.triggerType === '0')
 // 点击触发
-const clickTrigger = (eventRules ? JSON.parse(eventRules) : []).filter(_e => _e.type === '1')
+const clickTrigger = (eventRules ? JSON.parse(eventRules) : []).filter(_e => _e.triggerType === '1')
 
 // 创建axios实例
 const service = axios.create({

+ 1 - 1
src/utils/prefixUrl.js

@@ -20,7 +20,7 @@ export const getSuffixAfterPrefix = (str) => {
 
 
 // 展示积分
-export function showNextAction (list) { // , currentIndex = 0
+export function showNextAction (list) {
   const arr = list.reduce((newArr, action) => {
     // if (action.match) newArr.push(`+${action.point}  恭喜您【${action.title}】获得${action.point}积分`)
     if (action.match) newArr.push(`+${action.point}  恭喜您获得${action.point}积分`)

+ 1 - 1
src/views/integral/pointsManagement/components/integralShow.vue

@@ -23,7 +23,7 @@
         </template>
         <template v-if="props.taskCenter">
           <span class="septal-line"></span>
-          <span class="mall-text" @click="router.push({ path: '/recruit/personal/TaskCenter' })">赚取积分</span>
+          <span class="mall-text" @click="router.push({ path: '/recruit/personal/personalCenter/memberBenefits/taskCenter' })">赚取积分</span>
         </template>
       </span>
     </div>

+ 1 - 1
src/views/publicRecruitment/myRegistration.vue

@@ -3,7 +3,7 @@
   <div>
     <integralShow></integralShow>
     <!-- 任务中心 -->
-    <div style="font-size: 14px; color: var(--color-666); text-align: right;" class="mr-5 mt-3 cursor-pointer" @click="router.push({ path: '/recruit/personal/TaskCenter' })">《<span style=" color: var(--v-primary-base);">任务中心</span>》</div>
+    <div style="font-size: 14px; color: var(--color-666); text-align: right;" class="mr-5 mt-3 cursor-pointer" @click="router.push({ path: '/recruit/personal/personalCenter/memberBenefits/taskCenter' })">《<span style=" color: var(--v-primary-base);">任务中心</span>》</div>
     <!-- 积分明细 -->
     <div class="mt-3">
       <v-tabs v-model="tab" style="border-radius: 5px;" align-tabs="start" color="primary" bg-color="#f7f8fa" @update:model-value="handleChangeTab">

+ 32 - 16
src/views/recruit/personal/PersonalCenter/memberBenefits/taskCenter/components/daily.vue

@@ -1,30 +1,46 @@
 <!-- 每日任务 -->
 <template>
   <div>
-    <div class="resume-title my-5">{{ $t('taskCenter.dailyTask') }}</div>
-    <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.奖励积分数 }}</span>
+    <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>
-        <v-chip label :color="item.状态 ? 'success' : 'error'">{{ item.状态 ? '已完成' : '未完成' }}</v-chip>
       </div>
     </div>
+    <Empty v-else :elevation="false"></Empty>
   </div>
 </template>
 
 <script setup>
 defineOptions({name: 'personal-taskCenter-daily'})
-const list = [
-  { title: '收藏5个职位', 奖励积分数: '5', 状态: false },
-  { title: '收藏5个公司', 奖励积分数: '5', 状态: true },
-  { title: '投递简历10次', 奖励积分数: '10', 状态: false },
-  { title: '主动沟通10次', 奖励积分数: '10', 状态: false },
-  { title: '分享职位5次', 奖励积分数: '5', 状态: true },
-  { title: '推荐入职成功', 奖励积分数: '50', 状态: false },
-]
+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('每日任务')
+    list.value = data
+  } finally {
+    loading.value = false
+  }
+}
+getDailyTaskList()
 </script>
 <style lang="scss" scoped>
 </style>

+ 33 - 16
src/views/recruit/personal/PersonalCenter/memberBenefits/taskCenter/components/suggest.vue

@@ -1,30 +1,47 @@
 <!-- 推荐任务 -->
 <template>
   <div>
-    <div class="resume-title my-5">{{ $t('taskCenter.suggestTask') }}</div>
-    <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.奖励积分数 }}</span>
+    <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="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'">{{ item.complete ? '已完成' : '未完成' }}</v-chip>
         </div>
-        <v-chip label :color="item.状态 ? 'success' : 'error'">{{ item.状态 ? '已完成' : '未完成' }}</v-chip>
       </div>
     </div>
+    <Empty v-else :elevation="false"></Empty>
   </div>
 </template>
 
 <script setup>
 defineOptions({name: 'personal-taskCenter-suggest'})
-const list = [
-  { title: '首次登录奖励', 奖励积分数: '5', 状态: true },
-  { title: '上传个人头像', 奖励积分数: '10', 状态: false },
-  { title: '完成工作经历', 奖励积分数: '5', 状态: true },
-  { title: '首次投递简历并主动沟通', 奖励积分数: '5', 状态: true },
-  { title: '个人简历被企业接收并回复', 奖励积分数: '20', 状态: false },
-  { title: '购买会员服务费', 奖励积分数: '20', 状态: false },
-]
+import { ref } from 'vue'
+import { getTaskList } from '@/api/integral'
+
+const loading = ref(false)
+const list = ref([])
+
+// 推荐任务列表
+const getRecommendTaskList = async () => {
+  loading.value = true
+  try {
+    const data = await getTaskList('推荐任务')
+    list.value = data
+  } finally {
+    loading.value = false
+  }
+}
+getRecommendTaskList()
 </script>
+
 <style lang="scss" scoped>
 </style>

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

@@ -1,30 +0,0 @@
-<!-- 每日任务 -->
-<template>
-  <div>
-    <div class="resume-title my-5">{{ $t('taskCenter.dailyTask') }}</div>
-    <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.奖励积分数 }}</span>
-        </div>
-        <v-chip label :color="item.状态 ? 'success' : 'error'">{{ item.状态 ? '已完成' : '未完成' }}</v-chip>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup>
-defineOptions({name: 'personal-taskCenter-daily'})
-const list = [
-  { title: '收藏5个职位', 奖励积分数: '5', 状态: false },
-  { title: '收藏5个公司', 奖励积分数: '5', 状态: true },
-  { title: '投递简历10次', 奖励积分数: '10', 状态: false },
-  { title: '主动沟通10次', 奖励积分数: '10', 状态: false },
-  { title: '分享职位5次', 奖励积分数: '5', 状态: true },
-  { title: '推荐入职成功', 奖励积分数: '50', 状态: false },
-]
-</script>
-<style lang="scss" scoped>
-</style>

+ 0 - 105
src/views/recruit/personal/PersonalCenter/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 - 30
src/views/recruit/personal/PersonalCenter/taskCenter/components/suggest.vue

@@ -1,30 +0,0 @@
-<!-- 推荐任务 -->
-<template>
-  <div>
-    <div class="resume-title my-5">{{ $t('taskCenter.suggestTask') }}</div>
-    <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.奖励积分数 }}</span>
-        </div>
-        <v-chip label :color="item.状态 ? 'success' : 'error'">{{ item.状态 ? '已完成' : '未完成' }}</v-chip>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup>
-defineOptions({name: 'personal-taskCenter-suggest'})
-const list = [
-  { title: '首次登录奖励', 奖励积分数: '5', 状态: true },
-  { title: '上传个人头像', 奖励积分数: '10', 状态: false },
-  { title: '完成工作经历', 奖励积分数: '5', 状态: true },
-  { title: '首次投递简历并主动沟通', 奖励积分数: '5', 状态: true },
-  { title: '个人简历被企业接收并回复', 奖励积分数: '20', 状态: false },
-  { title: '购买会员服务费', 奖励积分数: '20', 状态: false },
-]
-</script>
-<style lang="scss" scoped>
-</style>

+ 0 - 21
src/views/recruit/personal/PersonalCenter/taskCenter/index.vue

@@ -1,21 +0,0 @@
-<!-- 任务中心 -->
-<template>
-  <div class="py-3">
-    <!-- 签到 -->
-    <signIn class="white-bgc borderRadius5 mb-3 pa-3"></signIn>
-    <!-- 推荐任务 -->
-    <suggest class="white-bgc borderRadius5 mb-3 pa-3"></suggest>
-    <!-- 每日任务 -->
-    <daily class="white-bgc borderRadius5 mb-3 pa-3"></daily>
-  </div>
-</template>
-
-<script setup>
-import signIn from './components/signIn.vue'
-import suggest from './components/suggest.vue'
-import daily from './components/daily.vue'
-defineOptions({name: 'personal-taskCenter-index'})
-</script>
-<style lang="scss" scoped>
-.borderRadius5 { border-radius: 5px; }
-</style>