Browse Source

无用文件删除:人才详情

Xiao_123 2 months ago
parent
commit
aa7fd2c540

+ 0 - 18
src/router/modules/remaining.ts

@@ -503,24 +503,6 @@ const remainingRouter: AppRouteRecordRaw[] = [
       }
     ]
   },
-  {
-    path: '/talentMap',
-    component: Layout,
-    name: 'talentMapCenter',
-    meta: { hidden: true },
-    children: [
-      {
-        path: 'talentMap/detail/:id',
-        name: 'TalentMapDetail',
-        meta: {
-          title: '人才详情',
-          noCache: true,
-          hidden: true
-        },
-        component: () => import('@/views/menduner/system/talentMap/details/index.vue')
-      }
-    ]
-  },
   {
     path: '/jobFair',
     component: Layout,

+ 0 - 81
src/views/menduner/system/talentMap/details/components/attachment.vue

@@ -1,81 +0,0 @@
-<template>
-  <div>
-    <el-tabs>
-      <el-tab-pane v-for="item of tableData" :key="item.id" :label="item.title">
-        <ContentWrap>
-          <IFrame v-if="!loading" :src="item.url" />
-        </ContentWrap>
-        <!-- <vue-office-docx :src="item.url" /> -->
-      </el-tab-pane>
-    </el-tabs>
-    <!-- <el-table v-loading="loading" :data="tableData" :stripe="true">
-      <el-table-column label="附件名称" align="center" prop="title" />
-      <el-table-column label="操作" align="center">
-        <template #default="scope">
-          <el-link type="primary" download :href="scope.row.url" :underline="false" target="_blank">下载</el-link>
-        </template>
-      </el-table-column>
-    </el-table> -->
-  </div>
-</template>
-
-<script setup>
-defineOptions({ name: 'PersonAttachment' })
-import { PersonInfoApi } from '@/api/menduner/system/person'
-
-const loading = ref(false)
-const tableData = ref([])
-const tableDataTest = [
-  {
-    id: "1854433786213732353", 
-    title: "沈和威-2024-12-02", 
-    url: "https://kkfileview.menduner.com//onlinePreview?url=aHR0cHM6Ly9taW5pby5tZW5kdW5lci5jb20vZGV2LzdjZGUyOWRjNjljMTQwMzY0OWJlNTVkNGMyYmZkM2Q4MzA0YzA4OGRjNzlhYjI1YWZlOWM0YmY1NWQzYjM4MmYuZG9jeA%3D%3D", 
-    createTime: 1730966443004, 
-    updateTime: 1730966443004
-  }, 
-  {
-    id: "1833835593730252802", 
-    title: "沈和威-2024-11-15", 
-    url: "https://kkfileview.menduner.com//onlinePreview?url=aHR0cHM6Ly9taW5pby5tZW5kdW5lci5jb20vZGV2LzdmM2I1OWNlNzU0ZDQ1MmNlZDQwMDkxYTYzZDZkYjJlMDhlYThhMjJhMjZiN2U4MWYwM2YxMzNjOTQ3YWZmNTIuZG9jeA%3D%3D", 
-    createTime: 1726055451223, 
-    updateTime: 1726055451223
-  }
-]
-const total = ref(0)
-const queryParams = reactive({
-  pageNo: 1,
-  pageSize: 5,
-})
-
-const getList = async () => {
-  loading.value = true
-  try {
-    // const data = await PersonInfoApi.getPersonAttachmentList(queryParams)
-    // tableData.value = data.list
-    // total.value = data.total
-    tableData.value = tableDataTest.map(e => {
-      // if (e.url.startsWith('http://')) {
-      //   e.url = e.url.replace('http://', 'https://');
-      // }
-      return e 
-    })
-  } finally {
-    loading.value = false
-  }
-}
-
-const { currentRoute } = useRouter() // 路由
-const route = useRoute()
-const { id, userId } = route.query
-if (id) getList()
-else {
-  const data = localStorage.getItem('resumeParserData') ? JSON.parse(localStorage.getItem('resumeParserData')) : null
-  if (data) {
-    tableData.value = [{
-      id: data.id, 
-      url: data.url, 
-      title: data.filename, 
-    }]
-  }
-}
-</script>

+ 0 - 150
src/views/menduner/system/talentMap/details/components/edu.vue

@@ -1,150 +0,0 @@
-<template>
-  <el-card shadow="never" class="m-t-10px">
-    <template #header>
-      <div class="flex justify-between">
-        <CardTitle title="教育经历" />
-        <el-button link type="primary" @click="handleAdd"><Icon icon="ep:plus" class="mr-5px" />新增</el-button>
-      </div>
-    </template>
-    <el-table :data="list" :stripe="true">
-      <el-table-column label="学校名称" align="center" prop="schoolName" />
-      <el-table-column label="专业名称" align="center" prop="major" />
-      <el-table-column label="学历" align="center" prop="educationType">
-        <template #default="scope">
-          <dict-tag :type="DICT_TYPE.MENDUNER_EDUCATION_TYPE" :value="scope.row.educationType" />
-        </template>
-      </el-table-column>
-      <el-table-column label="在校日期" align="center" prop="startTime">
-        <template #default="scope">
-          {{ scope.row.startTime ? timesTampChange(scope.row.startTime, 'Y-M') : '' }}
-          <span v-if="scope.row.startTime && scope.row.endTime">至</span>
-          {{ scope.row.endTime ? timesTampChange(scope.row.endTime, 'Y-M') : '' }}
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="center" prop="actions">
-        <template #default="{ row, $index }">
-          <el-button link type="primary" @click="handleEdit(row, $index)">编辑</el-button>
-          <el-button link type="danger" @click="handleDelete($index, row.id)">删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </el-card>
-
-  <Dialog :title="'教育经历' + (type === 'edit' ? '编辑' : '新增')" v-model="dialogVisible">
-    <el-form
-      ref="formRef"
-      :model="formData"
-      :rules="formRules"
-      label-width="80px"
-    >
-      <el-form-item label="学校名称" prop="schoolName" required>
-        <el-input v-model="formData.schoolName" />
-      </el-form-item>
-      <el-form-item label="专业名称" prop="major" required>
-        <el-input v-model="formData.major" />
-      </el-form-item>
-      <el-form-item label="学历" prop="educationType" required>
-        <el-select v-model="formData.educationType" placeholder="请选择学历" @change="val => handleChangeSelect(val, 'MENDUNER_EDUCATION_TYPE', 'educationTypeStr')">
-          <el-option v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_EDUCATION_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value.toString()" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="开始日期" prop="startTime" required>
-        <el-date-picker v-model="formData.startTime" type="month" :disabledDate="disabledDates" value-format="x" placeholder="选择在校开始日期" />
-      </el-form-item>
-      <el-form-item label="结束日期" prop="endTime" required>
-        <el-date-picker v-model="formData.endTime" type="month" :disabledDate="disabledDates" value-format="x" placeholder="选择在校结束日期" />
-      </el-form-item>
-    </el-form>
-    <template #footer>
-      <el-button @click="submitForm" type="primary">确 定</el-button>
-      <el-button @click="dialogVisible = false; formData = {}">取 消</el-button>
-    </template>
-  </Dialog>
-</template>
-
-<script setup>
-defineOptions({ name: 'TalentMapEdu'})
-import { cloneDeep } from 'lodash-es'
-import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
-import { timesTampChange } from '@/utils/transform/date'
-import { TalentMap } from '@/api/menduner/system/talentMap';
-import { formatName } from '@/utils'
-
-const props = defineProps({
-  modelValue: Array,
-  isEdit: Boolean
-})
-const list = ref([])
-watch(() => props.modelValue, (newVal) => {
-  list.value = newVal ? newVal.map(e => {
-    return { ...e, schoolName: formatName(e.schoolName), major: formatName(e.major) }
-  }) : []
-}, { deep: true })
-
-const message = useMessage() // 消息弹窗
-const editIndex = ref(0)
-const formRef = ref()
-const dialogVisible = ref(false)
-const formData = ref({})
-const type = ref('add')
-const formRules = reactive({
-  schoolName: [{ required: true, message: '学校名称不能为空', trigger: 'blur' }],
-  major: [{ required: true, message: '专业名称不能为空', trigger: 'blur' }],
-  educationType: [{ required: true, message: '学历不能为空', trigger: 'blur' }],
-  startDate: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
-  endDate: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }]
-})
-
-// 未来的时间不可选
-const disabledDates = (date) => {
-  return date.getTime() > Date.now()
-}
-
-// 新增
-const handleAdd = () => {
-  type.value = 'add'
-  dialogVisible.value = true
-}
-
-// 编辑
-const handleEdit = (row, index) => {
-  type.value = 'edit'
-  editIndex.value = index
-  formData.value = cloneDeep(row)
-  dialogVisible.value = true
-}
-
-// 删除
-const handleDelete = async (index, id) => {
-  try {
-    await message.delConfirm()
-    if (props.isEdit) {
-      await TalentMap.deleteTalentMapEdu(id)
-      list.value.splice(index, 1)
-      message.success('删除成功')
-    } else list.value.splice(index, 1)
-  } catch {}
-}
-
-// 下拉框选择
-const handleChangeSelect = (val, dictType, labelKey) => {
-  const dict = getIntDictOptions(DICT_TYPE[dictType])
-  const obj = dict.find(e => e.value.toString() === val)
-  formData.value[labelKey] = obj?.label
-}
-
-const submitForm = async () => {
-  await formRef.value.validate()
-
-  if (props.isEdit) {
-    const data = type.value === 'add' ? await TalentMap.createTalentMapEdu(formData.value) : await TalentMap.updateTalentMapEdu(formData.value)
-    message.success(type.value === 'add' ? '添加成功' : '编辑成功')
-    if (type.value === 'add') formData.value.id = data
-    type.value === 'add' ? list.value.push(formData.value) : list.value[editIndex.value] = formData.value
-  } else type.value === 'add' ? list.value.push(formData.value) : list.value[editIndex.value] = formData.value
-
-  formData.value = {}
-  editIndex.value = 0
-  dialogVisible.value = false
-}
-</script>

+ 0 - 140
src/views/menduner/system/talentMap/details/components/exp.vue

@@ -1,140 +0,0 @@
-<template>
-  <el-card shadow="never" class="m-t-10px">
-    <template #header>
-      <div class="flex justify-between">
-        <CardTitle title="工作经历" />
-        <el-button link type="primary" @click="handleAdd"><Icon icon="ep:plus" class="mr-5px" />新增</el-button>
-      </div>
-    </template>
-    <el-table :data="list" :stripe="true">
-      <el-table-column label="任职企业" align="center" prop="enterpriseName" />
-      <el-table-column label="职位名称" align="center" prop="positionName" />
-      <el-table-column label="在职时间" align="center" prop="startTime">
-        <template #default="scope">
-          {{ scope.row.startTime ? timesTampChange(scope.row.startTime, 'Y-M') : '' }}至
-          {{ scope.row.endTime ? timesTampChange(scope.row.endTime, 'Y-M') : '至今' }}
-        </template>
-      </el-table-column>
-      <!-- <el-table-column label="工作内容" align="center" prop="content" :show-overflow-tooltip="true" /> -->
-      <el-table-column label="操作" align="center" prop="actions">
-        <template #default="{ row, $index }">
-          <el-button link type="primary" @click="handleEdit(row, $index)">编辑</el-button>
-          <el-button link type="danger" @click="handleDelete($index, row.id)">删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </el-card>
-
-  <Dialog :title="'工作经历' + (type === 'edit' ? '编辑' : '新增')" v-model="dialogVisible">
-    <el-form
-      ref="formRef"
-      :model="formData"
-      :rules="formRules"
-      label-width="80px"
-    >
-      <el-form-item label="任职企业" prop="enterpriseName" required>
-        <el-input v-model="formData.enterpriseName" />
-      </el-form-item>
-      <el-form-item label="职位名称" prop="positionName" required>
-        <el-input v-model="formData.positionName" />
-      </el-form-item>
-      <el-form-item label="开始日期" prop="startTime" required>
-        <el-date-picker v-model="formData.startTime" type="month" :disabledDate="disabledDates"  value-format="x" placeholder="选择在职开始日期" />
-      </el-form-item>
-      <el-form-item label="结束日期" prop="endTime">
-        <el-date-picker v-model="formData.endTime" :disabled="sofar" :disabledDate="disabledDates" type="month"  value-format="x" placeholder="选择在职结束日期" />
-        <el-checkbox v-model="sofar" label="至今" size="large" class="m-l-10px" @change="handleSofar" />
-      </el-form-item>
-      <el-form-item label="工作内容" prop="content">
-        <el-input v-model="formData.content" :rows="8" type="textarea" />
-      </el-form-item>
-    </el-form>
-    <template #footer>
-      <el-button @click="submitForm" type="primary">确 定</el-button>
-      <el-button @click="dialogVisible = false; formData = {}">取 消</el-button>
-    </template>
-  </Dialog>
-</template>
-
-<script setup>
-defineOptions({ name: 'TalentMapExp'})
-import { cloneDeep } from 'lodash-es'
-import { timesTampChange } from '@/utils/transform/date'
-import { TalentMap } from '@/api/menduner/system/talentMap'
-import { formatName } from '@/utils'
-
-const props = defineProps({
-  modelValue: Array,
-  isEdit: Boolean
-})
-const list = ref([])
-watch(() => props.modelValue, (newVal) => {
-  list.value = newVal ? newVal.map(e => {
-    return { ...e, enterpriseName: formatName(e.enterpriseName), positionName: formatName(e.positionName), content: formatName(e.content) }
-  }) : []
-}, { deep: true })
-
-const message = useMessage() // 消息弹窗
-const editIndex = ref(0)
-const formRef = ref()
-const dialogVisible = ref(false)
-const formData = ref({})
-const type = ref('add')
-const sofar = ref(false)
-const formRules = reactive({
-  enterpriseName: [{ required: true, message: '任职企业不能为空', trigger: 'blur' }],
-  positionName: [{ required: true, message: '职位名称不能为空', trigger: 'blur' }],
-  startTime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
-  // endTime: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }]
-})
-
-// 未来的时间不可选
-const disabledDates = (date) => {
-  return date.getTime() > Date.now()
-}
-
-const handleAdd = () => {
-  type.value = 'add'
-  dialogVisible.value = true
-}
-
-const handleEdit = (row, index) => {
-  type.value = 'edit'
-  editIndex.value = index
-  formData.value = cloneDeep(row)
-  sofar.value = !row.endTime
-  dialogVisible.value = true
-}
-
-// 删除
-const handleDelete = async (index, id) => {
-  try {
-    await message.delConfirm()
-    if (props.isEdit) {
-      await TalentMap.deleteTalentMapExp(id)
-      list.value.splice(index, 1)
-      message.success('删除成功')
-    } else list.value.splice(index, 1)
-  } catch {}
-}
-
-const submitForm = async () => {
-  await formRef.value.validate()
-  if (!sofar.value && !formData.value.endTime) return message.warning('请选择结束时间')
-
-  if (props.isEdit) {
-    const data = type.value === 'add' ? await TalentMap.createTalentMapExp(formData.value) : await TalentMap.updateTalentMapExp(formData.value)
-    message.success(type.value === 'add' ? '添加成功' : '编辑成功')
-    if (type.value === 'add') formData.value.id = data
-    type.value === 'add' ? list.value.push(formData.value) : list.value[editIndex.value] = formData.value
-  } else type.value === 'add' ? list.value.push(formData.value) : list.value[editIndex.value] = formData.value
-  
-  formData.value = {}
-  editIndex.value = 0
-  dialogVisible.value = false
-}
-
-const handleSofar = (e) => {
-  if (e) formData.value.endTime = null
-}
-</script>

+ 0 - 143
src/views/menduner/system/talentMap/details/components/info.vue

@@ -1,143 +0,0 @@
-<template>
-  <el-card shadow="never">
-    <template #header>
-      <CardTitle title="基本信息" />
-    </template>
-    <el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
-      <el-form-item label="用户头像" prop="avatar">
-        <UploadImg v-model="formData.avatar" height="140px" />
-      </el-form-item>
-
-      <el-row>
-        <el-col :span="12">
-          <el-form-item label="用户姓名" prop="name">
-            <el-input v-model="formData.name"/>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="性别" prop="sex">
-            <el-select v-model="formData.sex" placeholder="请选择性别" @change="val => handleChangeSelect(val, 'MENDUNER_SEX', 'sexStr')">
-              <el-option v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_SEX)" :key="dict.value" :label="dict.label" :value="dict.value.toString()"/>
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="联系电话" prop="phone">
-            <el-input v-model="formData.phone" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="邮箱" prop="email">
-            <el-input v-model="formData.email" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="出生日期" prop="birthday">
-            <el-date-picker v-model="formData.birthday" type="date" :disabledDate="disabledDates" value-format="x" placeholder="选择出生日期" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="学历" prop="eduType">
-            <el-select v-model="formData.eduType" placeholder="请选择学历" @change="val => handleChangeSelect(val, 'MENDUNER_EDUCATION_TYPE', 'eduTypeStr')">
-              <el-option v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_EDUCATION_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value.toString()" />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="工作经验" prop="expType">
-            <el-select v-model="formData.expType" placeholder="请选择工作经验" @change="val => handleChangeSelect(val, 'MENDUNER_EXP_TYPE', 'expTypeStr')">
-              <el-option v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_EXP_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value.toString()" />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="婚姻状况" prop="maritalStatus">
-            <el-select v-model="formData.maritalStatus" placeholder="请选择婚姻状况" @change="val => handleChangeSelect(val, 'MENDUNER_MARITAL_STATUS', 'maritalStatusStr')">
-              <el-option v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_MARITAL_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value.toString()" />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="现居城市" prop="areaId">
-            <el-cascader v-model="formData.areaId" :options="areaTreeData" :props="{ label: 'name', value: 'id', emitPath: false, checkStrictly: true }" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="意向城市" prop="interestedAreaIdList">
-            <el-cascader v-model="formData.interestedAreaIdList" :options="areaTreeData" collapse-tags collapse-tags-tooltip :max-collapse-tags="1" :props="{ label: 'name', value: 'id', emitPath: false, checkStrictly: true, multiple: true }" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="首次工作时间" prop="firstWorkTime">
-            <el-date-picker v-model="formData.firstWorkTime" type="date" :disabledDate="disabledDates" value-format="x" placeholder="选择首次工作时间" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-
-      <el-form-item label="个人优势" prop="advantage">
-        <el-input v-model="formData.advantage" :rows="8" type="textarea" placeholder="请输入您的个人优势" />
-      </el-form-item>
-    </el-form>
-    <div v-if="isEdit" class="text-right">
-      <el-button type="primary" @click="handleSave">保 存</el-button>
-    </div>
-  </el-card>
-</template>
-
-<script setup>
-defineOptions({ name: 'EnterpriseDetailsInfo'})
-import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
-import { timesTampChange } from '@/utils/transform/date'
-import { TalentMap } from '@/api/menduner/system/talentMap'
-import { formatName } from '@/utils'
-
-const props = defineProps({
-  modelValue: Object,
-  isEdit: Boolean,
-  areaTreeData: Array
-})
-
-const message = useMessage() // 消息弹窗
-const formRef = ref()
-const formData = ref({})
-const formLoading = ref(false)
-const formRules = reactive({
-  name: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
-  // phone: [{ required: true, message: '联系电话不能为空', trigger: 'blur' }]
-})
-
-watch(() => props.modelValue, (newVal) => {
-  formData.value = newVal
-  if (newVal && newVal?.advantage) formData.value.advantage = formatName(newVal.advantage)
-}, { immediate: true }, { deep: true })
-
-// 未来的时间不可选
-const disabledDates = (date) => {
-  return date.getTime() > Date.now()
-}
-
-// 下拉框选择
-const handleChangeSelect = (val, dictType, labelKey) => {
-  const dict = getIntDictOptions(DICT_TYPE[dictType])
-  const obj = dict.find(e => e.value.toString() === val)
-  formData.value[labelKey] = obj?.label
-}
-
-const handleSave = async () => {
-  // 校验表单
-  await formRef.value.validate()
-  formLoading.value = true
-  try {
-    await TalentMap.updateTalentMapInfo(formData.value)
-    message.success('保存成功')
-  } catch (error) {
-    console.log(error)
-  } finally {
-    formLoading.value = false
-  }
-}
-
-defineExpose({
-  formRef
-})
-</script>

+ 0 - 102
src/views/menduner/system/talentMap/details/components/jobIntention.vue

@@ -1,102 +0,0 @@
-<template>
-  <el-card shadow="never" class="m-t-10px">
-    <template #header>
-      <div class="flex justify-between">
-        <CardTitle title="求职意向" />
-        <el-button link type="primary" @click="handleAdd"><Icon icon="ep:plus" class="mr-5px" />新增</el-button>
-      </div>
-    </template>
-    <el-table :data="list" :stripe="true">
-      <el-table-column label="意向职位" align="center" prop="name" />
-      <el-table-column label="操作" align="center" prop="actions">
-        <template #default="{ row, $index }">
-          <el-button link type="primary" @click="handleEdit(row, $index)">编辑</el-button>
-          <el-button link type="danger" @click="handleDelete($index)">删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </el-card>
-
-  <Dialog :title="'求职意向' + (type === 'edit' ? '编辑' : '新增')" v-model="dialogVisible">
-    <el-form
-      ref="formRef"
-      :model="formData"
-      :rules="formRules"
-      label-width="80px"
-    >
-      <el-form-item label="意向职位" prop="name" required>
-        <el-input v-model="formData.name" />
-      </el-form-item>
-    </el-form>
-    <template #footer>
-      <el-button @click="submitForm" type="primary">确 定</el-button>
-      <el-button @click="dialogVisible = false; formData = {}">取 消</el-button>
-    </template>
-  </Dialog>
-</template>
-
-<script setup>
-defineOptions({ name: 'TalentMapJobIntention'})
-import { cloneDeep } from 'lodash-es'
-import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
-import { timesTampChange } from '@/utils/transform/date'
-import { formatName } from '@/utils'
-
-const emit = defineEmits(['update:modelValue'])
-const props = defineProps({
-  modelValue: Array,
-  isEdit: Boolean
-})
-const list = ref([])
-watch(() => props.modelValue, (newVal) => {
-  if (!newVal || !newVal.length) return list.value = []
-  list.value = newVal.map(e => {
-    return { name: formatName(e) }
-  })
-}, { deep: true })
-
-const message = useMessage() // 消息弹窗
-const editIndex = ref(0)
-const formRef = ref()
-const dialogVisible = ref(false)
-const formData = ref({})
-const type = ref('add')
-const formRules = reactive({
-  name: [{ required: true, message: '意向职位不能为空', trigger: 'blur' }]
-})
-
-// 新增
-const handleAdd = () => {
-  type.value = 'add'
-  dialogVisible.value = true
-}
-
-// 编辑
-const handleEdit = (row, index) => {
-  type.value = 'edit'
-  editIndex.value = index
-  formData.value = cloneDeep(row)
-  dialogVisible.value = true
-}
-
-// 删除
-const handleDelete = async (index) => {
-  try {
-    await message.delConfirm()
-    list.value.splice(index, 1)
-    emit('update:modelValue', list.value.length ? list.value.map(e => e.name) : [])
-    if (props.isEdit) emit('change', list.value.map(e => e.name), 'delete')
-  } catch {}
-}
-
-const submitForm = async () => {
-  await formRef.value.validate()
-  type.value === 'add' ? list.value.push(formData.value) : list.value[editIndex.value] = formData.value
-  formData.value = {}
-  editIndex.value = 0
-  dialogVisible.value = false
-
-  emit('update:modelValue', list.value.map(e => e.name))
-  if (props.isEdit) emit('change', list.value.map(e => e.name), type.value)
-}
-</script>

+ 0 - 150
src/views/menduner/system/talentMap/details/components/search.vue

@@ -1,150 +0,0 @@
-<template>
-    <!-- 搜索工作栏 -->
-  <ContentWrap>
-    <el-form
-      class="-mb-15px"
-      :model="queryParams"
-      ref="queryFormRef"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="姓名" prop="name">
-        <el-input v-model="queryParams.name" placeholder="请输入姓名" clearable @keyup.enter="handleQuery" class="!w-130px" />
-      </el-form-item>
-      <el-form-item label="联系电话" prop="phone">
-        <el-input v-model="queryParams.phone" placeholder="请输入联系电话" clearable @keyup.enter="handleQuery" class="!w-130px" />
-      </el-form-item>
-      <el-form-item label="性别" prop="sex">
-        <el-select v-model="queryParams.sex" placeholder="请选择性别" clearable class="!w-130px">
-          <el-option v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_SEX)" :key="dict.value" :label="dict.label" :value="dict.value" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="求职状态" prop="jobStatus">
-        <el-select v-model="queryParams.jobStatus" placeholder="请选择求职状态" clearable class="!w-130px">
-          <el-option v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_JOB_SEEK_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="学历" prop="eduType">
-        <el-select v-model="queryParams.eduType" placeholder="请选择学历" clearable class="!w-130px">
-          <el-option v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_EDUCATION_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="工作经验" prop="expType">
-        <el-select v-model="queryParams.expType" placeholder="请选择工作经验" clearable class="!w-130px">
-          <el-option v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_EXP_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button @click="handleQuery" type="primary"><Icon icon="ep:search" /> 搜索</el-button>
-        <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-      </el-form-item>
-    </el-form>
-  </ContentWrap>
-
-  <!-- 列表 -->
-  <ContentWrap>
-    <el-table v-loading="loading" :data="list" :stripe="true">
-      <!-- <el-table-column label="用户头像" align="center" prop="avatar" width="90px" fixed="left">
-        <template #default="scope">
-          <el-image v-if="scope.row.person?.avatar" class="h-80px w-80px" :src="scope.row.person?.avatar" lazy preview-teleported :preview-src-list="[scope.row.person?.avatar]" fit="contain" />
-        </template>
-      </el-table-column> -->
-      <el-table-column label="姓名" align="center" prop="person.name" fixed="left" />
-      <el-table-column label="联系电话" align="center" prop="user.phone" width="120px" />
-      <el-table-column label="求职状态" align="center" prop="person.jobStatus" width="130px">
-        <template #default="scope">
-          <dict-tag v-if="scope.row.person?.jobStatus" :type="DICT_TYPE.MENDUNER_JOB_SEEK_STATUS" :value="scope.row.person?.jobStatus" />
-        </template>
-      </el-table-column>
-      <el-table-column label="学历" align="center" prop="person.eduType">
-        <template #default="scope">
-          <dict-tag v-if="scope.row.person?.eduType" :type="DICT_TYPE.MENDUNER_EDUCATION_TYPE" :value="scope.row.person?.eduType" />
-        </template>
-      </el-table-column>
-      <el-table-column label="工作经验" align="center" prop="person.expType">
-        <template #default="scope">
-          <dict-tag v-if="scope.row.person?.expType" :type="DICT_TYPE.MENDUNER_EXP_TYPE" :value="scope.row.person?.expType" />
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="center" fixed="right" min-width="60">
-        <template #default="scope">
-          <el-button link type="primary" @click="handleDetail(scope.row)">详情</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <!-- 分页 -->
-    <Pagination
-      :total="total"
-      layout="total, prev, pager, next"
-      v-model:page="queryParams.pageNo"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </ContentWrap>
-</template>
-
-<script setup>
-defineOptions({ name: 'TalentMapSearch' })
-import { TalentMap } from '@/api/menduner/system/talentMap'
-import { PersonInfoApi } from '@/api/menduner/system/person'
-import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
-
-const emit = defineEmits(['detail'])
-const props = defineProps({
-  searchName: String
-})
-const message = useMessage() // 消息弹窗
-const { t } = useI18n() // 国际化
-
-const loading = ref(false) // 列表的加载中
-const list = ref([]) // 列表的数据
-const total = ref(0) // 列表的总页数
-const queryParams = reactive({
-  pageNo: 1,
-  pageSize: 10,
-  name: '',
-  phone: undefined,
-  expType: undefined,
-  eduType: undefined,
-  jobStatus: undefined
-})
-const queryFormRef = ref() // 搜索的表单
-
-/** 查询列表 */
-const getList = async () => {
-  loading.value = true
-  try {
-    const data = await PersonInfoApi.getPersonInfoPage(queryParams)
-    list.value = data?.list || []
-    total.value = data?.total || 0
-  } finally {
-    loading.value = false
-  }
-}
-
-/** 搜索按钮操作 */
-const handleQuery = () => {
-  queryParams.pageNo = 1
-  getList()
-}
-
-/** 重置按钮操作 */
-const resetQuery = () => {
-  queryFormRef.value.resetFields()
-  handleQuery()
-}
-
-const handleDetail = (row) => {
-  emit('detail', row.user.id)
-}
-
-/** 初始化 **/
-onMounted(async () => {
-  setTimeout(() => {
-    if (props.searchName) {
-      queryParams.name = props.searchName
-    }
-    getList()
-  }, 1000)
-})
-</script>

+ 0 - 74
src/views/menduner/system/talentMap/details/components/tags.vue

@@ -1,74 +0,0 @@
-<!--  -->
-<template>
-  <div>
-    <div class="text-right m-b-10px">
-      <el-button size="small" type="primary" @click="addNewTag = true; newTagText = ''">添加新标签</el-button>
-    </div>
-    <div class="m-b-12px flex" v-if="addNewTag">
-      <el-input
-        v-model="newTagText"
-        placeholder="请输入标签,按回车键确认!"
-        clearable
-        class="!w-300px"
-        @keyup.enter="saveTags"
-      />
-      <el-button type="primary" class="m-l-12px" @click="saveTags">保存</el-button>
-      <el-button @click="addNewTag = false">关闭</el-button>
-    </div>
-    <div>
-      <el-tag
-        v-for="(item, index) of list"
-        :key="index"
-        closable
-        size="large"
-        @close="deleteTag(index)"
-        class="m-r-10px m-b-10px"
-      >{{ item.skillsName }}</el-tag>
-    </div>
-  </div>
-</template>
-
-<script setup>
-defineOptions({name: 'Tags'})
-import { cloneDeep } from 'lodash-es'
-
-const props = defineProps({
-  data: Array
-})
-
-const tagList = [
-  {
-    skillsName: "技术专家", 
-    id: "1"
-  }, 
-  {
-    skillsName: "管理精英", 
-    id: "2"
-  }, 
-  {
-    skillsName: "创新先锋", 
-    id: "3"
-  }, 
-  {
-    skillsName: "市场高手", 
-    id: "4"
-  }, 
-  {
-    skillsName: "团队领袖", 
-    id: "5"
-  }
-]
-
-const list = ref(props.data && props.data.length ? cloneDeep(props.data) : tagList)
-
-const addNewTag = ref(false)
-const newTagText = ref('')
-const saveTags = () => {
-  list.value.push({skillsName: newTagText.value})
-  addNewTag.value = false
-}
-
-const deleteTag = (index) => {
-  list.value.splice(index, 1)
-}
-</script>

+ 0 - 269
src/views/menduner/system/talentMap/details/components/tagsRecommend.vue

@@ -1,269 +0,0 @@
-<!--  -->
-<template>
-  <div>
-    <div>
-      <span style="font-size: 14px;">标签分类:</span>
-      <el-select
-        v-model="tagType"
-        placeholder="请选择标签分类"
-        clearable
-        class="!w-180px"
-      >
-        <el-option
-          v-for="tag in tagList"
-          :key="tag.id"
-          :label="tag.name"
-          :value="tag.id"
-        />
-      </el-select>
-    </div>
-    <div>
-      <div v-for="val in tagList" :key="val.id" class="m-t-15px">
-        <!-- <span style="font-size: 14px;">{{ val?.nameCn || '--' }}</span> -->
-        <div v-if="val?.children?.length">
-          <el-tag size="large" class="m-r-10px m-t-10px" v-for="item of val.children" :key="item.id">{{ item.name }}</el-tag>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup>
-defineOptions({name: 'TagsRecommend'})
-
-const tagType = ref(null)
-// const tagTypeList = ref([{name: '专家', id: '专家'},{name: '管理', id: '管理'}, {name: '创新', id: '创新'}, {name: '市场', id: '市场'}])
-const tagList = ref([
-  {
-    name: "前台与客服类人才", 
-    id: "1", 
-    children: [
-      {
-        name: "前台接待员", 
-        id: "1.1"
-      }, 
-      {
-        name: "礼宾员", 
-        id: "1.2"
-      }, 
-      {
-        name: "客户服务员", 
-        id: "1.3"
-      }, 
-      {
-        name: "预订员", 
-        id: "1.4"
-      }, 
-      {
-        name: "电话接线员", 
-        id: "1.5"
-      }, 
-      {
-        name: "前台经理", 
-        id: "1.6"
-      }, 
-      {
-        name: "行政酒廊服务员", 
-        id: "1.7"
-      }, 
-      {
-        name: "商务中心文员", 
-        id: "1.8"
-      }, 
-      {
-        name: "宾客关系主任", 
-        id: "1.9"
-      }, 
-      {
-        name: "大堂副理", 
-        id: "1.10"
-      }
-    ]
-  }, 
-  {
-    name: "客房与餐饮类人才", 
-    id: "2", 
-    children: [
-      {
-        name: "客房服务员", 
-        id: "2.1"
-      }, 
-      {
-        name: "楼层服务员", 
-        id: "2.2"
-      }, 
-      {
-        name: "公共区域清洁工", 
-        id: "2.3"
-      }, 
-      {
-        name: "餐厅服务员", 
-        id: "2.4"
-      }, 
-      {
-        name: "调酒师", 
-        id: "2.5"
-      }, 
-      {
-        name: "餐饮部经理", 
-        id: "2.6"
-      }, 
-      {
-        name: "宴会服务员", 
-        id: "2.7"
-      }, 
-      {
-        name: "厨房助手", 
-        id: "2.8"
-      }, 
-      {
-        name: "西餐厨师", 
-        id: "2.9"
-      }, 
-      {
-        name: "中餐厨师", 
-        id: "2.10"
-      }
-    ]
-  }, 
-  {
-    name: "销售与市场类人才", 
-    id: "3", 
-    children: [
-      {
-        name: "销售经理", 
-        id: "3.1"
-      }, 
-      {
-        name: "销售代表", 
-        id: "3.2"
-      }, 
-      {
-        name: "市场推广员", 
-        id: "3.3"
-      }, 
-      {
-        name: "市场营销专员", 
-        id: "3.4"
-      }, 
-      {
-        name: "预订部员工", 
-        id: "3.5"
-      }, 
-      {
-        name: "收益管理分析师", 
-        id: "3.6"
-      }, 
-      {
-        name: "客户关系经理", 
-        id: "3.7"
-      }, 
-      {
-        name: "渠道销售经理", 
-        id: "3.8"
-      }, 
-      {
-        name: "电子商务销售经理", 
-        id: "3.9"
-      }, 
-      {
-        name: "市场情报分析师", 
-        id: "3.10"
-      }
-    ]
-  }, 
-  {
-    name: "财务与人力资源类人才", 
-    id: "4", 
-    children: [
-      {
-        name: "财务经理", 
-        id: "4.1"
-      }, 
-      {
-        name: "会计", 
-        id: "4.2"
-      }, 
-      {
-        name: "出纳", 
-        id: "4.3"
-      }, 
-      {
-        name: "薪资管理人员", 
-        id: "4.4"
-      }, 
-      {
-        name: "人力资源经理", 
-        id: "4.5"
-      }, 
-      {
-        name: "招聘专员", 
-        id: "4.6"
-      }, 
-      {
-        name: "培训与发展专员", 
-        id: "4.7"
-      }, 
-      {
-        name: "绩效管理员", 
-        id: "4.8"
-      }, 
-      {
-        name: "员工关系专员", 
-        id: "4.9"
-      }, 
-      {
-        name: "薪酬福利专员", 
-        id: "4.10"
-      }
-    ]
-  }, 
-  {
-    name: "工程与后勤类人才", 
-    id: "5", 
-    children: [
-      {
-        name: "维修工程师", 
-        id: "5.1"
-      }, 
-      {
-        name: "电工", 
-        id: "5.2"
-      }, 
-      {
-        name: "水管工", 
-        id: "5.3"
-      }, 
-      {
-        name: "空调工", 
-        id: "5.4"
-      }, 
-      {
-        name: "管家部员工", 
-        id: "5.5"
-      }, 
-      {
-        name: "布草员", 
-        id: "5.6"
-      }, 
-      {
-        name: "仓库管理员", 
-        id: "5.7"
-      }, 
-      {
-        name: "采购员", 
-        id: "5.8"
-      }, 
-      {
-        name: "安全主管", 
-        id: "5.9"
-      }, 
-      {
-        name: "保安员", 
-        id: "5.10"
-      }
-    ]
-  }
-])
-
-</script>

+ 0 - 132
src/views/menduner/system/talentMap/details/components/training.vue

@@ -1,132 +0,0 @@
-<template>
-  <el-card shadow="never" class="m-t-10px">
-    <template #header>
-      <div class="flex justify-between">
-        <CardTitle title="培训经历" />
-        <el-button link type="primary" @click="handleAdd"><Icon icon="ep:plus" class="mr-5px" />新增</el-button>
-      </div>
-    </template>
-    <el-table :data="list" :stripe="true">
-      <el-table-column label="培训中心" align="center" prop="orgName" />
-      <el-table-column label="培训课程" align="center" prop="course" />
-      <el-table-column label="培训时间" align="center" prop="startTime">
-        <template #default="scope">
-          {{ scope.row.startTime ? timesTampChange(scope.row.startTime, 'Y-M') : '' }}
-          <span v-if="scope.row.startTime && scope.row.endTime">至</span>
-          {{ scope.row.endTime ? timesTampChange(scope.row.endTime, 'Y-M') : '' }}
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="center" prop="actions">
-        <template #default="{ row, $index }">
-          <el-button link type="primary" @click="handleEdit(row, $index)">编辑</el-button>
-          <el-button link type="danger" @click="handleDelete($index, row.id)">删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </el-card>
-
-  <Dialog :title="'培训经历' + (type === 'edit' ? '编辑' : '新增')" v-model="dialogVisible">
-    <el-form
-      ref="formRef"
-      :model="formData"
-      :rules="formRules"
-      label-width="80px"
-    >
-      <el-form-item label="培训中心" prop="orgName" required>
-        <el-input v-model="formData.orgName" />
-      </el-form-item>
-      <el-form-item label="培训课程" prop="course" required>
-        <el-input v-model="formData.course" />
-      </el-form-item>
-      <el-form-item label="开始日期" prop="startTime" required>
-        <el-date-picker v-model="formData.startTime" :disabledDate="disabledDates" type="month"  value-format="x" placeholder="选择培训开始日期" />
-      </el-form-item>
-      <el-form-item label="结束日期" prop="endTime" required>
-        <el-date-picker v-model="formData.endTime" :disabledDate="disabledDates" type="month"  value-format="x" placeholder="选择在培训束日期" />
-      </el-form-item>
-      <el-form-item label="培训内容" prop="content">
-        <el-input v-model="formData.content" :rows="8" type="textarea" />
-      </el-form-item>
-    </el-form>
-    <template #footer>
-      <el-button @click="submitForm" type="primary">确 定</el-button>
-      <el-button @click="dialogVisible = false; formData = {}">取 消</el-button>
-    </template>
-  </Dialog>
-</template>
-
-<script setup>
-defineOptions({ name: 'TalentMapTraining'})
-import { cloneDeep } from 'lodash-es'
-import { timesTampChange } from '@/utils/transform/date'
-import { TalentMap } from '@/api/menduner/system/talentMap'
-import { formatName } from '@/utils'
-
-const props = defineProps({
-  modelValue: Array,
-  isEdit: Boolean
-})
-const list = ref([])
-watch(() => props.modelValue, (newVal) => {
-  list.value = newVal ? newVal.map(e => {
-    return { ...e, orgName: formatName(e.orgName), course: formatName(e.course), content: formatName(e.content) }
-  }) : []
-}, { deep: true })
-
-const message = useMessage() // 消息弹窗
-const editIndex = ref()
-const formRef = ref()
-const dialogVisible = ref(false)
-const formData = ref({})
-const type = ref('add')
-const formRules = reactive({
-  orgName: [{ required: true, message: '培训中心不能为空', trigger: 'blur' }],
-  course: [{ required: true, message: '培训课程不能为空', trigger: 'blur' }],
-  startDate: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
-  endDate: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }]
-})
-
-// 未来的时间不可选
-const disabledDates = (date) => {
-  return date.getTime() > Date.now()
-}
-
-const handleAdd = () => {
-  type.value = 'add'
-  dialogVisible.value = true
-}
-
-const handleEdit = (row, index) => {
-  type.value = 'edit'
-  editIndex.value = index
-  formData.value = cloneDeep(row)
-  dialogVisible.value = true
-}
-
-// 删除
-const handleDelete = async (index, id) => {
-  try {
-    await message.delConfirm()
-    if (props.isEdit) {
-      await TalentMap.deleteTalentMapTrain(id)
-      list.value.splice(index, 1)
-      message.success('删除成功')
-    } else list.value.splice(index, 1)
-  } catch {}
-}
-
-const submitForm = async () => {
-  await formRef.value.validate()
-
-  if (props.isEdit) {
-    const data = type.value === 'add' ? await TalentMap.createTalentMapTrain(formData.value) : await TalentMap.updateTalentMapTrain(formData.value)
-    message.success(type.value === 'add' ? '添加成功' : '编辑成功')
-    if (type.value === 'add') formData.value.id = data
-    type.value === 'add' ? list.value.push(formData.value) : list.value[editIndex.value] = formData.value
-  } else type.value === 'add' ? list.value.push(formData.value) : list.value[editIndex.value] = formData.value
-
-  formData.value = {}
-  editIndex.value = 0
-  dialogVisible.value = false
-}
-</script>

+ 0 - 164
src/views/menduner/system/talentMap/details/defaultData.js

@@ -1,164 +0,0 @@
-export default {
-    "person": {
-        "id": null,
-        "userId": null,
-        "resumeUrl": "",
-        "name": "",
-        "foreignName": null,
-        "sex": "",
-        "sexStr": "",
-        "avatar": "",
-        "phone": "",
-        "email": "",
-        "qq": "",
-        "wxCode": "",
-        "birthday": null,
-        "partyMember": false,
-        "nationality": "",
-        "maritalStatus": "",
-        "maritalStatusStr": "",
-        "areaId": null,
-        "areaStr": "",
-        "regId": null,
-        "regStr": "",
-        "jobType": "",
-        "jobTypeStr": "",
-        "jobStatus": "",
-        "jobStatusStr": "",
-        "firstWorkTime": null,
-        "advantage": "",
-        "height": "",
-        "weight": "",
-        "expType": "",
-        "expTypeStr": "",
-        "eduType": "",
-        "eduTypeStr": "",
-        "prepareExp": null,
-        "interestedAreaIdList": null,
-        "tagList": null,
-        "jobInterestedList": [],
-        "spouseHometownId": null,
-        "spouseHometownStr": null,
-        "childAge": null,
-        "createTime": null
-    },
-    "eduList": [],
-    "workList": [],
-    "trainList": [],
-    "resume": {
-        "name": "",
-        "surname": "",
-        "gender": "",
-        "genderInf": "",
-        "age": null,
-        "age_inf": null,
-        "height": "",
-        "weight": "",
-        "maritalStatus": "",
-        "birthday": "",
-        "hukouAddress": "",
-        "hukouAddressNorm": "",
-        "hometownAddress": "",
-        "hometownAddressNorm": "",
-        "idCard": "",
-        "race": "",
-        "nationality": "",
-        "politStatus": "",
-        "bloodType": "",
-        "starSign": "",
-        "languages": "",
-        "englishLevel": "",
-        "computerLevel": "",
-        "blog": "",
-        "applyJob": null,
-        "applyCpy": null,
-        "workYear": "",
-        "workYearNorm": "",
-        "workYearInf": "",
-        "workStartTime": "",
-        "workStartTimeInf": "",
-        "workPosition": "",
-        "workPosTypeP": "",
-        "workCompany": "",
-        "workIndustry": "",
-        "workStatus": "",
-        "workSalary": "",
-        "workSalaryMin": "",
-        "workSalaryMax": "",
-        "workLocation": "",
-        "workLocationNorm": "",
-        "workJobNature": "",
-        "hasOverseaEdu": "",
-        "hasOverseaExp": "",
-        "gradTime": "",
-        "college": "",
-        "collegeType": "",
-        "collegeRank": "",
-        "collegeDept": "",
-        "major": "",
-        "degree": "",
-        "recruit": "",
-        "email": "",
-        "phone": "",
-        "virtualPhone": null,
-        "virtualPhoneTime": null,
-        "qq": "",
-        "weixin": "",
-        "postalCode": "",
-        "city": "",
-        "cityNorm": "",
-        "livingAddress": "",
-        "livingAddressNorm": "",
-        "expectJob": "",
-        "expectCpy": "",
-        "expectSalary": "",
-        "expectSalaryMin": "",
-        "expectSalaryMax": "",
-        "expectIndustry": "",
-        "expectTime": "",
-        "expectJNature": "",
-        "expectJStatus": "",
-        "expectJLocation": "",
-        "expectJLocationNorm": "",
-        "resumeType": "0",
-        "resumeSource": "",
-        "resumeId": "",
-        "resumeName": "",
-        "resumeParseTime": "",
-        "resumeUpdateTime": "",
-        "resumeIntegrity": "",
-        "avatarUrl": "",
-        "avatarData": "",
-        "contBasicInfo": "",
-        "contExpectJob": "",
-        "contEducation": "",
-        "contJobExp": "",
-        "contProjExp": "",
-        "contInternship": "",
-        "contSocialExp": "",
-        "contCampusExp": "",
-        "contJobSkill": "",
-        "contMyDesc": "",
-        "contHobby": "",
-        "contLanguage": "",
-        "contCertificate": "",
-        "contAward": "",
-        "contTraining": "",
-        "contCourse": "",
-        "contResearch": "",
-        "contPublications": null,
-        "contMyProject": null,
-        "contCoverLetter": "",
-        "contExtraInfo": "",
-        "rawText": "",
-        "educationObjs": [],
-        "jobExpObjs": [],
-        "socialExpObjs": [],
-        "projExpObjs": [],
-        "trainingObjs": [],
-        "skillsObjs": [],
-        "langObjs": [],
-        "certObjs": [],
-        "allCertObjs": []
-    }
-}

+ 0 - 276
src/views/menduner/system/talentMap/details/index.vue

@@ -1,276 +0,0 @@
-<template>
-  <div v-loading="saveLoading">
-    <el-row :gutter="10">
-      <el-col :span="12">
-        <el-tabs v-model="activeName" type="border-card">
-          <el-tab-pane label="简历解析" v-loading="loading" name="resumeAnalysis">
-            <div v-if="fileUrl">
-              <div class="text-right m-b-10px">
-                <el-button v-if="!isEdit" @click="handleText">查看文本信息</el-button>
-                <el-button type="primary" @click="handleResetUpload">重新上传简历</el-button>
-              </div>
-              <IFrame :src="fileUrl" />
-              <el-drawer
-                v-model="drawer"
-                modal-class="drawer"
-                size="75%"
-                direction="ltr"
-                title="简历解析(可复制文本使用)"
-              >
-                <p v-for="(text, index) in resumeTxt" :key="text + index">{{ text }}</p>
-              </el-drawer>
-            </div>
-            <el-upload
-              v-else
-              ref="uploadRef"
-              v-model:file-list="fileList"
-              :action="uploadUrl"
-              :auto-upload="false"
-              :data="data"
-              :limit="1"
-              :on-change="handleChange"
-              :on-error="submitFormError"
-              :on-exceed="handleExceed"
-              :on-success="submitFormSuccess"
-              :http-request="httpRequest"
-              accept=".pdf, doc, .docx"
-              drag
-              class="flex-1"
-            >
-              <i class="el-icon-upload"></i>
-              <div class="el-upload__text">上传附件, 将文件拖到此处,或 <em>点击上传</em></div>
-              <template #tip>
-                <div class="el-upload__tip color-red">
-                  提示:仅允许导入 pdf、doc、docx 格式文件!
-                </div>
-              </template>
-            </el-upload>
-          </el-tab-pane>
-          <el-tab-pane label="人员搜索" name="personnelSearch">
-            <Search @detail="handleDetail" :searchName="formData?.name_zh || formData?.name_en || ''" />
-          </el-tab-pane>
-        </el-tabs>
-      </el-col>
-
-      <el-col :span="12">
-        <div ref="content" :style="{'height': height, 'overflow-y': 'auto'}">
-          <el-tabs type="border-card">
-            <el-tab-pane label="简历解析内容">
-              <FormPage ref="FormPageRef" :formType="isEdit ? 'edit' : 'create'" :itemData="formData" />
-              <div class="text-center m-t-30px">
-                <el-affix position="bottom" :offset="20">
-                  <el-button type="primary" @click="handleSave" size="large" class="!w-120px">保 存</el-button>
-                </el-affix>
-              </div>
-            </el-tab-pane>
-            <el-tab-pane label="标签">
-              <el-card shadow="never">
-                <template #header>
-                  <CardTitle title="已有标签" />
-                </template>
-                <m-tags v-if="formData && Object.keys(formData).length" :data="formData?.skillsObjs" />
-              </el-card>
-            </el-tab-pane>
-          </el-tabs>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script setup>
-defineOptions({ name: 'TalentMapDetail'})
-import { useTagsViewStore } from '@/store/modules/tagsView'
-import { TalentMap } from '@/api/menduner/system/talentMap'
-import { useUpload } from '@/components/UploadFile/src/useUpload'
-import { commonApi } from '@/api/menduner/common'
-import { Base64 } from 'js-base64'
-import { getDict } from '@/hooks/web/useDictionaries'
-import MTags from './components/tags.vue'
-// import DefaultData from './defaultData'
-import { cloneDeep } from 'lodash-es';
-import { timesTampChange, timestampToAge } from '@/utils/transform/date'
-import FormPage from '@/views/menduner/system/talentMap/components/FormPage.vue'
-import Search from './components/search.vue'
-import { talentLabelingApi } from '@/api/menduner/system/talentMap/labeling'
-
-const { back } = useRouter()
-const loading = ref(false)
-const activeName = ref('resumeAnalysis')
-const saveLoading = ref(false)
-const fileUrl = ref('') // https://minio.menduner.com/dev/person/229988673960153088/attachment/ee3eb21f45e13ede3557a03d18585ed80c5b4212ac5634e3436e309afaa8fe6a.pdf
-const uploadRef = ref()
-const fileList = ref([])
-const data = ref({ path: '' })
-const { uploadUrl, httpRequest } = useUpload()
-
-/** 初始化 */
-// const InfoRef = ref()
-const content = ref()
-const message = useMessage() // 消息弹窗
-const height = ref(0)
-const { currentRoute } = useRouter() // 路由
-const route = useRoute()
-const { id } = route.params
-const baseUrl = import.meta.env.VITE_PREVIEW_URL
-const isEdit = ref(false)
-
-const drawer = ref(false)
-
-const resumeTxt = ref([])
-const formData = ref({})
-const FormPageRef = ref(null)
-
-// 获取人才详情
-const getTalentMap = async () => {
-  loading.value = true
-  try {
-    const data = await TalentMap.getTalentMapDetails(id)
-    if (!data || !Object.keys(data).length) return
-    if (data.person?.resumeUrl) {
-      fileUrl.value = !data.person?.resumeUrl.includes('.pdf') ?  `${baseUrl}/onlinePreview?url=${encodeURIComponent(Base64.encode(data.person?.resumeUrl))}` : data.person?.resumeUrl
-    } else activeName.value = 'personnelSearch'
-    setItemDataValue(data)
-  } catch (error) {
-    console.log(error)
-  } finally {
-    loading.value = false
-  }
-}
-
-onMounted(async () => {
-  height.value = document.documentElement.clientHeight + 'px'
-  if (id && id !== 'add') {
-    isEdit.value = true
-    await getTalentMap()
-  }
-})
-
-// 简历解析
-const getResumeParser = async (url) => {
-  loading.value = true
-  try {
-    const data = await commonApi.resumeParser({ fileUrl: url })
-    setItemDataValue(data)
-  } finally {
-    loading.value = false
-  }
-}
-
-// 文件上传
-const handleChange = async (file) => {
-  data.value.path = file.name
-  unref(uploadRef)?.submit()
-  if (!fileList.value.length) return
-
-  const url = fileList.value[0].response.data
-  fileUrl.value = !url.includes('.pdf') ?  `${baseUrl}/onlinePreview?url=${encodeURIComponent(Base64.encode(url))}` : url
-  await getResumeParser(url)
-}
-
-/** 上传错误提示 */
-const submitFormError = () => {
-  message.error('上传失败,请您重新上传!')
-}
-
-/** 文件数超出提示 */
-const handleExceed = () => {
-  message.error('最多只能上传一个文件!')
-}
-
-const submitFormSuccess = () => {
-  // 清理
-  unref(uploadRef)?.clearFiles()
-}
-
-// 查看文本信息
-const handleText = () => {
-  drawer.value = true
-}
-
-// 重新上传简历
-const handleResetUpload = async () => {
-  await message.confirm('是否确定重新上传简历?确定后将清空当前信息')
-  fileUrl.value = ''
-  data.value.path = ''
-  fileList.value = []
-  setItemDataValue()
-}
-
-const setItemDataValue = (data) => {
-  formData.value = {
-    name_zh: data?.person?.name || '',
-    email: data?.person?.email || '',
-    mobile: data?.person?.phone || '',
-    birthday: data?.person?.birthday ? timesTampChange(data.person.birthday, 'Y-M-D') : '',
-    age: data?.person?.birthday ? timestampToAge(data.person.birthday) : null,
-    career_path: data?.workList ? data.workList.map(e => {
-      return {
-        hotel_zh: e?.enterpriseName || null,
-        title_zh: e?.positionName || null,
-        date: e?.startTime ? timesTampChange(e.startTime, 'Y-M-D') : null
-      }
-    }) : [],
-    created_at: data?.person?.createTime ? timesTampChange(data.person.createTime, 'Y-M-D') : null,
-    updated_at: data?.person?.updateTime ? timesTampChange(data.person.updateTime, 'Y-M-D') : null,
-  }
-  resumeTxt.value = data?.resume?.rawText?.split('\n') || ''
-  if (FormPageRef.value?.setFormData) FormPageRef.value.setFormData(formData.value)
-}
-
-// 搜索-查看详情
-const handleDetail = async (userId) => {
-  if (!userId) return message.warning('请先选择人才!')
-  try {
-    const data = await TalentMap.getTalentMapDetail(userId)
-    // 去除id
-    setItemDataValue(data, true)
-  } catch {}
-}
-
-// 新增人才
-const formLoading = ref(false)
-const uploadFile = ref(null)
-const handleSave = async () => {
-  const params = { ...FormPageRef.value.formQuery }
-  if (!params.name_zh) return message.warning('请填写姓名!')
-  
-  // 数组转为字符串保存
-  if (Array.isArray(params?.mobile)) {
-    params.mobile = params.mobile.filter(i => Boolean(i)).map(j => String(j).replace(/,|,/g, '')).join(',');
-  }
-  console.log(params, 'handleSubmit')
-  try {
-    formLoading.value = true
-    let result = {}
-    if (!id || id === 'add') { // 新增
-      // uploadFile.value.append('card_data', JSON.stringify(params))
-      result = await talentLabelingApi.createBusinessCardPost(params)
-      message.success('新增成功')
-      back()
-
-      if (result.code === 202 || result.message.includes('疑似重复')) {
-        if (!result.data?.main_card?.id) return
-        
-        await message.confirm('发现与当前名片的疑似重复数据,去处理')
-        mergeFormRef.value.open(result.data?.main_card?.id)
-      }
-    } else { // 编辑
-      await talentLabelingApi.updateBusinessCard(params, id)
-      message.success('更新成功')
-      back()
-    }
-  } catch (error) {
-    console.log('更新失败', error)
-  } finally {
-    uploadFile.value = null
-    formLoading.value = false
-  }
-}
-
-</script>
-<style lang="scss" scoped>
-:deep(.drawer) {
-  position: absolute;
-}
-</style>

+ 0 - 19
src/views/menduner/system/talentMap/maintenance/labeling/LabelingForm copy.vue

@@ -80,7 +80,6 @@
 <script setup>
 import { talentLabelingApi } from '@/api/menduner/system/talentMap/labeling'
 import { talentTagApi } from '@/api/menduner/system/talentMap/tag'
-import DefaultData from '@/views/menduner/system/talentMap/details/defaultData'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { cloneDeep } from 'lodash-es'
 import { TalentMap } from '@/api/menduner/system/talentMap'
@@ -95,8 +94,6 @@ const previewUrl = ref()
 const talentSelectedTags = ref([])
 const tagList = ref([])
 
-const result = ref(cloneDeep(DefaultData))
-
 // 获取人才标签
 const getTagList = async () => {
 	loading.value = true
@@ -263,22 +260,6 @@ const open = async (data) => {
 	// 获取所有人才标签
 	await getTagList()
 
-	// 获取名片预览
-	// if (data.image_path) {
-	// 	const res = await talentLabelingApi.getTalentCardByImagePath(data.image_path)
-	// 	previewUrl.value = URL.createObjectURL(res)
-	// }
-
-	// 网页解析原始markdown内容
-	// if (data.origin_source) {
-	// 	if (!data.origin_source?.minio_path) return
-	// 	const result = await talentLabelingApi.getTalentMarkdown(data.origin_source.minio_path)
-	// 	if (result) {
-	// 		markdown_text.value = marked(result)
-	// 		if (markdown_text.value) showPage(markdown_text.value)
-	// 	}
-	// }
-
 	// 获取人才标签
 	await getTalentTagById()
 }

+ 0 - 5
src/views/menduner/system/talentMap/maintenance/labeling/LabelingForm.vue

@@ -95,7 +95,6 @@
 <script setup>
 import { talentLabelingApi } from '@/api/menduner/system/talentMap/labeling'
 import { talentTagApi } from '@/api/menduner/system/talentMap/tag'
-import DefaultData from '@/views/menduner/system/talentMap/details/defaultData'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { cloneDeep } from 'lodash-es'
 import { TalentMap } from '@/api/menduner/system/talentMap'
@@ -107,12 +106,9 @@ const message = useMessage() // 消息弹窗
 const loading = ref(false)
 const dialogVisible = ref(false) // 弹窗的是否展示
 const talentItem = ref({})
-const previewUrl = ref()
 const talentSelectedTags = ref([])
 const tagList = ref([])
 
-const result = ref(cloneDeep(DefaultData))
-
 const typeObj = {
 	'招聘': '门墩儿招聘',
 	'新任命': '门墩儿新任命',
@@ -204,7 +200,6 @@ const handleShowPage = async (id, url) => {
 const sourceList = ref([])
 const open = async (data) => {
 	sourceList.value = []
-	previewUrl.value = null
   dialogVisible.value = true
 	talentItem.value = data