Sfoglia il codice sorgente

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

lifanagju_citu 11 mesi fa
parent
commit
07ff7d1035

+ 15 - 0
src/api/integral.js

@@ -0,0 +1,15 @@
+import request from '@/config/axios'
+
+// 获取规则配置跟踪列表
+export const getRewardEventTrackList = async () => {
+  return await request.get({
+    url: '/admin-api/menduner/reward/event-track/list'
+  })
+}
+
+// 点击
+export const rewardEventTrackClick = async (url) => {
+  return await request.post({
+    url: `/admin-api/menduner/reward/event-track/click?url=${url}`
+  })
+}

File diff suppressed because it is too large
+ 0 - 0
src/components/Position/item.vue


+ 8 - 1
src/components/Position/longCompany.vue

@@ -15,7 +15,10 @@
       </div>
       <div class="company-info-bottom">
         <div class="chipBox">
-          <v-chip class="mr-2" color="primary" size="x-small" label v-for="(k, i) in item.welfareList" :key="i">{{ k }}</v-chip>
+          <div class="d-inline-block" v-for="(val, i) in item.welfareList" :key="i">
+            <span>{{ val }}</span>
+            <span class="mx-1" v-if="i !== item.welfareList.length - 1">|</span>
+          </div>
         </div>
         <div class="position" @click="handleClickEnterprise(item, 'recruitmentPositions')">
           查看全部职位
@@ -93,8 +96,12 @@ const handleClickEnterprise = (item, key) => {
   background-color: #f8fcfb;
   .chipBox {
     width: 70%;
+    min-width: 70%;
     overflow: hidden;
+    text-overflow: ellipsis;
     white-space: nowrap;
+    font-size: 13px; 
+    color: #999;
   }
   .position {
     color: #666;

+ 2 - 1
src/config/axios/index.js

@@ -27,7 +27,8 @@ export default {
   },
   post: async (option) => {
     const res = await request({ method: 'POST', ...option })
-    return res.data
+    const result = res ? res.data : {}
+    return result
   },
   postOriginal: async (option) => {
     const res = await request({ method: 'POST', ...option })

+ 35 - 1
src/config/axios/service.js

@@ -3,9 +3,11 @@ import Snackbar from '@/plugins/snackbar'
 import Confirm from '@/plugins/confirm'
 import qs from 'qs'
 import { config } from '@/config/axios/config'
+import { getSuffixAfterPrefix } from '@/utils/prefixUrl'
 import { getCurrentLocaleLang } from '@/utils/lang'
 import { enterpriseRefreshToken, userRefreshToken } from '@/api/common'
 import { getToken, getRefreshToken, removeToken, setToken, setRefreshToken } from '@/utils/auth'
+import { rewardEventTrackClick } from '@/api/integral'
 import errorCode from './errorCode'
 
 import { useI18n } from '@/hooks/web/useI18n'
@@ -32,6 +34,14 @@ let requestList = []
 let isRefreshToken = false
 // 请求白名单,无须token的接口
 const whiteList = ['/login', '/refresh-token']
+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 clickTrigger = (eventRules ? JSON.parse(eventRules) : []).filter(_e => _e.type === '1')
 
 // 创建axios实例
 const service = axios.create({
@@ -77,6 +87,13 @@ service.interceptors.request.use(
         config.url = config.url + '?' + paramsStr
       }
     }
+    // 截取request url
+    const url = getSuffixAfterPrefix(config.url)
+    if (!url || !clickTrigger.length) return config
+    const _obj = clickTrigger.find(e => e.url === url)
+    if (_obj) {
+      rewardEventTrackClick(_obj.url)
+    }
     return config
   },
   (error) => {
@@ -89,6 +106,13 @@ service.interceptors.request.use(
 // response 拦截器
 service.interceptors.response.use(
   async (response) => {
+    if (response.config.url.includes(RETURNED_API)) {
+      console.log(response.data.data, '积分获取data')
+      if (!response.data.data) return
+      const { match, title, point } = response.data.data
+      if (match) Snackbar.success(`恭喜您${title}获得${point}积分`)
+      return
+    }
     const { t } = useI18n()
     let { data } = response
     const config = response.config
@@ -172,9 +196,19 @@ service.interceptors.response.use(
         Snackbar.error(msg)
       }
       return Promise.reject(msg)
-    } else {
+    }
+    
+    // 请求成功后触发获取积分
+    if (!requestCompletionTrigger.length) {
       return data
     }
+    const _list = requestCompletionTrigger.filter(_e => {
+      return response.config.url.includes(_e.url)
+    })
+    if (_list.length) {
+      rewardEventTrackClick(_list.pop().url)
+    }
+    return data
   },
   (error) => {
     const { t } = useI18n()

+ 5 - 0
src/store/user.js

@@ -5,6 +5,7 @@ import { getUserInfo } from '@/api/personal/user'
 import Snackbar from '@/plugins/snackbar'
 import { timesTampChange } from '@/utils/date'
 import { getBaseInfoDictOfName } from '@/utils/getText'
+import { getRewardEventTrackList } from '@/api/integral'
 
 
 export const useUserStore = defineStore('user',
@@ -60,6 +61,10 @@ export const useUserStore = defineStore('user',
           const data = await api({ id: this.accountInfo.userId })
           this.userInfo = data
           localStorage.setItem('userInfo', JSON.stringify(data))
+
+          // 获取规则配置跟踪列表
+          const eventList = await getRewardEventTrackList()
+          localStorage.setItem('eventList', JSON.stringify(eventList) ?? [])
         } catch (error) {
           Snackbar.error(error.msg)
         }

+ 15 - 0
src/utils/prefixUrl.js

@@ -0,0 +1,15 @@
+const prefixList = ['/app-api', '/admin-api']
+
+export const getSuffixAfterPrefix = (str) => {
+  const matchingPrefix = prefixList.find(prefix => str.startsWith(prefix))
+  if (matchingPrefix) {
+    const matchUrl = str.slice(matchingPrefix.length)
+    const hasQuery = matchUrl.indexOf('?') !== -1
+    if (hasQuery) {
+      const arr = matchUrl.split('?')
+      return arr[0]
+    }
+    else return matchUrl
+  }
+  return undefined
+}

+ 1 - 1
src/views/recruit/position/components/details.vue

@@ -162,7 +162,7 @@ getCollectionStatus()
 const handleCollection = async () => {
   const api = isCollection.value ? getPersonJobUnfavorite : getPersonJobFavorite
   await api(isCollection.value ? id : { jobId: id })
-  getCollectionStatus()
+  await getCollectionStatus()
 }
 
 const dialog = ref(false)

Some files were not shown because too many files changed in this diff