Selaa lähdekoodia

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

Xiao_123 6 kuukautta sitten
vanhempi
commit
ace77f364c

+ 4 - 4
.env.localDev

@@ -3,12 +3,12 @@ NODE_ENV = 'localDev'
 VITE_APP_TITLE = 门墩儿
 
 # 访问路径
-VITE_ACCESS_BASE_URL = 'http://localhost:3000'
-# VITE_ACCESS_BASE_URL = 'https://www.menduner.com'
+# VITE_ACCESS_BASE_URL = 'http://localhost:3000'
+VITE_ACCESS_BASE_URL = 'https://www.menduner.com'
 
 # 请求路径
-VITE_BASE_URL = 'http://192.168.3.80'
-# VITE_BASE_URL = 'https://www.menduner.com'
+# VITE_BASE_URL = 'http://192.168.3.80'
+VITE_BASE_URL = 'https://www.menduner.com'
 
 # 预览路径
 VITE_PREVIEW_URL = 'http://192.168.3.91:8012'

+ 31 - 0
src/App.vue

@@ -1,5 +1,36 @@
 <script setup>
 import { RouterView } from 'vue-router'
+import { ref, onMounted, onUnmounted } from 'vue'
+
+// const checkVersion = () => {
+//   const oldVersion = localStorage.getItem('version')
+//   axios.get('/version.json', {
+//     cache: 'no-store' // 禁用缓存
+//   }).then(({ data }) => {
+//     const res = data
+//     if (+oldVersion !== +res.version) {
+//       alert('页面已经更新,请点击 “确认” 按钮继续使用')
+//       // 如果有更新,保存最新版本
+//       localStorage.setItem('version', res.version)
+//       // 帮用户刷新页面
+//       setTimeout(() => {
+//         window.location.reload()
+//       }, 0)
+//     }
+//   })
+// }
+
+const timer = ref(null)
+onMounted(() => {
+  console.log(1, 'import.meta.env', import.meta.env)
+  // if (process.env.NODE_ENV === 'production') {
+  //   if (timer.value) clearInterval(timer.value)
+  //   timer.value = setInterval(() => { checkVersion() }, 3000)
+  // }
+})
+onUnmounted(() => {
+  if (timer.value) clearInterval(timer.value)
+})
 </script>
 
 <template>

+ 3 - 1
src/api/common/index.js

@@ -69,7 +69,8 @@ export const passwordLogin = async (data) => {
 // 根据邮箱获取企业注册申请
 export const getEnterpriseRegisterApply = async (email) => {
   return await request.get({
-    url: '/app-api/menduner/system/enterprise-register/by/email?email=' + email
+    url: '/app-api/menduner/system/enterprise-register/by/email?email=' + email,
+    openEncryption: true
   })
 }
 
@@ -383,6 +384,7 @@ export const socialAuthRedirect = async (params) => {
 export const orderCreated = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/trade/order/create',
+    openEncryption: true,
     data
   })
 }

+ 10 - 2
src/api/enterprise.js

@@ -83,6 +83,7 @@ export const saveUserInfo = async (data) => {
 export const entUpdateEmail = async (data) => {
   return await request.put({
     url: '/app-api/menduner/system/recruit/user/update-email',
+    openEncryption: true,
     data
   })
 }
@@ -98,7 +99,8 @@ export const entUpdatePassword = async (data) => {
 // 招聘端-获取人才的在线简历详情
 export const getPersonCvDetail = async (userId, id) => {
   return await request.get({
-    url: `/app-api/menduner/system/recruit/person-cv/detail?userId=${userId}&id=${id}`
+    url: `/app-api/menduner/system/recruit/person-cv/detail?userId=${userId}&id=${id}`,
+    openEncryption: true
   })
 }
 
@@ -113,6 +115,7 @@ export const getEnterpriseBaseInfo = async () => {
 export const updateEnterpriseBaseInfo = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/recruit/enterprise/update',
+    openEncryption: true,
     data
   })
 }
@@ -129,6 +132,7 @@ export const updateEnterpriseAlbum = async (data) => {
 export const saveEnterpriseBusiness = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/recruit/enterprise/business/save',
+    openEncryption: true,
     data
   })
 }
@@ -191,7 +195,8 @@ export const getTagTreeDataApi = async (params) => {
 // 检查招聘者账号密码是否需要修改
 export const checkRecruiterPassword = async () => {
   return await request.get({
-    url: '/app-api/menduner/system/recruit/user/check/password'
+    url: '/app-api/menduner/system/recruit/user/check/password',
+    openEncryption: true
   })
 }
 
@@ -199,6 +204,7 @@ export const checkRecruiterPassword = async () => {
 export const getPersonSearchPage = async (params) => {
   return await request.get({
     url: '/app-api/menduner/system/recruit/person-search/page',
+    openEncryption: true,
     params
   })
 }
@@ -207,6 +213,7 @@ export const getPersonSearchPage = async (params) => {
 export const getPersonRecommendPage = async (params) => {
   return await request.get({
     url: '/app-api/menduner/system/recruit/person-recommend/page',
+    openEncryption: true,
     params
   })
 }
@@ -215,6 +222,7 @@ export const getPersonRecommendPage = async (params) => {
 export const updateGroupUserAccount = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/recruit/user/update',
+    openEncryption: true,
     data
   })
 }

+ 1 - 0
src/api/mall.js

@@ -4,6 +4,7 @@ import request from '@/config/axios'
 export const redeemSubmit = async (data) => {
   return request.post({
     url: '/app-api/menduner/system/redeem/submit',
+    openEncryption: true,
     data
   })
 }

+ 5 - 0
src/api/personal/user.js

@@ -4,6 +4,7 @@ import request from '@/config/axios'
 export const getUserInfo = async (params) => {
   return await request.get({
     url: '/app-api/menduner/system/mde-user/get',
+    openEncryption: true,
     params
   })
 }
@@ -12,6 +13,7 @@ export const getUserInfo = async (params) => {
 export const getUserBindEnterpriseList = async (params) => {
   return await request.get({
     url: '/app-api/menduner/system/enterprise-user-bind/get/enterprise/list',
+    openEncryption: true,
     params
   })
 }
@@ -20,6 +22,7 @@ export const getUserBindEnterpriseList = async (params) => {
 export const getUserBindEnterpriseListByPhone = async (params) => {
   return await request.get({
     url: '/app-api/menduner/system/enterprise-user-bind/get/enterprise/list/by/phone',
+    openEncryption: true,
     params
   })
 }
@@ -36,6 +39,7 @@ export const enterpriseRegisterApply = async (data) => {
 export const getUserRegisterEnterpriseApply = async (params) => {
   return await request.get({
     url: '/app-api/menduner/system/enterprise-register/by/user',
+    openEncryption: true,
     params
   })
 }
@@ -44,6 +48,7 @@ export const getUserRegisterEnterpriseApply = async (params) => {
 export const saveUserAuthentication = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/user-auth/save',
+    openEncryption: true,
     data
   })
 }

+ 13 - 4
src/api/position.js

@@ -156,6 +156,7 @@ export const getPersonEnterpriseSubscribeCount = async (params) => {
 export const saveJobAdvertised = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/recruit/job-advertised/save',
+    openEncryption: true,
     data
   })
 }
@@ -164,6 +165,7 @@ export const saveJobAdvertised = async (data) => {
 export const createTradeOrder = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/recruit/trade/order/create',
+    openEncryption: true,
     data
   })
 }
@@ -204,6 +206,7 @@ export const jobAdvertisedUpload = async (data) => {
 export const getJobDetails = async (params) => {
   return await request.get({
     url: '/app-api/menduner/system/recruit/job-advertised/detail',
+    openEncryption: true,
     params
   })
 }
@@ -211,14 +214,16 @@ export const getJobDetails = async (params) => {
 // 招聘端-刷新职位
 export const refreshJobAdvertised = async (ids) => {
   return await request.post({
-    url: `/app-api/menduner/system/recruit/job-advertised/refresh?ids=${ids}`
+    url: `/app-api/menduner/system/recruit/job-advertised/refresh?ids=${ids}`,
+    openEncryption: true
   })
 }
 
 // 招聘端-开启职位
 export const enableJobAdvertised = async (ids) => {
   return await request.post({
-    url: `/app-api/menduner/system/recruit/job-advertised/enable?ids=${ids}`
+    url: `/app-api/menduner/system/recruit/job-advertised/enable?ids=${ids}`,
+    openEncryption: true
   })
 }
 
@@ -226,20 +231,23 @@ export const enableJobAdvertised = async (ids) => {
 export const closeJobAdvertised = async (ids) => {
   return await request.post({
     url: `/app-api/menduner/system/recruit/job-advertised/disable?ids=${ids}`,
+    openEncryption: true
   })
 }
 
 // 招聘端-置顶职位
 export const topJobAdvertised = async (ids) => {
   return await request.post({
-    url: `/app-api/menduner/system/recruit/job-advertised/top?ids=${ids}`
+    url: `/app-api/menduner/system/recruit/job-advertised/top?ids=${ids}`,
+    openEncryption: true
   })
 }
 
 // 招聘端-取消置顶职位
 export const topJobAdvertisedCancel = async (ids) => {
   return await request.post({
-    url: `/app-api/menduner/system/recruit/job-advertised/un-top?ids=${ids}`
+    url: `/app-api/menduner/system/recruit/job-advertised/un-top?ids=${ids}`,
+    openEncryption: true
   })
 }
 
@@ -254,6 +262,7 @@ export const getEnterpriseAuthDetails = async (enterpriseId) => {
 export const updatePositionExpireTime = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/recruit/job-advertised/renewal',
+    openEncryption: true,
     data
   })
 }

+ 3 - 1
src/api/recruit/enterprise/interview/index.js

@@ -12,6 +12,7 @@ export const getInterviewInvitePage = async (params) => {
 export const saveInterviewInvite = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/recruit/interview-invite/save',
+    openEncryption: true,
     data
   })
 }
@@ -27,7 +28,8 @@ export const cancelInterviewInvite = async (data) => {
 // 完成面试
 export const completedInterviewInvite = async (id) => {
   return await request.post({
-    url: `/app-api/menduner/system/recruit/interview-invite/completed?id=${id}`
+    url: `/app-api/menduner/system/recruit/interview-invite/completed?id=${id}`,
+    openEncryption: true
   })
 }
 

+ 1 - 0
src/api/recruit/enterprise/jobFair.js

@@ -25,6 +25,7 @@ export const getJobFair = async (id) => {
 export const saveJobAdvertisedExtend = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/recruit/job-advertised/save/extend',
+    openEncryption: true,
     data
   })
 }

+ 6 - 3
src/api/recruit/enterprise/personnel/index.js

@@ -3,7 +3,8 @@ import request from '@/config/axios'
 // 记录查看简历附件
 export const personJobCvLook = async (id) => {
   return await request.post({
-    url: `/app-api/menduner/system/recruit/person-cv/look?id=${id}`
+    url: `/app-api/menduner/system/recruit/person-cv/look?id=${id}`,
+    openEncryption: true
   })
 }
 
@@ -40,14 +41,16 @@ export const personCvUnfitCancel = async (id) => {
 // 招聘端-牛人管理-加入人才库
 export const joinToTalentPool = async (id) => {
   return await request.post({
-    url: `/app-api/menduner/system/enterprise-talent-pool/add?userId=${id}`
+    url: `/app-api/menduner/system/enterprise-talent-pool/add?userId=${id}`,
+    openEncryption: true
   })
 }
 
 // 招聘端-牛人管理-移出人才库
 export const removeFormTalentPool = async (id) => {
   return await request.post({
-    url: `/app-api/menduner/system/enterprise-talent-pool/remove?userId=${id}`
+    url: `/app-api/menduner/system/enterprise-talent-pool/remove?userId=${id}`,
+    openEncryption: true
   })
 }
 

+ 1 - 0
src/api/recruit/enterprise/resumeManagement/talentMap/index.js

@@ -4,6 +4,7 @@ import request from '@/config/axios'
 export const getRecruitPersonMapPage = async (params) => {
   return await request.get({
     url: '/app-api/menduner/system/recruit/person-map/page',
+    openEncryption: true,
     params
   })
 }

+ 4 - 2
src/api/recruit/enterprise/system/user/index.js

@@ -11,14 +11,16 @@ export const getEnterpriseUserList = async (params) => {
 // 启用账户
 export const systemUserEnable = async (ids) => {
   return await request.post({
-    url: `/app-api/menduner/system/recruit/user/enable?ids=${ids}`
+    url: `/app-api/menduner/system/recruit/user/enable?ids=${ids}`,
+    openEncryption: true
   })
 }
 
 // 禁用账户
 export const systemUserDisable = async (ids) => {
   return await request.post({
-    url: `/app-api/menduner/system/recruit/user/disable?ids=${ids}`
+    url: `/app-api/menduner/system/recruit/user/disable?ids=${ids}`,
+    openEncryption: true
   })
 }
 

+ 1 - 0
src/api/recruit/personal/resume/index.js

@@ -4,6 +4,7 @@ import request from '@/config/axios'
 export const saveResumeBasicInfo = async (data) => {
   return await request.post({
     url: '/app-api/menduner/system/person/resume/info/save',
+    openEncryption: true,
     data
   })
 }

+ 2 - 1
src/api/recruit/public/delivery/index.js

@@ -39,6 +39,7 @@ export const hireJobCvRelEliminate = async (ids) => {
 // 记录查看简历附件
 export const hireJobCvRelLook = async (id) => {
   return await request.post({
-    url: `/app-api/menduner/system/recruit/person-cv/look?id=${id}`
+    url: `/app-api/menduner/system/recruit/person-cv/look?id=${id}`,
+    openEncryption: true
   })
 }

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

@@ -8,11 +8,10 @@ import { getSuffixAfterPrefix, showNextAction } from '@/utils/prefixUrl'
 import { getCurrentLocaleLang } from '@/utils/lang'
 import { enterpriseRefreshToken, userRefreshToken } from '@/api/common'
 import { getToken, getRefreshToken, setToken, setRefreshToken, getIsEnterprise } from '@/utils/auth'
+import { encryptionFun } from '@/utils/openEncryption'
 import { rewardEventTrackClick } from '@/api/integral'
 import errorCode from './errorCode'
 import { useI18n } from '@/hooks/web/useI18n'
-import { generateUUID } from "@/utils/index" 
-import { sha256 } from 'js-sha256'
 
 // import { resetRouter } from '@/router'
 // import { deleteUserCache } from '@/hooks/web/useCache'
@@ -78,30 +77,7 @@ service.interceptors.request.use(
     }
 
     // 开启参数加密
-    if (config.openEncryption) {
-      // 1.请求的参数json // 携带的json一下,url拼接参数的直接用,没有参数不拼接
-      const jsonData = config.data ? JSON.stringify({...config.data}) :
-        config.params ? qs.stringify({...config.params}, { allowDots: true }) :
-        config.url.split('?')?.length>1 ? config.url.split('?')[1] : ''
-      // 2.固定的参数初始化成字符串
-      const supHeaders = {
-        appId: 'test', // 与后端协商一致使用
-        nonce: generateUUID(), // 前端生成唯一参数
-        timestamp: new Date().getTime(),
-      }
-      const appSecret = '123456' // 与后端协商一致使用
-      const staticHeadersStr = Object.keys(supHeaders).reduce((str, key) => {
-        str = str ? str + `&${key}=${supHeaders[key]}` : `${key}=${supHeaders[key]}`
-        return str
-      }, '') + appSecret
-
-      // 3.固定参数和请求参数拼接(拼接1和2)// signString
-      const finalStr = jsonData + staticHeadersStr
-      // 加密字符串
-      if (finalStr) supHeaders.sign = sha256(finalStr)
-      // 4.请求头加参数: appId + nonce + timestamp + sign // 顺序不能变
-      if (supHeaders) Object.keys(supHeaders).forEach(key => { (config).headers[key] = supHeaders[key] })
-    }
+    if (config.openEncryption) encryptionFun(config)
 
     // 设置租户
     if (tenantEnable && tenantEnable === 'true') {

+ 35 - 0
src/utils/openEncryption.js

@@ -0,0 +1,35 @@
+import { generateUUID } from "@/utils/index" 
+import { sha256 } from 'js-sha256'
+
+// 加密方式:请求头加参数: appId + nonce + timestamp + sign
+// (sign为: queryJsonData+paramsToStrSort+appSecret拼接后sha256加密字符串)
+
+// 开启参数加密
+export const encryptionFun = (config) => {
+  // console.log('加密内容用完请注释->config', config)
+  const initSign = {
+    appId: 'web_client', // 与后端协商一致使用
+    nonce: generateUUID(), // 前端生成唯一参数
+    timestamp: new Date().getTime(),
+  }
+  // 固定的参数初始化成字符串
+  const paramsToStrSort = ['appId', 'nonce', 'timestamp'] // 顺序不能变
+  let paramsStr = paramsToStrSort.reduce((str, key) => {
+    if (initSign[key]) str = str ? str + `&${key}=${initSign[key]}` : `${key}=${initSign[key]}`
+    return str
+  }, '')
+  const appSecret = 'fa0fc0b5098b974b' // 与后端协商一致使用(拼接在paramsStr后面,且拼接时不加key)
+  paramsStr = paramsStr + appSecret
+  // console.log('加密内容用完请注释->paramsStr', paramsStr)
+
+  // 请求的参数json // 携带的参数json一下,url拼接参数的直接用,没有参数不拼接
+  const queryJsonData = config.data ? JSON.stringify(config.data) :
+    config.params ? qs.stringify(config.params, { allowDots: true }) :
+    config.url.split('?')?.length>1 ? config.url.split('?')[1] : ''
+
+  // sha256加密字符串 
+  if (paramsStr) initSign.sign = sha256(queryJsonData + paramsStr)
+
+  // 请求头加参数initSign,请求头加参数: appId + nonce + timestamp + sign
+  if (initSign &&  Object.keys(initSign).length) Object.keys(initSign).forEach(key => { (config).headers[key] = initSign[key] })
+}

+ 5 - 4
src/views/mall/exchange.vue

@@ -126,11 +126,12 @@ const handleSubmit = async () =>{
     ...detailItem.value
   }
   formItems.value.options.forEach(e => {
-    obj[e.key] = e.value
+    if (!e.hide) obj[e.key] = e.value
   })
-  if (!obj.address || !obj.address.length) return Snackbar.warning('请选择收货地址')
-  obj.contactAddress = obj.address.join('') + obj.contactAddress
-  delete obj.address
+  if (obj.type && (!obj.address || !obj.address.length)) return Snackbar.warning('请选择收货地址')
+  if (obj.type) obj.contactAddress = obj.address.join('') + obj.contactAddress
+  delete obj.address 
+  if (!obj.contactName) obj.contactName = localStorage.getItem('baseInfo') ? JSON.parse(localStorage.getItem('baseInfo')).name : '--'
   await redeemSubmit(obj)
   Snackbar.success('提交成功')
   showDetail.value = false

+ 16 - 3
src/views/recruit/enterprise/jobFair/components/job.vue

@@ -3,6 +3,7 @@
     <div class="text-end mb-3">
       <v-btn color="primary" class="mr-3" @click="handleAdd">新增职位</v-btn>
       <v-btn color="primary" variant="outlined" @click="handleJoin">选择已发布的职位加入招聘会</v-btn>
+      <!-- <v-btn :loading="exportLoading" prepend-icon="mdi-export-variant" color="primary" variant="tonal" class="ml-3" @click="handleExport">职位导出</v-btn> -->
     </div>
     <JobItem :items="jobList" @refresh="getJobList"></JobItem>
 
@@ -76,9 +77,9 @@ import { useRouter, useRoute } from 'vue-router'
 import { useI18n } from '@/hooks/web/useI18n'
 import Snackbar from '@/plugins/snackbar'
 import { getEnterprisePubJobTypePermission } from '@/api/recruit/enterprise/position'
-
 import { getJobAdvertisedList } from '@/api/position'
-import Confirm from '@/plugins/confirm'
+import download from '@/utils/download'
+// import Confirm from '@/plugins/confirm'
 
 const props = defineProps({ id: [String, Number]})
 const router = useRouter()
@@ -148,8 +149,20 @@ const getPositionList = async () => {
     positionLoading.value = false
   }
 }
-
 getJobList()
+
+// // 导出参加双选会职位
+// const exportLoading = ref(false)
+// const handleExport = async () => {
+//   exportLoading.value = true
+//   try {
+//     const data = await getJobFairAdvertisedExport()
+//     download.excel(data, '招聘会职位列表' + '.xlsx')
+//   } finally {
+//     exportLoading.value = false
+//   }
+// }
+
 </script>
 
 <style scoped lang="scss">