带文件拖动上传的新版简历上传功能,独立文件操作组件,简历列表页和个人资料页有调用

This commit is contained in:
2026-05-26 19:20:34 +08:00
parent 4b16341f92
commit 8b6d424b2f
10 changed files with 582 additions and 87 deletions
+36 -4
View File
@@ -10,8 +10,8 @@
@save="handleSaveEdit"
/>
<!-- 欢迎上传简历弹窗 -->
<ProfileWelcomeDialog v-model="showWelcomeDialog" />
<!-- 欢迎上传简历弹窗首次无个人资料时自动弹出 -->
<ResumeUploadDialog v-model="showWelcomeDialog" @confirm="handleWelcomeUpload" />
<!-- 页面标题 -->
<div class="profile-page__header">
@@ -60,8 +60,11 @@ import { useStore } from 'vuex'
import SideNav from '@/components/SideNav.vue'
import ProfileEditDrawer from '@/components/ProfileEditDrawer.vue'
import ProfilePageContent from '@/components/ProfilePageContent.vue'
import ProfileWelcomeDialog from '@/components/ProfileWelcomeDialog.vue'
import { saveProfile, fetchProfile, fetchEducation, saveEducation, fetchWork, saveWork, fetchInternship, saveInternship, fetchProject, saveProject, fetchCompetition, saveCompetition } from '@/api/profile'
import ResumeUploadDialog from '@/components/ResumeUploadDialog.vue'
import { saveProfile, fetchProfile, fetchEducation, saveEducation, fetchWork, saveWork, fetchInternship, saveInternship, fetchProject, saveProject, fetchCompetition, saveCompetition, syncProfileFromResume } from '@/api/profile'
import { uploadResume } from '@/utils/aiRequest'
import { ElMessage, ElLoading } from 'element-plus'
import 'element-plus/es/components/loading/style/css'
import type { SaveEducationItem, SaveWorkItem, SaveProjectItem, SaveCompetitionItem } from '@/api/profile'
const router = useRouter()
@@ -217,6 +220,35 @@ const showEditDrawer = ref(false)
/** 欢迎弹窗的显示状态 */
const showWelcomeDialog = ref(false)
/** 欢迎弹窗确认上传回调 — 上传简历并同步个人资料,完成后刷新页面 */
async function handleWelcomeUpload(file: File) {
const loading = ElLoading.service({
lock: true,
text: '简历解析中,请耐心等待…',
background: 'rgba(0, 0, 0, 0.5)',
customClass: 'profile-welcome-loading',
})
try {
const res = await uploadResume(file)
if (res.code === 0 && res.data?.resumeId) {
// 继续同步个人资料
loading.setText('正在同步个人资料…')
await syncProfileFromResume(String(res.data.resumeId))
loading.close()
ElMessage.success('简历上传并同步成功')
// 刷新页面数据
router.go(0)
} else {
loading.close()
ElMessage.error(res.msg || '上传失败')
}
} catch {
loading.close()
ElMessage.error('上传失败,请稍后重试')
}
}
/** 登录状态 */
const isAuthenticated = computed(() => store.state.isAuthenticated)