소스 검색

人才采集:名片、简历、杂项上传文件时不需要请求接口保存

Xiao_123 1 개월 전
부모
커밋
d110b7d196

+ 24 - 9
src/components/UploadFile/src/UploadImg.vue

@@ -8,6 +8,7 @@
       :class="['upload', drag ? 'no-border' : '', buttonUpload ? 'notBorder' : '']"
       :disabled="disabled"
       :drag="drag"
+      :auto-upload="autoUpload"
       :http-request="httpRequest"
       :multiple="false"
       :on-error="uploadError"
@@ -93,6 +94,7 @@ const props = defineProps({
   butType: propTypes.any.def('primary'), // 按钮上传类型
   plain: propTypes.bool.def(false), // 按钮上传样式
   txt: propTypes.string.def('点击上传'), // 按钮上传文字
+  autoUpload: propTypes.bool.def(true) // 是否自动上传文件
 })
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
@@ -134,15 +136,17 @@ const beforeUpload: UploadProps['beforeUpload'] = (rawFile) => {
       reader.readAsDataURL(rawFile);
       reader.onload = (e) => {
         const img = new Image()
-        img.src = e.target.result
-        img.onload = () => {
-          const width = img.width
-          const height = img.height
-          if (width > props.maxWidth || height > props.maxHeight) {
-            message.notifyWarning(`图片尺寸过大,请上传宽度不超过 ${props.maxWidth}px,高度不超过 ${props.maxHeight}px 的图片`)
-            reject(false)
-          } else {
-            resolve(rawFile)
+        if (e.target?.result) {
+          img.src = e.target.result as string
+          img.onload = () => {
+            const width = img.width
+            const height = img.height
+            if (width > props.maxWidth || height > props.maxHeight) {
+              message.notifyWarning(`图片尺寸过大,请上传宽度不超过 ${props.maxWidth}px,高度不超过 ${props.maxHeight}px 的图片`)
+              reject(false)
+            } else {
+              resolve(rawFile)
+            }
           }
         }
       }
@@ -151,6 +155,17 @@ const beforeUpload: UploadProps['beforeUpload'] = (rawFile) => {
 }
 
 const handleChange = (file: any, fileList: any) => {
+  // 当autoUpload为false时,为本地文件创建预览URL
+  if (!props.autoUpload && file?.raw) {
+    const reader = new FileReader()
+    reader.onload = (e) => {
+      if (e.target?.result) {
+        emit('update:modelValue', e.target.result as string)
+      }
+    }
+    reader.readAsDataURL(file.raw)
+  }
+  
   emit('handleChange', file?.raw, fileList)
 }
 

+ 4 - 2
src/components/UploadFile/src/UploadImgs.vue

@@ -8,6 +8,7 @@
       :class="['upload', drag ? 'no-border' : '']"
       :disabled="disabled"
       :drag="drag"
+      :auto-upload="autoUpload"
       :http-request="httpRequest"
       :limit="limit"
       :multiple="true"
@@ -79,7 +80,8 @@ const props = defineProps({
   fileType: propTypes.array.def(['image/jpeg', 'image/png', 'image/gif']), // 图片类型限制 ==> 非必传(默认为 ["image/jpeg", "image/png", "image/gif"])
   height: propTypes.string.def('150px'), // 组件高度 ==> 非必传(默认为 150px)
   width: propTypes.string.def('150px'), // 组件宽度 ==> 非必传(默认为 150px)
-  borderradius: propTypes.string.def('8px') // 组件边框圆角 ==> 非必传(默认为 8px)
+  borderradius: propTypes.string.def('8px'), // 组件边框圆角 ==> 非必传(默认为 8px)
+  autoUpload: propTypes.bool.def(true) // 是否自动上传文件
 })
 
 const emit = defineEmits(['handleChange', 'update:modelValue'])
@@ -165,7 +167,7 @@ const handleRemove = (uploadFile: UploadFile) => {
   )
   // 同步删除originFileList中对应的数据
   originFileList.value = originFileList.value.filter(
-    (item) => item.response?.data !== uploadFile.url
+    (item) => item.url !== uploadFile.url
   )
   emit(
     'update:modelValue',

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

@@ -104,7 +104,7 @@
           ref="uploadRef"
           v-model:file-list="fileList"
           :action="uploadUrl"
-          :auto-upload="true"
+          :auto-upload="false"
           :data="fileData"
           :before-upload="beforeUpload"
           :on-change="handleChange"
@@ -130,12 +130,12 @@
       <template v-if="radioValue === 'card'">
         <UploadImgs
           v-model="cardImgUrl"
-          :uploadSuccessTip="false"
           :limit="cardUploadLimit"
+          :autoUpload="false"
           @handle-change="cardUploadChange"
           height="150px" width="150px" style="margin: 20px auto; text-align: center;"
         >
-          <template #tip>{{ cardImgUrl ? `${cardImgUrl.length}/${cardUploadLimit}` : `请上传名片(最多可上传${cardUploadLimit}张)` }}</template>
+          <template #tip>{{ cardUploadRow?.length ? `${cardUploadRow.length}/${cardUploadLimit}` : `请上传名片(最多可上传${cardUploadLimit}张)` }}</template>
         </UploadImgs>
       </template>
       <!-- 杂项 -->
@@ -143,7 +143,7 @@
         <div class="flex align-center">
           <UploadImg
             v-model="cardImgUrl"
-            :uploadSuccessTip="false"
+            :autoUpload="false"
             @handle-change="val => cardUploadChange(val, '杂项')"
             height="150px" width="150px" style="margin: 20px auto; text-align: center;"
           >
@@ -356,7 +356,7 @@ const fileData = ref({ path: '' })
 // 文件上传
 const handleChange = async (file) => {
   fileData.value.path = file.name
-  unref(uploadRef)?.submit()
+  // unref(uploadRef)?.submit()
 }
 
 const beforeUpload = (file) => {
@@ -381,7 +381,7 @@ const handleExceed = () => {
 }
 
 // 名片解析 
-const cardUploadRow = ref(null)
+const cardUploadRow = ref([])
 const cardImgUrl = ref(null)
 const cardUploadChange = (file, type) => {
   cardUploadRow.value = type ? [{ raw: file }] : file
@@ -412,7 +412,7 @@ const radioValue = ref(defaultValue)
 // 新增解析
 const handleAdd = () => {
   webOriginList.value = []
-  cardUploadRow.value = null
+  cardUploadRow.value = []
   cardImgUrl.value = null
   analysisLoading.value = false
   radioValue.value = defaultValue // 重置解析类型

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

@@ -49,8 +49,8 @@
     </div>
     <el-table v-loading="loading" :data="list" :stripe="true" row-key="id" height="73vh">
       <el-table-column label="姓名" align="center" prop="name_zh" />
-      <el-table-column label="职位" align="center" prop="title_zh" :show-overflow-tooltip="true" />
-      <el-table-column label="酒店" align="center" prop="hotel_zh" :show-overflow-tooltip="true" />
+      <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="tag_count" />
       <el-table-column label="人才状态" align="center" prop="status">
         <template #default="scope">
@@ -61,7 +61,7 @@
       </el-table-column>
       <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">
+      <el-table-column label="操作" fixed="right" min-width="105" align="center">
         <template #default="scope">
           <el-button link type="primary" @click="openForm(scope.row)">标注</el-button>
           <el-button link type="danger" @click="handleDelete(scope.row.id)">删除</el-button>