This commit is contained in:
fuenmao
2026-08-26 16:11:30 +08:00
parent dd7c9e2bb6
commit ba023f2af4
3 changed files with 12 additions and 43 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
# title # title
VITE_GLOB_APP_TITLE = 未病局管理系统 VITE_GLOB_APP_TITLE = 员工文件管理系统
# 本地运行端口号 # 本地运行端口号
VITE_PORT = 8848 VITE_PORT = 8848
+1 -1
View File
@@ -62,7 +62,7 @@ interface LoginProps {
//默认值 //默认值
const props = reactive<LoginProps>({ const props = reactive<LoginProps>({
sysName: "未病局管理系统", sysName: "员工文件管理系统",
sysVersion: "", sysVersion: "",
sysLogo: "", sysLogo: "",
sysTenantOption: TenantEnum.CLOSE, sysTenantOption: TenantEnum.CLOSE,
+10 -41
View File
@@ -598,11 +598,9 @@
type="primary" type="primary"
plain plain
icon="Download" icon="Download"
:loading="isContractOpening(c.id)"
:disabled="isContractOpening(c.id)"
@click="previewAndDownloadContract(c)" @click="previewAndDownloadContract(c)"
> >
下载 / 查阅合同原文 下载并查看合同
</el-button> </el-button>
<el-checkbox <el-checkbox
@@ -664,7 +662,6 @@ const submitting = ref(false);
const error = ref(""); const error = ref("");
const currentStep = ref(0); const currentStep = ref(0);
const uploadingMaterials = reactive<Record<string, boolean>>({}); const uploadingMaterials = reactive<Record<string, boolean>>({});
const openingContracts = reactive<Record<string, boolean>>({});
const task = ref<OnboardingTask | null>(null); const task = ref<OnboardingTask | null>(null);
const contracts = ref<any[]>([]); const contracts = ref<any[]>([]);
@@ -1014,47 +1011,19 @@ async function isMessageBoxConfirmed(confirmPromise: Promise<unknown>) {
} }
} }
async function previewAndDownloadContract(c: any) { function previewAndDownloadContract(c: any) {
if (isContractOpening(c.id)) { const url = onboardingPublicApi.contractSourceUrl({
return; token: token.value,
} taskContractId: c.id
});
// 必须在用户点击的同步阶段创建窗口,否则手机浏览器会拦截异步完成后的 window.open。 // 下载必须直接发生在用户点击事件中,避免手机浏览器拦截异步打开或二次跳转。
const previewWindow = window.open("about:blank", "_blank"); const downloadWindow = window.open(url, "_blank");
openingContracts[String(c.id)] = true; if (!downloadWindow) {
try { window.location.assign(url);
if (previewWindow) {
previewWindow.document.title = "合同生成中";
previewWindow.document.body.innerHTML = `
<div style="padding:40px 20px;text-align:center;font-family:sans-serif;color:#475569;">
正在生成合同文件,请稍候…
</div>`;
}
if (canEdit.value) {
await saveCurrentEmployeeInfo();
}
const url = onboardingPublicApi.contractSourceUrl({
token: token.value,
taskContractId: c.id
});
if (previewWindow && !previewWindow.closed) {
previewWindow.location.replace(url);
} else {
// 微信等内置浏览器拦截新窗口时,退回当前页直接发起下载。
window.location.assign(url);
}
} catch (err: any) {
previewWindow?.close();
ElMessage.error(err?.message || "合同生成失败,请稍后重试");
} finally {
openingContracts[String(c.id)] = false;
} }
} }
function isContractOpening(taskContractId: number) {
return Boolean(openingContracts[String(taskContractId)]);
}
async function submitAll() { async function submitAll() {
const unconfirmed = contracts.value.filter(c => !c.isAgreed); const unconfirmed = contracts.value.filter(c => !c.isAgreed);
if (unconfirmed.length) { if (unconfirmed.length) {