Procházet zdrojové kódy

Merge branch 'dev' of https://git.citupro.com/zhengnaiwen_citu/menduner into dev

lifanagju_citu před 10 měsíci
rodič
revize
a0cf143dcf

+ 8 - 2
src/utils/eventList.js

@@ -16,8 +16,14 @@ export const updateEventList = (type) => {
   if (getToken()) {
   if (getToken()) {
     getRewardEventList()
     getRewardEventList()
     if (timer.value) clearInterval(timer.value)
     if (timer.value) clearInterval(timer.value)
-
+      
     timer.value = setInterval(async () => {
     timer.value = setInterval(async () => {
+      // 没有token时销毁定时器
+      if (!getToken()) {
+        clearInterval(timer.value)
+        timer.value = null
+        return
+      }
       getRewardEventList()
       getRewardEventList()
 
 
       // 更新账户信息
       // 更新账户信息
@@ -26,8 +32,8 @@ export const updateEventList = (type) => {
     }, 300000)
     }, 300000)
 
 
   } else {
   } else {
-    timer.value = null
     clearInterval(timer.value)
     clearInterval(timer.value)
+    timer.value = null
     localStorage.setItem('eventList', [])
     localStorage.setItem('eventList', [])
   }
   }
 }
 }

+ 142 - 0
src/utils/purchasePackage.js

@@ -0,0 +1,142 @@
+const commonList = [
+  { label: '简历刷新pro', value: 'resumeRefresh' },
+  { label: '竞争力分析', value: 'competitiveAnalysis' },
+  { label: '谁对我有兴趣', value: 'interestedInMe' },
+  { label: '投递优先查看', value: 'priorityViewDelivery' },
+  { label: 'VIP会员标识', value: 'memberIdentification' },
+  { label: 'VIP专属折扣', value: 'exclusiveDiscount' }
+]
+
+const commonList2 = [
+  { label: '简历刷新pro', value: 'resumeRefresh' },
+  { label: '竞争力分析', value: 'competitiveAnalysis' },
+  { label: '谁对我有兴趣', value: 'interestedInMe' },
+  { label: '投递优先查看', value: 'priorityViewDelivery' },
+  { label: 'VIP会员标识', value: 'memberIdentification' },
+  { label: 'VIP专属折扣', value: 'exclusiveDiscount' },
+  { label: '简历内容范例', value: 'resumeExample' },
+  { label: '会员简历模版', value: 'resumeTemplate' },
+  { label: '一键润色简历', value: 'proofreadingResume' },
+  { label: '导入解析简历', value: 'analyzeResume' },
+  { label: '简历草稿数', value: 'resumeDraftNumber' },
+  { label: '全年简历回收', value: 'resumeRecovery' },
+  { label: '会员求职大礼包', value: 'jobHuntGiftPacks' }
+]
+
+const commonOrdinary = {
+  resumeRefresh: '20元5次',
+  competitiveAnalysis: '20元5次',
+  interestedInMe: '10元/当日3次',
+  priorityViewDelivery: false,
+  memberIdentification: false,
+  exclusiveDiscount: false
+}
+
+const commonOrdinary2 = {
+  resumeRefresh: '20元5次',
+  competitiveAnalysis: '20元5次',
+  interestedInMe: '10元/当日3次',
+  priorityViewDelivery: false,
+  memberIdentification: false,
+  exclusiveDiscount: false,
+  resumeExample: false,
+  resumeTemplate: false,
+  proofreadingResume: false,
+  analyzeResume: false,
+  resumeDraftNumber: false,
+  resumeRecovery: false,
+  jobHuntGiftPacks: false
+}
+
+
+export const personal = [
+  {
+    title: '14天双周卡',
+    price: 38,
+    dailyPrice: 2.8,
+    contrastList: commonList,
+    ordinary: commonOrdinary,
+    vip: {
+      resumeRefresh: '5次/天',
+      competitiveAnalysis: '20次/天',
+      interestedInMe: '3次/天',
+      priorityViewDelivery: true,
+      memberIdentification: true,
+      exclusiveDiscount: true
+    }
+  },
+  {
+    title: '30天月卡',
+    price: 58,
+    dailyPrice: 2,
+    contrastList: commonList,
+    ordinary: commonOrdinary,
+    vip: {
+      resumeRefresh: '5次/天',
+      competitiveAnalysis: '25次/天',
+      interestedInMe: '无限查看',
+      priorityViewDelivery: true,
+      memberIdentification: true,
+      exclusiveDiscount: true
+    }
+  },
+  {
+    title: '60天月卡',
+    price: 78,
+    dailyPrice: 1.3,
+    contrastList: commonList,
+    ordinary: commonOrdinary,
+    vip: {
+      resumeRefresh: '15次/天',
+      competitiveAnalysis: '35次/天',
+      interestedInMe: '无限查看',
+      priorityViewDelivery: true,
+      memberIdentification: true,
+      exclusiveDiscount: true
+    }
+  },
+  {
+    title: '季度卡',
+    price: 108,
+    dailyPrice: 1.2,
+    contrastList: commonList2,
+    ordinary: commonOrdinary2,
+    vip: {
+      resumeRefresh: '40次/天',
+      competitiveAnalysis: '无限',
+      interestedInMe: '无限查看',
+      priorityViewDelivery: true,
+      memberIdentification: true,
+      exclusiveDiscount: true,
+      resumeExample: '5条',
+      resumeTemplate: '3次',
+      proofreadingResume: '10次/天',
+      analyzeResume: '10次/天',
+      resumeDraftNumber: '5份',
+      resumeRecovery: false,
+      jobHuntGiftPacks: false
+    }
+  },
+  {
+    title: '年度卡',
+    price: 388,
+    dailyPrice: 1.1,
+    contrastList: commonList2,
+    ordinary: commonOrdinary2,
+    vip: {
+      resumeRefresh: '40次/天',
+      competitiveAnalysis: '无限',
+      interestedInMe: '无限查看',
+      priorityViewDelivery: true,
+      memberIdentification: true,
+      exclusiveDiscount: true,
+      resumeExample: true,
+      resumeTemplate: true,
+      proofreadingResume: '无限',
+      analyzeResume: '无限',
+      resumeDraftNumber: '20份',
+      resumeRecovery: true,
+      jobHuntGiftPacks: true
+    }
+  }
+]

+ 9 - 9
src/views/mall/purchasePackage/components/packagesDetail.vue

@@ -6,8 +6,7 @@
         v-for="item in info.headers"
         v-for="item in info.headers"
         :key="item.key"
         :key="item.key"
       >
       >
-        <div v-if="item.key == 'VIP套餐'">{{ item.label }}</div>
-        <div v-else>{{ item.label }}</div>
+        <div>{{ item.label }}</div>
       </template>
       </template>
     </div>
     </div>
     <template v-if="info.contrastList">
     <template v-if="info.contrastList">
@@ -18,14 +17,14 @@
       >
       >
         <div style="font-size: 14px; font-weight: bold;">{{ item.label }}</div>
         <div style="font-size: 14px; font-weight: bold;">{{ item.label }}</div>
         <div style="font-size: 14px; font-weight: normal;">
         <div style="font-size: 14px; font-weight: normal;">
-          <span v-if="info?.returnData?.ordinary[item.key] === true"><v-icon size="24" icon="mdi-check"></v-icon></span>
-          <span v-else-if="info?.returnData?.ordinary[item.key] === false">x</span>
-          <span v-else>{{ info?.returnData?.ordinary[item.key] }}</span>
+          <span v-if="info?.returnData?.ordinary[item.value] === true"><v-icon size="24" icon="mdi-check"></v-icon></span>
+          <span v-else-if="info?.returnData?.ordinary[item.value] === false">x</span>
+          <span v-else>{{ info?.returnData?.ordinary[item.value] }}</span>
         </div>
         </div>
         <div style="font-size: 14px; font-weight: bold; color: #d8a41a;">
         <div style="font-size: 14px; font-weight: bold; color: #d8a41a;">
-          <span v-if="info?.returnData?.vip[item.key] === true"><v-icon size="24" icon="mdi-check"></v-icon></span>
-          <span v-else-if="info?.returnData?.vip[item.key] === false">x</span>
-          <span v-else>{{ info?.returnData?.vip[item.key] }}</span>
+          <span v-if="info?.returnData?.vip[item.value] === true"><v-icon size="24" icon="mdi-check"></v-icon></span>
+          <span v-else-if="info?.returnData?.vip[item.value] === false">x</span>
+          <span v-else>{{ info?.returnData?.vip[item.value] }}</span>
         </div>
         </div>
       </div>
       </div>
     </template>
     </template>
@@ -41,9 +40,10 @@ defineProps({
   }
   }
 })
 })
 </script>
 </script>
+
 <style lang="scss" scoped>
 <style lang="scss" scoped>
 .packagesDetail { // 套餐详情
 .packagesDetail { // 套餐详情
-  width: 710px;
+  width: 1090px;
   margin: 0 auto;
   margin: 0 auto;
   border: 1px solid var(--color-f3);
   border: 1px solid var(--color-f3);
   // border-radius: 12px;
   // border-radius: 12px;

+ 13 - 31
src/views/mall/purchasePackage/index.vue

@@ -4,19 +4,19 @@
     <!-- 套餐列表 -->
     <!-- 套餐列表 -->
     <div class="d-flex align-center justify-center">
     <div class="d-flex align-center justify-center">
       <div
       <div
-        v-for="(item, index) in packages"
+        v-for="(item, index) in personal"
         :key="index"
         :key="index"
         :elevation="tab === (index+1) ? 3 : 2"
         :elevation="tab === (index+1) ? 3 : 2"
         class="packagesItem cursor-pointer mx-3"
         class="packagesItem cursor-pointer mx-3"
         :class="{'active': tab === (index+1)}"
         :class="{'active': tab === (index+1)}"
-        style="width: 220px;"
+        style="width: 200px;"
         @click="handleChange(item, index)"
         @click="handleChange(item, index)"
       >
       >
         <div class="d-flex flex-column align-center pb-5">  
         <div class="d-flex flex-column align-center pb-5">  
-          <div class="mt-4 font16 fontBold titleColor">{{ item.标题 }}</div>  
+          <div class="mt-4 font16 fontBold titleColor">{{ item.title }}</div>  
           <div class="mt-2 fontBold priceBox">
           <div class="mt-2 fontBold priceBox">
             <span>¥</span>
             <span>¥</span>
-            <span class="font28">{{ item.价格 }}</span>
+            <span class="font28">{{ item.price }}</span>
           </div>  
           </div>  
           <div class="dailyPrice font13 mt-2">每天低至{{ item.dailyPrice }}元</div>  
           <div class="dailyPrice font13 mt-2">每天低至{{ item.dailyPrice }}元</div>  
         </div> 
         </div> 
@@ -28,42 +28,24 @@
 </template>
 </template>
 
 
 <script setup>
 <script setup>
-import packagesDetail from './components/packagesDetail.vue'
-import { ref } from 'vue'
 defineOptions({name: 'personal-purchasePackage'})
 defineOptions({name: 'personal-purchasePackage'})
+import { ref } from 'vue'
+import { personal } from '@/utils/purchasePackage'
+import packagesDetail from './components/packagesDetail.vue'
 
 
 const tab = ref(1) 
 const tab = ref(1) 
-const packages = [
-  { id: '60', 标题: '60天双月卡', 价格: '108', dailyPrice: '1.8', index: {} },
-  { id: '30', 标题: '30天月卡', 价格: '58', dailyPrice: '2' },
-  { id: '14', 标题: '14天双周卡', 价格: '38', dailyPrice: '2.8' },
-]
 
 
 const handleChange = (item, index) => {
 const handleChange = (item, index) => {
-  detailItem.value = deal()
+  detailItem.value = deal(item)
   tab.value = index + 1
   tab.value = index + 1
 }
 }
-const deal = () => {
-  const headers = [{ key: '权益', label: '权益' }, { key: '普通用户', label: '普通用户' }, { key: 'VIP套餐', label: 'VIP套餐' }]
-  const contrastList = [
-    { key: '简历刷新', label: '简历刷新' },
-    { key: '竞争力分析', label: '竞争力分析' },
-    { key: '谁对我有兴趣', label: '谁对我有兴趣' },
-    { key: '投递优先查看', label: '投递优先查看' },
-    { key: '聊天优先沟通', label: '聊天优先沟通' },
-    { key: 'VIP会员标识', label: 'VIP会员标识' },
-    { key: 'VIP尊享皮肤', label: 'VIP尊享皮肤' },
-    { key: 'VIP专属折扣', label: 'VIP专属折扣' },
-  ]
-  const returnData = {
-    ordinary: { 简历刷新: '10元5次', 竞争力分析: '15元5次', 谁对我有兴趣: '5元/当日3次', 投递优先查看: false, 聊天优先沟通: false, VIP会员标识: false, VIP尊享皮肤: false, VIP专属折扣: false },
-    vip: { 简历刷新: '3次/天', 竞争力分析: '20次/天', 谁对我有兴趣: '无限查看', 投递优先查看: true, 聊天优先沟通: true, VIP会员标识: true, VIP尊享皮肤: true, VIP专属折扣: true },
-  }
-
-  return { headers, contrastList, returnData }
+const headers = [{ key: '权益', label: '权益' }, { key: '普通用户', label: '普通用户' }, { key: 'VIP套餐', label: 'VIP套餐' }]
+const deal = (item) => {
+  return { headers, returnData: { ordinary: item.ordinary, vip: item.vip }, contrastList: item.contrastList }
 }
 }
-const detailItem = ref(packages?.length ? deal(packages[0]) : null) 
+const detailItem = ref(personal?.length ? deal(personal[0]) : null)
 </script>
 </script>
+
 <style lang="scss" scoped>
 <style lang="scss" scoped>
 .font13 { font-size: 13px; }
 .font13 { font-size: 13px; }
 .font16 { font-size: 16px; }
 .font16 { font-size: 16px; }

+ 2 - 1
src/views/recruit/enterprise/systemManagement/groupAccount/inviteConfirm.vue

@@ -61,8 +61,9 @@ const handleLogin = async () => {
     await enterpriseInviteRecordConsent(code)
     await enterpriseInviteRecordConsent(code)
     Snackbar.success('加入成功')
     Snackbar.success('加入成功')
   } catch (error) {
   } catch (error) {
-    console.error('error', error)
     Snackbar.error('加入失败')
     Snackbar.error('加入失败')
+  } finally {
+    loginLoading.value = false
   }
   }
 }
 }