Explorar el Código

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

lifanagju_citu hace 9 meses
padre
commit
ba3508fc00

+ 0 - 127
public/static/sharingPage.html

@@ -1,127 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>分享职位</title>
-  </head>
-  <style type="text/css">
-    #app {
-      height: 100vh; /* 占据整个视口高度 */
-      width: 100%;
-      padding: 0;
-      margin: 0;
-      overflow: hidden;
-      font-size: 16px;
-      background-color: #fff;
-    }
-    #app .loadingCss {
-      display: flex;  
-      justify-content: center;  
-      align-items: center;  
-      height: 100%;
-      background-color: #f0f0f0;
-    }
-    #app .content {
-      padding: 10px 15px;
-      display: flex;  
-      flex-direction: column;
-      /* justify-content: center;   */
-      align-items: center;  
-      height: 100%;
-      width: 100%;
-      overflow: auto;
-      margin-top: 50px;
-    }
-    body {
-      width: 100%;
-      margin: 0;
-      padding: 0;
-    }
-  </style>
-  <body>
-  <div id="app" v-cloak>
-    <div v-if="loading && !loadFail" class="loadingCss">加载中...</div>
-    <div v-else-if="loading && loadFail" class="loadingCss">加载失败...</div>
-    <div v-else class="content">
-      <div class="banner-title">
-        <h1 class="ellipsis">{{ info?.name || '数据错误' }}</h1>
-        <span class="salary">{{ info?.payFrom || '数据错误' }}-{{ info?.payTo || '数据错误' }}/月</span>
-      </div>
-      <div class="banner-tags mt-4">
-        <span v-for="k in desc" :key="k.mdi" style="margin-right: 15px;">
-          <span class="ml-1">{{ k.value }}</span>
-        </span>
-      </div>
-      <div class="banner-tools my-4">
-      </div>
-      <div class="">
-        <div class="">
-          <span style="margin-right: 15px;">立即沟通</span>
-          <span>投递简历</span>
-        </div>
-      </div>
-    </div>
-  </div>
-  </body>
-  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>  
-  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
-  <script type="text/javascript">
-    const { nextTick, createApp, ref } = Vue
-    const loading = ref(true)
-    const loadFail = ref(false)
-    const app = createApp({
-      setup() {
-        const url = window.location.href
-        // const urlTest = 'http://menduner.citupro.com:7878/app-api/detail?id=1802541269864042498&name=2&phone=3&file=4'
-        const queryStr = url.split('?') && url.split('?')[1] // 提取URL的查询字符串部分
-        const query = { id: '', name: '', phone: '', file: '' }
-        
-        if (queryStr) queryStr.split('&').forEach(function (pair) { // 分割查询字符串为键值对数组
-          const parts = pair.split('=') // 分割每个键值对
-          query[parts[0]] = parts[1] || '' // 赋值到对象上,注意处理undefined情况
-        })
-
-        // 请求分享的详情数据
-        let info = ref(null)
-        const fetchData = async () => {
-          function alertFun (val) {
-            loadFail.value = true
-            // alert('获取详情失败,' + val)
-          }
-          try {
-            const url = 'http://menduner.citupro.com:7878/app-api/menduner/system/job/advertised/get/detail'
-            const params = { id: query.id }
-            const res = await axios.get(url, { params })
-            if (res && res.status !== 200) return alertFun(res.statusText)
-            // 处理数据
-            const { data } = res.data
-            if (data) {
-              info.value = data
-              loading.value = false
-            } else {
-              alertFun(res.data.msg)
-            }
-          } catch (error) {
-            console.error(error)
-          }
-        }
-        // 设置请求头
-        axios.defaults.headers.common['tenant-id'] = '155'
-        fetchData()
-        const desc = [
-          { mdi: 'mdi-map-marker-outline', value: '越秀区' }, // areaName
-          { mdi: 'mdi-school-outline', value: '高中' }, // eduName
-          { mdi: 'mdi-clock-time-ten-outline', value: '经验不限' } // expName
-        ]
-        return {
-          loading,
-          loadFail,
-          info,
-          desc
-        }
-      }
-    })
-    app.mount('#app')
-  </script>
-</html>

+ 22 - 7
src/components/Enterprise/components/positions.vue

@@ -40,15 +40,16 @@
         :class="['bottom-item', {'border-bottom-dashed': i !== list.length -1}, 'd-flex', 'justify-space-between', 'cursor-pointer']" 
         @mouseenter="val.active = true"
         @mouseleave="val.active = false"
-        @click="handlePosition(val)"
       >
         <div>
-          <p v-if="val.job.name.includes('style')" :class="['name', {'default-active': val.active }]" v-html="val.job.name"></p>
-          <p v-else :class="['name', {'default-active': val.active }]">{{ val.job.name }}</p>
+          <p v-if="val.job.name.includes('style')" :class="['name', {'default-active': val.active }]" v-html="val.job.name" @click="handlePosition(val)"></p>
+          <p v-else :class="['name', {'default-active': val.active }]" @click="handlePosition(val)">{{ val.job.name }}</p>
           <div style="line-height: 40px;">
-            <span v-for="k in desc" :key="k.mdi" class="mr-5">
-              <v-icon color="var(--color-666)" size="15">{{ k.mdi }}</v-icon>
-              <span class="ml-1 tag-text">{{ val.job[k.value] }}</span>
+            <span v-for="k in desc" :key="k.mdi">
+              <span v-if="val.job[k.value]" class="mr-5">
+                <v-icon color="var(--color-666)" size="15">{{ k.mdi }}</v-icon>
+                <span class="ml-1 tag-text">{{ val.job[k.value] }}</span>
+              </span>
             </span>
           </div>
         </div>
@@ -60,7 +61,7 @@
           <v-avatar :image="val.contact.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
           <span class="account-label">{{ val.contact.name }} · {{ val.contact.postNameCn }}</span>
           <span>
-            <v-btn class="half-button" color="primary" size="small">立即沟通</v-btn>
+            <v-btn class="half-button" color="primary" size="small" @click="toDetails(val)">立即沟通</v-btn>
           </span>
         </div>
       </div>
@@ -82,6 +83,7 @@ import { useRoute, useRouter } from 'vue-router'
 import { timesTampChange } from '@/utils/date'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { dealDictObjData } from '@/utils/position'
+import { prologue } from '@/hooks/web/useIM'
 import { getJobAdvertisedPositionCount, getJobAreaByEnterpriseId, getJobAdvertisedSearch } from '@/api/position'
 import MPagination from '@/components/CtPagination'
 import expType from '@/views/recruit/personal/position/components/conditionFilter/expType.vue'
@@ -204,6 +206,19 @@ const desc = [
   { mdi: 'mdi-school-outline', value: 'eduName' },
   { mdi: 'mdi-clock-time-ten-outline', value: 'expName' }
 ]
+
+const toDetails = async (info) => {
+  const userId = info.contact.userId
+  const enterpriseId = info.contact.enterpriseId
+  const text = '您好,我对该职位很感兴趣,希望能有机会与您进一步沟通。'
+  await prologue({userId, enterpriseId, text})
+  let url = `/recruit/personal/message?id=${info.job.id}`
+  if (info.contact.enterpriseId) {
+    url += `&enterprise=${info.contact.enterpriseId}`
+  }
+
+  router.push(url)
+}
 </script>
 
 <style scoped lang="scss">

+ 18 - 0
src/layout/enterprise.vue

@@ -153,4 +153,22 @@ $top: 50px;
     cursor: pointer;
   }
 }
+/* 滚动条样式 */
+::-webkit-scrollbar {
+  -webkit-appearance: none;
+  width: 0px;
+  height: 0px;
+}
+/* 滚动条内的轨道 */
+::-webkit-scrollbar-track {
+  background: rgba(0, 0, 0, 0.1);
+  border-radius: 0;
+}
+/* 滚动条内的滑块 */
+::-webkit-scrollbar-thumb {
+  cursor: pointer;
+  border-radius: 5px;
+  background: rgba(0, 0, 0, 0.15);
+  transition: color 0.2s ease;
+}
 </style>

+ 8 - 6
src/views/recruit/enterprise/informationManagement/informationSettingsComponents/enterpriseAlbum.vue

@@ -3,7 +3,7 @@
   <div v-if="!imgList.length" class="text-center">
     <Empty :elevation="false" message="您还没有企业相册,马上去上传图片吧!"></Empty>
     <v-btn prepend-icon="mdi mdi-upload" color="primary" @click.stop="openFileInput">
-      {{ $t('common.uploadPictures') }}
+      上传图片/视频
       <input
         type="file"
         ref="fileInput"
@@ -16,7 +16,7 @@
   <div v-else>
     <div class="mb-3">
       <v-btn prepend-icon="mdi mdi-upload" color="primary" @click.stop="openFileInput">
-        {{ $t('common.uploadPictures') }}
+        上传图片/视频
         <input
           type="file"
           ref="fileInput"
@@ -26,9 +26,9 @@
         />
       </v-btn>
     </div>
-    <div class="imgItem" v-for="(item, index) in imgList" :key="index" @click="handleClick(index)">
-      <v-img v-if="checkIsImage(item)" width="100%" height="100%" :src="item"></v-img>
-      <video v-else class="videos-radius mr-3" :src="item" controls height="172" width="172" preload="preload"></video>
+    <div class="imgItem" v-for="(item, index) in imgList" :key="index">
+      <v-img v-if="checkIsImage(item)" width="100%" height="100%" :src="item" @click="handleClick(index)"></v-img>
+      <video v-else class="videos-radius mr-3" :src="item" controls height="172" width="172" preload="preload" @click="handleClick(index)"></video>
       <div class="operate">
         <span></span>
         <span class="mdi mdi-trash-can-outline" @click="handleDelete(item)"></span>
@@ -70,9 +70,10 @@ const handleClick = (index) => {
 const handleDelete = async (url) => {
   const index = imgList.value.indexOf(url)
   if (index === -1) return
-  imgList.value.splice(index, 1)
   Confirm('系统提示', '是否确认删除?').then(async () => {
     await updateEnterpriseAlbum({ albumList: imgList.value })
+    Snackbar.success('删除成功')
+    imgList.value.splice(index, 1)
   })
 }
 
@@ -88,6 +89,7 @@ const openFileInput = () => {
 
 // 上传
 const handleUploadFile = async (e) => {
+  if (!e.target.files.length) return
   const file = e.target.files[0]
   const size = file.size
   if (size / (1024*1024) > 10) {

+ 1 - 0
src/views/recruit/enterprise/informationManagement/informationSettingsComponents/enterpriseLogo.vue

@@ -65,6 +65,7 @@ const openFileInput = () => {
 // 上传
 const typeList = ['png', 'jpg', 'jpeg']
 const handleUploadFile = async (e) => {
+  if (!e.target.files.length) return
   const file = e.target.files[0]
   const size = file.size
   if (size / (1024*1024) > 10) {

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 3 - 3
src/views/recruit/enterprise/positionManagement/components/item.vue


+ 1 - 0
src/views/recruit/enterprise/positionManagement/index.vue

@@ -68,6 +68,7 @@ const textItem = ref({
   width: 600,
   value: '',
   label: '请输入职位名称',
+  clearable: true,
   appendInnerIcon: 'mdi-magnify'
 })
 

+ 4 - 4
src/views/recruit/enterprise/talentPool/components/details.vue

@@ -1,7 +1,7 @@
 <!-- 人才库 - 人才详情 -->
 <template>
   <div class="d-flex justify-center mb-8">
-    <div v-if="Object.keys(cvData).length" style="width: 940px;overflow-y: auto;background: #fff;" class="px-8 pb-12 pt-3 my-n3 mr-3">
+    <div v-if="Object.keys(cvData).length" style="width: 940px;background: #fff;" class="px-8 pb-12 pt-3 my-n3 mr-3">
       <!-- 基本信息 -->
       <baseInfo class="mt-5" :data="cvData.person"></baseInfo>
       <!-- 个人优势 -->
@@ -45,9 +45,9 @@
         <attachmentResume style="flex: 1;"></attachmentResume>
       </div> -->
     </div>
-    <div class="operate pa-3">
+    <!-- <div class="operate pa-3">
       <v-list>
-        <!-- <v-list-subheader class="title">简历助手</v-list-subheader> -->
+        <v-list-subheader class="title">简历助手</v-list-subheader>
         <v-list-item
           v-for="(item, i) in operateItems" :key="'简历助手' + i"
           color="primary"
@@ -57,7 +57,7 @@
         >
         </v-list-item>
       </v-list>
-    </div>
+    </div> -->
   </div>
 </template>
 

+ 3 - 1
src/views/recruit/personal/position/components/conditionFilter/areaType.vue

@@ -35,7 +35,9 @@ let selectedItems = ref([])
 getDict('menduner_area_type', {}, 'areaList').then(({ data }) => {
   data = data?.length && data || []
   const arr = props.list.map(e => {
-    const { id, parentId, type, name: label } = data.find(k => Number(k.id) === Number(e.key))
+    const obj = data.find(k => Number(k.id) === Number(e.key))
+    if (!obj) return
+    const { id, parentId, type, name: label } = obj
     return { id, label, number: e.value, parentId, type }
   })
   items.value = [{ id: -1, label: '全部' }, ...arr]

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio