Browse Source

面试管理

Xiao_123 8 tháng trước cách đây
mục cha
commit
30df6198c5

+ 26 - 0
api/user.js

@@ -89,4 +89,30 @@ export const deleteResume = (id) => {
       showLoading: false
     }
   })
+}
+
+// 获取已投递的职位列表
+export const getJobDeliveryList = (params) => {
+  return request({
+    url: '/menduner/system/job-cv-rel/page',
+    method: 'GET',
+    params,
+    custom: {
+      showLoading: false,
+      auth: true
+    }
+  })
+}
+
+// 获取面试日程分页
+export const getUserInterviewInvitePage = (params) => {
+  return request({
+    url: '/menduner/system/interview-invite/page',
+    method: 'GET',
+    params,
+    custom: {
+      showLoading: false,
+      auth: true
+    }
+  })
 }

+ 2 - 1
components/PositionList/index.vue

@@ -24,7 +24,7 @@
           </span> -->
         </view>
         <!-- 岗位tag  -->
-        <view class="mt">
+        <view class="mt" v-if="showWelfareTag">
           <uni-tag 
             v-for="(tag,i) in item.enterprise?.welfareList || []"
             :key="i"
@@ -57,6 +57,7 @@
 const props = defineProps({
   list: { type: Array, default: () => [] },
   noMore: { type: Boolean, default: false },
+  showWelfareTag: { type: Boolean, default: true }
 })
 
 //岗位详情

+ 1 - 1
pagesA/collect/position.vue

@@ -1,6 +1,6 @@
 <template>
   <view class="defaultBgc">
-    <scroll-view class="scrollBox" scroll-y="true" @scrolltolower="loadingMore">
+    <scroll-view class="scrollBox" scroll-y="true" @scrolltolower="loadingMore" style="height: 100vh;">
       <view v-if="items.length">
         <PositionList class="pb-10" :list="items" :noMore="false"></PositionList>
         <uni-load-more :status="status" />

+ 98 - 2
pagesA/interview/index.vue

@@ -1,9 +1,105 @@
 <template>
-  <div>面试管理</div>
+  <view>
+    <uni-segmented-control :current="current" :values="controlList" @clickItem="handleChange" styleType="text" activeColor="#00897B"></uni-segmented-control>
+    <scroll-view class="scrollBox" scroll-y="true" @scrolltolower="loadingMore" style="height: calc(100vh - 36px);">
+      <view v-if="items.length">
+        <uni-card v-for="(item,index) in items" :key="index" :is-shadow="true" :border='false' shadow="0px 0px 3px 1px rgba(0,0,0,0.1)" >
+          <view>
+            <view class="mar">
+              <span style="font-size: 16px;font-weight: 700;color: black;">{{ item.job.name }}</span>
+              <span class="mar" v-if="item.job.hire">
+                <uni-icons type="fire-filled" size="25" color="#ff770d"></uni-icons>
+              </span>
+              <span class="salary-text">{{ item.job.payTo }}-{{ item.job.payFrom }}/{{ item.job.payName }}</span>
+            </view>
+            <view style="font-size: 13px;">
+              <span class="tag-gap">
+                <span>{{ item.job.areaName }}</span>
+                <span class="viewider">|</span>
+                <span>{{ item.job.eduName }}</span>
+                <span class="viewider">|</span>
+                <span>{{ item.job.expName }}</span>
+              </span>
+            </view>
+            <view class="mar">
+              <view style="margin:10px 0px;font-size:13px;" class="f-horizon">
+                <span style="display: flex;">
+                  <image  class="r-avatar" :src="item.enterprise.logoUrl || ''" style="width: 50px; height: 50px;"></image>
+                  <span class="ml" style="width:50vw;">
+                    <view style="width:50vw;font-weight: bold;">{{ item.enterprise.name }} </view>
+                    <view class="dis">
+                      <view class="show-more" :style="{'width': item.enterprise.industryName == '' ? '14vw' : '28vw'}">{{!!item.enterprise.industryName ? item.enterprise.industryName : '行业未知'}}</view>
+                      <span class="divider ss-m-10"> | </span>
+                      <span>{{ !!item.enterprise.scaleName ? item.enterprise.scaleName : '规模未知' }}</span>
+                    </view>
+                  </span>
+                </span>
+              </view>
+            </view>
+            <view v-if="current === 4">
+              <view>拒绝原因: {{ item.refuseMsg }}</view>
+            </view>
+          </view>
+          <view v-if="item.status == '0'">
+            <view class="divided-line"></view>
+            <view style="display: flex;justify-content: flex-end;">
+              <span style="color: #dd524d;text-decoration: underline;">拒绝</span>
+              <span style="color: #2991de;margin-left: 65rpx;text-decoration: underline;">同意</span>
+            </view>
+          </view>
+        </uni-card>
+        <uni-load-more :status="more" />
+      </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>
+    </scroll-view>
+  </view>
 </template>
 
 <script setup>
-// 我已投递,待接受,待面试,已完成,拒绝
+import { ref } from 'vue'
+import { getJobDeliveryList, getUserInterviewInvitePage } from '@/api/user'
+import { dealDictObjData } from '@/utils/position'
+
+const current = ref(0)
+const controlList = ['已投递', '待接受', '待面试', '已完成', '已拒绝']
+const statusList = [0, 1, 3, 98]
+
+const more = ref('more')
+const items = ref([])
+const queryParams = ref({
+  pageNo: 1,
+  pageSize: 10
+})
+
+const getList = async () => {
+  const api = current.value === 0 ? getJobDeliveryList : getUserInterviewInvitePage
+  if (current.value !== 0) queryParams.value.status = statusList[current.value - 1]
+  const { data } = await api(queryParams.value)
+  const list = data?.list || []
+  if (list?.length) {
+    list.forEach(e => {
+      e.job = { ...e.job, ...dealDictObjData({}, e.job) }
+      e.enterprise = { ...e.enterprise, ...dealDictObjData({}, e.enterprise)}
+    })
+    items.value = items.value.concat(list)
+  }
+  more.value = list?.length < queryParams.value.pageSize ? 'noMore' : 'more'
+}
+getList()
+
+const handleChange = (e) => {
+  queryParams.value.pageNo = 1
+  current.value = e.currentIndex
+  getList()
+}
+
+const loadingMore = () => {
+  more.value = 'loading'
+  queryParams.value.pageNo++
+  getList()
+}
 </script>
 
 <style scoped lang="scss">

+ 32 - 30
pagesA/seenMe/index.vue

@@ -1,36 +1,38 @@
 <template>
-  <scroll-view class="scrollBox" scroll-y="true" @scrolltolower="loadingMore">
-    <view v-if="list.length > 0">
-			<uni-card v-for="(item,index) in list" :key="index" :is-shadow="true" :border='false' shadow="0px 0px 3px 1px rgba(0,0,0,0.1)" >
-        <view class="f-horizon">
-          <image class="avatar" :src="item.enterprise.logoUrl || 'https://minio.citupro.com/dev/menduner/company-avatar.png'"></image>
-          <view class="f-straight" style="width:60vw;">
-            <view class="title-des">{{ item.enterprise.name }}</view>
-            <view class="s-word">
-              <span class="dis">
-                <view class="show-more" :style="{'width': item.enterprise.industryName == '' ? '15vw' : '30vw'}">
-                  {{ item.enterprise.industryName ? item.enterprise.industryName : '行业未知' }}
-                </view>
-                <span class="divider ss-m-10"> | </span>
-                <span>{{ item.enterprise.scaleName || '规模未知' }}</span>
-              </span>
+  <view class="defaultBgc" style="height: 100vh;">
+    <scroll-view class="scrollBox" scroll-y="true" @scrolltolower="loadingMore">
+      <view v-if="list.length > 0">
+        <uni-card v-for="(item,index) in list" :key="index" :is-shadow="true" :border='false' shadow="0px 0px 3px 1px rgba(0,0,0,0.1)" >
+          <view class="f-horizon">
+            <image class="avatar" :src="item.enterprise.logoUrl || 'https://minio.citupro.com/dev/menduner/company-avatar.png'"></image>
+            <view class="f-straight" style="width:60vw;">
+              <view class="title-des">{{ item.enterprise.name }}</view>
+              <view class="s-word">
+                <span class="dis">
+                  <view class="show-more" :style="{'width': item.enterprise.industryName == '' ? '15vw' : '30vw'}">
+                    {{ item.enterprise.industryName ? item.enterprise.industryName : '行业未知' }}
+                  </view>
+                  <span class="divider ss-m-10"> | </span>
+                  <span>{{ item.enterprise.scaleName || '规模未知' }}</span>
+                </span>
+              </view>
             </view>
           </view>
-        </view>
-        <view style="border-bottom: 1px dashed #ccc;"></view>
-        <view class="ss-m-t-20 d-flex align-center justify-end">
-          <image class="r-avatar" :src="getUserAvatar(item.contact.avatar, item.contact.sex)"></image>
-          <text class="ss-m-l-20">
-            {{ item.contact.name }} | {{ item.post.nameCn }}
-          </text>
-        </view>
-      </uni-card>
-      <uni-load-more :status="status" />
-		</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>
-  </scroll-view>
+          <view style="border-bottom: 1px dashed #ccc;"></view>
+          <view class="ss-m-t-20 d-flex align-center justify-end">
+            <image class="r-avatar" :src="getUserAvatar(item.contact.avatar, item.contact.sex)"></image>
+            <text class="ss-m-l-20">
+              {{ item.contact.name }} | {{ item.post.nameCn }}
+            </text>
+          </view>
+        </uni-card>
+        <uni-load-more :status="status" />
+      </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>
+    </scroll-view>
+  </view>
 </template>
 
 <script setup>