zhengnaiwen_citu 4 달 전
부모
커밋
bf525907f5
1개의 변경된 파일131개의 추가작업 그리고 6개의 파일을 삭제
  1. 131 6
      src/views/recruit/enterprise/search/retrieval/index.vue

+ 131 - 6
src/views/recruit/enterprise/search/retrieval/index.vue

@@ -16,7 +16,9 @@
         <div>
           <v-chip v-for="k in position" :key="k.id" label class="mr-3" closable @click:close="handleClose(k)">{{ k.nameCn }}</v-chip>
         </div>
-        <div class="text-end font-size-15 cursor-pointer color-primary clear" @click="handleClear">清空筛选条件</div>
+        <div class="text-end">
+          <v-btn  color="primary" variant="text" @click="handleClear">清空筛选条件</v-btn>
+        </div>
       </div>
       <div class="text-center mt-3">
         <v-btn class="half-button" color="primary" @click="handleConfirm">搜 索</v-btn>
@@ -24,9 +26,124 @@
     </div>
   </div>
 
-  <div class="mt-10">
+  <div class="mt-10" v-loading="loading">
     <v-divider></v-divider>
-    <CtTable
+    <div class="py-3">
+      <v-card
+        v-for="item in items"
+        :key="item.id"
+        elevation="5"
+        class="mb-3"
+        :subtitle="item.subTitle"
+        :title="item?.name"
+      >
+        <template #prepend>
+          <v-badge
+            v-if="item?.sex === '1' || item?.sex === '2'"
+            class="mr-3 cursor-pointer"
+            bordered
+            offset-y="6"
+            :color="badgeColor(item)"
+            :icon="badgeIcon(item)"
+            @click="handleToPersonDetail(item)"
+          >
+            <v-avatar size="64" :image="getUserAvatar(item.avatar, item.sex)"></v-avatar>
+          </v-badge>
+          <v-avatar v-else class="mr-3 cursor-pointer" size="64" :image="getUserAvatar(item.avatar, item.sex)"  @click="handleToPersonDetail(item)"></v-avatar>
+        </template>
+        <template #append>
+          <v-btn color="primary" variant="text" @click="handleInvite(item)">邀请面试</v-btn>
+          <v-btn color="primary" variant="text" @click="handleCommunicate(item)">立即沟通</v-btn>
+        </template>
+        <template #title>
+          <span class="cursor-pointer defaultLink" @click="handleToPersonDetail(item)">
+            {{ item.name }}
+          </span>
+        </template>
+        <template #subtitle>
+          <div class="d-flex">
+            <div class="mr-10">{{ item.subTitle }}</div>
+            <div class="mr-10">首次工作时间: {{ timesTampChange(item.firstWorkTime, 'Y-M-D') }}</div>
+            <div>所在城市: {{ item.areaName }}</div>
+          </div>
+        </template>
+        
+        <div style="padding-left: 100px;" class="pb-5">
+          <div class="d-flex align-center">
+            <div class="mr-3">最新职位:</div>
+            <div>
+              <v-chip
+                class="mr-3"
+                color="primary"
+              >{{ item.workList[0]?.positionName ?? '暂无' }}</v-chip>
+            </div>
+          </div>
+          <div class="d-flex align-center mt-3">
+            <div class="mr-3">求职意向:</div>
+            <v-chip
+              v-for="interested in item.interestedList"
+              :key="interested.id"
+              class="mr-3"
+              color="primary"
+            >{{ positionData.find(e => e.id === interested.positionId)?.nameCn ?? '暂无' }}</v-chip>
+          </div>
+        </div>
+        <!-- <v-divider></v-divider> -->
+        <!-- <v-card-text class="d-flex mb-10"> -->
+          <!-- <div style="width: 50%;" class="d-flex align-center">
+            <div class="mr-3">最新职位:</div>
+            <div class="mr-10">
+              <v-chip
+                class="mr-3"
+                color="primary"
+              >{{ item.workList[0]?.positionName ?? '暂无' }}</v-chip>
+            </div>
+          </div>
+          
+          <div style="width: 50%;" class="d-flex align-center">
+            <div class="mr-3">求职意向</div>
+            <v-chip
+              v-for="interested in item.interestedList"
+              :key="interested.id"
+              class="mr-3"
+              color="primary"
+            >{{ positionData.find(e => e.id === interested.positionId)?.nameCn ?? '暂无' }}</v-chip>
+          </div> -->
+  
+            <!-- <v-timeline truncate-line="both" side="end" class="justify-start">
+              <v-timeline-item
+                dot-color="primary"
+                size="x-small"
+                v-for="work in item.workList"
+                :key="work.id"
+              >
+                <div class="d-flex">
+                  <div style="width: 200px;">
+                    {{ timesTampChange(work.startTime, 'Y.M.D') || '暂无' }}
+                    -
+                    {{ timesTampChange(work.endTime, 'Y.M.D') || timesTampChange(work.startTime, 'Y.M.D') ? '至今' : '暂无' }}
+                  </div>
+                  <div class="pr-3" style="min-width: 200px;">{{ work.enterpriseName }}</div>
+                  <div>{{ work.positionName }}</div>
+                </div>
+                
+              </v-timeline-item>
+            </v-timeline> -->
+
+          <!-- <div style="width: 50%;">
+            <div class="pa-3">求职意向</div>
+            <v-chip
+              v-for="interested in item.interestedList"
+              :key="interested.id"
+              class="mr-3"
+              color="primary"
+            >{{ positionData.find(e => e.id === interested.positionId)?.nameCn ?? '暂无' }}</v-chip>
+          </div> -->
+        <!-- </v-card-text> -->
+      </v-card>
+    </div>
+    <CtPagination :total="total" :page="query.pageNo" :limit="query.pageSize" @handleChange="handleChangePage"></CtPagination>
+    <!-- <CtTable
       :items="items"
       :headers="headers"
       :loading="loading"
@@ -56,7 +173,7 @@
         <v-btn color="primary" variant="text" @click="handleInvite(item)">邀请面试</v-btn>
         <v-btn color="primary" variant="text" @click="handleCommunicate(item)">立即沟通</v-btn>
       </template>
-    </CtTable>
+    </CtTable> -->
   </div>
 
   <CtDialog :visible="showInvite" :widthType="4" titleClass="text-h6" title="邀请面试" @close="showInvite = false" @submit="handleSubmit">
@@ -94,7 +211,7 @@ const textItem = ref({
 })
 const query = ref({
   pageNo: 1,
-  pageSize: 10
+  pageSize: 5
 })
 const queryParams = ref({
   content: null,
@@ -117,12 +234,18 @@ const selectItems = ref({
   items: [],
 })
 
+const positionData = ref([])
+
 getDict('areaTreeData', null, 'areaTreeData').then(res => {
   const data = res?.data?.length ? res.data : []
   if (data[0] && data[0].id === 10000) data[0].children = []
   selectItems.value.items = data
 })
 
+getDict('positionData', {}, 'positionData').then(({ data }) => {
+  positionData.value = data
+})
+
 const total = ref(0)
 const items = ref([])
 const loading = ref(false)
@@ -149,9 +272,11 @@ const getData = async () => {
     }
     items.value = dealDictArrayData([], res.list).map(e => {
       e.regName = e.reg?.str ?? ''
-      e.areaName = e.area?.str ?? '全国'
+      e.areaName = e.area?.str ?? '暂无'
+      e.subTitle = [e.jobStatusName, e.expName ? e.expName + '工作经验' : null, e.eduName, e.maritalStatusName].filter(k => k).join(' | ')
       return e
     })
+    console.log(items.value)
     total.value = res.total
   } finally {
     loading.value = false