支付宝下单和其他细节优化

This commit is contained in:
2026-05-21 15:10:02 +08:00
parent 39bf8548df
commit 1637ee5bbc
33 changed files with 1511 additions and 232 deletions
+12 -77
View File
@@ -15,7 +15,11 @@
<!-- 简历表格 -->
<div class="resume-page__table-wrap">
<table class="resume-page__table">
<!-- 空状态提示 -->
<div v-if="resumeList.length === 0" class="resume-page__empty">
<p>暂无简历请点击上方按钮上传简历</p>
</div>
<table v-else class="resume-page__table">
<thead>
<tr>
<th class="resume-page__th">简历</th>
@@ -82,40 +86,21 @@
@saved="loadResumeList"
/>
<!-- 导出简历格式选择弹窗 -->
<el-dialog
<!-- 导出简历弹窗组件 -->
<ResumeExportDialog
v-model="exportDialogVisible"
title="导出简历"
width="3.6rem"
:close-on-click-modal="false"
class="resume-export-dialog"
>
<!-- 格式选择 -->
<el-radio-group v-model="exportFormat" class="resume-export-dialog__radio-group">
<el-radio value="pdf">PDF 简历</el-radio>
<el-radio value="word">Word 简历</el-radio>
</el-radio-group>
<template #footer>
<el-button @click="exportDialogVisible = false">取消</el-button>
<el-button type="primary" :loading="exporting" @click="doExport">下载</el-button>
</template>
</el-dialog>
<!-- 隐藏的简历模板用于导出时渲染DOM -->
<div v-if="exportTemplateData" style="position:absolute;left:-9999px;top:0;">
<JobResumeTemplate ref="exportTemplateRef" :resume-data="exportTemplateData" />
</div>
:resume-id="exportResumeId"
:resume-name="exportResumeName"
/>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, nextTick } from 'vue'
import { ref, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import SideNav from '@/components/SideNav.vue'
import ResumeEditNameDialog from '@/components/ResumeEditNameDialog.vue'
import JobResumeTemplate from '@/components/JobResumeTemplate.vue'
import type { ResumeTemplateData } from '@/components/JobResumeTemplate.vue'
import { exportResumePdf, exportResumeWord, loadResumeTemplateData } from '@/utils/resumeExport'
import ResumeExportDialog from '@/components/ResumeExportDialog.vue'
import { uploadResume } from '@/utils/aiRequest'
import {
fetchResumeList, deleteResume, type ResumeListItem,
@@ -228,60 +213,10 @@ const editTargetPosition = ref('')
/** 导出弹窗是否可见 */
const exportDialogVisible = ref(false)
/** 导出格式:pdf 或 word */
const exportFormat = ref<'pdf' | 'word'>('pdf')
/** 导出中状态 */
const exporting = ref(false)
/** 当前导出的简历 ID */
const exportResumeId = ref('')
/** 当前导出的简历名称(用于文件名) */
const exportResumeName = ref('')
/** 导出用的简历模板数据 */
const exportTemplateData = ref<ResumeTemplateData | null>(null)
/** 导出用的简历模板组件引用 */
const exportTemplateRef = ref<InstanceType<typeof JobResumeTemplate> | null>(null)
/** 执行导出下载 */
async function doExport() {
exporting.value = true
try {
// 1. 加载简历完整数据
const data = await loadResumeTemplateData(exportResumeId.value)
if (!data) {
ElMessage.error('获取简历数据失败')
return
}
// 2. 设置模板数据,等待DOM渲染
exportTemplateData.value = data
await nextTick()
// 3. 获取渲染后的DOM
const element = exportTemplateRef.value?.resumeRef
if (!element) {
ElMessage.error('简历模板渲染失败')
return
}
const fileName = exportResumeName.value || '简历'
if (exportFormat.value === 'pdf') {
await exportResumePdf(element, fileName)
} else {
exportResumeWord(element, fileName)
}
ElMessage.success('导出成功')
exportDialogVisible.value = false
} catch (err) {
console.error('[导出简历] 失败', err)
ElMessage.error('导出失败,请稍后重试')
} finally {
exporting.value = false
// 清理隐藏模板数据
exportTemplateData.value = null
}
}
/** 弹出菜单操作项 */
const popupActions = ['设为默认简历', '编辑名称岗位', '导出简历', '删除']