|
|
@@ -34,17 +34,26 @@ const { data, loading } = useWatcher(() => getReportMethod(id.value), [ id ], {
|
|
|
scrollable.value = false;
|
|
|
nextTick(() => miniProgramRef.value?.open());
|
|
|
}
|
|
|
+ printDisable.value = !(data.reportURL && data.page?.printable);
|
|
|
})
|
|
|
|
|
|
+const printDisable = ref(true);
|
|
|
+let uploaded: ReturnType<typeof setTimeout>;
|
|
|
const { loading: uploading, send: upload } = useRequest(() => updateReportMethod(id.value, data.value), {
|
|
|
immediate: false,
|
|
|
middleware(_, next) {
|
|
|
- if (data.value.reportURL) return;
|
|
|
+ if (data.value.reportURL || !data.value.page?.printable) return;
|
|
|
+ clearTimeout(uploaded);
|
|
|
+ uploaded = setTimeout(() => { uploading.value = true; }, 100);
|
|
|
const hasConstitutionGroupImg = data.value.constitutionGroupImg;
|
|
|
const hasFactorItemRadarImg = data.value[ '中医证素' ]?.length ? data.value.factorItemRadarImg : true;
|
|
|
if ( hasConstitutionGroupImg && hasFactorItemRadarImg ) { next(); }
|
|
|
+ else { clearTimeout(uploaded); }
|
|
|
},
|
|
|
-}).onSuccess(({ data: url }) => { data.value.reportURL = url; });
|
|
|
+}).onSuccess(({ data: url }) => {
|
|
|
+ clearTimeout(uploaded);
|
|
|
+ data.value.reportURL = url;
|
|
|
+}).onComplete(() => { printDisable.value = false ; });
|
|
|
|
|
|
let ReportPreview: Component;
|
|
|
const reportPreviewProps = reactive({
|
|
|
@@ -55,7 +64,7 @@ const reportPreviewProps = reactive({
|
|
|
});
|
|
|
async function print() {
|
|
|
let url = data.value.reportURL;
|
|
|
- if ( !url ) url = await upload();
|
|
|
+ if (!url) url = await upload().catch(() => void 0);
|
|
|
if (!url) {
|
|
|
Notify.warning(`未获取到报告地址,请联系管理员或重试`);
|
|
|
return;
|
|
|
@@ -131,6 +140,7 @@ function toggle() {
|
|
|
<PhysiqueChart
|
|
|
:dataset="data['体质图表']"
|
|
|
v-model:snapshot="data.constitutionGroupImg"
|
|
|
+ @update:snapshot="upload()"
|
|
|
/>
|
|
|
<div class="my-2 text-primary" v-if="data[ '体质描述' ]">{{ data[ '体质描述' ] }}</div>
|
|
|
<table class="mt-8 mb-2 w-full table-auto border border-collapse border-primary">
|
|
|
@@ -175,6 +185,7 @@ function toggle() {
|
|
|
<SyndromeChart
|
|
|
:dataset="data['中医证素']"
|
|
|
v-model:snapshot="data.factorItemRadarImg"
|
|
|
+ @update:snapshot="upload()"
|
|
|
/>
|
|
|
<table class="mt-8 mb-2 w-full table-auto border border-collapse border-primary">
|
|
|
<tbody>
|
|
|
@@ -203,7 +214,7 @@ function toggle() {
|
|
|
<div class="mt-2">调理方案</div>
|
|
|
</div>
|
|
|
<mini-program ref="mini-program" :url="data.miniProgramURL" :closeable="closeable"></mini-program>
|
|
|
- <div v-if="data.page?.printable" class="m-auto min-w-16 text-center hover:text-primary" @click="print()">
|
|
|
+ <div v-if="data.page?.printable" class="m-auto min-w-16 text-center hover:text-primary" :class="{ disabled: printDisable }" @click="!printDisable && print()">
|
|
|
<van-loading v-if="uploading" color="#38ff6e" style="font-size: 24px;" />
|
|
|
<img class="nav-img" v-else :src="NavPrint" alt="打印">
|
|
|
<div class="mt-2">打印</div>
|
|
|
@@ -245,6 +256,12 @@ function toggle() {
|
|
|
.overflow-y-auto {
|
|
|
overflow-y: auto;
|
|
|
}
|
|
|
+
|
|
|
+.disabled {
|
|
|
+ pointer-events:none;
|
|
|
+ cursor: not-allowed;
|
|
|
+ opacity: 0.6;
|
|
|
+}
|
|
|
</style>
|
|
|
<style lang="scss">
|
|
|
.report-wrapper .card {
|