chore: prepare release build
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, reactive, ref, watch } from "vue";
|
||||
import { ElMessage, type InputInstance } from "element-plus";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import {
|
||||
adminApi,
|
||||
type AdminFileAsset,
|
||||
@@ -27,10 +27,6 @@ const evidenceUploading = ref(false);
|
||||
const appraisalTemplateLoading = ref(false);
|
||||
const transferTagNo = ref("");
|
||||
const transferScanLoading = ref(false);
|
||||
const publishDialogVisible = ref(false);
|
||||
const publishMaterialTagInput = ref("");
|
||||
const publishMaterialTagInputRef = ref<InputInstance | null>(null);
|
||||
const publishMaterialTagSubmitting = ref(false);
|
||||
const zhongjianReportNo = ref("");
|
||||
const zhongjianReportFiles = ref<AdminFileAsset[]>([]);
|
||||
const zhongjianReportUploading = ref(false);
|
||||
@@ -277,14 +273,10 @@ const canBindMaterialTag = computed(() => {
|
||||
if (!detail.value?.report_summary) {
|
||||
return false;
|
||||
}
|
||||
if (detail.value.task_info.service_provider === "zhongjian") {
|
||||
return false;
|
||||
}
|
||||
return detail.value.report_summary.report_status !== "published" && !detail.value.material_tag;
|
||||
});
|
||||
|
||||
const isZhongjianTask = computed(() => detail.value?.task_info.service_provider === "zhongjian");
|
||||
const isPhysicalTask = computed(() => Boolean(detail.value) && !isZhongjianTask.value);
|
||||
const canRequestSupplement = computed(() => detail.value?.task_info.status !== "completed");
|
||||
const currentAdmin = computed(() => getAdminInfo());
|
||||
const canClaimTask = computed(() => {
|
||||
@@ -783,6 +775,13 @@ async function submitResult(action: "save" | "submit") {
|
||||
if (action === "submit" && !validateRequiredKeyPoints()) {
|
||||
return;
|
||||
}
|
||||
let qrInput = "";
|
||||
if (action === "submit") {
|
||||
qrInput = await promptPublishMaterialTagInput();
|
||||
if (!qrInput) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
resultSubmitting.value = true;
|
||||
try {
|
||||
const response = await adminApi.saveAppraisalTaskResult({
|
||||
@@ -792,16 +791,11 @@ async function submitResult(action: "save" | "submit") {
|
||||
...resultForm,
|
||||
attachments: resultAttachments.value,
|
||||
key_points: normalizedKeyPoints(),
|
||||
...(qrInput ? { qr_input: qrInput } : {}),
|
||||
});
|
||||
ElMessage.success(response.message || (action === "submit" ? "结论已提交" : "结论已保存"));
|
||||
ElMessage.success(response.message || (action === "submit" ? "验真吊牌已绑定,报告已发布" : "结论已保存"));
|
||||
await loadDetail(detail.value.task_info.id);
|
||||
await fetchTasks();
|
||||
if (action === "submit") {
|
||||
publishMaterialTagInput.value = "";
|
||||
publishDialogVisible.value = true;
|
||||
await nextTick();
|
||||
publishMaterialTagInputRef.value?.focus();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
ElMessage.error(action === "submit" ? "结论提交失败" : "结论保存失败");
|
||||
@@ -812,10 +806,6 @@ async function submitResult(action: "save" | "submit") {
|
||||
|
||||
async function publishCurrentTaskWithMaterialTag(qrInput: string) {
|
||||
if (!detail.value) return;
|
||||
if (!isPhysicalTask.value) {
|
||||
ElMessage.warning("中检订单不使用平台验真吊牌");
|
||||
return;
|
||||
}
|
||||
|
||||
await adminApi.publishAppraisalTaskWithMaterialTag({
|
||||
id: detail.value.task_info.id,
|
||||
@@ -845,32 +835,23 @@ async function bindMaterialTag() {
|
||||
}
|
||||
}
|
||||
|
||||
async function publishDialogMaterialTag() {
|
||||
const qrInput = publishMaterialTagInput.value.trim();
|
||||
if (!qrInput) {
|
||||
ElMessage.warning("请扫描验真吊牌二维码");
|
||||
return;
|
||||
}
|
||||
|
||||
publishMaterialTagSubmitting.value = true;
|
||||
async function promptPublishMaterialTagInput() {
|
||||
try {
|
||||
await publishCurrentTaskWithMaterialTag(qrInput);
|
||||
publishDialogVisible.value = false;
|
||||
publishMaterialTagInput.value = "";
|
||||
} catch (error: any) {
|
||||
console.error(error);
|
||||
ElMessage.error(error?.message || "验真吊牌绑定或报告发布失败");
|
||||
} finally {
|
||||
publishMaterialTagSubmitting.value = false;
|
||||
const result = await ElMessageBox.prompt("是否已鉴定完成并确定发布报告?", "绑定验真吊牌并发布报告", {
|
||||
type: "warning",
|
||||
inputPlaceholder: "请扫描验真吊牌二维码",
|
||||
inputPattern: /\S+/,
|
||||
inputErrorMessage: "请扫描验真吊牌二维码",
|
||||
confirmButtonText: "是的,去绑定验真吊牌",
|
||||
cancelButtonText: "取消",
|
||||
closeOnClickModal: false,
|
||||
});
|
||||
return String(result.value || "").trim();
|
||||
} catch {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
function focusPublishMaterialTagInput() {
|
||||
nextTick(() => {
|
||||
publishMaterialTagInputRef.value?.focus();
|
||||
});
|
||||
}
|
||||
|
||||
async function submitZhongjianReport() {
|
||||
if (!detail.value) return;
|
||||
if (!isZhongjianTask.value) {
|
||||
@@ -885,6 +866,10 @@ async function submitZhongjianReport() {
|
||||
ElMessage.warning("请至少上传 1 个中检报告文件");
|
||||
return;
|
||||
}
|
||||
const qrInput = await promptPublishMaterialTagInput();
|
||||
if (!qrInput) {
|
||||
return;
|
||||
}
|
||||
|
||||
zhongjianReportSubmitting.value = true;
|
||||
try {
|
||||
@@ -892,8 +877,9 @@ async function submitZhongjianReport() {
|
||||
id: detail.value.task_info.id,
|
||||
zhongjian_report_no: zhongjianReportNo.value.trim(),
|
||||
report_files: zhongjianReportFiles.value,
|
||||
qr_input: qrInput,
|
||||
});
|
||||
ElMessage.success(response.message || "中检报告已录入并发布");
|
||||
ElMessage.success(response.message || "验真吊牌已绑定,报告已发布");
|
||||
await loadDetail(detail.value.task_info.id);
|
||||
await fetchTasks();
|
||||
} catch (error: any) {
|
||||
@@ -1428,7 +1414,7 @@ onMounted(async () => {
|
||||
<div :key="`result-${formRenderKey}`" class="task-form-stack">
|
||||
<el-alert
|
||||
v-if="isZhongjianTask"
|
||||
title="中检订单不走平台验真吊牌流程,请切换到中检报告录入。"
|
||||
title="中检订单请在中检报告录入页提交,提交时同样需要绑定验真吊牌。"
|
||||
type="info"
|
||||
:closable="false"
|
||||
show-icon
|
||||
@@ -1476,16 +1462,8 @@ onMounted(async () => {
|
||||
|
||||
<div class="task-form-block">
|
||||
<div class="task-form-block__title">吊牌绑定</div>
|
||||
<div class="task-panel__desc">实物鉴定提交结论后扫描平台验真吊牌,绑定后发布报告。</div>
|
||||
<el-alert
|
||||
v-if="isZhongjianTask"
|
||||
title="中检订单不使用本平台验真吊牌。"
|
||||
type="warning"
|
||||
:closable="false"
|
||||
show-icon
|
||||
style="margin-top: 12px;"
|
||||
/>
|
||||
<div v-else-if="detail.material_tag" class="task-material-tag-bound">
|
||||
<div class="task-panel__desc">提交结论或中检报告时扫描平台验真吊牌,绑定成功后发布报告。</div>
|
||||
<div v-if="detail.material_tag" class="task-material-tag-bound">
|
||||
<div class="task-info-grid">
|
||||
<div class="task-info-item task-info-item--full">
|
||||
<div class="task-info-item__label">二维码链接</div>
|
||||
@@ -1673,7 +1651,7 @@ onMounted(async () => {
|
||||
<el-tab-pane v-if="isZhongjianTask" label="中检报告录入" name="zhongjian">
|
||||
<div :key="`zhongjian-${formRenderKey}`" class="task-form-stack">
|
||||
<el-alert
|
||||
title="中检订单不绑定平台验真吊牌,提交中检报告编号和文件后直接发布报告。"
|
||||
title="提交中检报告编号和文件后,需要扫描平台验真吊牌;绑定成功后才会发布报告。"
|
||||
type="info"
|
||||
:closable="false"
|
||||
show-icon
|
||||
@@ -1836,33 +1814,6 @@ onMounted(async () => {
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-model="publishDialogVisible"
|
||||
title="绑定验真吊牌并发布报告"
|
||||
width="560px"
|
||||
@opened="focusPublishMaterialTagInput"
|
||||
>
|
||||
<div class="publish-dialog-body">
|
||||
<el-alert
|
||||
title="请扫描物品验真吊牌二维码,回车后发布正式报告。"
|
||||
type="info"
|
||||
:closable="false"
|
||||
show-icon
|
||||
/>
|
||||
<el-input
|
||||
ref="publishMaterialTagInputRef"
|
||||
v-model="publishMaterialTagInput"
|
||||
size="large"
|
||||
placeholder="扫描平台验真吊牌二维码"
|
||||
clearable
|
||||
@keyup.enter="publishDialogMaterialTag"
|
||||
/>
|
||||
</div>
|
||||
<template #footer>
|
||||
<el-button @click="publishDialogVisible = false">稍后处理</el-button>
|
||||
<el-button type="primary" :loading="publishMaterialTagSubmitting" @click="publishDialogMaterialTag">完成并发布报告</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
@@ -1895,11 +1846,6 @@ onMounted(async () => {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.publish-dialog-body {
|
||||
display: grid;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
:deep(.task-detail-drawer .el-drawer__body) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
Reference in New Issue
Block a user