增加了手机操作端
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, reactive, ref, watch } from "vue";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { ElMessage, type InputInstance } from "element-plus";
|
||||
import {
|
||||
adminApi,
|
||||
type AdminFileAsset,
|
||||
type AdminAppraisalTaskDetail,
|
||||
type AdminAppraisalTaskListItem,
|
||||
type AdminAssignableAppraiserItem,
|
||||
@@ -24,6 +25,16 @@ const assigneeOptions = ref<AdminAssignableAppraiserItem[]>([]);
|
||||
const selectedAssigneeId = ref(0);
|
||||
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);
|
||||
const zhongjianReportSubmitting = ref(false);
|
||||
|
||||
const keyword = ref("");
|
||||
const taskStage = ref("");
|
||||
@@ -34,6 +45,7 @@ const activeWorkTab = ref("result");
|
||||
const formRenderKey = ref(0);
|
||||
const workbenchAsideRef = ref<HTMLElement | null>(null);
|
||||
const evidenceInputRef = ref<HTMLInputElement | null>(null);
|
||||
const zhongjianReportFileInputRef = ref<HTMLInputElement | null>(null);
|
||||
const materialTagInput = ref("");
|
||||
|
||||
const tasks = ref<AdminAppraisalTaskListItem[]>([]);
|
||||
@@ -265,9 +277,14 @@ 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(() => {
|
||||
@@ -326,11 +343,12 @@ function resetSupplementForm() {
|
||||
function hydrateDetail(data: AdminAppraisalTaskDetail) {
|
||||
detail.value = data;
|
||||
detailTab.value = "overview";
|
||||
activeWorkTab.value = data.supplement_task ? "supplement" : "result";
|
||||
activeWorkTab.value = data.task_info.service_provider === "zhongjian" ? "zhongjian" : (data.supplement_task ? "supplement" : "result");
|
||||
applyProductForm(data.product_info);
|
||||
const resultSeed = resolveResultFormSeed(data);
|
||||
applyResultForm(resultSeed);
|
||||
applyAppraisalTemplate(data.appraisal_template, resultSeed.key_points || []);
|
||||
applyZhongjianReportForm(data);
|
||||
applySupplementForm(data);
|
||||
formRenderKey.value += 1;
|
||||
}
|
||||
@@ -416,6 +434,11 @@ function applySupplementForm(data: Pick<AdminAppraisalTaskDetail, "supplement_ta
|
||||
});
|
||||
}
|
||||
|
||||
function applyZhongjianReportForm(data: AdminAppraisalTaskDetail) {
|
||||
zhongjianReportNo.value = data.zhongjian_report?.report_no || "";
|
||||
zhongjianReportFiles.value = [...(data.zhongjian_report?.files || [])];
|
||||
}
|
||||
|
||||
function resetResultForm() {
|
||||
if (!detail.value) return;
|
||||
applyProductForm(detail.value.product_info);
|
||||
@@ -425,6 +448,11 @@ function resetResultForm() {
|
||||
formRenderKey.value += 1;
|
||||
}
|
||||
|
||||
function resetZhongjianReportForm() {
|
||||
if (!detail.value) return;
|
||||
applyZhongjianReportForm(detail.value);
|
||||
}
|
||||
|
||||
function openSupplementWorkbench() {
|
||||
if (isTaskReadonly.value) {
|
||||
return;
|
||||
@@ -517,10 +545,35 @@ async function openDetail(row: AdminAppraisalTaskListItem) {
|
||||
drawerVisible.value = true;
|
||||
detail.value = null;
|
||||
detailTab.value = "overview";
|
||||
activeWorkTab.value = "result";
|
||||
activeWorkTab.value = row.service_provider === "zhongjian" ? "zhongjian" : "result";
|
||||
await loadDetail(row.id);
|
||||
}
|
||||
|
||||
async function scanTransferTag() {
|
||||
const internalTagNo = transferTagNo.value.trim();
|
||||
if (!internalTagNo) {
|
||||
ElMessage.warning("请扫描内部流转码");
|
||||
return;
|
||||
}
|
||||
|
||||
transferScanLoading.value = true;
|
||||
try {
|
||||
const response = await adminApi.scanAppraisalTransferTag(internalTagNo);
|
||||
drawerVisible.value = true;
|
||||
detail.value = null;
|
||||
await loadDetail(response.data.task_id);
|
||||
detailTab.value = "actions";
|
||||
activeWorkTab.value = response.data.service_provider === "zhongjian" ? "zhongjian" : "result";
|
||||
ElMessage.success(`${response.data.service_provider_text}任务已打开`);
|
||||
await fetchTasks();
|
||||
} catch (error: any) {
|
||||
console.error(error);
|
||||
ElMessage.error(error?.message || "内部流转码识别失败");
|
||||
} finally {
|
||||
transferScanLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
function previewFiles(files: Array<{ file_url: string }>, current: string) {
|
||||
if (!files.length) return;
|
||||
window.open(current, "_blank", "noopener,noreferrer");
|
||||
@@ -556,6 +609,47 @@ async function handleEvidenceFileSelect(event: Event) {
|
||||
}
|
||||
}
|
||||
|
||||
function triggerZhongjianReportUpload() {
|
||||
if (isTaskReadonly.value) {
|
||||
return;
|
||||
}
|
||||
zhongjianReportFileInputRef.value?.click();
|
||||
}
|
||||
|
||||
async function handleZhongjianReportFileSelect(event: Event) {
|
||||
const target = event.target as HTMLInputElement;
|
||||
const files = Array.from(target.files || []);
|
||||
if (!files.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
zhongjianReportUploading.value = true;
|
||||
try {
|
||||
for (const file of files) {
|
||||
const response = await adminApi.uploadAppraisalEvidenceFile(file);
|
||||
zhongjianReportFiles.value.push(response.data);
|
||||
}
|
||||
ElMessage.success("中检报告文件已上传");
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
ElMessage.error("中检报告文件上传失败");
|
||||
} finally {
|
||||
zhongjianReportUploading.value = false;
|
||||
target.value = "";
|
||||
}
|
||||
}
|
||||
|
||||
async function removeZhongjianReportFile(fileUrl: string) {
|
||||
try {
|
||||
await adminApi.deleteAppraisalEvidenceFile(fileUrl);
|
||||
zhongjianReportFiles.value = zhongjianReportFiles.value.filter((item) => item.file_url !== fileUrl);
|
||||
ElMessage.success("报告文件已删除");
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
ElMessage.error("报告文件删除失败");
|
||||
}
|
||||
}
|
||||
|
||||
async function removeEvidenceAttachment(fileUrl: string) {
|
||||
try {
|
||||
await adminApi.deleteAppraisalEvidenceFile(fileUrl);
|
||||
@@ -673,6 +767,11 @@ function hasProductFormValue() {
|
||||
|
||||
async function submitResult(action: "save" | "submit") {
|
||||
if (!detail.value) return;
|
||||
if (detail.value.task_info.service_provider === "zhongjian") {
|
||||
ElMessage.warning("中检订单请在中检报告录入页提交");
|
||||
activeWorkTab.value = "zhongjian";
|
||||
return;
|
||||
}
|
||||
if (action === "submit" && !resultForm.result_text.trim()) {
|
||||
ElMessage.warning("提交前请先填写鉴定结论");
|
||||
return;
|
||||
@@ -697,6 +796,12 @@ async function submitResult(action: "save" | "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" ? "结论提交失败" : "结论保存失败");
|
||||
@@ -705,8 +810,23 @@ async function submitResult(action: "save" | "submit") {
|
||||
}
|
||||
}
|
||||
|
||||
async function bindMaterialTag() {
|
||||
async function publishCurrentTaskWithMaterialTag(qrInput: string) {
|
||||
if (!detail.value) return;
|
||||
if (!isPhysicalTask.value) {
|
||||
ElMessage.warning("中检订单不使用平台验真吊牌");
|
||||
return;
|
||||
}
|
||||
|
||||
await adminApi.publishAppraisalTaskWithMaterialTag({
|
||||
id: detail.value.task_info.id,
|
||||
qr_input: qrInput,
|
||||
});
|
||||
ElMessage.success("验真吊牌已绑定,报告已发布");
|
||||
await loadDetail(detail.value.task_info.id);
|
||||
await fetchTasks();
|
||||
}
|
||||
|
||||
async function bindMaterialTag() {
|
||||
const qrInput = materialTagInput.value.trim();
|
||||
if (!qrInput) {
|
||||
ElMessage.warning("请扫描或粘贴吊牌二维码链接");
|
||||
@@ -715,19 +835,72 @@ async function bindMaterialTag() {
|
||||
|
||||
materialTagBinding.value = true;
|
||||
try {
|
||||
await adminApi.bindAppraisalTaskMaterialTag({
|
||||
id: detail.value.task_info.id,
|
||||
qr_input: qrInput,
|
||||
});
|
||||
ElMessage.success("吊牌已绑定");
|
||||
await publishCurrentTaskWithMaterialTag(qrInput);
|
||||
materialTagInput.value = "";
|
||||
} catch (error: any) {
|
||||
console.error(error);
|
||||
ElMessage.error(error?.message || "验真吊牌绑定或报告发布失败");
|
||||
} finally {
|
||||
materialTagBinding.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
async function publishDialogMaterialTag() {
|
||||
const qrInput = publishMaterialTagInput.value.trim();
|
||||
if (!qrInput) {
|
||||
ElMessage.warning("请扫描验真吊牌二维码");
|
||||
return;
|
||||
}
|
||||
|
||||
publishMaterialTagSubmitting.value = true;
|
||||
try {
|
||||
await publishCurrentTaskWithMaterialTag(qrInput);
|
||||
publishDialogVisible.value = false;
|
||||
publishMaterialTagInput.value = "";
|
||||
} catch (error: any) {
|
||||
console.error(error);
|
||||
ElMessage.error(error?.message || "验真吊牌绑定或报告发布失败");
|
||||
} finally {
|
||||
publishMaterialTagSubmitting.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
function focusPublishMaterialTagInput() {
|
||||
nextTick(() => {
|
||||
publishMaterialTagInputRef.value?.focus();
|
||||
});
|
||||
}
|
||||
|
||||
async function submitZhongjianReport() {
|
||||
if (!detail.value) return;
|
||||
if (!isZhongjianTask.value) {
|
||||
ElMessage.warning("当前不是中检订单");
|
||||
return;
|
||||
}
|
||||
if (!zhongjianReportNo.value.trim()) {
|
||||
ElMessage.warning("请填写中检报告编号");
|
||||
return;
|
||||
}
|
||||
if (!zhongjianReportFiles.value.length) {
|
||||
ElMessage.warning("请至少上传 1 个中检报告文件");
|
||||
return;
|
||||
}
|
||||
|
||||
zhongjianReportSubmitting.value = true;
|
||||
try {
|
||||
const response = await adminApi.saveZhongjianAppraisalReport({
|
||||
id: detail.value.task_info.id,
|
||||
zhongjian_report_no: zhongjianReportNo.value.trim(),
|
||||
report_files: zhongjianReportFiles.value,
|
||||
});
|
||||
ElMessage.success(response.message || "中检报告已录入并发布");
|
||||
await loadDetail(detail.value.task_info.id);
|
||||
await fetchTasks();
|
||||
} catch (error: any) {
|
||||
console.error(error);
|
||||
ElMessage.error(error?.message || "吊牌绑定失败");
|
||||
ElMessage.error(error?.message || "中检报告录入失败");
|
||||
} finally {
|
||||
materialTagBinding.value = false;
|
||||
zhongjianReportSubmitting.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -813,6 +986,28 @@ onMounted(async () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-card class="panel-card appraisal-scan-card" shadow="never">
|
||||
<div class="appraisal-scan">
|
||||
<div class="appraisal-scan__main">
|
||||
<div class="appraisal-scan__title">鉴定作业台扫码入口</div>
|
||||
<div class="appraisal-scan__desc">扫描内部流转挂牌后自动打开对应鉴定任务。</div>
|
||||
</div>
|
||||
<div class="appraisal-scan__control">
|
||||
<el-input
|
||||
v-model="transferTagNo"
|
||||
size="large"
|
||||
placeholder="扫描内部流转码"
|
||||
clearable
|
||||
@keyup.enter="scanTransferTag"
|
||||
>
|
||||
<template #append>
|
||||
<el-button :loading="transferScanLoading" @click="scanTransferTag">打开任务</el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="panel-card" shadow="never">
|
||||
<div class="filters-row">
|
||||
<el-input v-model="keyword" placeholder="搜索订单号 / 外部订单号 / 商品名称" clearable style="width: 340px" />
|
||||
@@ -914,6 +1109,12 @@ onMounted(async () => {
|
||||
<el-button :loading="resultSubmitting" @click="submitResult('save')">保存结论</el-button>
|
||||
<el-button type="primary" :loading="resultSubmitting" @click="submitResult('submit')">提交结论</el-button>
|
||||
</template>
|
||||
<template v-else-if="activeWorkTab === 'zhongjian'">
|
||||
<el-button plain @click="openAssigneeDialog">分配处理人</el-button>
|
||||
<el-button v-if="canClaimTask" plain type="primary" :loading="assigneeSubmitting" @click="claimTask">认领给我</el-button>
|
||||
<el-button @click="resetZhongjianReportForm">重置内容</el-button>
|
||||
<el-button type="primary" :loading="zhongjianReportSubmitting" @click="submitZhongjianReport">提交并发布报告</el-button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-button plain @click="returnToResultWorkbench">返回结论操作</el-button>
|
||||
<el-button @click="resetSupplementForm">重置</el-button>
|
||||
@@ -1225,6 +1426,13 @@ onMounted(async () => {
|
||||
<el-tabs v-model="activeWorkTab" stretch class="task-work-tabs">
|
||||
<el-tab-pane label="填写结论" name="result">
|
||||
<div :key="`result-${formRenderKey}`" class="task-form-stack">
|
||||
<el-alert
|
||||
v-if="isZhongjianTask"
|
||||
title="中检订单不走平台验真吊牌流程,请切换到中检报告录入。"
|
||||
type="info"
|
||||
:closable="false"
|
||||
show-icon
|
||||
/>
|
||||
<div class="task-form-block">
|
||||
<div class="task-form-block__title">物品信息</div>
|
||||
<div class="task-panel__desc">客户推送订单可能不带物品信息,请鉴定师根据实物和资料补全,报告草稿会使用这里的内容。</div>
|
||||
@@ -1268,8 +1476,16 @@ onMounted(async () => {
|
||||
|
||||
<div class="task-form-block">
|
||||
<div class="task-form-block__title">吊牌绑定</div>
|
||||
<div class="task-panel__desc">扫描枪输入吊牌二维码链接后绑定到当前报告草稿。报告发布后不可更换。</div>
|
||||
<div v-if="detail.material_tag" class="task-material-tag-bound">
|
||||
<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-info-grid">
|
||||
<div class="task-info-item task-info-item--full">
|
||||
<div class="task-info-item__label">二维码链接</div>
|
||||
@@ -1454,6 +1670,79 @@ onMounted(async () => {
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane v-if="isZhongjianTask" label="中检报告录入" name="zhongjian">
|
||||
<div :key="`zhongjian-${formRenderKey}`" class="task-form-stack">
|
||||
<el-alert
|
||||
title="中检订单不绑定平台验真吊牌,提交中检报告编号和文件后直接发布报告。"
|
||||
type="info"
|
||||
:closable="false"
|
||||
show-icon
|
||||
/>
|
||||
|
||||
<div class="task-form-block">
|
||||
<div class="task-form-block__title">中检报告信息</div>
|
||||
<div class="task-form-grid">
|
||||
<div class="task-form-field task-form-field--full">
|
||||
<div class="task-form-field__label">中检报告编号 <span class="task-form-field__required">必填</span></div>
|
||||
<el-input
|
||||
v-model="zhongjianReportNo"
|
||||
:disabled="isTaskReadonly"
|
||||
placeholder="扫描或输入中检报告编号"
|
||||
clearable
|
||||
@keyup.enter="submitZhongjianReport"
|
||||
/>
|
||||
</div>
|
||||
<div v-if="detail.zhongjian_report?.report_entry_admin_name" class="task-form-field">
|
||||
<div class="task-form-field__label">报告录入人</div>
|
||||
<div class="task-readonly-value">{{ detail.zhongjian_report.report_entry_admin_name }}</div>
|
||||
</div>
|
||||
<div v-if="detail.zhongjian_report?.report_entered_at" class="task-form-field">
|
||||
<div class="task-form-field__label">录入时间</div>
|
||||
<div class="task-readonly-value">{{ detail.zhongjian_report.report_entered_at }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="task-form-block">
|
||||
<div class="task-form-block__title">报告文件</div>
|
||||
<div class="task-panel__desc">至少上传 1 个中检报告文件,支持图片、视频或 PDF。</div>
|
||||
<input
|
||||
ref="zhongjianReportFileInputRef"
|
||||
type="file"
|
||||
multiple
|
||||
accept="image/*,video/*,.pdf,application/pdf"
|
||||
style="display: none"
|
||||
@change="handleZhongjianReportFileSelect"
|
||||
/>
|
||||
<div class="task-evidence-toolbar">
|
||||
<el-button :disabled="isTaskReadonly" :loading="zhongjianReportUploading" @click="triggerZhongjianReportUpload">上传报告文件</el-button>
|
||||
<span class="task-evidence-hint">{{ zhongjianReportFiles.length }} 个文件</span>
|
||||
</div>
|
||||
<div v-if="zhongjianReportFiles.length" class="task-evidence-list">
|
||||
<div v-for="file in zhongjianReportFiles" :key="file.file_id" class="task-evidence-card">
|
||||
<div
|
||||
class="task-evidence-card__preview"
|
||||
:class="{ 'is-image': file.file_type === 'image' }"
|
||||
@click="previewEvidence(file.file_url)"
|
||||
>
|
||||
<img v-if="file.file_type === 'image' && file.thumbnail_url" :src="file.thumbnail_url" :alt="file.name || '中检报告'" />
|
||||
<div v-else class="task-evidence-card__filetype">{{ evidenceTypeLabel(file.file_type) }}</div>
|
||||
</div>
|
||||
<div class="task-evidence-card__body">
|
||||
<div class="task-evidence-card__name">{{ file.name || file.file_url }}</div>
|
||||
<div class="task-evidence-card__meta">{{ evidenceTypeLabel(file.file_type) }}</div>
|
||||
<div class="task-evidence-card__actions">
|
||||
<el-button link type="primary" @click="previewEvidence(file.file_url)">查看</el-button>
|
||||
<el-button v-if="!isTaskReadonly" link type="danger" @click="removeZhongjianReportFile(file.file_url)">删除</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="task-empty task-empty--compact">当前还没有上传中检报告文件</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="发起补资料" name="supplement" :disabled="isTaskReadonly">
|
||||
<div :key="`supplement-${formRenderKey}`" class="task-form-stack">
|
||||
<el-alert
|
||||
@@ -1546,9 +1835,71 @@ onMounted(async () => {
|
||||
<el-button type="primary" :loading="assigneeSubmitting" @click="submitAssigneeAssign">确认分配</el-button>
|
||||
</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>
|
||||
.appraisal-scan-card {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.appraisal-scan {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(220px, 1fr) minmax(320px, 520px);
|
||||
gap: 18px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.appraisal-scan__title {
|
||||
color: var(--admin-text-main);
|
||||
font-size: 18px;
|
||||
font-weight: 800;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.appraisal-scan__desc {
|
||||
margin-top: 6px;
|
||||
color: var(--admin-text-subtle);
|
||||
font-size: 13px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.appraisal-scan__control {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.publish-dialog-body {
|
||||
display: grid;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
:deep(.task-detail-drawer .el-drawer__body) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@@ -2269,6 +2620,16 @@ onMounted(async () => {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.task-readonly-value {
|
||||
min-height: 32px;
|
||||
padding: 7px 0;
|
||||
color: var(--admin-text-main);
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
line-height: 1.5;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.task-form-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
@@ -2342,6 +2703,7 @@ onMounted(async () => {
|
||||
}
|
||||
|
||||
@media (max-width: 960px) {
|
||||
.appraisal-scan,
|
||||
.task-info-grid,
|
||||
.task-form-grid,
|
||||
.task-supplement-item__head {
|
||||
|
||||
Reference in New Issue
Block a user