Browse Source

名片解析

Xiao_123 1 tuần trước cách đây
mục cha
commit
35dc79bce8

+ 18 - 8
src/views/menduner/system/talentMap/maintenance/gather/businessCard/FormPage.vue

@@ -105,6 +105,7 @@
               v-model="item.date"
               value-format="YYYY-MM-DD"
               type="date"
+              :disabledDate="disabledDates"
               start-placeholder="开始日期"
               end-placeholder="结束日期"
             />
@@ -115,7 +116,7 @@
             <el-button @click="addCareer(index)" type="primary" class="cursor-pointer" :icon="Plus" circle />
             <el-button
               v-if="careerTrajectory.length > 1"
-              class="mt-15px ml-0 cursor-pointer"
+              class="mt-15px !ml-0 cursor-pointer"
               @click="removeCareer(index)"
               type="danger"
               :icon="Delete"
@@ -145,18 +146,18 @@
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row>
+      <el-row v-if="formType === 'edit'">
         <div class="m-title">系统信息</div>
       </el-row>
-      <el-form-item label="状态">
+      <el-form-item label="状态" v-if="formType === 'edit'">
          <el-tag v-if="itemData.status" :type="itemData.status === 'active' ? 'success' : 'danger'">
           {{ itemData.status === 'active' ? '已启用' : '已禁用' }}
         </el-tag>
       </el-form-item>
-      <el-form-item label="创建时间">
+      <el-form-item label="创建时间" v-if="formType === 'edit'">
         <el-tag v-if="itemData.created_at" type="primary" effect="light">{{ itemData.created_at }}</el-tag>
       </el-form-item>
-      <el-form-item label="更新时间">
+      <el-form-item label="更新时间" v-if="formType === 'edit'">
         <el-tag v-if="itemData.updated_at" type="primary" effect="light">{{ itemData.updated_at }}</el-tag>
       </el-form-item>
     </el-form>
@@ -173,7 +174,8 @@ import { TalentMap } from '@/api/menduner/system/talentMap'
 import { Delete, Plus } from '@element-plus/icons-vue'
 
 const props = defineProps({
-  itemData: Object
+  itemData: Object,
+  formType: String
 })
 
 const loading = ref(false)
@@ -199,8 +201,9 @@ const formQuery = ref({
   postal_code_en: undefined,
   birthday: undefined,
   residence: undefined,
+  career_path: []
 })
-const careerTrajectory = ref([{ company_name: null,  position: null, current_date: null }])
+const careerTrajectory = ref([{ hotel_zh: null,  title_zh: null, date: null }])
 
 if (props.itemData) {
 	formQuery.value = cloneDeep(props.itemData)
@@ -209,11 +212,18 @@ if (props.itemData) {
 
 const addCareer = () => {
   careerTrajectory.value = careerTrajectory.value || []
-  careerTrajectory.value.push({ company_name: null,  position: null, current_date: null })
+  careerTrajectory.value.push({ hotel_zh: null,  title_zh: null, date: null })
+  formQuery.value.career_path = careerTrajectory.value
 }
 const removeCareer = (index) => {
   if (careerTrajectory.value.length <= 1) return
   careerTrajectory.value.splice(index, 1)
+  formQuery.value.career_path = careerTrajectory.value
+}
+
+// 未来的日期不可选
+const disabledDates = (date) => {
+  return date.getTime() > Date.now()
 }
 
 defineExpose({

+ 63 - 58
src/views/menduner/system/talentMap/maintenance/gather/businessCard/index.vue

@@ -24,24 +24,24 @@
   <!-- 列表 -->
   <ContentWrap>
     <el-table v-loading="loading" :data="list" :stripe="true">
-      <el-table-column label="姓名(中)" align="center" prop="name_zh" fixed="left" />
-      <el-table-column label="姓名(英)" align="center" prop="name_en" />
+      <el-table-column label="中文名称" align="center" prop="name_zh" fixed="left" />
+      <el-table-column label="英文名称" align="center" prop="name_en" />
       <el-table-column label="职位" align="center" prop="title_zh" />
       <el-table-column label="酒店/公司" align="center" prop="hotel_zh" />
-      <el-table-column label="手机号码" align="center" prop="phone" />
-      <el-table-column label="固定电话" align="center" prop="mobile" />
-      <el-table-column label="创建日期" align="center" prop="created_at" :formatter="dateFormatter" />
+      <el-table-column label="手机号码" align="center" prop="mobile" />
+      <el-table-column label="固定电话" align="center" prop="phone" />
       <el-table-column label="状态" align="center" prop="status" width="80">
         <template #default="scope">
           <el-tag type="success" v-if="scope.row.status === 'active'">已启用</el-tag>
           <el-tag type="danger" v-else>已禁用</el-tag>
         </template>
       </el-table-column>
+      <el-table-column label="创建日期" align="center" prop="created_at" :formatter="dateFormatter" />
       <el-table-column label="操作" align="center" fixed="right" min-width="110">
         <template #default="scope">
           <el-button link type="primary" @click="handleEdit(scope.row)">编辑</el-button>
           <el-button link type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
-          <el-button link :type="scope.row.status === 'active' ? 'danger': 'success'" @click="handleDisable(scope.row)">
+          <el-button link :type="scope.row.status === 'active' ? 'warning': 'success'" @click="handleDisable(scope.row)">
             {{ scope.row.status === 'active' ? '禁用' : '启用'}}
           </el-button>
         </template>
@@ -85,9 +85,8 @@
             </UploadImg>
           </div>
         </div>
-        <div class="formBox">
+        <!-- <div class="formBox">
           <el-form
-            ref="formRef"
             :model="formQuery"
             label-width="128px"
             v-loading="formLoading"
@@ -246,7 +245,8 @@
               <el-tag v-if="itemData.updated_at" type="primary" effect="light">{{ itemData.updated_at }}</el-tag>
             </el-form-item>
           </el-form>
-        </div>
+        </div> -->
+        <FormPage ref="FormPageRef" :formType="formType" :itemData="itemData" />
       </div>
       <template #footer>
         <el-button @click="handleSave" type="success" :disabled="analysisLoading">保 存</el-button>
@@ -263,8 +263,9 @@ import { dateFormatter } from '@/utils/formatTime'
 import { talentLabelingApi } from '@/api/menduner/system/talentMap/labeling'
 import { Delete, Plus } from '@element-plus/icons-vue'
 import MergeForm from '@/views/menduner/system/talentMap/components/merge.vue'
+import FormPage from './FormPage.vue'
 
-/** 人才地图 列表 */
+/** 人才采集 名片解析 */
 defineOptions({ name: 'TalentMapCard' })
 
 const message = useMessage() // 消息弹窗
@@ -274,7 +275,7 @@ const loading = ref(false) // 列表的加载中
 const list = ref([]) // 列表的数据
 const total = ref(0) // 列表的总页数
 const queryParams = reactive({
-  name: undefined,
+  name: undefined
 })
 const queryFormRef = ref() // 搜索的表单
 
@@ -305,14 +306,14 @@ const resetQuery = () => {
   handleQuery()
 }
 
-const dealData = (item) => {
-  itemData.value = { ...item }
-  careerTrajectory.value = item?.career_path ? JSON.parse(JSON.stringify(item.career_path)) : []
-  if (!careerTrajectory.value?.length) careerTrajectory.value = [{ company_name: null,  position: null, current_date: null }]
-  Object.keys(formQuery.value).forEach(key => {
-    formQuery.value[key] = item[key] || null
-  })
-}
+// const dealData = (item) => {
+  // itemData.value = { ...item }
+  // careerTrajectory.value = item?.career_path ? JSON.parse(JSON.stringify(item.career_path)) : []
+  // if (!careerTrajectory.value?.length) careerTrajectory.value = [{ hotel_zh: null,  title_zh: null, date: null }]
+  // Object.keys(formQuery.value).forEach(key => {
+  //   formQuery.value[key] = item[key] || null
+  // })
+// }
 
 /** 删除按钮操作 */
 const handleDelete = async (id) => {
@@ -333,7 +334,8 @@ const handleDelete = async (id) => {
 const { push } = useRouter()
 const handleEdit = async (item) => {
   formType.value = 'edit'
-  dealData(item)
+  // dealData(item)
+  itemData.value = item
   file.value = null
   filePath.value = null
   try {
@@ -372,29 +374,29 @@ const handleDisable = async (item) => {
   } catch {}
 }
 
-const formQuery = ref({
-  name_zh: undefined,
-  name_en: undefined,
-  title_zh: undefined,
-  title_en: undefined,
-  mobile: undefined,
-  phone: undefined,
-  email: undefined,
-  hotel_zh: undefined,
-  hotel_en: undefined,
-  brand_zh: undefined,
-  brand_en: undefined,
-  affiliation_zh: undefined,
-  affiliation_en: undefined,
-  brand_group: undefined,
-  address_zh: undefined,
-  address_en: undefined,
-  postal_code_zh: undefined,
-  postal_code_en: undefined,
-  birthday: undefined,
-  residence: undefined,
-})
-const careerTrajectory = ref([{ company_name: null,  position: null, current_date: null }])
+// const formQuery = ref({
+//   name_zh: undefined,
+//   name_en: undefined,
+//   title_zh: undefined,
+//   title_en: undefined,
+//   mobile: undefined,
+//   phone: undefined,
+//   email: undefined,
+//   hotel_zh: undefined,
+//   hotel_en: undefined,
+//   brand_zh: undefined,
+//   brand_en: undefined,
+//   affiliation_zh: undefined,
+//   affiliation_en: undefined,
+//   brand_group: undefined,
+//   address_zh: undefined,
+//   address_en: undefined,
+//   postal_code_zh: undefined,
+//   postal_code_en: undefined,
+//   birthday: undefined,
+//   residence: undefined,
+// })
+// const careerTrajectory = ref([{ company_name: null,  position: null, current_date: null }])
 
 const file = ref(null)
 const uploadFile = ref(null)
@@ -402,31 +404,33 @@ const uploadChange = (raw) => {
   file.value = raw
 }
 
-const addCareer = () => {
-  careerTrajectory.value = careerTrajectory.value || []
-  careerTrajectory.value.push({ company_name: null,  position: null, current_date: null })
-}
-const removeCareer = (index) => {
-  if (careerTrajectory.value.length <= 1) return
-  careerTrajectory.value.splice(index, 1)
-}
+// const addCareer = () => {
+//   careerTrajectory.value = careerTrajectory.value || []
+//   careerTrajectory.value.push({ company_name: null,  position: null, current_date: null })
+// }
+// const removeCareer = (index) => {
+//   if (careerTrajectory.value.length <= 1) return
+//   careerTrajectory.value.splice(index, 1)
+// }
 
 // 更新
 const showAnalysisTable = ref(false)
 const formLoading = ref(false)
 const formType = ref('')
-const formRef = ref() // 表单 Ref
+const FormPageRef = ref(null)
 const mergeFormRef = ref() // 合并表单 Ref
 const handleSave = async () => {
+  const params = FormPageRef.value.formQuery
+  console.log(params, 'handleSubmit')
   try {
     formLoading.value = true
-    formQuery.value.career_path = careerTrajectory
-    Object.assign(itemData.value, formQuery.value)
+    // formQuery.value.career_path = careerTrajectory
+    // Object.assign(itemData.value, formQuery.value)
 
     let result = {}
 
     if (formType.value === 'create') {
-      uploadFile.value.append('card_data', JSON.stringify(itemData.value))
+      uploadFile.value.append('card_data', JSON.stringify(params))
       result = await talentLabelingApi.createBusinessCard(uploadFile.value)
       message.success('新增成功')
       showAnalysisTable.value = false
@@ -440,7 +444,7 @@ const handleSave = async () => {
         mergeFormRef.value.open(result.data?.main_card?.id)
       }
     } else {
-      await talentLabelingApi.updateBusinessCard(itemData.value, itemData.value.id)
+      await talentLabelingApi.updateBusinessCard(params, itemData.value.id)
       message.success('更新成功')
       showAnalysisTable.value = false
       // 刷新列表
@@ -481,7 +485,8 @@ const handleAnalysis = async () => {
     const res = await talentLabelingApi.businessCardParse(uploadFile.value)
 
     if (index !== createAnalysisNum.value || !openUploadImg.value) return // 不是最新的名片解析数据(用户在解析完成前已重新上传)或用户已取消解析
-    dealData(res?.data || res)
+    // dealData(res?.data || res)
+    itemData.value = res?.data || res
     openUploadImg.value = false
     showAnalysisTable.value = true
     message.success('名片解析成功')
@@ -502,7 +507,7 @@ const handleAdd = () => {
   filePath.value = null
   analysisLoading.value = false
   createAnalysisNum.value++
-  careerTrajectory.value = [{ company_name: null,  position: null, current_date: null }]
+  // careerTrajectory.value = [{ company_name: null,  position: null, current_date: null }]
   openUploadImg.value = true
 }
 

+ 1 - 1
src/views/menduner/system/talentMap/maintenance/gather/resume/index.vue

@@ -102,7 +102,7 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { dateFormatter, dateFormatter2 } from '@/utils/formatTime'
 
-/** 人才地图 列表 */
+/** 人才采集 简历解析 */
 defineOptions({ name: 'TalentMap' })
 
 const message = useMessage() // 消息弹窗

+ 1 - 0
src/views/menduner/system/talentMap/maintenance/gather/webPageParsing/index.vue

@@ -76,6 +76,7 @@
 </template>
 
 <script setup>
+/** 人才采集 网页解析 */
 defineOptions({ name: 'WebPageParsing' })
 import FirecrawlApp from '@mendable/firecrawl-js'
 import { SetUp } from '@element-plus/icons-vue'

+ 2 - 7
src/views/menduner/system/talentMap/maintenance/labeling/LabelingForm.vue

@@ -55,8 +55,8 @@
 								</div>
 							</el-card>
 							<div class="text-right mt-12px">
-								<el-button @click="submitForm" type="primary" :disabled="loading">确 认</el-button>
-								<el-button @click="handleCancel">取消</el-button>
+								<el-button @click="submitForm" type="primary" :disabled="loading">保 存</el-button>
+								<el-button @click="dialogVisible = false">取消</el-button>
 							</div>
 						</el-tab-pane>
 					</el-tabs>
@@ -185,11 +185,6 @@ const handleAdd = (item) => {
 	talentSelectedTags.value.push(item)
 }
 
-// 取消编辑标签
-const handleCancel = () => {
-	getTalentTagById()
-}
-
 /** 提交表单 */
 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
 const submitForm = async () => {

+ 2 - 1
src/views/menduner/system/talentMap/maintenance/labeling/index.vue

@@ -55,7 +55,8 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="创建时间" align="center" prop="created_at" width="180" />
+      <el-table-column label="创建时间" align="center" prop="created_at" width="160" />
+      <el-table-column label="更新时间" align="center" prop="updated_at" width="160" />
       <el-table-column label="操作" align="center">
         <template #default="scope">
           <el-button link type="primary" @click="openForm(scope.row)">标注</el-button>