Pārlūkot izejas kodu

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

lifanagju_citu 4 mēneši atpakaļ
vecāks
revīzija
08a68f7c18

+ 1 - 0
components.d.ts

@@ -20,6 +20,7 @@ declare module 'vue' {
     copy: typeof import('./src/components/CtForm/index copy.vue')['default']
     CtBtn: typeof import('./src/components/CtVuetify/CtBtn/index.vue')['default']
     CtDialog: typeof import('./src/components/CtDialog/index.vue')['default']
+    CtFilter: typeof import('./src/components/CtFilter/index.vue')['default']
     CtForm: typeof import('./src/components/CtForm/index.vue')['default']
     CtIcon: typeof import('./src/components/CtVuetify/CtIcon/index.vue')['default']
     CtMenu: typeof import('./src/components/CtVuetify/CtMenu/index.vue')['default']

+ 21 - 6
src/App.vue

@@ -6,7 +6,7 @@ import axios from 'axios'
 import { vue_version } from './version.js'
 import { useSystem } from '@/store/system'
 
-const { setBeijingTimestamp } = useSystem()
+const { setTimeDifference } = useSystem()
 const timer = ref(null)
 // const setFn = ref()
 const setIntervalTime = 3000 // 接口调用间隔时间
@@ -33,6 +33,24 @@ onUnmounted(() => {
 // window.location.reload(true)                  // true参数会忽略缓存的内容,强制重新从服务器下载所有内容.包括 JavaScript 文件,图像,文本文件等。这样可以保证显示网页的最新内容,但是会消耗更多的流量和时间。
 // window.location.replace(window.location.href) // 方法会把浏览器中的临时文件夹的文件删除再重新从服务器下载。这样可以清除一些可能造成问题的缓存文件,但是也会消耗更多的流量和时间。
 
+const getVersion = () => {
+  return new Promise((resolve, reject) => {
+    const baseUrl = import.meta.env.VITE_BASE_URL || ''
+    const tenantId = import.meta.env?.VITE_TENANTCODE || ''
+    axios.get(`${baseUrl}/app-api/menduner/system/get/version`, {
+      headers: { ['tenant-id']: tenantId },
+      cache: 'no-store' // 禁用缓存
+    }).then(resolve)
+  })
+}
+
+getVersion().then(({ data }) => {
+  const _now = new Date().getTime()
+  const { time } = data?.data
+  // 设置浏览器和服务器时间差
+  setTimeDifference(time - _now)
+})
+
 let ConfirmDone = false
 // 检查版本号
 const checkVersion = () => {
@@ -42,12 +60,9 @@ const checkVersion = () => {
   const get_v = localStorage.getItem('RES_VERSION') || ''
   // 
   if (!baseUrl || !vue_version || !tenantId) return
-  axios.get(`${baseUrl}/app-api/menduner/system/get/version`, {
-    headers: { ['tenant-id']: tenantId },
-    cache: 'no-store' // 禁用缓存
-  }).then(({ data }) => {
+
+  getVersion().then(({ data }) => {
     const { version, time } = data?.data
-    setBeijingTimestamp(time)
     if (!version || version === vue_version ) { // 接口报错和版本一致不弹Confirm
       return
     }

+ 7 - 0
src/api/mall/prize.js

@@ -32,6 +32,13 @@ export const luckyLotteryRecordReceive = async (data) => {
 	})
 }
 
+// 放弃奖品
+export const luckyLotteryRecordGiveUp = async (id) => {
+  return await request.post({
+		url: `/app-api/promotion/luck-lottery-record/give-up?id=${id}`
+	})
+}
+
 // 创建用户期望奖品记录
 export const luckTargetCreate = async (data) => {
   return await request.post({

+ 77 - 0
src/components/CtFilter/index.vue

@@ -0,0 +1,77 @@
+<template>
+	<v-card style="width:100%; min-height: 80px;" elevation="5">
+		<v-form v-model="valid" ref="formRef">
+			<div class="flex-horizon d-flex pa-2 flex-wrap">
+				<div v-for="(item, index) in items.options" :key="`filter_${item.label}_${index}`" class="pa-3" v-show="!item.hidden">
+					<textUI
+            v-if="item.type == 'text'"
+            v-model="item.value"
+            :item="item"
+            @blur="item.blur"
+            @appendInnerClick="item.appendInnerClick"
+          ></textUI>
+          <autocompleteUI
+            v-if="item.type === 'autocomplete'"
+            v-model="item.value"
+            :item="item"
+            @search="v => item.search ? item.search(v) : null"
+          ></autocompleteUI>
+				</div>
+				<template v-if="showBtn">
+					<div class="pa-3">
+						<v-btn color="primary" class="elevation-5 half-button" @click="search">查 询</v-btn>
+            <v-btn color="primary" variant="outlined" v-if="showResetBtn" class="elevation-5 half-button ml-3" @click="reset">重 置</v-btn>
+					</div>
+				</template>
+				<slot name="btn"></slot>
+			</div>
+			<slot></slot>
+		</v-form>
+	</v-card>
+</template>
+
+<script setup>
+defineOptions({ name:'components-ct-filter'})
+import { ref } from 'vue'
+import textUI from './../FormUI/TextInput'
+import autocompleteUI from './../FormUI/autocomplete'
+
+const emit = defineEmits(['search', 'reset'])
+const props = defineProps({
+  items: {
+    type: Object,
+    default: () => ({})
+  },
+  showBtn: {
+    type: Boolean,
+    default: true
+  },
+  showResetBtn: {
+    type: Boolean,
+    default: true
+  }
+})
+
+const formRef = ref()
+const valid = ref(false)
+
+const search = () => {
+  const obj = props.items?.options.reduce((res, item) => {
+    res[item.key] = item.value
+    return res
+  }, {})
+  emit('search', obj)
+}
+
+const reset = () => {
+  formRef.value.reset()
+  const obj = props.items?.options.reduce((res, item) => {
+    res[item.key] = null
+    return res
+  }, {})
+  emit('reset', obj)
+}
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 5 - 7
src/config/axios/service.js

@@ -107,7 +107,7 @@ service.interceptors.request.use(
 
     // 开启参数加密
     if (config.openEncryption) {
-      const { getBeijingTimestamp, setBeijingTimestamp, systemInfo } = useSystem()
+      const { getTimeDifference, setTimeDifference, systemInfo } = useSystem()
       const raw = config.url.split('?')[1]
       // const raw = config.encodeParams ? config.url.split('?')[1] : config.url.split('?')[1]
       const body = {
@@ -119,11 +119,9 @@ service.interceptors.request.use(
        * params: { data, params, raw }
        * content
        */
-      const env = import.meta.env.VITE_USER_NODE_ENV
-      // console.log(env)
-      if (env === 'production' && systemInfo.beijingTimestamp === 0) {
-        const _timestamp = await getBeijingTimestamp()
-        setBeijingTimestamp(_timestamp)
+      if (systemInfo.timeDifference === undefined) {
+        const _difference = await getTimeDifference()
+        setTimeDifference(_difference)
       }
       
       const header = encryptionFun({
@@ -132,7 +130,7 @@ service.interceptors.request.use(
         appId: 'web_client',
         AppSecret: 'fa0fc0b5098b974b',
         // timestamp: 1735282548997,
-        timestamp: env === 'production' ? systemInfo.beijingTimestamp : new Date().getTime(),
+        timestamp: new Date().getTime() + systemInfo.timeDifference,
       })
       const content = {
         data: config.data,

+ 1 - 1
src/layout/enterprise.vue

@@ -3,7 +3,7 @@
     <Headers class="headers"></Headers>
     <div class="content d-flex">
       <side class="content-sticky" v-if="!router.currentRoute.value?.meta?.hideSide"></side>
-      <div class="content-box d-flex flex-column" :style="`width: ${ !isInWhiteList(route.path, whiteList) ? 'calc(100vw - 230px)' : '100%'}`">
+      <div class="content-box d-flex flex-column" :style="`width: ${ !isInWhiteList(route.path, whiteList) ? 'calc(100vw - 247px)' : '100%'}`">
         <div v-if="!isInWhiteList(route.path, whiteList)" class="breadcrumbs_sticky">
           <div class=" d-flex align-center justify-space-between">
             <v-breadcrumbs :items="system.breadcrumbs" elevation="3">

+ 2 - 2
src/layout/personal/navBar.vue

@@ -183,8 +183,8 @@ const navList = [
   // },
   { title: '门墩儿招聘', path: '/recruit/personal/recommend', noLeaving: true },
   { title: '门墩儿猎头', path: '/headhunting' },
-  { title: '门墩儿商城', path: '/pointsExchange' },
-  // { title: '门墩儿商城', path: '/mall' },
+  // { title: '门墩儿商城', path: '/pointsExchange' },
+  { title: '门墩儿商城', path: '/mall' },
   { title: '火苗儿校企' },
   // { title: '产业联合会' },
   // { title: '数据' },

+ 1 - 12
src/router/modules/components/recruit/personCenter.js

@@ -199,18 +199,7 @@ const personCenter = [
               enName: 'Shipping Address',
               icon: 'mdi-map-marker-outline'
             }
-          },
-          // 我的奖品
-          {
-            path: '/recruit/personal/personalCenter/myPrizes',
-            name: 'My Prizes',
-            component: () => import('@/views/recruit/personal/PersonalCenter/myPrizes/index.vue'),
-            meta: {
-              title: '我的奖品',
-              enName: 'My Prizes',
-              icon: 'mdi-star-four-points-outline'
-            }
-          },
+          }
         ]
       }
     ]

+ 9 - 6
src/store/system.js

@@ -6,14 +6,15 @@ export const useSystem = defineStore('system',
   () => {
 
     const systemInfo = ref({
+      timeDifference: undefined, // 服务器时间 - 浏览器时间
       beijingTimestamp: 0
     })
 
-    const setBeijingTimestamp = (timestamp) => {
-      systemInfo.value.beijingTimestamp = timestamp
+    const setTimeDifference = (Difference) => {
+      systemInfo.value.timeDifference = Difference
     }
 
-    const getBeijingTimestamp = () => {
+    const getTimeDifference = () => {
       const baseUrl = import.meta.env.VITE_BASE_URL
       const tenantId = import.meta.env?.VITE_TENANTCODE
       return new Promise((resolve, reject) => {
@@ -22,7 +23,9 @@ export const useSystem = defineStore('system',
           cache: 'no-store' // 禁用缓存
         }).then(({ data }) => {
           const { time } = data?.data
-          resolve(time)
+          const _now = new Date().getTime()
+          const _tem = time - _now
+          resolve(_tem)
         })
       })
     }
@@ -50,8 +53,8 @@ export const useSystem = defineStore('system',
     }
     return {
       systemInfo,
-      setBeijingTimestamp,
-      getBeijingTimestamp,
+      setTimeDifference,
+      getTimeDifference,
       setBreadcrumbs,
       breadcrumbs
     }

+ 3 - 2
src/views/mall/components/GoodsItem/index.vue

@@ -11,8 +11,9 @@
           <span class="color-333">¥{{ fen2yuan(item.price) }}</span>
           <span v-if="item.count" class="color-999 font-size-13 ml-1">x {{ item.count }}</span>
         </p>
-        <p v-if="lottery && lottery.length" class="font-size-14 color-primary text-decoration-underline" @click.stop="router.push('/recruit/personal/personalCenter/myPrizes')">
-          奖品:{{ lottery.map(e => e.prize.name).join('、') }}
+        <p v-if="lottery && lottery.length" class="font-size-14" @click.stop="router.replace('/recruit/personal/personalCenter/tradeOrder?key=3')">
+          <span class="color-primary text-decoration-underline">奖品:{{ lottery.map(e => e.prize.name).join('、') }} </span>
+          <span v-if="!lottery[0].record.receiveInfo" class="color-999">(10天内未领取的,则视为主动放弃当前奖品)</span>
         </p>
       </div>
       <div v-if="[10, 20, 30].includes(orderStatus) && item.extend && item.extend?.fileUrls && item.extend?.fileUrls?.length" class="d-flex" style="max-width: 160px;">

+ 1 - 1
src/views/mall/components/confirm_order/confirm.vue

@@ -102,7 +102,7 @@
   })
 
   const goodsType = ref(0)
-  const email = ref('1687284007@qq.com') // 如果商品spu的type不是0(不是普通商品)则要填这个邮箱
+  const email = ref('') // 如果商品spu的type不是0(不是普通商品)则要填这个邮箱
 
   const state = reactive({
     orderPayload: {},

+ 5 - 2
src/views/mall/components/prizeDraw.vue

@@ -5,9 +5,12 @@
       <gridPage v-if="props.type === '1'" :lotteryId="props.lotteryId" :disabled="disabled" @start="disabled = true" @end="endCallback"></gridPage>
       <slotMachinePage v-if="props.type === '2'" :lotteryId="props.lotteryId" height="120" :class="{'mb-3': disabled}" :disabled="disabled" @start="disabled = true" @end="endCallback"></slotMachinePage>
 
-      <v-card min-height="300" width="600" class="pa-5" :class="{'mt-3': !disabled}" style="position: relative;">
+      <v-card min-height="300" width="700" class="pa-5" :class="{'mt-3': !disabled}" style="position: relative;">
         <div v-if="showDialog">
-          <p v-for="(k, i) in prizeData" :key="i" class="color-primary">{{ k.prize.prompt }}</p>
+          <p v-for="(k, i) in prizeData" :key="i" class="color-primary">
+            {{ k.prize.prompt }}
+            <span class="color-999">(10天内未领取的,则视为主动放弃当前奖品)</span>
+          </p>
           <p>凭此房券在规定有效期内可享受免费住宿一晚。</p>
           <p class="mb-5">请提供收货地址,以便安排房券派送。</p>
 

+ 32 - 40
src/views/recruit/enterprise/newlyAppointed/index.vue

@@ -1,12 +1,5 @@
 <template>
-	<v-card class="pa-3" elevation="5">
-		<CtForm ref="CtFormRef" :items="formItems" class="mt-3">
-			<template #formBtn>
-				<v-btn color="primary" class="elevation-5" width="90" @click.stop="handleSearch">搜 索</v-btn>
-				<v-btn variant="outlined" color="primary" width="90" class="elevation-5 ml-3" @click.stop="handleReset">重 置</v-btn>
-			</template>
-		</CtForm>
-	</v-card>
+	<CtFilter :items="formItems" @reset="handleReset" @search="handleSearch" />
 
 	<v-card class="mt-3" elevation="5">
 		<CtTable
@@ -23,24 +16,36 @@
 			itemKey="id"
 			@pageHandleChange="handleChangePage"
 		>
+			<template #workTerritory="{ item }">
+				<div class="ellipsis" style="max-width: 150px;">
+					{{ item.workTerritory }}
+					<v-tooltip activator="parent" location="top">{{ item.workTerritory }}</v-tooltip>
+				</div>
+			</template>
+			<template #workHistory="{ item }">
+				<div class="ellipsis" style="max-width: 150px;">
+					{{ item.workHistory }}
+					<v-tooltip activator="parent" location="top">{{ item.workHistory }}</v-tooltip>
+				</div>
+			</template>
 			<template #actions="{ item }">
 				<v-btn variant="text" color="primary" @click.stop="handleDetail(item)">详 情</v-btn>
 			</template>
 		</CtTable>
 	</v-card>
 
-	<v-navigation-drawer v-model="showDetail" absolute location="right" rounded temporary width="500" class="pa-5">
+	<v-navigation-drawer v-model="showDetail" absolute location="right" rounded temporary width="700" class="pa-5">
 		<div style="width: 300px; height: 300px; margin: 0 auto;">
 			<v-img :src="detail?.picUrl" width="300" height="300" />
 		</div>
-		<div class="mt-10" v-html="detail?.detailIntroduction"></div>
+		<div class="mt-10" v-if="detail?.detailIntroduction" v-html="detail?.detailIntroduction.replace(/\n/g, '</br>')"></div>
 	</v-navigation-drawer>
 
 	<!-- 无权限提示 -->
 	<CtDialog :visible="showDialog" :widthType="4" :footer="false" titleClass="text-h6" title="系统提示" @close="showDialog = false">
 		<div class="d-flex align-center flex-column">
 			<div class="color-warning">
-				<p>您没有权限查看门墩儿新任命信息</p>
+				<p>很抱歉,当前没有权限查看门墩儿新任命的相关信息</p>
 				<p>请用微信扫描下方企业微信联系门墩儿管理员开通权限</p>
 			</div>
 			<div style="width: 150px; height: 150px;">
@@ -56,6 +61,7 @@ defineOptions({ name: 'newlyAppointedTable'})
 import { ref } from 'vue'
 import { getNewAppointmentsPage, getNewAppointmentsDetail } from '@/api/recruit/enterprise/newlyAppointed'
 import { useUserStore } from '@/store/user'
+import Snackbar from '@/plugins/snackbar'
 
 const store = useUserStore()
 const loading = ref(false)
@@ -77,7 +83,6 @@ const headers = [
   { title: '过往工作酒店品牌', key: 'workHistory', sortable: false },
   { title: '操作', key: 'actions', sortable: false, align: 'center' }
 ]
-const CtFormRef = ref()
 const formItems = ref({
   options: [
 		{
@@ -87,7 +92,7 @@ const formItems = ref({
       label: '中文名',
 			clearable: true,
 			hideDetails: true,
-			col: 3
+			width: 200
     },
 		{
       type: 'text',
@@ -96,8 +101,7 @@ const formItems = ref({
       label: '英文名',
 			clearable: true,
 			hideDetails: true,
-			flexStyle: 'mx-3',
-			col: 3
+			width: 200
     },
 		{
       type: 'text',
@@ -106,7 +110,7 @@ const formItems = ref({
       label: '职位',
 			clearable: true,
 			hideDetails: true,
-			col: 3
+			width: 200
     },
 		{
       type: 'text',
@@ -115,8 +119,7 @@ const formItems = ref({
       label: '任职酒店',
 			clearable: true,
 			hideDetails: true,
-			flexStyle: 'ml-3',
-			col: 3
+			width: 200
     },
 		{
       type: 'text',
@@ -125,17 +128,16 @@ const formItems = ref({
       label: '酒店品牌',
 			clearable: true,
 			hideDetails: true,
-			col: 3
+			width: 200
     },
 		{
       type: 'text',
       key: 'workTerritory',
       value: '',
       label: '工作地域',
-			flexStyle: 'mx-3',
 			clearable: true,
 			hideDetails: true,
-			col: 3
+			width: 200
     },
 		{
       type: 'text',
@@ -144,14 +146,8 @@ const formItems = ref({
       label: '过往工作酒店品牌',
 			clearable: true,
 			hideDetails: true,
-			col: 3
-    },
-		{
-			slotName: 'formBtn',
-			col: 3,
-			noParam: true,
-			flexStyle: 'ml-3'
-		}
+			width: 200
+    }
   ]
 })
 const showDialog = ref(false)
@@ -188,26 +184,21 @@ const handleChangePage = async (e) => {
 }
 
 // 搜索
-const handleSearch = async () => {
+const handleSearch = async (obj) => {
 	await store.getEnterpriseInfo(true)
 	// 没有权限提示联系门墩儿
 	if (!info.value?.entitlement?.newAppointment) {
 		showDialog.value = true
 		return
 	}
-	formItems.value.options.forEach(item => {
-	  if (item.noParam) return
-		query.value[item.key] = item.value
-	})
+	query.value = Object.assign(query.value, obj)
+	query.value.pageNo = 1
 	getList()
 }
 // 重置
-const handleReset = () => {
-	formItems.value.options.forEach(item => {
-		if (item.noParam) return
-		item.value = ''
-		query.value[item.key] = ''
-	})
+const handleReset = (obj) => {
+	query.value = Object.assign(query.value, obj)
+	query.value.pageNo = 1
 	getList()
 }
 
@@ -222,6 +213,7 @@ const handleDetail = async (item) => {
 		return
 	}
 	const result = await getNewAppointmentsDetail(item.id)
+	if (!result || !Object.keys(result).length) return Snackbar.warning('暂无详细信息,去查看其他人的信息吧~') 
 	detail.value = result
 	showDetail.value = true
 }

+ 4 - 1
src/views/recruit/personal/PersonalCenter/tradeOrder/components/detail.vue

@@ -23,7 +23,10 @@
           </template>
           <template #spuName="{ item }">
             <span class="color-primary cursor-pointer" @click="handleToGoodsDetail(item)">{{ item.spuName }}</span>
-            <p v-if="order.lottery && order.lottery.length" class="color-999 color-primary mt-1 cursor-pointer text-decoration-underline" @click.stop="router.push('/recruit/personal/personalCenter/myPrizes')">奖品:{{ order.lottery.map(e => e.prize.name).join('、') }}</p>
+            <p v-if="order.lottery && order.lottery.length" class="color-999  mt-1 " @click.stop="router.push('/recruit/personal/personalCenter/tradeOrder?key=3')">
+              <span class="color-primary cursor-pointer text-decoration-underline">奖品:{{ order.lottery.map(e => e.prize.name).join('、') }}</span>
+              <span v-if="!order.lottery[0].record.receiveInfo" class="color-999">(10天内未领取的,则视为主动放弃当前奖品)</span>
+            </p>
           </template>
           <template #actions="{ item }">
             <div v-if="[10, 20, 30].includes(order.status) && item.extend && item.extend.fileUrls && item.extend.fileUrls.length > 0">

+ 29 - 9
src/views/recruit/personal/PersonalCenter/myPrizes/index.vue → src/views/recruit/personal/PersonalCenter/tradeOrder/dynamic/myPrize.vue

@@ -8,32 +8,38 @@
     :isTools="false"
     :total="total"
     :showPage="true"
+		:itemsPerPage="5"
     :showSelect="false"
     :page-info="queryParams"
     itemKey="id"
+		@pageHandleChange="handleChangePage"
   >
     <template #prize="{ item }">
       <div class="d-flex align-center my-1">
-        <v-img :src="item.prize.image" width="80px" height="80px"></v-img>
+        <div style="width: 80px; height: 80px">
+          <v-img :src="item.prize.image" width="80px" height="80px"></v-img>
+        </div>
         <div class="ml-1">{{ item.prize.name }}</div>
       </div>
     </template>
     <template #receiveInfo="{ item }">
-      <div class="ellipsis" style="max-width: 200px;">
+      <div class="ellipsis" style="max-width: 180px;">
         {{ orderReceiveInfo(item) }}
         <v-tooltip activator="parent" location="top">{{ orderReceiveInfo(item) }}</v-tooltip>
       </div>
     </template>
     <template #deliverInfo="{ item }">
-      <div class="ellipsis" style="max-width: 200px;">
+      <div class="ellipsis" style="max-width: 180px;">
         {{ item.record.deliverInfo ? JSON.parse(item.record.deliverInfo).name + '-' + JSON.parse(item.record.deliverInfo).no  : ''}}
         <v-tooltip activator="parent" location="top">{{ item.record.deliverInfo ? JSON.parse(item.record.deliverInfo).name + '-' + JSON.parse(item.record.deliverInfo).no  : ''}}</v-tooltip>
       </div>
     </template>
     <template #actions="{ item }">
-      <v-btn v-if="!item.record.isReceive && !item.record.receiveInfo" color="primary" @click.stop="handleReceive(item)" variant="outlined">领取</v-btn>
-      <span v-else-if="item.record.deliverInfo" class="color-success">已发货</span>
-      <span v-else class="color-warning">等待发货</span>
+      <div v-if="!item.record.isReceive && !item.record.receiveInfo">
+        <v-btn color="primary" @click.stop="handleReceive(item)" variant="text">领取</v-btn>
+        <v-btn color="error" @click.stop="handleGiveUp(item)" variant="text">放弃</v-btn>
+      </div>
+      <span v-else class="color-666">{{ item.record.deliverInfo ? '已发货' : '等待发货' }}</span>
     </template>
   </CtTable>
 
@@ -49,18 +55,18 @@ defineOptions({ name: 'mall-user-prize-index' })
 import { ref, computed } from 'vue'
 import SelectAddress from '@/views/recruit/personal/PersonalCenter/shippingAddress/index.vue'
 import Snackbar from '@/plugins/snackbar'
-import { getLuckLotteryRecordPage, luckyLotteryRecordReceive } from '@/api/mall/prize'
+import { getLuckLotteryRecordPage, luckyLotteryRecordReceive, luckyLotteryRecordGiveUp } from '@/api/mall/prize'
 import { timesTampChange } from '@/utils/date'
+import Confirm from '@/plugins/confirm'
 
 const queryParams = ref({
 	pageNo: 1,
-	pageSize: 10,
+	pageSize: 5,
 })
 const total = ref(0)
 const items = ref([])
 
 const headers = [
-  // { title: '活动名称', key: 'lottery.name', sortable: false },
   { title: '奖品信息', key: 'prize', sortable: false },
   { title: '收货信息', key: 'receiveInfo', sortable: false },
   { title: '发货信息', key: 'deliverInfo', sortable: false },
@@ -83,6 +89,11 @@ const orderReceiveInfo = computed(() => (item) => {
   return `${info.name},${info.mobile},${info.areaName} ${info.detailAddress}`
 })
 
+const handleChangePage = (e) => {
+	queryParams.value.pageNo = e
+	getLuckLotteryRecordList()
+}
+
 // 领取
 const selectAddressRef = ref()
 const showDialog = ref(false)
@@ -101,6 +112,15 @@ const handleSubmit = async () => {
   Snackbar.success('领取成功,待商家发货')
   getLuckLotteryRecordList()
 }
+
+// 放弃领取
+const handleGiveUp = async (item) => {
+  Confirm('系统提示', `是否确定放弃领取${item.prize.name}?`).then(async () => {
+    await luckyLotteryRecordGiveUp(item.record.id)
+    Snackbar.success('放弃成功')
+    getLuckLotteryRecordList()
+  })
+}
 </script>
 
 <style scoped lang="scss">

+ 3 - 1
src/views/recruit/personal/PersonalCenter/tradeOrder/index.vue

@@ -13,13 +13,15 @@ import { ref, shallowRef } from 'vue'
 import RechargeVipOrder from './dynamic/rechargeVip.vue'
 import MallOrder from './dynamic/mallOrder.vue'
 import PointExchangeRecord from './dynamic/pointExchangeRecord.vue'
+import MyPrize from './dynamic/myPrize.vue'
 import { useRoute } from 'vue-router'
 
 const tab = ref(0)
 const items = shallowRef([
   { label: '余额充值、购买会员订单', value: 0, path: RechargeVipOrder },
   { label: '商城交易订单', value: 1, path: MallOrder },
-  { label: '积分兑换记录', value: 2, path: PointExchangeRecord }
+  { label: '积分兑换记录', value: 2, path: PointExchangeRecord },
+  { label: '我的奖品', value: 3, path: MyPrize }
 ])
 const route = useRoute()
 const { key } = route.query