1
0

2 کامیت‌ها aeb594ca0d ... 584c300c96

نویسنده SHA1 پیام تاریخ
  lifanagju_citu 584c300c96 Merge branch 'jobFair' of https://git.citupro.com/zhengnaiwen_citu/menduner into jobFair 4 روز پیش
  lifanagju_citu 639c91c1e1 人才详情 4 روز پیش

+ 199 - 0
src/views/recruit/enterprise/newTalentMap/search/components/baseInfo.vue

@@ -0,0 +1,199 @@
+<template>
+  <v-container class="descriptions pa-0">
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">中文姓名</div>
+          <div class="value">{{ data.name_zh }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">英文姓名</div>
+          <div class="value">{{ data.name_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">中文职位/头衔</div>
+          <div class="value">{{ data.title_zh }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">英文职位/头衔</div>
+          <div class="value">{{ data.title_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">手机号码</div>
+          <div class="value">{{ data.mobile }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">固定电话</div>
+          <div class="value">{{ data.phone }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">电子邮箱</div>
+          <div class="value">{{ data.email }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">中文酒店/公司名称</div>
+          <div class="value">{{ data.hotel_zh }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">英文酒店/公司名称</div>
+          <div class="value">{{ data.hotel_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">中中文地址</div>
+          <div class="value">{{ data.address_zh }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">英文地址</div>
+          <div class="value">{{ data.address_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">中文邮政编码</div>
+          <div class="value">{{ data.postal_code_zh }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">英文邮政编码</div>
+          <div class="value">{{ data.postal_code_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">中文品牌名称</div>
+          <div class="value">{{ data.brand_zh }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">英文品牌名称</div>
+          <div class="value">{{ data.brand_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">中文隶属关系</div>
+          <div class="value">{{ data.affiliation_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">英文隶属关系</div>
+          <div class="value">{{ data.affiliation_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">品牌组合</div>
+          <div class="value">{{ data.brand_group }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">创建时间</div>
+          <div class="value">{{ data.created_at }}</div>
+        </div>
+      </v-col>
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">更新时间</div>
+          <div class="value">{{ data.updated_at }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">状态</div>
+          <div class="value">{{ data.status }}</div>
+        </div>
+      </v-col>
+    </v-row>
+  </v-container>
+</template>
+
+<script setup>
+defineOptions({ name: 'NewTalentMapSearch-detail' })
+const props = defineProps({data: Object})
+</script>
+<style lang="scss" scoped>
+.descriptions {
+  border-left: 1px solid #ebeef5;
+  border-top: 1px solid #ebeef5;
+  &-row{
+    .label {
+      width: 180px;
+      padding: 8px 12px;
+      color: #666;
+      background-color: #f7f8fa;
+      border-right: 1px solid #ebeef5;
+      border-bottom: 1px solid #ebeef5;
+    }
+    // .label-200px { width: 200px; }
+    .value {
+      flex: 1;
+      padding: 8px 12px;
+      color: #333;
+      border-right: 1px solid #ebeef5;
+      border-bottom: 1px solid #ebeef5;
+    }
+  }
+}
+</style>

+ 190 - 0
src/views/recruit/enterprise/newTalentMap/search/components/baseInfo_copy.vue

@@ -0,0 +1,190 @@
+<template>
+  <v-container class="descriptions pa-0">
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">中文姓名</div>
+          <div class="value">{{ data.name_zh }}</div>
+        </div>
+      </v-col>
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">英文姓名</div>
+          <div class="value">{{ data.name_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">中文职位/头衔</div>
+          <div class="value">{{ data.title_zh }}</div>
+        </div>
+      </v-col>
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">英文职位/头衔</div>
+          <div class="value">{{ data.title_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">手机号码</div>
+          <div class="value">{{ data.mobile }}</div>
+        </div>
+      </v-col>
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">固定电话</div>
+          <div class="value">{{ data.phone }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">电子邮箱</div>
+          <div class="value">{{ data.email }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label label-200px">中文酒店/公司名称</div>
+          <div class="value">{{ data.hotel_zh }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label label-200px">英文酒店/公司名称</div>
+          <div class="value">{{ data.hotel_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">中中文地址</div>
+          <div class="value">{{ data.address_zh }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">英文地址</div>
+          <div class="value">{{ data.address_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">中文邮政编码</div>
+          <div class="value">{{ data.postal_code_zh }}</div>
+        </div>
+      </v-col>
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">英文邮政编码</div>
+          <div class="value">{{ data.postal_code_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">中文品牌名称</div>
+          <div class="value">{{ data.brand_zh }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">英文品牌名称</div>
+          <div class="value">{{ data.brand_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">中文隶属关系</div>
+          <div class="value">{{ data.affiliation_en }}</div>
+        </div>
+      </v-col>
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">英文隶属关系</div>
+          <div class="value">{{ data.affiliation_en }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">品牌组合</div>
+          <div class="value">{{ data.brand_group }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">创建时间</div>
+          <div class="value">{{ data.created_at }}</div>
+        </div>
+      </v-col>
+      <v-col :cols="6">
+        <div class="d-flex">
+          <div class="label">更新时间</div>
+          <div class="value">{{ data.updated_at }}</div>
+        </div>
+      </v-col>
+    </v-row>
+    <v-row no-gutters class="descriptions-row">
+      <v-col :cols="12">
+        <div class="d-flex">
+          <div class="label">状态</div>
+          <div class="value">{{ data.status }}</div>
+        </div>
+      </v-col>
+    </v-row>
+  </v-container>
+</template>
+
+<script setup>
+defineOptions({ name: 'NewTalentMapSearch-detail' })
+const props = defineProps({data: Object})
+</script>
+<style lang="scss" scoped>
+.descriptions {
+  border-left: 1px solid #ebeef5;
+  border-top: 1px solid #ebeef5;
+  &-row{
+    .label {
+      // width: 40%;
+      width: 128px;
+      padding: 8px 12px;
+      color: #666;
+      background-color: #f7f8fa;
+      border-right: 1px solid #ebeef5;
+      border-bottom: 1px solid #ebeef5;
+    }
+    .label-200px { width: 200px; }
+    .value {
+      flex: 1;
+      padding: 8px 12px;
+      color: #333;
+      border-right: 1px solid #ebeef5;
+      border-bottom: 1px solid #ebeef5;
+    }
+  }
+}
+</style>

+ 73 - 0
src/views/recruit/enterprise/newTalentMap/search/components/careerPath.vue

@@ -0,0 +1,73 @@
+<template>
+  <div>
+    <div class="title">职业轨迹</div>
+    <v-container class="descriptions pa-0">
+      <v-row no-gutters class="descriptions-row">
+        <v-col :cols="12">
+          <div class="d-flex text-center">
+            <div class="label">酒店名称</div>
+            <div class="label">职位名称</div>
+          </div>
+        </v-col>
+      </v-row>
+      <template v-if="careerData?.length">
+        <v-row no-gutters class="descriptions-row" v-for="(val, index) in careerData" :key="index+'career'">
+          <v-col :cols="12">
+            <div class="d-flex text-center">
+              <div class="value">{{ val.name }}</div>
+              <div class="value">{{ val.name }}</div>
+            </div>
+          </v-col>
+        </v-row>
+      </template>
+      <template v-else>
+        <v-row no-gutters class="descriptions-row">
+          <v-col :cols="12">
+            <div class="d-flex text-center">
+              <div class="value">-</div>
+              <div class="value">-</div>
+            </div>
+          </v-col>
+        </v-row>
+      </template>
+    </v-container>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+defineOptions({ name: 'NewTalentMapSearch-careerPath' })
+const props = defineProps({data: Object})
+const careerData = ref(props?.data?.career_path ? JSON.parse(JSON.stringify(props?.data?.career_path)) : [])
+
+</script>
+<style lang="scss" scoped>
+.title {
+  margin: 18px 0 12px;
+  font-size: 18px;
+  color: var(--v-primary-base);
+  // color: #008bb7;
+  font-weight: bold;
+}
+.descriptions {
+  border-left: 1px solid #ebeef5;
+  border-top: 1px solid #ebeef5;
+  &-row{
+    .label {
+      width: 50%;
+      padding: 8px 12px;
+      color: #666;
+      background-color: #f7f8fa;
+      border-right: 1px solid #ebeef5;
+      border-bottom: 1px solid #ebeef5;
+    }
+    .value {
+      flex: 1;
+      padding: 8px 12px;
+      color: #333;
+      border-right: 1px solid #ebeef5;
+      border-bottom: 1px solid #ebeef5;
+    }
+  }
+}
+</style>

+ 130 - 4
src/views/recruit/enterprise/newTalentMap/search/index.vue

@@ -23,22 +23,131 @@
 				height="calc(100vh - 400px)"
 				:showFixedLastItem="true"
 				itemKey="id"
-			></CtTable>
+			>
+				<template #actions="{ item }">
+					<v-btn variant="text" color="primary" @click.stop="handleDetail(item)">详 情</v-btn>
+				</template>
+			</CtTable>
 		</v-card>
+		<v-navigation-drawer v-model="showDetail" absolute location="right" rounded temporary width="700" class="pa-5">
+      <!-- 照片 -->
+			<div v-if="detail.picUrl" style="width: 300px; height: 300px; margin: 0 auto;">
+				<v-img :src="detail.picUrl" width="300" height="300" />
+			</div>
+      <!-- 基本信息 -->
+      <baseInfo :data="detail"></baseInfo>
+      <!-- 职业轨迹 -->
+      <careerPath :data="detail"></careerPath>
+		</v-navigation-drawer>
 	</div>
 
 	<Loading :visible="annotationLoading"></Loading>
 </template>
 
 <script setup>
-defineOptions({ name: 'NewTalentMapAnnotation' })
+defineOptions({ name: 'NewTalentMapSearch' })
 import { ref } from 'vue'
 import { getTalentList } from '@/api/recruit/enterprise/talentMap/search'
 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 content = ref('')
-const items = 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: 31, 
+    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 headers = [
   { title: '姓名', key: 'chinese_name', sortable: false },
   { title: '酒店名称', key: 'hotel_chinese_name', sortable: false },
@@ -46,6 +155,7 @@ const headers = [
   { title: '邮箱', key: 'email', sortable: false },
   { title: '联系电话', key: 'mobile', sortable: false },
   { title: '更新时间', key: 'talent_updated', sortable: false },
+  { title: '操作', key: 'actions', sortable: false, align: 'center' }
 ]
 const textItem = ref({
   type: 'text',
@@ -67,13 +177,29 @@ const getList = async () => {
 		loading.value = false
 	}
 }
-getList()
+// getList()
+
+
+// 查看详情
+const showDetail = ref(false)
+const detail = ref({})
+const handleDetail = async (item) => {
+	// if (!item?.id) {
+	// 	return
+	// }
+	// const result = await getNewAppointmentsDetail(item.id)
+	// if (!result || !Object.keys(result).length) return Snackbar.warning('暂无详细信息,去查看其他人的信息吧~') 
+	// detail.value = result
+	showDetail.value = true
+}
+
 
 // 搜索
 const handleSearch = async () => {
 	if (!content.value) return Snackbar.warning('请输入您的描述信息定位人才')
 	getList()
 }
+
 </script>
 
 <style scoped lang="scss">