Forráskód Böngészése

招聘会:拆分招聘中、已关闭职位列表展示,移除招聘会改为关闭职位(可激活)

Xiao_123 14 órája
szülő
commit
256a5405bb
2 módosított fájl, 102 hozzáadás és 33 törlés
  1. 71 7
      pagesB/jobFair/details.vue
  2. 31 26
      pagesB/jobFair/jobItem.vue

+ 71 - 7
pagesB/jobFair/details.vue

@@ -5,13 +5,15 @@
 			<rich-text class="title" :nodes="jobFairInfo?.title?.replace(/<\/?p[^>]*>/gi, '')"></rich-text>
 		</view>
 
-		<scroll-view class="scrollBox" :scroll-y="true" style="position:relative;">
+		<uni-segmented-control :current="tab" :values="controlList" @clickItem="tabChange" styleType="text" activeColor="#00B760" />
+		<scroll-view class="scrollBox" :scroll-y="true" style="position:relative;" @scrolltolower="loadingMore">
 			<JobItem 
 				v-if="jobFairPosition?.length"
 				:list="jobFairPosition"
 				:jobFairId="id"
+				:tab="tab"
 				:jobFairName="jobFairInfo?.title?.replace(/<\/?p[^>]*>/gi, '')"
-				@refresh="getJobFairPositionList"
+				@refresh="tabChange({ currentIndex: tab })"
 			/>
 			<uni-load-more v-else status="noMore" />
 		</scroll-view>
@@ -29,10 +31,13 @@
 import { ref } from 'vue'
 import { onLoad, onShow } from '@dcloudio/uni-app'
 import { getJobFair, getJobFairPosition } from '@/api/jobFair.js'
+import { getJobAdvertisedList } from '@/api/new/position'
 import { dealDictArrayData } from '@/utils/position.js'
 import JobItem from './jobItem.vue'
 
 const id = ref(null)
+const tab = ref(0)
+const controlList = ['招聘中', '已关闭']
 
 // 获取招聘会信息
 const jobFairInfo = ref({})
@@ -42,11 +47,11 @@ const getJobFairInfo = async () => {
   jobFairInfo.value = data || {}
 }
 
-// 获取招聘会职位
+// 招聘中职位
 const jobFairPosition = ref([])
-const getJobFairPositionList = async () => {
+const getJobList = async () => {
   try {
-	  uni.showLoading({ title: '加载中' })
+		uni.showLoading({ title: '加载中' })
 		const { data } = await getJobFairPosition(id.value)
 		if (!data || !data.length) {
 			jobFairPosition.value = []
@@ -58,6 +63,57 @@ const getJobFairPositionList = async () => {
   }
 }
 
+// 已关闭职位
+const more = ref('more')
+const pageTotal = ref(0)
+const pageInfo = ref({
+  pageSize: 10,
+  pageNo: 1
+})
+const getProgressJobList = async () => {
+  if (pageInfo.value.pageNo < 1) return
+  if (pageInfo.value.pageNo === 1) jobFairPosition.value = []
+  try {
+    more.value = 'loading'
+    const res = await getJobAdvertisedList({ ...pageInfo.value, status: '1', jobFairId: id.value, hire: false })
+    const list = res?.data?.list?.length ? res.data.list : []
+    pageTotal.value = res.data.total-0
+    if (!list?.length) {
+      more.value = 'noMore'
+      return
+    }
+    jobFairPosition.value.push(...dealDictArrayData([], list))
+    more.value = 'more'
+    if (jobFairPosition.value.length === pageTotal.value) {
+      more.value = 'noMore'
+      return
+    }
+  } catch (error) {
+    pageInfo.value.pageNo--
+    more.value = 'more'
+  }
+}
+
+// 加载更多
+const loadingMore = () => {
+	// 招聘中职位列表不需要加载更多,属于一次性拿回全部
+	if (tab.value === 0) return
+  if (more.value === 'noMore') return
+
+  more.value = 'loading'
+  pageInfo.value.pageNo++
+  getProgressJobList()
+}
+
+const tabChange = (e) => {
+  tab.value = e.currentIndex
+  jobFairPosition.value = []
+  
+  if (tab.value === 0) return getJobList()
+  pageInfo.value.pageNo = 1
+  getProgressJobList()
+}
+
 onLoad((options) => {
 	id.value = options.id
 	if (!id.value) {
@@ -72,11 +128,19 @@ onLoad((options) => {
 	}
 
 	getJobFairInfo()
-	getJobFairPositionList()
+	getJobList()
 })
 
 onShow(() => {
-	if (id.value) getJobFairPositionList()
+	if (id.value) {
+    jobFairPosition.value = []
+    if (tab.value) {
+      pageInfo.value.pageNo = 1
+      getProgressJobList()
+      return
+    }
+    getJobList()
+  }
 })
 
 // 加入招聘会

+ 31 - 26
pagesB/jobFair/jobItem.vue

@@ -33,21 +33,22 @@
 					</view>
           <view class="sub-li-bottom ss-m-t-20">
 						<view class="sub-li-bottom-item color-primary" @tap.stop="handleToResume(item)">{{ item.count || 0 }} 已投递简历</view>
-						<view class="sub-li-bottom-item color-error" @tap.stop="handleRemove(item)">移出招聘会</view>
+						<view v-if="tab === 0" class="sub-li-bottom-item color-error" @tap.stop="handleAction(0, item.id)">关闭</view>
+						<view v-else class="sub-li-bottom-item color-primary" @tap.stop="handleAction(1, item.id)">激活</view>
           </view>
         </view>
 			</view>
 		</view>
 
-		<uni-popup ref="removePopup" type="dialog">
+		<uni-popup ref="popup" type="dialog">
 			<uni-popup-dialog 
 				type="warn" 
 				cancelText="取消" 
 				confirmText="确定" 
 				title="系统提示" 
-				content="是否确认将此职位移出招聘会?" 
-				@confirm="handleRemoveConfirm"
-				@close="handleRemoveClose"
+				:content="`是否确认${actionType === 0 ? '关闭' : '激活'}此职位?`" 
+				@confirm="handleActionConfirm"
+				@close="handleActionClose"
 			></uni-popup-dialog>
 		</uni-popup>
   </view>
@@ -56,14 +57,15 @@
 <script setup>
 import { ref } from 'vue'
 import { formatName } from '@/utils/getText'
-import { quitJobFairPosition } from '@/api/jobFair'
 import { getUserAvatar } from '@/utils/avatar'
+import { closeJobAdvertised, enableJobAdvertised } from '@/api/new/position'
 
 const emit = defineEmits(['refresh'])
 const props = defineProps({
 	list: Array,
 	jobFairId: [String, Number],
-	jobFairName: String
+	jobFairName: String,
+	tab: Number
 })
 
 // 查看职位详情
@@ -81,32 +83,35 @@ const handleToResume = (val) => {
 	})
 }
 
-// 移出招聘会
-const removePopup = ref()
-const removeParams = ref({})
-const handleRemove = (val) => {
-	removeParams.value = val
-	removePopup.value.open()
-}
-const handleRemoveClose = () => {
-	removeParams.value = {}
-  removePopup.value.close()
-}
-const handleRemoveConfirm = async () => {
-	if (!removeParams.value.id || !props.jobFairId) {
+// 职位激活、关闭
+const popup = ref()
+const actionId = ref('')
+const actionType = ref('')
+const handleAction = (type, id) => {
+	actionId.value = id
+	actionType.value = type
+	popup.value.open()
+}
+const handleActionClose = () => {
+	actionId.value = ''
+	actionType.value = ''
+	popup.value.close()
+}
+const handleActionConfirm = async () => {
+	if (!actionId.value || !props.jobFairId) {
 		uni.showToast({ title: '正在维护中,请稍后再试', icon: 'none', duration: 2000 })
 		return
 	}
 	uni.showLoading({ title: '加载中' })
+	const api = actionType.value === 0 ? closeJobAdvertised : enableJobAdvertised
 	try {
-		await quitJobFairPosition({ jobFairId: props.jobFairId, jobId: removeParams.value.id })
-		uni.hideLoading()
-		uni.showToast({ title: '移出成功', icon: 'none' })
-		removeParams.value = {}
+		await api(actionId.value)
+		uni.showToast({ title: '操作成功', icon: 'none' })
 		emit('refresh')
-	} catch {
-		removeParams.value = {}
+	} finally {
 		uni.hideLoading()
+		actionId.value = ''
+		actionType.value = ''
 	}
 }
 </script>