Browse Source

人才搜索-详情

Xiao_123 2 weeks ago
parent
commit
2ea2450679

+ 1 - 1
src/components/FormUI/TextInput/index.vue

@@ -91,7 +91,7 @@ const appendInnerClick = () => {
 }
 
 const handleClear = () => {
-  emit('enter', value.value)
+  emit('enter', value.value, 'clear')
 }
 
 const handleKeyup = () => {

+ 53 - 53
src/router/modules/components/recruit/enterprise.js

@@ -392,68 +392,68 @@ const enterprise = [
       }
     ]
   },
-  {
-    path: '/recruit/enterprise/newlyAppointed',
-    component: Layout,
-    name: 'Newly Appointed',
-    meta: {
-      title: '门墩儿新任命',
-      enName: 'Newly Appointed',
-      icon: 'mdi-new-box'
-    },
-    children: [
-      {
-        path: '/recruit/enterprise/newlyAppointed',
-        show: true,
-        component: () => import('@/views/recruit/enterprise/newlyAppointed/index.vue')
-      }
-    ]
-  },
   // {
+  //   path: '/recruit/enterprise/newlyAppointed',
   //   component: Layout,
-  //   path: '/recruit/enterprise/talentMap',
-  //   redirect: '/recruit/enterprise/talentMap/newlyAppointed',
-  //   name: 'TalentMap',
+  //   name: 'Newly Appointed',
   //   meta: {
-  //     title: '人才地图',
-  //     enName: 'Talent Map',
-  //     icon: 'mdi-map-marker-account-outline',
+  //     title: '门墩儿新任命',
+  //     enName: 'Newly Appointed',
+  //     icon: 'mdi-new-box'
   //   },
   //   children: [
   //     {
-  //       path: '/recruit/enterprise/talentMap/newlyAppointed',
-  //       meta: {
-  //         title:'门墩儿新任命',
-  //         enName: 'Newly Appointed'
-  //       },
-  //       component: () => import('@/views/recruit/enterprise/newTalentMap/newlyAppointed/index.vue')
-  //     },
-  //     {
-  //       path: '/recruit/enterprise/talentMap/search',
-  //       meta: {
-  //         title: '人才搜索',
-  //         enName: 'Talent Search'
-  //       },
-  //       component: () => import('@/views/recruit/enterprise/newTalentMap/search/index.vue')
-  //     },
-  //     {
-  //       path: '/recruit/enterprise/talentMap/labeling',
-  //       meta: {
-  //         title: '人才标注',
-  //         enName: 'Talent labeling '
-  //       },
-  //       component: () => import('@/views/recruit/enterprise/newTalentMap/labeling/index.vue')
-  //     },
-  //     {
-  //       path: '/recruit/enterprise/talentMap/tagManagement',
-  //       meta: {
-  //         title: '标签管理',
-  //         enName: 'Tag Management '
-  //       },
-  //       component: () => import('@/views/recruit/enterprise/newTalentMap/tag/index.vue')
+  //       path: '/recruit/enterprise/newlyAppointed',
+  //       show: true,
+  //       component: () => import('@/views/recruit/enterprise/newlyAppointed/index.vue')
   //     }
   //   ]
   // },
+  {
+    component: Layout,
+    path: '/recruit/enterprise/talentMap',
+    redirect: '/recruit/enterprise/talentMap/newlyAppointed',
+    name: 'TalentMap',
+    meta: {
+      title: '人才地图',
+      enName: 'Talent Map',
+      icon: 'mdi-map-marker-account-outline',
+    },
+    children: [
+      {
+        path: '/recruit/enterprise/talentMap/newlyAppointed',
+        meta: {
+          title:'门墩儿新任命',
+          enName: 'Newly Appointed'
+        },
+        component: () => import('@/views/recruit/enterprise/newTalentMap/newlyAppointed/index.vue')
+      },
+      {
+        path: '/recruit/enterprise/talentMap/search',
+        meta: {
+          title: '人才搜索',
+          enName: 'Talent Search'
+        },
+        component: () => import('@/views/recruit/enterprise/newTalentMap/search/index.vue')
+      },
+      {
+        path: '/recruit/enterprise/talentMap/labeling',
+        meta: {
+          title: '人才标注',
+          enName: 'Talent labeling '
+        },
+        component: () => import('@/views/recruit/enterprise/newTalentMap/labeling/index.vue')
+      },
+      {
+        path: '/recruit/enterprise/talentMap/tagManagement',
+        meta: {
+          title: '标签管理',
+          enName: 'Tag Management '
+        },
+        component: () => import('@/views/recruit/enterprise/newTalentMap/tag/index.vue')
+      }
+    ]
+  },
   {
     path: '/recruit/enterprise/contactUs',
     component: Layout,

+ 41 - 120
src/views/recruit/enterprise/newTalentMap/search/index.vue

@@ -1,12 +1,13 @@
 <template>
 	<div>
-		<v-card elevation="5" class="pa-10">
+		<v-card elevation="5" class="pa-10 d-flex align-center">
 			<TextInput
         v-model="content"
         :item="textItem"
         @enter="handleSearch"
         @appendInnerClick="handleSearch"
       ></TextInput>
+      <v-btn color="primary" width="100" class="ml-5" @click="handleSearch">搜 索</v-btn>
 		</v-card>
 
 		<v-card elevation="5" class="mt-3">
@@ -31,6 +32,11 @@
 		</v-card>
 
 		<v-navigation-drawer v-model="showDetail" absolute location="right" rounded temporary width="700" class="pa-5">
+      <!-- 名片 -->
+      <div v-if="previewUrl">
+        <div class="color-primary font-size-18 font-weight-bold">名片</div>
+		    <img width="100%" :src="previewUrl" />
+      </div>
       <!-- 基本信息 -->
       <baseInfo :data="detail"></baseInfo>
       <!-- 职业轨迹 -->
@@ -38,120 +44,28 @@
 		</v-navigation-drawer>
 	</div>
 
-	<Loading :visible="annotationLoading"></Loading>
+	<Loading :visible="detailLoading"></Loading>
 </template>
 
 <script setup>
 defineOptions({ name: 'NewTalentMapSearch' })
 import { ref } from 'vue'
 import { getTalentList, getBusinessCardDetails } from '@/api/recruit/enterprise/talentMap/search'
+import { getTalentCardByImagePath } from '@/api/recruit/enterprise/talentMap/labeling'
 import Snackbar from '@/plugins/snackbar'
 import baseInfo from './components/baseInfo.vue'
 import careerPath from './components/careerPath.vue'
 
 const loading = ref(false)
-const annotationLoading = ref(false)
+const detailLoading = ref(false)
 const content = ref('')
-// const items = ref([])
-const items = ref([
-  {
-    brand_group_english_name: null, 
-    brand_group_name: null, 
-    chinese_name: "陈静", 
-    email: "angela.chen@dossen.com", 
-    english_name: "Angela Chen", 
-    hotel_chinese_name: "东呈集团", 
-    hotel_english_name: "DOSSEN", 
-    hotel_tags: [
-      {
-        tag_category: null, 
-        tag_en_name: null, 
-        tag_name: null
-      }
-    ], 
-    hotel_updated: "2025-05-13 20:12:47", 
-    mobile: "+86 138 2502 1012, +852 92651012", 
-    position_chinese: "国际事业部资深副总裁", 
-    position_english: "Senior Vice President of International Business Department", 
-    talent_id: 33, 
-    talent_tags: [
-      {
-        tag_category: null, 
-        tag_en_name: null, 
-        tag_name: null
-      }
-    ], 
-    talent_updated: "2025-05-13 20:12:47", 
-    work_relation_updated: "2025-05-13 20:12:47"
-  }, 
-  {
-    brand_group_english_name: null, 
-    brand_group_name: null, 
-    chinese_name: "陈玮", 
-    email: "cw928383712@163.com", 
-    english_name: null, 
-    hotel_chinese_name: "苏州木渎古镇 ROSSO酒店", 
-    hotel_english_name: "ROSSO Hotel Suzhou Mudu Ancient Town", 
-    hotel_tags: [
-      {
-        tag_category: null, 
-        tag_en_name: null, 
-        tag_name: null
-      }
-    ], 
-    hotel_updated: "2025-05-13 20:05:03", 
-    mobile: "13073381364", 
-    position_chinese: "销售总监", 
-    position_english: "Sales Director", 
-    talent_id: 30, 
-    talent_tags: [
-      {
-        tag_category: null, 
-        tag_en_name: null, 
-        tag_name: null
-      }
-    ], 
-    talent_updated: "2025-05-13 20:05:03", 
-    work_relation_updated: "2025-05-13 20:05:03"
-  }, 
-  {
-    brand_group_english_name: null, 
-    brand_group_name: null, 
-    chinese_name: "陈静", 
-    email: "angela.chen@dossen.com", 
-    english_name: "Angela Chen", 
-    hotel_chinese_name: "东呈集团", 
-    hotel_english_name: "DOSSEN", 
-    hotel_tags: [
-      {
-        tag_category: null, 
-        tag_en_name: null, 
-        tag_name: null
-      }
-    ], 
-    hotel_updated: "2025-05-13 18:11:38", 
-    mobile: "+86 138 2502 1012, +852 92651012", 
-    position_chinese: "国际事业部资深副总裁", 
-    position_english: "Senior Vice President of International Business Department", 
-    talent_id: 29, 
-    talent_tags: [
-      {
-        tag_category: null, 
-        tag_en_name: null, 
-        tag_name: null
-      }
-    ], 
-    talent_updated: "2025-05-13 18:11:38", 
-    work_relation_updated: "2025-05-13 18:11:38"
-  }
-])
+const items = ref([])
 const headers = [
-  { title: '姓名', key: 'chinese_name', sortable: false },
-  { title: '酒店名称', key: 'hotel_chinese_name', sortable: false },
-  { title: '职位', key: 'position_chinese', sortable: false },
-  { title: '邮箱', key: 'email', sortable: false },
+  { title: '中文名', key: 'name_zh', sortable: false },
+  { title: '英文名', key: 'name_en', sortable: false },
   { title: '联系电话', key: 'mobile', sortable: false },
-  { title: '更新时间', key: 'talent_updated', sortable: false },
+  { title: '电子邮箱', key: 'email', sortable: false },
+  { title: '更新时间', key: 'updated_at', sortable: false },
   { title: '操作', key: 'actions', sortable: false, align: 'center' }
 ]
 const textItem = ref({
@@ -174,37 +88,44 @@ const getList = async () => {
 		loading.value = false
 	}
 }
-getList()
-
 
 // 查看详情
 const showDetail = ref(false)
 const detail = ref({})
+const previewUrl = ref(null)
 const handleDetail = async (item) => {
-	if (!item?.talent_id) {
+	if (!item?.pg_id) {
 		return
 	}
-	const result = await getBusinessCardDetails(item.talent_id)
-	if (!result || !Object.keys(result).length) return Snackbar.warning('暂无详细信息,去查看其他人的信息吧~') 
-	detail.value = result
-	showDetail.value = true
-}
 
+  detailLoading.value = true
+	try {
+    const result = await getBusinessCardDetails(item.pg_id)
+    if (!result || !Object.keys(result).length) return Snackbar.warning('暂无详细信息,去查看其他人的信息吧~')
+    detail.value = result
+
+    // 获取名片预览
+    if (result?.image_path) {
+      const data = await getTalentCardByImagePath(result.image_path)
+      previewUrl.value = URL.createObjectURL(data)
+    }
+
+    showDetail.value = true
+  } finally {
+    detailLoading.value = false
+  }
+}
 
 // 搜索
-const handleSearch = async () => {
-	if (!content.value) return Snackbar.warning('请输入您的描述信息定位人才')
-	getList()
+const handleSearch = async (value, type) => {
+  if (type === 'clear') {
+    items.value = []
+    return
+  }
+  if (!type && !content.value) return Snackbar.warning('请输入您的描述信息定位人才')
+  getList()
 }
 </script>
 
 <style scoped lang="scss">
-.base-info {
-	background-color: #f7f8fa;
-	border-radius: 6px;
-}
-.common-width {
-	width: 25%;
-	max-width: 25%;
-}
 </style>