Browse Source

收到的简历列表

Xiao_123 1 month ago
parent
commit
6a351212bf
5 changed files with 527 additions and 211 deletions
  1. 14 1
      api/new/position.js
  2. 35 171
      api/resume.js
  3. 107 32
      pagesA/resume/index.vue
  4. 357 0
      pagesA/resume/item.vue
  5. 14 7
      pagesB/InviteInterview/index.vue

+ 14 - 1
api/new/position.js

@@ -1,6 +1,6 @@
 import request from "@/utils/request"
 import request from "@/utils/request"
 
 
-// 招聘端-职位列表
+// 招聘端-职位列表分页
 export const getJobAdvertisedList = (params) => {
 export const getJobAdvertisedList = (params) => {
   return request({
   return request({
     url: '/app-api/menduner/system/recruit/job-advertised/page',
     url: '/app-api/menduner/system/recruit/job-advertised/page',
@@ -13,6 +13,19 @@ export const getJobAdvertisedList = (params) => {
   })
   })
 }
 }
 
 
+// 职位列表
+export const getJobAdvertised = (params) => {
+  return request({
+    url: '/app-api/menduner/system/recruit/job-advertised/list',
+    method: 'GET',
+    params,
+    custom: {
+      showLoading: true,
+      auth: true
+    }
+  })
+}
+
 // 获取待支付的订单
 // 获取待支付的订单
 export const getUnpaidOrder = (params) => {
 export const getUnpaidOrder = (params) => {
   return request({
   return request({

+ 35 - 171
api/resume.js

@@ -1,25 +1,11 @@
 import request from "@/utils/request"
 import request from "@/utils/request"
 
 
-// 保存基本信息
-export const saveResumeBasicInfo = async (data) => {
+// 投递简历分页
+export const getPersonCvPage = async (params) => {
   return request({
   return request({
-    url: '/app-api/menduner/system/person/resume/info/save',
-    method: 'POST',
-    data,
-    custom: {
-      openEncryption: true,
-      showLoading: false,
-      auth: true
-    }
-  })
-}
-
-// 保存培训经历
-export const saveResumeTrainExp = async (data) => {
-  return request({
-    url: '/app-api/menduner/system/person/resume/train/exp/save',
-    method: 'POST',
-    data,
+    url: '/app-api/menduner/system/recruit/person-cv/page',
+    params,
+    method: 'GET',
     custom: {
     custom: {
       showLoading: false,
       showLoading: false,
       auth: true
       auth: true
@@ -27,22 +13,11 @@ export const saveResumeTrainExp = async (data) => {
   })
   })
 }
 }
 
 
-// 删除培训经历
-export const deleteResumeTrainExp = async (id) => {
+// 面试信息分页
+export const getInterviewInvitePage = async (params) => {
   return request({
   return request({
-    url: '/app-api/menduner/system/person/resume/train/exp/remove?id=' + id,
-    method: 'DELETE',
-    custom: {
-      auth: true,
-      showLoading: false
-    }
-  })
-}
-
-// 获取培训经历
-export const getResumeTrainExp = async () => {
-  return request({
-    url: '/app-api/menduner/system/person/resume/get/train/exp',
+    url: '/app-api/menduner/system/recruit/interview-invite/page',
+    params,
     method: 'GET',
     method: 'GET',
     custom: {
     custom: {
       showLoading: false,
       showLoading: false,
@@ -51,10 +26,11 @@ export const getResumeTrainExp = async () => {
   })
   })
 }
 }
 
 
-// // 获取-教育经历
-export const getResumeEduExp = async () => {
+// 不合适简历分页
+export const personCvUnfitPage = async (params) => {
   return request({
   return request({
-    url: '/app-api/menduner/system/person/resume/get/edu/exp',
+    url: '/app-api/menduner/system/recruit/person-cv/unfitPage',
+    params,
     method: 'GET',
     method: 'GET',
     custom: {
     custom: {
       showLoading: false,
       showLoading: false,
@@ -63,22 +39,10 @@ export const getResumeEduExp = async () => {
   })
   })
 }
 }
 
 
-// 删除-教育经历
-export const deleteResumeEduExp = async (id) => {
-  return request({
-    url: '/app-api/menduner/system/person/resume/edu/exp/remove?id=' + id,
-    method: 'DELETE',
-    custom: {
-      auth: true,
-      showLoading: false
-    }
-  })
-}
-
-// 保存-教育经历
-export const saveResumeEduExp = async (data) => {
+// 不合适
+export const joinEliminate = async (data) => {
   return request({
   return request({
-    url: '/app-api/menduner/system/person/resume/edu/exp/save',
+    url: '/app-api/menduner/system/recruit/person-cv/unfit/eliminate',
     method: 'POST',
     method: 'POST',
     data,
     data,
     custom: {
     custom: {
@@ -88,36 +52,11 @@ export const saveResumeEduExp = async (data) => {
   })
   })
 }
 }
 
 
-// 获取-工作经历
-export const getResumeWorkExp = async () => {
-  return request({
-    url: '/app-api/menduner/system/person/resume/get/work/exp',
-    method: 'GET',
-    custom: {
-      showLoading: false,
-      auth: true
-    }
-  })
-}
-
-// 删除-工作经历
-export const deleteResumeWorkExp = async (id) => {
+// 取消不合适
+export const personCvUnfitCancel = async (id) => {
   return request({
   return request({
-    url: '/app-api/menduner/system/person/resume/work/exp/remove?id=' + id,
-    method: 'DELETE',
-    custom: {
-      auth: true,
-      showLoading: false
-    }
-  })
-}
-
-// 保存-工作经历
-export const saveResumeWorkExp = async (data) => {
-  return request({
-    url: '/app-api/menduner/system/person/resume/work/exp/save',
+    url: '/app-api/menduner/system/recruit/person-cv/unfit/cancellation?id=' + id,
     method: 'POST',
     method: 'POST',
-    data,
     custom: {
     custom: {
       showLoading: false,
       showLoading: false,
       auth: true
       auth: true
@@ -125,23 +64,24 @@ export const saveResumeWorkExp = async (data) => {
   })
   })
 }
 }
 
 
-// 获取-技能树形
-export const getSkillTree = async () => {
+// 加入储备
+export const joinToTalentPool = async (id) => {
   return request({
   return request({
-    url: '/app-api/menduner/system/skill/get/tree',
-    method: 'GET',
+    url: `/app-api/menduner/system/enterprise-talent-pool/add?userId=${id}`,
+    method: 'POST',
     custom: {
     custom: {
+      openEncryption: true,
       showLoading: false,
       showLoading: false,
       auth: true
       auth: true
     }
     }
   })
   })
 }
 }
 
 
-// 获取-职业技能
-export const getResumePersonSkill = async () => {
+// 入职
+export const personEntryByEnterprise = async (id) => {
   return request({
   return request({
-    url: '/app-api/menduner/system/person/resume/get/person/skill',
-    method: 'GET',
+    url: `/app-api/menduner/system/recruit/person-cv/entry?id=${id}`,
+    method: 'POST',
     custom: {
     custom: {
       showLoading: false,
       showLoading: false,
       auth: true
       auth: true
@@ -149,24 +89,11 @@ export const getResumePersonSkill = async () => {
   })
   })
 }
 }
 
 
-// 删除-职业技能
-export const deleteResumePersonSkill = async (id) => {
-  return request({
-    url: '/app-api/menduner/system/person/resume/person/skill/remove?id=' + id,
-    method: 'DELETE',
-    custom: {
-      auth: true,
-      showLoading: false
-    }
-  })
-}
-
-// 保存-职业技能
-export const saveResumePersonSkill = async (data) => {
+// 结算
+export const hireJobCvRelSettlement = async (id) => {
   return request({
   return request({
-    url: '/app-api/menduner/system/person/resume/person/skill/save',
+    url: `/app-api/menduner/system/recruit/person-cv/settlement?id=${id}`,
     method: 'POST',
     method: 'POST',
-    data,
     custom: {
     custom: {
       showLoading: false,
       showLoading: false,
       auth: true
       auth: true
@@ -174,78 +101,15 @@ export const saveResumePersonSkill = async (data) => {
   })
   })
 }
 }
 
 
-// 保存求职意向
-export const saveResumeJobInterested = async (data) => {
+// 记录查看简历
+export const personJobCvLook = async (id) => {
   return request({
   return request({
-    url: '/app-api/menduner/system/person/resume/job/interested/save',
+    url: `/app-api/menduner/system/recruit/person-cv/look?id=${id}`,
     method: 'POST',
     method: 'POST',
-    data,
     custom: {
     custom: {
       showLoading: false,
       showLoading: false,
-      auth: true
-    }
-  })
-}
-
-// 删除求职意向
-export const deleteResumeJobInterested = async (id) => {
-  return request({
-    url: '/app-api/menduner/system/person/resume/job/interested/remove?id=' + id,
-    method: 'DELETE',
-    custom: {
       auth: true,
       auth: true,
-      showLoading: false
-    }
-  })
-}
-
-// // 获取求职意向
-export const getResumeJobInterested = async () => {
-  return request({
-    url: '/app-api/menduner/system/person/resume/get/job/interested',
-    method: 'GET',
-    custom: {
-      showLoading: false,
-      auth: true
-    }
-  })
-}
-
-// // 根据专业名称模糊搜索
-export const schoolMajorByName = async (params) => {
-  return request({
-    url: '/app-api/menduner/system/major/search/by/name',
-    params,
-    method: 'GET',
-    custom: {
-      showLoading: false,
-      auth: true
-    }
-  })
-}
-
-// 根据学校名称模糊搜索
-export const schoolSearchByName = async (params) => {
-  return request({
-    url: '/app-api/menduner/system/school/search/by/name',
-    params,
-    method: 'GET',
-    custom: {
-      showLoading: false,
-      auth: true
-    }
-  })
-}
-
-// 根据企业名称模糊搜索
-export const enterpriseSearchByName = async (params) => {
-  return request({
-    url: '/app-api/menduner/system/enterprise/search/by/name',
-    params,
-    method: 'GET',
-    custom: {
-      showLoading: false,
-      auth: true
+      openEncryption: true
     }
     }
   })
   })
 }
 }

+ 107 - 32
pagesA/resume/index.vue

@@ -1,46 +1,121 @@
 <template>
 <template>
-  <view class="ss-p-b-100">
-    <uni-segmented-control 
-			:current="current"
-			:values="tabList"
-			@clickItem="changeControl"
-			styleType="text"
-			activeColor="#00B760"
-		></uni-segmented-control>
-
-    <view class="ss-m-t-30" style="background-color: #f2f4f7; height: 100vh;"></view>
-    <!-- <view v-if="bioList?.length > 0">
-      <uni-card v-for="(item, index) in bioList" :key="index" :is-shadow="true" :border='false' shadow="0px 0px 3px 1px rgba(0,0,0,0.1)">
-        <view class="d-flex align-center">
-          <view v-if="props.resumeAnalysis" class="ss-m-r-15">
-            <radio :value="index" color="#00B760" :checked="index === checkedIndex" @tap="radioChange(index)" />
-          </view>
-          <view @click="preview(item.url)"  style="flex: 1;">
-            <view class="font-size-14" style="font-weight: bold;">{{ item.title }}</view>
-            <view>上传时间:{{ timesTampChange(item.createTime, 'Y-M-D') }}</view>
-          </view>
-          <view class="ss-m-l-30" style="width: 60rpx;">
-            <uni-icons @click="handleOpenPopup(item)" type="more-filled" size="20"></uni-icons>
-          </view>
-        </view>
-      </uni-card>
-		</view>
-		<view v-else class="nodata-img-parent">
-			<image src="https://minio.citupro.com/dev/static/nodata.png" mode="widthFix" style="width: 100vw;height: 100vh;"></image>
-		</view> -->
+  <view class="box defaultBgc">
+    <view style="background-color: #fff;">
+      <uni-segmented-control 
+        :current="current"
+        :values="tabList.map(e => e.label)"
+        @clickItem="changeControl"
+        styleType="text"
+        activeColor="#00B760"
+      ></uni-segmented-control>
+    </view>
+
+    <scroll-view class="scrollBox" :scroll-y="true" @scrolltolower="loadingMore" style="position:relative;">
+			<CardItem v-if="items?.length" :items="items" :current="tabList[current].value" @refresh="handleRefresh" />
+			<uni-load-more :status="more" />
+		</scroll-view>
   </view>
   </view>
 </template>
 </template>
 
 
 <script setup>
 <script setup>
 import { ref } from 'vue'
 import { ref } from 'vue'
 import { timesTampChange } from '@/utils/date'
 import { timesTampChange } from '@/utils/date'
-import { preview } from '@/utils/preview'
+import { dealDictObjData } from '@/utils/position'
+import CardItem from './item.vue'
+import { getPersonCvPage, getInterviewInvitePage, personCvUnfitPage } from '@/api/resume'
 
 
 const current = ref(0)
 const current = ref(0)
-const tabList = ref(['投递简历', '已邀约', '已入职', '已结算', '不合适'])
+const tabList = ref([
+  { label: '投递简历', value: 0, api: getPersonCvPage, status: null },
+  { label: '已邀约', value: 1, api: getInterviewInvitePage, status: '0' },
+  { label: '已入职', value: 2, api: getInterviewInvitePage, status: '1' },
+  { label: '已结算', value: 3, api: getInterviewInvitePage, status: '2' },
+  { label: '不合适', value: 4, api: personCvUnfitPage },
+])
+const more = ref('more')
+const total = ref(0)
+const items = ref([])
+const query = ref({
+  pageNo: 1,
+  pageSize: 10,
+  type: null,
+  status: null,
+})
+
+// 获取牛人列表
+const getList = async () => {
+  more.value = 'loading'
+
+  const api = tabList.value[current.value].api
+  if (current.value !== 0) {
+    query.value.conversationStatus = tabList.value[current.value].status
+    delete query.value.status
+    delete query.value.type
+  }
+
+  try {
+    const { data } = await api(query.value)
+    const { list, total: number } = data
+
+    if (!list.length) {
+      more.value = 'noMore'
+      return
+    }
+
+    total.value = number
+    const arr = list.map(e => {
+      let obj = e
+      if (e.person) obj.person = Object.assign(e.person, dealDictObjData({}, e.person))
+      obj.job = Object.assign(e.job, dealDictObjData({}, e.job))
+      obj.createTime = timesTampChange(e.createTime, 'Y-M-D h:m')
+      return obj
+    })
+    items.value = items.value.concat(arr)
+
+    if (items.value.length === +number) {
+      more.value = 'noMore'
+      return
+    }
+  } catch {
+    query.value.pageNo--
+    more.value = 'more'
+  }
+}
+getList()
+
+const handleRefresh = () => {
+  items.value = []
+  total.value = 0
+  query.value.pageNo = 1
+  getList()
+}
+
+const changeControl = (e) => {
+  current.value = e.currentIndex
+  handleRefresh()
+}
 
 
-const changeControl = (e) => {}
+// 加载更多
+const loadingMore = () => {
+	if (more.value === 'noMore') return
+  more.value = 'loading'
+  query.value.pageNo++
+	getList()
+}
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
+.box {
+  height: 100vh;
+  overflow: hidden;
+  box-sizing: border-box;
+  display: flex;
+  flex-direction: column;
+}
+.scrollBox{
+	flex: 1;
+  padding-bottom: 24rpx;
+  box-sizing: border-box;
+	height: 0 !important;
+}
 </style>
 </style>

+ 357 - 0
pagesA/resume/item.vue

@@ -0,0 +1,357 @@
+<template>
+	<view>
+		<uni-card v-for="(val, index) in items" :key="index" :is-shadow="true" @tap.stop="handleDetail(val)" :border='false' shadow="0px 0px 3px 1px rgba(0,0,0,0.1)">
+			<!-- 基本信息 -->
+			<view class="d-flex align-center">
+				<view class="user-avatar">
+					<image class="user-avatar-img" :src="getUserAvatar(val.person?.avatar, val.person?.sex)" mode="scaleToFill"></image>
+					<image class="user-avatar-sex" :src="val?.person?.sex ? val?.person?.sex === '1' ? '/static/img/man.png' : '/static/img/female.png' : ''" alt="" mode="scaleToFill" />
+				</view>
+				<view style="flex: 1; margin-left: 10px;">
+					<view class="d-flex justify-space-between align-center">
+						<view class="font-size-18">{{ val.person?.name }}</view>
+						<view v-if="current !== 4">
+							<span v-if="current === 0" :style="{'color': val.status && val.status === '0' ? '#fb8c00' : '#00B760'}">
+								{{ val.status && val.status === '0' ? '未查看' : '已查看' }}
+							</span>
+        			<span v-else class="color-999">{{ val.status ? statusList.find(i => i.value === val.status)?.label : '' }}</span>
+						</view>
+					</view>
+					<view class="ss-m-t-10">
+						<span 
+							class="color-999"
+							v-for="(key, index) in desc" 
+							:key="index"
+						>
+							{{ val.person?.[key] }}
+							<span v-if="index !== desc.length - 1 && val.person?.[key]" class="ss-m-x-10">|</span>
+						</span>
+					</view>
+				</view>
+			</view>
+
+			<view class="ss-m-t-15 color-999">
+				<view>投递职位:{{ formatName(val.job?.name) }}</view>
+				<view>操作时间:{{ timesTampChange(val.createTime) }}</view>
+			</view>
+
+			<view class="sub-li-bottom ss-m-t-20">
+				<view class="sub-li-bottom-item color-primary" @tap.stop="handlePreview(val)">查看/下载附件</view>
+				<view 
+					class="sub-li-bottom-item d-flex align-center justify-center" 
+					@tap.stop="handleLoadMore(val)" 
+					:style="{'color': !actionItems(val)?.length ? '#ccc' : '#00B760'}"
+				>
+					<view>更多操作</view>
+					<uni-icons type="list" class="ss-m-l-10" size="20" :color="!actionItems(val)?.length ? '#ccc' : '#00B760'"></uni-icons>
+				</view>
+			</view>
+		</uni-card>
+
+
+		<!-- 更多操作 -->
+		<uni-popup ref="popup" type="bottom" :mask-click="true">
+      <view class="actions" v-if="itemData && Object.keys(itemData).length">
+				<view
+					class="action-item"
+					v-for="(val, index) in actionItems(itemData)" 
+					:key="index"
+					@tap.stop="val.click(itemData)"
+				>{{ val.title }}</view>
+			</view>
+      <button class="big-cancel-button" @tap.stop="handleClosePopup">取消</button>
+    </uni-popup>
+	</view>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { timesTampChange } from '@/utils/date'
+import { getUserAvatar } from '@/utils/avatar'
+import { formatName } from '@/utils/getText'
+import { preview } from '@/utils/preview'
+import { getDict } from '@/hooks/useDictionaries'
+import { userStore } from '@/store/user'
+import { defaultText, talkToUser } from '@/hooks/useIM'
+import { joinToTalentPool, joinEliminate, personCvUnfitCancel, personEntryByEnterprise, hireJobCvRelSettlement, personJobCvLook } from '@/api/resume'
+
+const emit = defineEmits(['refresh'])
+const props = defineProps({ items: Array, current: [Number, String] })
+
+const user = userStore()
+const statusList = ref([])
+getDict('menduner_interview_invite_status').then(({ data }) => {
+	statusList.value = data.data || []
+})
+
+const desc = ['jobStatusName', 'eduName', 'expName']
+const popup = ref()
+const itemData = ref({})
+
+// 查看在线简历
+const handleDetail = async (val) => {
+	if (!val.userId || !val.id) {
+		uni.showToast({ title: '用户ID不存在', icon: 'none' })
+		return
+	}
+	try {
+		const {data } = await personJobCvLook(val.id)
+		if (data) emit('refresh')
+	} catch {}
+	uni.navigateTo({
+		url: `/pagesB/personnelDetails/index?id=${val.userId}&type=1`
+	})
+}
+
+// 查看附件
+const handlePreview = async (val) => {
+	if (!val.userId || !val.id) {
+		uni.showToast({ title: '用户ID不存在', icon: 'none' })
+		return
+	}
+	try {
+		const {data } = await personJobCvLook(val.id)
+		if (data) emit('refresh')
+	} catch {}
+	if (!val.url) {
+		uni.showToast({ title: '附件地址不存在', icon: 'none' })
+		return
+	}
+	preview(val.url)
+}
+
+// 更多操作
+const handleLoadMore = (val) => {
+	if (!actionItems(val).length) {
+		itemData.value = {}
+		uni.showToast({ title: '暂无更多操作', icon: 'none' })
+		return
+	}
+	itemData.value = val
+	popup.value.open()
+}
+
+// 关闭操作弹窗
+const handleClosePopup = () => {
+	popup.value.close()
+	itemData.value = {}
+}
+
+// 加入储备 
+const handleJoinToTalentPool = async (item) => {
+  if (!item.userId) {
+		uni.showToast({ title: '用户ID不存在', icon: 'none' })
+		return
+	}
+  try {
+		await joinToTalentPool(item.userId)
+		uni.showToast({ title: '加入成功', icon: 'none' })
+		handleClosePopup()
+		emit('refresh')
+	} catch {
+		handleClosePopup()
+	}
+}
+
+// 邀请面试
+const handleInterviewInvite = (item) => {
+	if (item?.job?.status === '1') {
+		uni.showToast({ title: '职位已关闭', icon: 'none' })
+		return
+	}
+	uni.navigateTo({
+	  url: `/pagesB/InviteInterview/index?id=${item.userId}&jobId=${item.job.id}`
+	})
+	handleClosePopup()
+}
+
+// 不合适
+const handleEliminate = async (item) => {
+	if (!item.userId) {
+		uni.showToast({ title: '用户ID不存在', icon: 'none' })
+		return
+	}
+	const query = {
+    bizId: item.id,
+    jobId: item.job.id,
+    userId: item.userId,
+    type: props.current === 0 ? '0' : '1' // 投递简历0 已邀约1
+  }
+	// 招聘会职位则带id
+  if (item?.jobFairId) query.jobFairId = item.jobFairId
+  try {
+		await joinEliminate(query)
+		uni.showToast({ title: '操作成功', icon: 'none' })
+		handleClosePopup()
+		emit('refresh')
+	} catch {
+		handleClosePopup()
+	}
+}
+
+// 取消不合适
+const handleCancelEliminate = async (item) => {
+	if (!item.id) {
+		uni.showToast({ title: 'ID不存在', icon: 'none' })
+		return
+	}
+	try {
+		await personCvUnfitCancel(item.id)
+		uni.showToast({ title: '操作成功', icon: 'none' })
+		handleClosePopup()
+		emit('refresh')
+	} catch {
+		handleClosePopup()
+	}
+}
+
+// 立即沟通
+const handleToCommunicate = async (item) => {
+	if (item?.job?.status === '1') {
+		uni.showToast({ title: '职位已关闭', icon: 'none' })
+		return
+	}
+
+	const userId = item.userId
+  if (!userId) return
+  const channel = await talkToUser({ userId, text: defaultText })
+
+	const query = {
+		id: userId,
+		name: item?.person?.name || item?.person?.phone,
+		channelID: channel.channelID,
+		channelType: channel.channelType,
+		avatar: item?.person?.avatar,
+		sex: item?.person?.sex,
+	}
+
+	const queryStr = Object.keys(query).reduce((r, v) => {
+		if (!query[v]) {
+			return r
+		}
+		return r += `${v}=${encodeURIComponent(query[v])}&`
+	}, '?')
+	uni.navigateTo({
+		url: `/pagesA/chart/index${queryStr.slice(0, -1)}`
+  })
+	handleClosePopup()
+}
+
+// 结算
+const handleSettlement = async (item) => {
+	if (!item.id) {
+		uni.showToast({ title: 'ID不存在', icon: 'none' })
+		return
+	}
+	try {
+		await hireJobCvRelSettlement(item.id)
+		uni.showToast({ title: '操作成功', icon: 'none' })
+		handleClosePopup()
+		emit('refresh')
+
+		// 更新账户信息
+		setTimeout(async () => {
+			await user.getAccountInfo()
+		}, 2000)
+	} catch {
+		handleClosePopup()
+	}
+}
+
+// 入职
+const handleEnterByEnterprise = async (item) => {
+	console.log(item, '====入职====')
+	if (!item.id) {
+		uni.showToast({ title: 'ID不存在', icon: 'none' })
+		return
+	}
+	try {
+		await personEntryByEnterprise(item.id)
+		uni.showToast({ title: '操作成功', icon: 'none' })
+		handleClosePopup()
+		emit('refresh')
+	} catch {
+		handleClosePopup()
+	}
+}
+
+const actionItems = (item) => {
+  const arr = []
+  if (props.current === 0) arr.push({ title: '邀请面试', click: handleInterviewInvite }, { title: '立即沟通', click: handleToCommunicate })
+  if ([0, 1].includes(props.current)) arr.push({ title: '不合适', click: handleEliminate })
+  if (props.current === 4) arr.push({ title: '取消不合适', click: handleCancelEliminate })
+  if (props.current === 2 && item?.job?.hire) arr.push({ title: '结算', click: handleSettlement })
+  if (props.current === 1 && ['3', '4'].includes(item.status)) arr.push({ title: '入职', click: handleEnterByEnterprise })
+	// 面试后才能够加入储备
+  if ([1, 2, 3].includes(props.current) && !item.inTalentPool) arr.push({ title: '加入储备', click: handleJoinToTalentPool })
+  return arr
+}
+</script>
+
+<style scoped lang="scss">
+.user-avatar {
+	position: relative;
+	&-img {
+		width: 45px;
+		height: 45px;
+		border-radius: 50%;
+	}
+	&-sex {
+		position: absolute;
+		right: 0;
+		bottom: 2px;
+		width: 20px;
+		height: 20px;
+		background-color: #fff;
+		border-radius: 50%;
+	}
+}
+.action {
+  font-size: 28rpx;
+	&-item {
+		text-align: center;
+		width: 90vw;
+		border-bottom: 1px solid #eee;
+		height:44px;
+		line-height: 44px;
+		margin: 0 auto;
+		color: #00B760;
+		background-color: #fff !important;
+		&:first-child {
+			border-radius: 5px 5px 0 0;
+		}
+		&:last-child {
+			border-radius: 0 0 5px 5px;
+			border-bottom: none;
+		}
+	}
+}
+.big-cancel-button {
+  width: 90vw;
+  height:44px;
+  line-height: 44px;
+  margin: 10px auto;
+	color: #fe574a;
+  background-color: #fff !important;
+  font-size: 28rpx;
+}
+.sub-li-bottom {
+  display: flex;
+	justify-content: space-between;
+	// align-items: flex-end;
+  margin-top: 10px;
+  font-size: 13px;
+	&-item {
+		width: 50%;
+		height: 35px;
+		line-height: 35px;
+		text-align: center;
+		margin-right: 15px;
+		background-color: #f7f8fa;
+		border-radius: 4px;
+		&:nth-child(2) {
+			margin-right: 0;
+		}
+	}
+}
+</style>

+ 14 - 7
pagesB/InviteInterview/index.vue

@@ -5,7 +5,7 @@
 				<uni-datetime-picker v-model="formData.time" type="datetime" :border="true" returnType="timestamp" :hide-second="true" />
 				<uni-datetime-picker v-model="formData.time" type="datetime" :border="true" returnType="timestamp" :hide-second="true" />
 			</uni-forms-item>
 			</uni-forms-item>
 			<uni-forms-item name="jobId" label="招聘职位" required>
 			<uni-forms-item name="jobId" label="招聘职位" required>
-				<uni-data-select	v-model="formData.jobId" :localdata="jobList"	@change="handleChangeJob"	placeholder="请选择招聘职位"></uni-data-select>
+				<uni-data-select	v-model="formData.jobId" :disabled="jobDisabled" :localdata="jobList"	@change="handleChangeJob"	placeholder="请选择招聘职位"></uni-data-select>
 			</uni-forms-item>
 			</uni-forms-item>
 			<uni-forms-item name="address" label="面试地点" required>
 			<uni-forms-item name="address" label="面试地点" required>
 				<uni-easyinput v-model="formData.address" placeholder="请输入面试地点"></uni-easyinput>
 				<uni-easyinput v-model="formData.address" placeholder="请输入面试地点"></uni-easyinput>
@@ -26,13 +26,14 @@ import { ref, unref } from 'vue'
 import { onLoad } from '@dcloudio/uni-app'
 import { onLoad } from '@dcloudio/uni-app'
 import { userStore } from '@/store/user'
 import { userStore } from '@/store/user'
 import { mobile } from '@/utils/validate'
 import { mobile } from '@/utils/validate'
-import { getJobAdvertisedList } from '@/api/new/position'
+import { getJobAdvertised } from '@/api/new/position'
 import { formatName } from '@/utils/getText'
 import { formatName } from '@/utils/getText'
 import { getInterviewInviteDefaultTime } from '@/utils/date'
 import { getInterviewInviteDefaultTime } from '@/utils/date'
 import { saveInterviewInvite } from '@/api/new/interview'
 import { saveInterviewInvite } from '@/api/new/interview'
 
 
 const formRef = ref(null)
 const formRef = ref(null)
 const useUserStore = userStore()
 const useUserStore = userStore()
+const jobDisabled = ref(false)
 const formData = ref({
 const formData = ref({
 	userId: null,
 	userId: null,
 	address: null,
 	address: null,
@@ -57,11 +58,17 @@ const formRules = {
 
 
 // 职位列表
 // 职位列表
 const jobList = ref([])
 const jobList = ref([])
-const getJobList = async () => {
-  const { data } = await getJobAdvertisedList({ pageNo: 1, pageSize: 10, hasExpiredData: false, status: 0 })
-  jobList.value = data?.list.map(e => {
+const getJobList = async (jobId) => {
+  const { data } = await getJobAdvertised({ status: 0 })
+  jobList.value = data.map(e => {
     return { text: formatName(e.name), value: e.id, ...e }
     return { text: formatName(e.name), value: e.id, ...e }
   })
   })
+	// 有职位id的则默认选中
+	if (jobId) {
+		formData.value.jobId = jobId
+		formData.value.address = jobList.value.find(item => item.value === jobId)?.address
+		jobDisabled.value = true
+	}
 }
 }
 
 
 const handleChangeJob = (e) =>{
 const handleChangeJob = (e) =>{
@@ -71,7 +78,7 @@ const handleChangeJob = (e) =>{
 }
 }
 
 
 onLoad(async (options) => {
 onLoad(async (options) => {
-	const { id } = options
+	const { id, jobId } = options
 	if (!id) {
 	if (!id) {
 		uni.showToast({
 		uni.showToast({
 			title: '缺少人员id',
 			title: '缺少人员id',
@@ -84,7 +91,7 @@ onLoad(async (options) => {
 	}
 	}
 
 
 	formData.value.userId = id
 	formData.value.userId = id
-	await getJobList()
+	await getJobList(jobId)
 })
 })
 
 
 // 提交
 // 提交