Kaynağa Gözat

修改 id 不存在导致异常

cc12458 1 ay önce
ebeveyn
işleme
1d57e22305

+ 5 - 1
src/module/step/StepDecoction.vue

@@ -22,7 +22,11 @@ const {
   emits('back');
 });
 
-const { data, loading } = useWatcher(() => getDecoctionDataMethod(dataset.value!.id), [dataset], { immediate: true, initialData: {} })
+const { data, loading } = useWatcher(() => getDecoctionDataMethod(dataset.value?.id!), [dataset], {
+  immediate: true,
+  initialData: {},
+  middleware: (_, next) => dataset.value?.id && next(),
+})
   .onSuccess(({ data }) => {
     for (const [key, value] of Object.entries(data)) model.value[key as keyof DecoctionModel] = value;
   })

+ 5 - 1
src/module/step/StepPack.vue

@@ -22,7 +22,11 @@ const {
   emits('back');
 });
 
-const { data, loading } = useWatcher(() => getPackDataMethod(dataset.value!.id), [dataset], { immediate: true, initialData: {} })
+const { data, loading } = useWatcher(() => getPackDataMethod(dataset.value?.id!), [dataset], {
+  immediate: true,
+  initialData: {},
+  middleware: (_, next) => dataset.value?.id && next(),
+})
   .onSuccess(({ data }) => {
     for (const [key, value] of Object.entries(data)) model.value[key as keyof PackModel] = value;
   })

+ 5 - 1
src/module/step/StepPackRecheck.vue

@@ -20,7 +20,11 @@ const {
   emits('back');
 });
 
-const { loading } = useWatcher(() => getPackDataMethod(dataset.value!.id), [dataset], { immediate: true, initialData: {} })
+const { loading } = useWatcher(() => getPackDataMethod(dataset.value?.id!), [dataset], {
+  immediate: true,
+  initialData: {},
+  middleware: (_, next) => dataset.value?.id && next(),
+})
   .onSuccess(({ data }) => {
     for (const [key, value] of Object.entries(data)) model.value[key as keyof PackModel] = value;
   })

+ 5 - 1
src/module/step/StepSoak.vue

@@ -22,7 +22,11 @@ const {
   emits('back');
 });
 
-const { data, loading } = useWatcher(() => getSoakDataMethod(dataset.value!.id), [dataset], { immediate: true, initialData: {} })
+const { data, loading } = useWatcher(() => getSoakDataMethod(dataset.value?.id!), [dataset], {
+  immediate: true,
+  initialData: {},
+  middleware: (_, next) => dataset.value?.id && next(),
+})
   .onSuccess(({ data }) => {
     for (const [key, value] of Object.entries(data)) model.value[key as keyof SoakModel] = value;
   })

+ 19 - 13
src/pages/StepPage.vue

@@ -1,11 +1,13 @@
 <script setup lang="ts">
+import type { UploaderAfterRead, UploaderFileListItem } from 'vant';
+
+import { useRequest } from 'alova/client';
 import { getDataMethod } from '@/api/pda.api.ts';
 import { uploadMethod } from '@/api/file.api.ts';
-import { type ScanData, useScan } from '@/core/hook/useScan.ts';
-import { useStep } from '@/core/hook/useStep.ts';
 import { useStepStore } from '@/stores';
-import type { UploaderAfterRead, UploaderFileListItem } from 'vant';
-import { nextTick } from 'vue';
+
+import { useStep } from '@/core/hook/useStep.ts';
+import { type ScanData, useScan } from '@/core/hook/useScan.ts';
 
 const stepStore = useStepStore();
 const { dataset, id, mode } = storeToRefs(stepStore);
@@ -36,17 +38,19 @@ const { scanValue, scan } = useScan((data) => {
   }
 });
 
-async function onSearch() {
+const { loading, send: search } = useRequest(getDataMethod, { immediate: false })
+  .onSuccess(({ data }) => {
+    dataset.value = data;
+    next(dataset.value.no);
+  })
+  .onError(() => {
+    keyword.value = '';
+  });
+
+function onSearch() {
   const value = keyword.value?.trim?.();
   if (value) {
-    showLoadingToast({ forbidClick: true, duration: 0, message: '查询中...' });
-    try {
-      dataset.value = await getDataMethod(keyword.value.trim());
-      await next(dataset.value.no);
-    } catch (_: unknown) {
-      keyword.value = '';
-    }
-    closeToast();
+    search(value);
   } else {
     showNotify({ message: '请使用设备按钮进行扫码', type: 'warning' });
   }
@@ -77,6 +81,8 @@ const afterRead: UploaderAfterRead = async (listItem) => {
 
 <template>
   <div class="page page__home flex flex-col size-full">
+    <van-toast :show="loading" type="loading" forbid-click message="查询中..." />
+
     <header class="flex-none">
       <van-nav-bar :title="menu?.title" left-text="返回" left-arrow @click-left="onBack()" />
       <van-search v-model="keyword" input-align="center" placeholder="请使用设备按钮进行扫码" @search="onSearch()" :readonly="loaded" :show-action="loaded" @cancel="onBack()" />