From 26b2a4b21b3c2cd34e6781cf7876eae580a7e1ec Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期六, 23 五月 2026 15:02:35 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_NEW_pro_鹤壁' into dev_NEW_pro_鹤壁

---
 src/pages.json                                            |   14 
 src/pages/equipmentManagement/repair/maintain.vue         |   19 
 src/pages/qualityManagement/finalInspection/index.vue     |   26 
 src/pages/qualityManagement/finalInspection/add.vue       |   95 +--
 src/pages/qualityManagement/materialInspection/add.vue    |   95 +--
 src/pages/equipmentManagement/repair/acceptance.vue       |  314 ++++++++++++++
 src/api/equipmentManagement/repair.js                     |   13 
 src/pages/qualityManagement/processInspection/detail.vue  |   37 +
 src/pages/equipmentManagement/repair/detail.vue           |  360 ++++++++++++++++
 src/pages/qualityManagement/processInspection/index.vue   |   26 
 src/pages/equipmentManagement/repair/index.vue            |   91 +++
 src/pages/equipmentManagement/repair/add.vue              |   23 
 src/pages/qualityManagement/materialInspection/detail.vue |   39 +
 src/pages/qualityManagement/materialInspection/index.vue  |   26 
 src/pages/qualityManagement/processInspection/add.vue     |   95 +--
 src/pages/qualityManagement/finalInspection/detail.vue    |   37 +
 16 files changed, 1,045 insertions(+), 265 deletions(-)

diff --git a/src/api/equipmentManagement/repair.js b/src/api/equipmentManagement/repair.js
index 927d5fb..d909eb3 100644
--- a/src/api/equipmentManagement/repair.js
+++ b/src/api/equipmentManagement/repair.js
@@ -70,6 +70,19 @@
     data,
   });
 };
+
+/**
+ * @desc 鎶ヤ慨楠屾敹纭
+ * @param {楠屾敹鍙傛暟} data
+ * @returns
+ */
+export const repairAcceptance = (data) => {
+  return request({
+    url: "/device/repair/acceptance",
+    method: "post",
+    data,
+  });
+};
 export const getSparePartsList = (params) => {
   return request({
     url: "/spareParts/listPage",
diff --git a/src/pages.json b/src/pages.json
index b3d204b..30a1a63 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -689,6 +689,20 @@
       }
     },
     {
+      "path": "pages/equipmentManagement/repair/acceptance",
+      "style": {
+        "navigationBarTitleText": "璁惧鎶ヤ慨楠屾敹",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/equipmentManagement/repair/detail",
+      "style": {
+        "navigationBarTitleText": "璁惧鎶ヤ慨璇︽儏",
+        "navigationStyle": "custom"
+      }
+    },
+    {
       "path": "pages/equipmentManagement/upkeep/index",
       "style": {
         "navigationBarTitleText": "璁惧淇濆吇",
diff --git a/src/pages/equipmentManagement/repair/acceptance.vue b/src/pages/equipmentManagement/repair/acceptance.vue
new file mode 100644
index 0000000..9a283a6
--- /dev/null
+++ b/src/pages/equipmentManagement/repair/acceptance.vue
@@ -0,0 +1,314 @@
+<template>
+  <view class="repair-acceptance">
+    <PageHeader title="璁惧鎶ヤ慨楠屾敹"
+                @back="goBack" />
+    <!-- 鎶ヤ慨淇℃伅 -->
+    <view class="section">
+      <view class="section-title">鎶ヤ慨淇℃伅</view>
+      <view class="info-item">
+        <text class="info-label">璁惧鍚嶇О</text>
+        <text class="info-value">{{ detail.deviceName || '-' }}</text>
+      </view>
+      <view class="info-item">
+        <text class="info-label">瑙勬牸鍨嬪彿</text>
+        <text class="info-value">{{ detail.deviceModel || '-' }}</text>
+      </view>
+      <view class="info-item">
+        <text class="info-label">鎶ヤ慨鏃ユ湡</text>
+        <text class="info-value">{{ formatDate(detail.repairTime) || '-' }}</text>
+      </view>
+      <view class="info-item">
+        <text class="info-label">鎶ヤ慨浜�</text>
+        <text class="info-value">{{ detail.repairName || '-' }}</text>
+      </view>
+      <view class="info-item">
+        <text class="info-label">缁翠慨浜�</text>
+        <text class="info-value">{{ detail.maintenanceName || '-' }}</text>
+      </view>
+      <view class="info-item">
+        <text class="info-label">缁翠慨椤圭洰</text>
+        <text class="info-value">{{ detail.machineryCategory || '-' }}</text>
+      </view>
+      <view class="info-item">
+        <text class="info-label">鏁呴殰鐜拌薄</text>
+        <text class="info-value multi-line">{{ detail.remark || '-' }}</text>
+      </view>
+      <view class="info-item">
+        <text class="info-label">缁翠慨缁撴灉</text>
+        <text class="info-value multi-line">{{ detail.maintenanceResult || '-' }}</text>
+      </view>
+      <view class="info-item">
+        <text class="info-label">缁翠慨鏃ユ湡</text>
+        <text class="info-value">{{ formatDateTime(detail.maintenanceTime) || '-' }}</text>
+      </view>
+    </view>
+    <!-- 楠屾敹琛ㄥ崟 -->
+    <u-form ref="formRef"
+            :model="form"
+            label-width="110">
+      <u-cell-group title="楠屾敹淇℃伅">
+        <u-form-item label="楠屾敹浜�"
+                     prop="acceptanceName"
+                     required
+                     border-bottom>
+          <u-input v-model="form.acceptanceName"
+                   disabled
+                   placeholder="楠屾敹浜�" />
+        </u-form-item>
+        <u-form-item label="楠屾敹鏃堕棿"
+                     prop="acceptanceTime"
+                     required
+                     border-bottom>
+          <u-input v-model="form.acceptanceTime"
+                   placeholder="璇烽�夋嫨楠屾敹鏃堕棿"
+                   readonly
+                   @click="showDatePicker = true" />
+          <template #right>
+            <u-icon name="arrow-right"
+                    @click="showDatePicker = true"></u-icon>
+          </template>
+        </u-form-item>
+        <u-form-item label="楠屾敹澶囨敞"
+                     prop="acceptanceRemark"
+                     required
+                     border-bottom>
+          <u-textarea v-model="form.acceptanceRemark"
+                      placeholder="璇疯緭鍏ラ獙鏀跺娉�"
+                      :maxlength="200"
+                      count
+                      :autoHeight="true" />
+        </u-form-item>
+      </u-cell-group>
+      <view class="footer-btns">
+        <u-button class="cancel-btn"
+                  @click="goBack">鍙栨秷</u-button>
+        <u-button class="save-btn"
+                  type="primary"
+                  @click="handleSubmit"
+                  :loading="loading">楠屾敹纭</u-button>
+      </view>
+    </u-form>
+    <up-datetime-picker :show="showDatePicker"
+                        v-model="pickerDateValue"
+                        mode="datetime"
+                        title="閫夋嫨楠屾敹鏃堕棿"
+                        @confirm="onDateConfirm"
+                        @cancel="showDatePicker = false" />
+  </view>
+</template>
+
+<script setup>
+  import { ref, onMounted } from "vue";
+  import { onLoad } from "@dcloudio/uni-app";
+  import PageHeader from "@/components/PageHeader.vue";
+  import { repairAcceptance, getRepairById } from "@/api/equipmentManagement/repair";
+  import useUserStore from "@/store/modules/user";
+  import dayjs from "dayjs";
+
+  defineOptions({ name: "repair-acceptance" });
+
+  const showToast = message => {
+    uni.showToast({ title: message, icon: "none" });
+  };
+
+  const userStore = useUserStore();
+  const loading = ref(false);
+  const showDatePicker = ref(false);
+  const pickerDateValue = ref(Date.now());
+  const repairId = ref("");
+  const detail = ref({});
+
+  const form = ref({
+    id: "",
+    acceptanceName: "",
+    acceptanceTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
+    acceptanceRemark: "",
+  });
+
+  const formatDate = dateStr => {
+    if (!dateStr) return "";
+    return dayjs(dateStr).format("YYYY-MM-DD");
+  };
+
+  const formatDateTime = dateStr => {
+    if (!dateStr) return "";
+    return dayjs(dateStr).format("YYYY-MM-DD HH:mm:ss");
+  };
+
+  const canAccept = item => {
+    const currentName = userStore.nickName || userStore.name || "";
+    return currentName && item.acceptanceName === currentName;
+  };
+
+  const loadDetail = async id => {
+    try {
+      const cached = uni.getStorageSync("repairDetail");
+      if (cached) {
+        detail.value = typeof cached === "string" ? JSON.parse(cached) : cached;
+      }
+      if (id && (!detail.value?.id || detail.value.id != id)) {
+        const { code, data } = await getRepairById(id);
+        if (code == 200) {
+          detail.value = data;
+        }
+      }
+      if (!canAccept(detail.value)) {
+        showToast("浠呮寚瀹氶獙鏀朵汉鍙繘琛岄獙鏀�");
+        setTimeout(() => uni.navigateBack(), 1500);
+        return;
+      }
+      form.value.id = detail.value.id;
+      form.value.acceptanceName = detail.value.acceptanceName || "";
+    } catch (e) {
+      showToast("鑾峰彇鎶ヤ慨淇℃伅澶辫触");
+    }
+  };
+
+  const onDateConfirm = e => {
+    form.value.acceptanceTime = dayjs(e.value).format("YYYY-MM-DD HH:mm:ss");
+    pickerDateValue.value = e.value;
+    showDatePicker.value = false;
+  };
+
+  const handleSubmit = async () => {
+    if (!form.value.acceptanceTime?.trim()) {
+      showToast("璇烽�夋嫨楠屾敹鏃堕棿");
+      return;
+    }
+    if (!form.value.acceptanceRemark?.trim()) {
+      showToast("璇疯緭鍏ラ獙鏀跺娉�");
+      return;
+    }
+    try {
+      loading.value = true;
+      const { code } = await repairAcceptance({
+        id: form.value.id,
+        acceptanceTime: form.value.acceptanceTime,
+        acceptanceRemark: form.value.acceptanceRemark,
+      });
+      if (code == 200) {
+        showToast("楠屾敹鎴愬姛");
+        uni.removeStorageSync("repairDetail");
+        setTimeout(() => uni.navigateBack(), 500);
+      } else {
+        loading.value = false;
+      }
+    } catch (e) {
+      loading.value = false;
+      showToast("楠屾敹鎻愪氦澶辫触");
+    }
+  };
+
+  const goBack = () => {
+    uni.removeStorageSync("repairDetail");
+    uni.navigateBack();
+  };
+
+  onLoad(options => {
+    if (options.id) {
+      repairId.value = options.id;
+    }
+  });
+
+  onMounted(async () => {
+    if (!userStore.nickName) {
+      await userStore.getInfo().catch(() => {});
+    }
+    if (repairId.value) {
+      loadDetail(repairId.value);
+    }
+  });
+</script>
+
+<style scoped lang="scss">
+  @import "@/static/scss/form-common.scss";
+
+  .repair-acceptance {
+    min-height: 100vh;
+    background-color: #f8f9fa;
+    padding-bottom: 160rpx;
+  }
+
+  .section {
+    background-color: #ffffff;
+    margin-bottom: 16px;
+    overflow: hidden;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
+  }
+
+  .section-title {
+    font-size: 16px;
+    font-weight: 600;
+    color: #333333;
+    padding: 16px 16px 12px;
+    border-bottom: 1px solid #f0f0f0;
+  }
+
+  .info-item {
+    display: flex;
+    padding: 14px 16px;
+    border-bottom: 1px solid #f8f8f8;
+    align-items: flex-start;
+  }
+
+  .info-item:last-child {
+    border-bottom: none;
+  }
+
+  .info-label {
+    font-size: 14px;
+    color: #666666;
+    min-width: 80px;
+    flex-shrink: 0;
+    line-height: 22px;
+  }
+
+  .info-value {
+    font-size: 14px;
+    color: #333333;
+    flex: 1;
+    line-height: 22px;
+    text-align: right;
+  }
+
+  .multi-line {
+    text-align: left;
+    word-break: break-all;
+  }
+
+  .footer-btns {
+    position: fixed;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background: #fff;
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+    padding: 0.75rem 0;
+    box-shadow: 0 -0.125rem 0.5rem rgba(0, 0, 0, 0.05);
+    z-index: 1000;
+  }
+
+  .cancel-btn {
+    font-weight: 400;
+    font-size: 1rem;
+    color: #666;
+    background: #f5f5f5;
+    border: 1px solid #ddd;
+    width: 45%;
+    height: 2.5rem;
+    border-radius: 2.5rem;
+  }
+
+  .save-btn {
+    font-weight: 500;
+    font-size: 1rem;
+    color: #fff;
+    background: linear-gradient(140deg, #00baff 0%, #006cfb 100%);
+    border: none;
+    width: 45%;
+    height: 2.5rem;
+    border-radius: 2.5rem;
+  }
+</style>
diff --git a/src/pages/equipmentManagement/repair/add.vue b/src/pages/equipmentManagement/repair/add.vue
index 73c4eba..39ab9a4 100644
--- a/src/pages/equipmentManagement/repair/add.vue
+++ b/src/pages/equipmentManagement/repair/add.vue
@@ -76,6 +76,13 @@
                    placeholder="璇疯緭鍏ョ淮淇汉"
                    clearable />
         </u-form-item>
+        <u-form-item label="楠屾敹浜�"
+                     prop="acceptanceName"
+                     border-bottom>
+          <u-input v-model="form.acceptanceName"
+                   placeholder="璇疯緭鍏ラ獙鏀朵汉"
+                   clearable />
+        </u-form-item>
         <u-form-item label="缁翠慨椤圭洰"
                      prop="machineryCategory"
                      border-bottom>
@@ -198,6 +205,8 @@
     repairTime: dayjs().format("YYYY-MM-DD"), // 鎶ヤ慨鏃ユ湡
     repairName: undefined, // 鎶ヤ慨浜�
     maintenanceName: undefined, // 缁翠慨浜�
+    acceptanceName: undefined, // 楠屾敹浜�
+    status: "0", // 鎶ヤ慨鐘舵��
     machineryCategory: undefined, // 缁翠慨椤圭洰
     remark: undefined, // 鏁呴殰鐜拌薄
     storageBlobDTOs: [], // 鍥剧墖闄勪欢
@@ -206,10 +215,11 @@
   // 鎶ヤ慨鐘舵�侀�夐」
   const repairStatusOptions = ref([
     { name: "寰呯淮淇�", value: "0" },
-    { name: "瀹岀粨", value: "1" },
-    { name: "澶辫触", value: "2" },
+    { name: "瀹屾垚", value: "1" },
+    { name: "缁翠慨澶辫触", value: "2" },
+    { name: "寰呴獙鏀�", value: "3" },
   ]);
-  const repairStatusText = ref("");
+  const repairStatusText = ref("寰呯淮淇�");
 
   // 鎵撳紑鎶ヤ慨鐘舵�侀�夋嫨鍣�
   const openRepairStatusPicker = () => {
@@ -253,12 +263,15 @@
           form.value.repairTime = dayjs(data.repairTime).format("YYYY-MM-DD");
           form.value.repairName = data.repairName;
           form.value.maintenanceName = data.maintenanceName;
+          form.value.acceptanceName = data.acceptanceName;
+          form.value.status = String(data.status ?? "0");
           form.value.machineryCategory = data.machineryCategory;
           form.value.remark = data.remark;
           form.value.storageBlobDTOs = data.storageBlobVOs || [];
           repairStatusText.value =
-            repairStatusOptions.value.find(item => item.value == data.status)
-              ?.name || "";
+            repairStatusOptions.value.find(
+              item => item.value == String(data.status)
+            )?.name || "";
           // 璁剧疆璁惧鍚嶇О鏄剧ず
           const device = deviceOptions.value.find(
             item => item.id === data.deviceLedgerId
diff --git a/src/pages/equipmentManagement/repair/detail.vue b/src/pages/equipmentManagement/repair/detail.vue
new file mode 100644
index 0000000..75fe1e4
--- /dev/null
+++ b/src/pages/equipmentManagement/repair/detail.vue
@@ -0,0 +1,360 @@
+<template>
+  <view class="repair-detail">
+    <PageHeader title="璁惧鎶ヤ慨璇︽儏"
+                @back="goBack" />
+    <view class="content-container">
+      <!-- 1. 鎶ヤ慨鐧昏 -->
+      <view class="section">
+        <view class="section-head">
+          <view class="section-bar"></view>
+          <text class="section-head-text">1. 鎶ヤ慨鐧昏</text>
+        </view>
+        <view class="desc-table">
+          <view class="desc-row">
+            <view class="desc-cell">
+              <text class="desc-label">璁惧鍚嶇О</text>
+              <text class="desc-value">{{ detail.deviceName || '-' }}</text>
+            </view>
+            <view class="desc-cell">
+              <text class="desc-label">瑙勬牸鍨嬪彿</text>
+              <text class="desc-value">{{ detail.deviceModel || '-' }}</text>
+            </view>
+          </view>
+          <view class="desc-row">
+            <view class="desc-cell">
+              <text class="desc-label">鎶ヤ慨鏃ユ湡</text>
+              <text class="desc-value">{{ formatDate(detail.repairTime) || '-' }}</text>
+            </view>
+            <view class="desc-cell">
+              <text class="desc-label">鎶ヤ慨浜�</text>
+              <text class="desc-value">{{ detail.repairName || '-' }}</text>
+            </view>
+          </view>
+          <view class="desc-row">
+            <view class="desc-cell">
+              <text class="desc-label">楠屾敹浜�</text>
+              <text class="desc-value">{{ detail.acceptanceName || '-' }}</text>
+            </view>
+            <view class="desc-cell">
+              <text class="desc-label">缁翠慨浜�</text>
+              <text class="desc-value">{{ detail.maintenanceName || '-' }}</text>
+            </view>
+          </view>
+          <view class="desc-row full">
+            <view class="desc-cell full">
+              <text class="desc-label">鏁呴殰鐜拌薄</text>
+              <text class="desc-value">{{ detail.remark || '-' }}</text>
+            </view>
+          </view>
+          <view class="desc-row full">
+            <view class="desc-cell full status-cell">
+              <text class="desc-label">褰撳墠鐘舵��</text>
+              <view class="desc-value">
+                <u-tag :type="getStatusType(detail.status)"
+                       size="mini">{{ getStatusLabel(detail.status) }}</u-tag>
+              </view>
+            </view>
+          </view>
+        </view>
+        <view class="image-block">
+          <text class="image-block-title">璁惧闂鍥剧墖</text>
+          <view v-if="imageList.length"
+                class="image-content">
+            <CommonUpload :model-value="imageList"
+                          disabled />
+          </view>
+          <view v-else
+                class="image-empty">
+            <up-icon name="photo"
+                     size="40"
+                     color="#c0c4cc"></up-icon>
+            <text class="image-empty-text">鏆傛棤璁惧闂鍥剧墖</text>
+          </view>
+        </view>
+      </view>
+
+      <!-- 2. 缁翠慨澶勭悊 -->
+      <view class="section">
+        <view class="section-head">
+          <view class="section-bar"></view>
+          <text class="section-head-text">2. 缁翠慨澶勭悊</text>
+        </view>
+        <view class="desc-table">
+          <view class="desc-row">
+            <view class="desc-cell">
+              <text class="desc-label">缁翠慨浜�</text>
+              <text class="desc-value">{{ detail.maintenanceName || '-' }}</text>
+            </view>
+            <view class="desc-cell">
+              <text class="desc-label">缁翠慨鏃堕棿</text>
+              <text class="desc-value">{{ formatDateTime(detail.maintenanceTime) || '-' }}</text>
+            </view>
+          </view>
+          <view class="desc-row full">
+            <view class="desc-cell full">
+              <text class="desc-label">缁翠慨缁撴灉</text>
+              <text class="desc-value">{{ detail.maintenanceResult || '-' }}</text>
+            </view>
+          </view>
+        </view>
+      </view>
+
+      <!-- 3. 楠屾敹 -->
+      <view class="section">
+        <view class="section-head">
+          <view class="section-bar"></view>
+          <text class="section-head-text">3. 楠屾敹</text>
+        </view>
+        <view class="desc-table">
+          <view class="desc-row">
+            <view class="desc-cell">
+              <text class="desc-label">楠屾敹浜�</text>
+              <text class="desc-value">{{ detail.acceptanceName || '-' }}</text>
+            </view>
+            <view class="desc-cell">
+              <text class="desc-label">楠屾敹鏃堕棿</text>
+              <text class="desc-value">{{ formatDateTime(detail.acceptanceTime) || '-' }}</text>
+            </view>
+          </view>
+          <view class="desc-row full">
+            <view class="desc-cell full">
+              <text class="desc-label">楠屾敹澶囨敞</text>
+              <text class="desc-value">{{ detail.acceptanceRemark || '-' }}</text>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script setup>
+  import { ref, computed, onMounted } from "vue";
+  import { onLoad } from "@dcloudio/uni-app";
+  import PageHeader from "@/components/PageHeader.vue";
+  import CommonUpload from "@/components/CommonUpload.vue";
+  import { getRepairById } from "@/api/equipmentManagement/repair";
+  import dayjs from "dayjs";
+
+  defineOptions({ name: "repair-detail" });
+
+  const showToast = message => {
+    uni.showToast({ title: message, icon: "none" });
+  };
+
+  const repairId = ref("");
+  const detail = ref({});
+
+  const STATUS_MAP = {
+    0: { label: "寰呯淮淇�", type: "error" },
+    1: { label: "瀹屾垚", type: "success" },
+    2: { label: "缁翠慨澶辫触", type: "warning" },
+    3: { label: "寰呴獙鏀�", type: "primary" },
+  };
+
+  const getStatusLabel = status => STATUS_MAP[status]?.label || "-";
+  const getStatusType = status => STATUS_MAP[status]?.type || "info";
+
+  const imageList = computed(() => {
+    return detail.value.storageBlobVOs || detail.value.storageBlobDTOs || [];
+  });
+
+  const formatDate = dateStr => {
+    if (!dateStr) return "";
+    return dayjs(dateStr).format("YYYY-MM-DD");
+  };
+
+  const formatDateTime = dateStr => {
+    if (!dateStr) return "";
+    return dayjs(dateStr).format("YYYY-MM-DD HH:mm:ss");
+  };
+
+  const loadDetail = async id => {
+    try {
+      const cached = uni.getStorageSync("repairDetail");
+      if (cached) {
+        detail.value = typeof cached === "string" ? JSON.parse(cached) : cached;
+      }
+      if (id) {
+        const { code, data } = await getRepairById(id);
+        if (code == 200) {
+          detail.value = { ...detail.value, ...data };
+        }
+      }
+    } catch (e) {
+      showToast("鑾峰彇璇︽儏澶辫触");
+    }
+  };
+
+  const goBack = () => {
+    uni.removeStorageSync("repairDetail");
+    uni.navigateBack();
+  };
+
+  onLoad(options => {
+    if (options.id) {
+      repairId.value = options.id;
+    }
+  });
+
+  onMounted(() => {
+    loadDetail(repairId.value);
+  });
+</script>
+
+<style scoped lang="scss">
+  .repair-detail {
+    min-height: 100vh;
+    background-color: #f0f2f5;
+    padding-bottom: 24px;
+  }
+
+  .content-container {
+    padding: 12px;
+  }
+
+  .section {
+    background-color: #ffffff;
+    border-radius: 4px;
+    margin-bottom: 12px;
+    overflow: hidden;
+    border: 1px solid #ebeef5;
+  }
+
+  .section-head {
+    display: flex;
+    align-items: center;
+    padding: 12px 16px;
+    border-bottom: 1px solid #ebeef5;
+    background: #fff;
+  }
+
+  .section-bar {
+    width: 4px;
+    height: 16px;
+    background: #409eff;
+    border-radius: 2px;
+    margin-right: 8px;
+    flex-shrink: 0;
+  }
+
+  .section-head-text {
+    font-size: 15px;
+    font-weight: 600;
+    color: #303133;
+  }
+
+  .desc-table {
+    border-top: 1px solid #ebeef5;
+  }
+
+  .desc-row {
+    display: flex;
+    border-bottom: 1px solid #ebeef5;
+
+    &:last-child {
+      border-bottom: none;
+    }
+
+    &.full {
+      .desc-cell.full {
+        flex: 1;
+        width: 100%;
+      }
+    }
+  }
+
+  .desc-cell {
+    flex: 1;
+    display: flex;
+    min-width: 0;
+    border-right: 1px solid #ebeef5;
+
+    &:last-child {
+      border-right: none;
+    }
+
+    &.full {
+      border-right: none;
+    }
+  }
+
+  .desc-label {
+    width: 88px;
+    flex-shrink: 0;
+    padding: 10px 12px;
+    font-size: 13px;
+    color: #606266;
+    background: #f5f7fa;
+    border-right: 1px solid #ebeef5;
+    line-height: 20px;
+    box-sizing: border-box;
+  }
+
+  .desc-value {
+    flex: 1;
+    padding: 10px 12px;
+    font-size: 13px;
+    color: #303133;
+    background: #ffffff;
+    line-height: 20px;
+    word-break: break-all;
+    min-width: 0;
+    box-sizing: border-box;
+  }
+
+  .status-cell {
+    .desc-value {
+      display: flex;
+      align-items: center;
+    }
+  }
+
+  .image-block {
+    padding: 12px 16px 16px;
+    border-top: 1px solid #ebeef5;
+  }
+
+  .image-block-title {
+    display: block;
+    font-size: 13px;
+    color: #606266;
+    margin-bottom: 12px;
+  }
+
+  .image-content {
+    padding: 0;
+  }
+
+  .image-empty {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    min-height: 120px;
+    background: #fafafa;
+    border: 1px dashed #dcdfe6;
+    border-radius: 4px;
+    gap: 8px;
+  }
+
+  .image-empty-text {
+    font-size: 13px;
+    color: #c0c4cc;
+  }
+
+  @media (max-width: 400px) {
+    .desc-row:not(.full) {
+      flex-direction: column;
+
+      .desc-cell {
+        border-right: none;
+        border-bottom: 1px solid #ebeef5;
+
+        &:last-child {
+          border-bottom: none;
+        }
+      }
+    }
+  }
+</style>
diff --git a/src/pages/equipmentManagement/repair/index.vue b/src/pages/equipmentManagement/repair/index.vue
index 8c41ab1..c37bd62 100644
--- a/src/pages/equipmentManagement/repair/index.vue
+++ b/src/pages/equipmentManagement/repair/index.vue
@@ -37,10 +37,8 @@
               <text class="item-id">璁惧鍚嶇О锛歿{ item.deviceName }}</text>
             </view>
             <view class="status-tag">
-              <u-tag v-if="item.status === 1"
-                     type="success">瀹岀粨</u-tag>
-              <u-tag v-if="item.status === 0"
-                     type="error">寰呯淮淇�</u-tag>
+              <u-tag :type="getStatusType(item.status)"
+                     size="mini">{{ getStatusLabel(item.status) }}</u-tag>
             </view>
           </view>
           <up-divider></up-divider>
@@ -62,6 +60,10 @@
               <text class="detail-value">{{ item.maintenanceName || '-' }}</text>
             </view>
             <view class="detail-row">
+              <text class="detail-label">楠屾敹浜�</text>
+              <text class="detail-value">{{ item.acceptanceName || '-' }}</text>
+            </view>
+            <view class="detail-row">
               <text class="detail-label">缁翠慨椤圭洰</text>
               <text class="detail-value">{{ item.machineryCategory || '-' }}</text>
             </view>
@@ -75,11 +77,26 @@
             </view>
             <view class="detail-row">
               <text class="detail-label">缁翠慨鏃ユ湡</text>
-              <text class="detail-value">{{ formatDate(item.maintenanceTime) || '-' }}</text>
+              <text class="detail-value">{{ formatDateTime(item.maintenanceTime) || '-' }}</text>
             </view>
           </view>
           <!-- 鎸夐挳鍖哄煙 -->
           <view class="action-buttons">
+            <u-button type="info"
+                      size="small"
+                      plain
+                      class="action-btn"
+                      @click="goDetail(item)">
+              璇︽儏
+            </u-button>
+            <u-button type="success"
+                      size="small"
+                      class="action-btn"
+                      v-if="item.status === 3"
+                      :disabled="!canAccept(item)"
+                      @click="goAcceptance(item)">
+              楠屾敹
+            </u-button>
             <u-button type="primary"
                       size="small"
                       class="action-btn"
@@ -135,6 +152,22 @@
 
   const userStore = useUserStore();
 
+  const STATUS_MAP = {
+    0: { label: "寰呯淮淇�", type: "error" },
+    1: { label: "瀹屾垚", type: "success" },
+    2: { label: "缁翠慨澶辫触", type: "warning" },
+    3: { label: "寰呴獙鏀�", type: "primary" },
+  };
+
+  const getStatusLabel = status => STATUS_MAP[status]?.label || "-";
+  const getStatusType = status => STATUS_MAP[status]?.type || "info";
+
+  const canAccept = item => {
+    if (item.status !== 3) return false;
+    const currentName = userStore.nickName || userStore.name || "";
+    return currentName && item.acceptanceName === currentName;
+  };
+
   // 鎼滅储鍏抽敭璇�
   const searchKeyword = ref("");
 
@@ -154,6 +187,18 @@
     const month = String(date.getMonth() + 1).padStart(2, "0");
     const day = String(date.getDate()).padStart(2, "0");
     return `${year}-${month}-${day}`;
+  };
+
+  const formatDateTime = dateStr => {
+    if (!dateStr) return "";
+    const date = new Date(dateStr);
+    const year = date.getFullYear();
+    const month = String(date.getMonth() + 1).padStart(2, "0");
+    const day = String(date.getDate()).padStart(2, "0");
+    const hours = String(date.getHours()).padStart(2, "0");
+    const minutes = String(date.getMinutes()).padStart(2, "0");
+    const seconds = String(date.getSeconds()).padStart(2, "0");
+    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
   };
 
   // 鏌ヨ鍒楄〃
@@ -194,7 +239,6 @@
       showToast("鍙傛暟閿欒");
       return;
     }
-    // 浣跨敤uni.setStorageSync瀛樺偍id
     uni.setStorageSync("repairId", id);
     uni.navigateTo({
       url: "/pages/equipmentManagement/repair/maintain",
@@ -208,13 +252,31 @@
     });
   };
 
-  // 缂栬緫 - 璺宠浆鍒癮dd椤甸潰锛岄�氳繃id鍖哄垎鏂板杩樻槸缂栬緫
+  // 缂栬緫
   const edit = id => {
     if (!id) return;
-    // 浣跨敤uni.setStorageSync瀛樺偍id
-    // uni.setStorageSync("repairId", id);
     uni.navigateTo({
       url: "/pages/equipmentManagement/repair/add?id=" + id,
+    });
+  };
+
+  // 璇︽儏
+  const goDetail = item => {
+    uni.setStorageSync("repairDetail", JSON.stringify(item));
+    uni.navigateTo({
+      url: "/pages/equipmentManagement/repair/detail?id=" + item.id,
+    });
+  };
+
+  // 楠屾敹
+  const goAcceptance = item => {
+    if (!canAccept(item)) {
+      showToast("浠呮寚瀹氶獙鏀朵汉鍙繘琛岄獙鏀�");
+      return;
+    }
+    uni.setStorageSync("repairDetail", JSON.stringify(item));
+    uni.navigateTo({
+      url: "/pages/equipmentManagement/repair/acceptance?id=" + item.id,
     });
   };
 
@@ -243,6 +305,9 @@
   };
 
   onMounted(() => {
+    if (!userStore.nickName) {
+      userStore.getInfo().catch(() => {});
+    }
     getList();
   });
 
@@ -254,9 +319,8 @@
 <style scoped lang="scss">
   @import "@/styles/sales-common.scss";
 
-  // 璁惧缁翠慨鐗规湁鏍峰紡
   .sales-account {
-    padding-bottom: 80px; // 涓烘诞鍔ㄦ寜閽暀鍑虹┖闂�
+    padding-bottom: 80px;
   }
 
   .status-tag {
@@ -265,6 +329,7 @@
   }
 
   .action-buttons {
-    gap: 8px; // 涓庡叕鍏辨牱寮忎腑鐨� 12px 涓嶅悓
+    gap: 8px;
+    flex-wrap: wrap;
   }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/pages/equipmentManagement/repair/maintain.vue b/src/pages/equipmentManagement/repair/maintain.vue
index 9b077d6..72989d4 100644
--- a/src/pages/equipmentManagement/repair/maintain.vue
+++ b/src/pages/equipmentManagement/repair/maintain.vue
@@ -12,10 +12,10 @@
       <u-cell-group title="缁翠慨淇℃伅"
                     inset>
         <u-form-item prop="maintenanceName"
-                     label="鎶ヤ慨浜�"
+                     label="缁翠慨浜�"
                      required>
           <u-input v-model="form.maintenanceName"
-                   placeholder="璇疯緭鍏ユ姤淇汉"
+                   placeholder="璇疯緭鍏ョ淮淇汉"
                    clearable />
         </u-form-item>
         <u-form-item prop="maintenanceResult"
@@ -177,7 +177,7 @@
   // 琛ㄥ崟楠岃瘉瑙勫垯
   const formRules = {
     maintenanceName: [
-      { required: true, trigger: "blur", message: "璇疯緭鍏ユ姤淇汉" },
+      { required: true, trigger: "blur", message: "璇疯緭鍏ョ淮淇汉" },
     ],
     maintenanceResult: [
       { required: true, trigger: "blur", message: "璇疯緭鍏ョ淮淇粨鏋�" },
@@ -188,10 +188,11 @@
   };
   const repairStatusOptions = ref([
     { name: "寰呯淮淇�", value: "0" },
-    { name: "瀹岀粨", value: "1" },
-    { name: "澶辫触", value: "2" },
+    { name: "瀹屾垚", value: "1" },
+    { name: "缁翠慨澶辫触", value: "2" },
+    { name: "寰呴獙鏀�", value: "3" },
   ]);
-  const repairStatusText = ref("瀹岀粨");
+  const repairStatusText = ref("寰呴獙鏀�");
   // 鎵撳紑鎶ヤ慨鐘舵�侀�夋嫨鍣�
   const openRepairStatusPicker = () => {
     uni.showActionSheet({
@@ -207,7 +208,7 @@
     maintenanceName: userStore.nickName || "", // 榛樿浣跨敤褰撳墠鐢ㄦ埛鏄电О
     maintenanceResult: undefined, // 缁翠慨缁撴灉
     maintenanceTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), // 缁翠慨鏃ユ湡锛堝彧鏄剧ず鏃ユ湡锛�
-    status: "1",
+    status: "3",
     sparePartsIds: [],
   });
 
@@ -225,7 +226,7 @@
       maintenanceName: userStore.nickName || "",
       maintenanceResult: undefined,
       maintenanceTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
-      status: "1",
+      status: "3",
       sparePartsIds: [],
     };
     selectedSpareParts.value = [];
@@ -411,7 +412,7 @@
 
   // 鍒濆鍖栬〃鍗曟暟鎹�
   const initForm = async () => {
-    form.value.status = "1";
+    form.value.status = "3";
     // 璁剧疆鎶ヤ慨浜轰负褰撳墠鐢ㄦ埛鏄电О
     form.value.maintenanceName = userStore.nickName || "";
     // 璁剧疆褰撳墠鏃ユ湡锛堝彧鍖呭惈骞存湀鏃ワ級
diff --git a/src/pages/qualityManagement/finalInspection/add.vue b/src/pages/qualityManagement/finalInspection/add.vue
index 94321dd..9bae6c6 100644
--- a/src/pages/qualityManagement/finalInspection/add.vue
+++ b/src/pages/qualityManagement/finalInspection/add.vue
@@ -68,14 +68,32 @@
                   placeholder="璇疯緭鍏ュ崟浣�"
                   disabled />
       </up-form-item>
-      <up-form-item label="鏁伴噺"
+      <up-form-item label="鎬绘暟閲�"
                     prop="quantity"
                     required
                     border-bottom>
         <up-input v-model="form.quantity"
                   type="number"
-                  placeholder="璇疯緭鍏ユ暟閲�"
+                  placeholder="璇疯緭鍏ユ�绘暟閲�"
                   :disabled="processQuantityDisabled" />
+      </up-form-item>
+      <up-form-item label="鍚堟牸鏁伴噺"
+                    prop="qualifiedQuantity"
+                    required
+                    border-bottom>
+        <up-input v-model="form.qualifiedQuantity"
+                  type="number"
+                  placeholder="璇疯緭鍏ュ悎鏍兼暟閲�"
+                  clearable />
+      </up-form-item>
+      <up-form-item label="涓嶅悎鏍兼暟閲�"
+                    prop="unqualifiedQuantity"
+                    required
+                    border-bottom>
+        <up-input v-model="form.unqualifiedQuantity"
+                  type="number"
+                  placeholder="璇疯緭鍏ヤ笉鍚堟牸鏁伴噺"
+                  clearable />
       </up-form-item>
       <up-form-item label="妫�娴嬪崟浣�"
                     prop="checkCompany"
@@ -83,19 +101,6 @@
         <up-input v-model="form.checkCompany"
                   placeholder="璇疯緭鍏ユ娴嬪崟浣�"
                   clearable />
-      </up-form-item>
-      <up-form-item label="妫�娴嬬粨鏋�"
-                    prop="checkResult"
-                    required
-                    border-bottom>
-        <up-input v-model="form.checkResult"
-                  placeholder="璇烽�夋嫨妫�娴嬬粨鏋�"
-                  readonly
-                  @click="showResultSheet" />
-        <template #right>
-          <up-icon @click="showResultSheet = true"
-                   name="arrow-right" />
-        </template>
       </up-form-item>
       <up-form-item label="妫�楠屽憳"
                     prop="checkName"
@@ -208,12 +213,6 @@
                      @select="selectModel"
                      @close="showModelSheet = false"
                      title="閫夋嫨瑙勬牸鍨嬪彿" />
-    <!-- 妫�娴嬬粨鏋滈�夋嫨 -->
-    <up-action-sheet :show="showResultSheet"
-                     :actions="resultSheetOptions"
-                     @select="selectResult"
-                     @close="showResultSheet = false"
-                     title="閫夋嫨妫�娴嬬粨鏋�" />
     <!-- 妫�楠屽憳閫夋嫨 -->
     <up-action-sheet :show="showInspectorSheet"
                      :actions="userSheetOptions"
@@ -340,8 +339,6 @@
   const showProductTree = ref(false);
   // 瑙勬牸鍨嬪彿閫夋嫨
   const showModelSheet = ref(false);
-  // 妫�娴嬬粨鏋滈�夋嫨
-  const showResultSheet = ref(false);
   // 妫�楠屽憳閫夋嫨
   const showInspectorSheet = ref(false);
   // 鎸囨爣閫夋嫨
@@ -359,8 +356,9 @@
     testStandardId: "",
     unit: "",
     quantity: "",
+    qualifiedQuantity: "",
+    unqualifiedQuantity: "",
     checkCompany: "",
-    checkResult: "",
     productMainId: null,
     purchaseLedgerId: null,
   });
@@ -380,11 +378,6 @@
   const modelOptions = ref([]);
   // 妫�楠屽憳鍒楄〃
   const userList = ref([]);
-  // 妫�娴嬬粨鏋滈�夐」
-  const resultOptions = ref([
-    { label: "鍚堟牸", value: "鍚堟牸" },
-    { label: "涓嶅悎鏍�", value: "涓嶅悎鏍�" },
-  ]);
   // 鎸囨爣閫夐」
   const testStandardOptions = ref([]);
   // 褰撳墠浜у搧ID
@@ -409,13 +402,6 @@
     return modelOptions.value.map(item => ({
       name: item.model,
       value: item.id,
-    }));
-  });
-
-  const resultSheetOptions = computed(() => {
-    return resultOptions.value.map(item => ({
-      name: item.label,
-      value: item.value,
     }));
   });
 
@@ -447,10 +433,9 @@
     ],
     unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
     quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    qualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    unqualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    checkResult: [
-      { required: true, message: "璇烽�夋嫨妫�娴嬬粨鏋�", trigger: "change" },
-    ],
   };
 
   // 鏄惁涓虹紪杈戞ā寮�
@@ -555,12 +540,6 @@
       modelOptions.value.find(item => item.id == value)?.model || "";
     form.value.unit =
       modelOptions.value.find(item => item.id == value)?.unit || "";
-  };
-
-  // 閫夋嫨妫�娴嬬粨鏋�
-  const selectResult = e => {
-    form.value.checkResult = e.value;
-    showResultSheet.value = false;
   };
 
   // 閫夋嫨妫�楠屽憳
@@ -685,7 +664,15 @@
       //   return;
       // }
       if (!form.value.quantity) {
-        showToast("璇疯緭鍏ユ暟閲�");
+        showToast("璇疯緭鍏ユ�绘暟閲�");
+        return;
+      }
+      if (!form.value.qualifiedQuantity && form.value.qualifiedQuantity !== 0) {
+        showToast("璇疯緭鍏ュ悎鏍兼暟閲�");
+        return;
+      }
+      if (!form.value.unqualifiedQuantity && form.value.unqualifiedQuantity !== 0) {
+        showToast("璇疯緭鍏ヤ笉鍚堟牸鏁伴噺");
         return;
       }
       if (!form.value.productId) {
@@ -696,11 +683,6 @@
         showToast("璇烽�夋嫨鎸囨爣");
         return;
       }
-      if (!form.value.checkResult) {
-        showToast("璇烽�夋嫨妫�娴嬬粨鏋�");
-        return;
-      }
-
       loading.value = true;
 
       form.value.inspectType = 2;
@@ -712,6 +694,8 @@
 
       const data = { ...form.value, qualityInspectParams: tableData.value };
       data.quantity = Number(data.quantity);
+      data.qualifiedQuantity = Number(data.qualifiedQuantity);
+      data.unqualifiedQuantity = Number(data.unqualifiedQuantity);
       if (isEdit.value) {
         const res = await qualityInspectUpdate(data);
         showToast("淇濆瓨鎴愬姛");
@@ -751,7 +735,8 @@
         unit: "",
         quantity: "",
         checkCompany: "",
-        checkResult: "",
+        qualifiedQuantity: "",
+        unqualifiedQuantity: "",
         productMainId: null,
         purchaseLedgerId: null,
       };
@@ -773,7 +758,8 @@
         unit: "kg",
         quantity: 1000,
         checkCompany: "绗笁鏂规娴嬫満鏋�",
-        checkResult: "鍚堟牸",
+        qualifiedQuantity: 0,
+        unqualifiedQuantity: 0,
         productMainId: null,
         purchaseLedgerId: null,
       };
@@ -852,8 +838,9 @@
         testStandardId: "",
         unit: "",
         quantity: "",
+        qualifiedQuantity: "",
+        unqualifiedQuantity: "",
         checkCompany: "",
-        checkResult: "",
         productMainId: null,
         purchaseLedgerId: null,
       };
diff --git a/src/pages/qualityManagement/finalInspection/detail.vue b/src/pages/qualityManagement/finalInspection/detail.vue
index d274a28..316d2fd 100644
--- a/src/pages/qualityManagement/finalInspection/detail.vue
+++ b/src/pages/qualityManagement/finalInspection/detail.vue
@@ -15,11 +15,11 @@
           </view>
           <text class="header-title">{{ detailData.productName || '-' }}</text>
           <view class="status-tags">
-            <u-tag v-if="detailData.checkResult"
-                   :type="getTagType(detailData.checkResult)"
+            <u-tag v-if="detailData.passRate != null && detailData.passRate !== ''"
+                   type="primary"
                    size="small"
                    class="status-tag">
-              {{ detailData.checkResult || '-' }}
+              鍚堟牸鐜� {{ formatPassRate(detailData.passRate) }}
             </u-tag>
             <u-tag :type="getStateTagType(detailData.inspectState)"
                    size="small"
@@ -59,8 +59,20 @@
             <text class="detail-value">{{ detailData.unit || '-' }}</text>
           </view>
           <view class="detail-row">
-            <text class="detail-label">鏁伴噺</text>
-            <text class="detail-value">{{ detailData.quantity || 0 }}</text>
+            <text class="detail-label">鎬绘暟閲�</text>
+            <text class="detail-value">{{ detailData.quantity ?? 0 }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍚堟牸鏁伴噺</text>
+            <text class="detail-value">{{ detailData.qualifiedQuantity ?? 0 }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">涓嶅悎鏍兼暟閲�</text>
+            <text class="detail-value">{{ detailData.unqualifiedQuantity ?? 0 }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍚堟牸鐜�</text>
+            <text class="detail-value">{{ formatPassRate(detailData.passRate) }}</text>
           </view>
           <view class="detail-row">
             <text class="detail-label">妫�娴嬪崟浣�</text>
@@ -162,15 +174,12 @@
   };
 
   // 鑾峰彇鏍囩绫诲瀷
-  const getTagType = result => {
-    switch (result) {
-      case "鍚堟牸":
-        return "success";
-      case "涓嶅悎鏍�":
-        return "error";
-      default:
-        return "info";
-    }
+  const formatPassRate = rate => {
+    if (rate === null || rate === undefined || rate === "") return "-";
+    const num = Number(rate);
+    if (isNaN(num)) return rate;
+    if (num <= 1) return `${(num * 100).toFixed(2)}%`;
+    return `${num}%`;
   };
 
   // 鑾峰彇鐘舵�佹爣绛剧被鍨�
diff --git a/src/pages/qualityManagement/finalInspection/index.vue b/src/pages/qualityManagement/finalInspection/index.vue
index 0e860ff..7eebf01 100644
--- a/src/pages/qualityManagement/finalInspection/index.vue
+++ b/src/pages/qualityManagement/finalInspection/index.vue
@@ -76,11 +76,11 @@
               </view>
             </view>
             <view class="status-tags">
-              <u-tag v-if="item.checkResult"
-                     :type="getTagType(item.checkResult)"
+              <u-tag v-if="item.passRate != null && item.passRate !== ''"
+                     type="primary"
                      size="mini"
                      class="status-tag">
-                {{ item.checkResult }}
+                鍚堟牸鐜� {{ formatPassRate(item.passRate) }}
               </u-tag>
               <u-tag :type="getStateTagType(item.inspectState)"
                      size="mini"
@@ -316,11 +316,13 @@
     return inspectState ? "checkmark-circle" : "time";
   };
 
-  // 鑾峰彇鏍囩绫诲瀷
-  const getTagType = checkResult => {
-    if (checkResult === "鍚堟牸") return "success";
-    if (checkResult === "涓嶅悎鏍�") return "error";
-    return "default";
+  // 鏍煎紡鍖栧悎鏍肩巼
+  const formatPassRate = rate => {
+    if (rate === null || rate === undefined || rate === "") return "-";
+    const num = Number(rate);
+    if (isNaN(num)) return rate;
+    if (num <= 1) return `${(num * 100).toFixed(2)}%`;
+    return `${num}%`;
   };
 
   // 鑾峰彇鐘舵�佹爣绛剧被鍨�
@@ -383,9 +385,11 @@
         pendingCount.value = inspectionList.value.filter(
           item => !item.inspectState
         ).length;
-        qualifiedCount.value = inspectionList.value.filter(
-          item => item.checkResult === "鍚堟牸"
-        ).length;
+        qualifiedCount.value = inspectionList.value.filter(item => {
+          const rate = Number(item.passRate);
+          if (isNaN(rate)) return false;
+          return rate <= 1 ? rate >= 1 : rate >= 100;
+        }).length;
       })
       .catch(err => {
         tableLoading.value = false;
diff --git a/src/pages/qualityManagement/materialInspection/add.vue b/src/pages/qualityManagement/materialInspection/add.vue
index e04391f..fec83fd 100644
--- a/src/pages/qualityManagement/materialInspection/add.vue
+++ b/src/pages/qualityManagement/materialInspection/add.vue
@@ -68,14 +68,32 @@
                   placeholder="璇疯緭鍏ュ崟浣�"
                   disabled />
       </up-form-item>
-      <up-form-item label="鏁伴噺"
+      <up-form-item label="鎬绘暟閲�"
                     prop="quantity"
                     required
                     border-bottom>
         <up-input v-model="form.quantity"
                   type="number"
-                  placeholder="璇疯緭鍏ユ暟閲�"
+                  placeholder="璇疯緭鍏ユ�绘暟閲�"
                   :disabled="supplierQuantityDisabled" />
+      </up-form-item>
+      <up-form-item label="鍚堟牸鏁伴噺"
+                    prop="qualifiedQuantity"
+                    required
+                    border-bottom>
+        <up-input v-model="form.qualifiedQuantity"
+                  type="number"
+                  placeholder="璇疯緭鍏ュ悎鏍兼暟閲�"
+                  clearable />
+      </up-form-item>
+      <up-form-item label="涓嶅悎鏍兼暟閲�"
+                    prop="unqualifiedQuantity"
+                    required
+                    border-bottom>
+        <up-input v-model="form.unqualifiedQuantity"
+                  type="number"
+                  placeholder="璇疯緭鍏ヤ笉鍚堟牸鏁伴噺"
+                  clearable />
       </up-form-item>
       <up-form-item label="妫�娴嬪崟浣�"
                     prop="checkCompany"
@@ -83,19 +101,6 @@
         <up-input v-model="form.checkCompany"
                   placeholder="璇疯緭鍏ユ娴嬪崟浣�"
                   clearable />
-      </up-form-item>
-      <up-form-item label="妫�娴嬬粨鏋�"
-                    prop="checkResult"
-                    required
-                    border-bottom>
-        <up-input v-model="form.checkResult"
-                  placeholder="璇烽�夋嫨妫�娴嬬粨鏋�"
-                  readonly
-                  @click="showResultSheet" />
-        <template #right>
-          <up-icon @click="showResultSheet = true"
-                   name="arrow-right" />
-        </template>
       </up-form-item>
       <up-form-item label="妫�楠屽憳"
                     prop="checkName"
@@ -220,12 +225,6 @@
                      @select="selectModel"
                      @close="showModelSheet = false"
                      title="閫夋嫨瑙勬牸鍨嬪彿" />
-    <!-- 妫�娴嬬粨鏋滈�夋嫨 -->
-    <up-action-sheet :show="showResultSheet"
-                     :actions="resultSheetOptions"
-                     @select="selectResult"
-                     @close="showResultSheet = false"
-                     title="閫夋嫨妫�娴嬬粨鏋�" />
     <!-- 妫�楠屽憳閫夋嫨 -->
     <up-action-sheet :show="showInspectorSheet"
                      :actions="userSheetOptions"
@@ -352,8 +351,6 @@
   const showProductTree = ref(false);
   // 瑙勬牸鍨嬪彿閫夋嫨
   const showModelSheet = ref(false);
-  // 妫�娴嬬粨鏋滈�夋嫨
-  const showResultSheet = ref(false);
   // 妫�楠屽憳閫夋嫨
   const showInspectorSheet = ref(false);
   // 鎸囨爣閫夋嫨
@@ -371,8 +368,9 @@
     testStandardId: "",
     unit: "",
     quantity: "",
+    qualifiedQuantity: "",
+    unqualifiedQuantity: "",
     checkCompany: "",
-    checkResult: "",
     productMainId: null,
     purchaseLedgerId: null,
   });
@@ -392,11 +390,6 @@
   const modelOptions = ref([]);
   // 妫�楠屽憳鍒楄〃
   const userList = ref([]);
-  // 妫�娴嬬粨鏋滈�夐」
-  const resultOptions = ref([
-    { label: "鍚堟牸", value: "鍚堟牸" },
-    { label: "涓嶅悎鏍�", value: "涓嶅悎鏍�" },
-  ]);
   // 鎸囨爣閫夐」
   const testStandardOptions = ref([]);
   // 褰撳墠浜у搧ID
@@ -421,13 +414,6 @@
     return modelOptions.value.map(item => ({
       name: item.model,
       value: item.id,
-    }));
-  });
-
-  const resultSheetOptions = computed(() => {
-    return resultOptions.value.map(item => ({
-      name: item.label,
-      value: item.value,
     }));
   });
 
@@ -459,10 +445,9 @@
     ],
     unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
     quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    qualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    unqualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    checkResult: [
-      { required: true, message: "璇烽�夋嫨妫�娴嬬粨鏋�", trigger: "change" },
-    ],
   };
 
   // 鏄惁涓虹紪杈戞ā寮�
@@ -568,12 +553,6 @@
       modelOptions.value.find(item => item.id == value)?.model || "";
     form.value.unit =
       modelOptions.value.find(item => item.id == value)?.unit || "";
-  };
-
-  // 閫夋嫨妫�娴嬬粨鏋�
-  const selectResult = e => {
-    form.value.checkResult = e.value;
-    showResultSheet.value = false;
   };
 
   // 閫夋嫨妫�楠屽憳
@@ -698,7 +677,15 @@
         return;
       }
       if (!form.value.quantity) {
-        showToast("璇疯緭鍏ユ暟閲�");
+        showToast("璇疯緭鍏ユ�绘暟閲�");
+        return;
+      }
+      if (!form.value.qualifiedQuantity && form.value.qualifiedQuantity !== 0) {
+        showToast("璇疯緭鍏ュ悎鏍兼暟閲�");
+        return;
+      }
+      if (!form.value.unqualifiedQuantity && form.value.unqualifiedQuantity !== 0) {
+        showToast("璇疯緭鍏ヤ笉鍚堟牸鏁伴噺");
         return;
       }
       if (!form.value.productId) {
@@ -709,11 +696,6 @@
         showToast("璇烽�夋嫨鎸囨爣");
         return;
       }
-      if (!form.value.checkResult) {
-        showToast("璇烽�夋嫨妫�娴嬬粨鏋�");
-        return;
-      }
-
       loading.value = true;
 
       form.value.inspectType = 0;
@@ -725,6 +707,8 @@
 
       const data = { ...form.value, qualityInspectParams: tableData.value };
       data.quantity = Number(data.quantity);
+      data.qualifiedQuantity = Number(data.qualifiedQuantity);
+      data.unqualifiedQuantity = Number(data.unqualifiedQuantity);
       if (isEdit.value) {
         const res = await qualityInspectUpdate(data);
         showToast("淇濆瓨鎴愬姛");
@@ -764,7 +748,8 @@
         unit: "",
         quantity: "",
         checkCompany: "",
-        checkResult: "",
+        qualifiedQuantity: "",
+        unqualifiedQuantity: "",
         productMainId: null,
         purchaseLedgerId: null,
       };
@@ -786,7 +771,8 @@
         unit: "kg",
         quantity: 1000,
         checkCompany: "绗笁鏂规娴嬫満鏋�",
-        checkResult: "鍚堟牸",
+        qualifiedQuantity: 0,
+        unqualifiedQuantity: 0,
         productMainId: null,
         purchaseLedgerId: null,
       };
@@ -865,8 +851,9 @@
         testStandardId: "",
         unit: "",
         quantity: "",
+        qualifiedQuantity: "",
+        unqualifiedQuantity: "",
         checkCompany: "",
-        checkResult: "",
         productMainId: null,
         purchaseLedgerId: null,
       };
diff --git a/src/pages/qualityManagement/materialInspection/detail.vue b/src/pages/qualityManagement/materialInspection/detail.vue
index 12ff7a3..8ae3970 100644
--- a/src/pages/qualityManagement/materialInspection/detail.vue
+++ b/src/pages/qualityManagement/materialInspection/detail.vue
@@ -15,11 +15,11 @@
           </view>
           <text class="header-title">{{ detailData.productName || '-' }}</text>
           <view class="status-tags">
-            <u-tag v-if="detailData.checkResult"
-                   :type="getTagType(detailData.checkResult)"
+            <u-tag v-if="detailData.passRate != null && detailData.passRate !== ''"
+                   type="primary"
                    size="small"
                    class="status-tag">
-              {{ detailData.checkResult || '-' }}
+              鍚堟牸鐜� {{ formatPassRate(detailData.passRate) }}
             </u-tag>
             <u-tag :type="getStateTagType(detailData.inspectState)"
                    size="small"
@@ -59,8 +59,20 @@
             <text class="detail-value">{{ detailData.unit || '-' }}</text>
           </view>
           <view class="detail-row">
-            <text class="detail-label">鏁伴噺</text>
-            <text class="detail-value">{{ detailData.quantity || 0 }}</text>
+            <text class="detail-label">鎬绘暟閲�</text>
+            <text class="detail-value">{{ detailData.quantity ?? 0 }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍚堟牸鏁伴噺</text>
+            <text class="detail-value">{{ detailData.qualifiedQuantity ?? 0 }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">涓嶅悎鏍兼暟閲�</text>
+            <text class="detail-value">{{ detailData.unqualifiedQuantity ?? 0 }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍚堟牸鐜�</text>
+            <text class="detail-value">{{ formatPassRate(detailData.passRate) }}</text>
           </view>
           <view class="detail-row">
             <text class="detail-label">妫�娴嬪崟浣�</text>
@@ -161,16 +173,13 @@
     return dayjs(date).format("YYYY-MM-DD");
   };
 
-  // 鑾峰彇鏍囩绫诲瀷
-  const getTagType = result => {
-    switch (result) {
-      case "鍚堟牸":
-        return "success";
-      case "涓嶅悎鏍�":
-        return "error";
-      default:
-        return "info";
-    }
+  // 鏍煎紡鍖栧悎鏍肩巼
+  const formatPassRate = rate => {
+    if (rate === null || rate === undefined || rate === "") return "-";
+    const num = Number(rate);
+    if (isNaN(num)) return rate;
+    if (num <= 1) return `${(num * 100).toFixed(2)}%`;
+    return `${num}%`;
   };
 
   // 鑾峰彇鐘舵�佹爣绛剧被鍨�
diff --git a/src/pages/qualityManagement/materialInspection/index.vue b/src/pages/qualityManagement/materialInspection/index.vue
index eb4a140..571e68f 100644
--- a/src/pages/qualityManagement/materialInspection/index.vue
+++ b/src/pages/qualityManagement/materialInspection/index.vue
@@ -76,11 +76,11 @@
               </view>
             </view>
             <view class="status-tags">
-              <u-tag v-if="item.checkResult"
-                     :type="getTagType(item.checkResult)"
+              <u-tag v-if="item.passRate != null && item.passRate !== ''"
+                     type="primary"
                      size="mini"
                      class="status-tag">
-                {{ item.checkResult }}
+                鍚堟牸鐜� {{ formatPassRate(item.passRate) }}
               </u-tag>
               <u-tag :type="getStateTagType(item.inspectState)"
                      size="mini"
@@ -316,11 +316,13 @@
     return inspectState ? "checkmark-circle" : "time";
   };
 
-  // 鑾峰彇鏍囩绫诲瀷
-  const getTagType = checkResult => {
-    if (checkResult === "鍚堟牸") return "success";
-    if (checkResult === "涓嶅悎鏍�") return "error";
-    return "default";
+  // 鏍煎紡鍖栧悎鏍肩巼
+  const formatPassRate = rate => {
+    if (rate === null || rate === undefined || rate === "") return "-";
+    const num = Number(rate);
+    if (isNaN(num)) return rate;
+    if (num <= 1) return `${(num * 100).toFixed(2)}%`;
+    return `${num}%`;
   };
 
   // 鑾峰彇鐘舵�佹爣绛剧被鍨�
@@ -383,9 +385,11 @@
         pendingCount.value = inspectionList.value.filter(
           item => !item.inspectState
         ).length;
-        qualifiedCount.value = inspectionList.value.filter(
-          item => item.checkResult === "鍚堟牸"
-        ).length;
+        qualifiedCount.value = inspectionList.value.filter(item => {
+          const rate = Number(item.passRate);
+          if (isNaN(rate)) return false;
+          return rate <= 1 ? rate >= 1 : rate >= 100;
+        }).length;
       })
       .catch(err => {
         tableLoading.value = false;
diff --git a/src/pages/qualityManagement/processInspection/add.vue b/src/pages/qualityManagement/processInspection/add.vue
index 2f6a6d0..f546fcb 100644
--- a/src/pages/qualityManagement/processInspection/add.vue
+++ b/src/pages/qualityManagement/processInspection/add.vue
@@ -68,14 +68,32 @@
                   placeholder="璇疯緭鍏ュ崟浣�"
                   disabled />
       </up-form-item>
-      <up-form-item label="鏁伴噺"
+      <up-form-item label="鎬绘暟閲�"
                     prop="quantity"
                     required
                     border-bottom>
         <up-input v-model="form.quantity"
                   type="number"
-                  placeholder="璇疯緭鍏ユ暟閲�"
+                  placeholder="璇疯緭鍏ユ�绘暟閲�"
                   :disabled="processQuantityDisabled" />
+      </up-form-item>
+      <up-form-item label="鍚堟牸鏁伴噺"
+                    prop="qualifiedQuantity"
+                    required
+                    border-bottom>
+        <up-input v-model="form.qualifiedQuantity"
+                  type="number"
+                  placeholder="璇疯緭鍏ュ悎鏍兼暟閲�"
+                  clearable />
+      </up-form-item>
+      <up-form-item label="涓嶅悎鏍兼暟閲�"
+                    prop="unqualifiedQuantity"
+                    required
+                    border-bottom>
+        <up-input v-model="form.unqualifiedQuantity"
+                  type="number"
+                  placeholder="璇疯緭鍏ヤ笉鍚堟牸鏁伴噺"
+                  clearable />
       </up-form-item>
       <up-form-item label="妫�娴嬪崟浣�"
                     prop="checkCompany"
@@ -83,19 +101,6 @@
         <up-input v-model="form.checkCompany"
                   placeholder="璇疯緭鍏ユ娴嬪崟浣�"
                   clearable />
-      </up-form-item>
-      <up-form-item label="妫�娴嬬粨鏋�"
-                    prop="checkResult"
-                    required
-                    border-bottom>
-        <up-input v-model="form.checkResult"
-                  placeholder="璇烽�夋嫨妫�娴嬬粨鏋�"
-                  readonly
-                  @click="showResultSheet" />
-        <template #right>
-          <up-icon @click="showResultSheet = true"
-                   name="arrow-right" />
-        </template>
       </up-form-item>
       <up-form-item label="妫�楠屽憳"
                     prop="checkName"
@@ -212,12 +217,6 @@
                      @select="selectModel"
                      @close="showModelSheet = false"
                      title="閫夋嫨瑙勬牸鍨嬪彿" />
-    <!-- 妫�娴嬬粨鏋滈�夋嫨 -->
-    <up-action-sheet :show="showResultSheet"
-                     :actions="resultSheetOptions"
-                     @select="selectResult"
-                     @close="showResultSheet = false"
-                     title="閫夋嫨妫�娴嬬粨鏋�" />
     <!-- 妫�楠屽憳閫夋嫨 -->
     <up-action-sheet :show="showInspectorSheet"
                      :actions="userSheetOptions"
@@ -344,8 +343,6 @@
   const showProductTree = ref(false);
   // 瑙勬牸鍨嬪彿閫夋嫨
   const showModelSheet = ref(false);
-  // 妫�娴嬬粨鏋滈�夋嫨
-  const showResultSheet = ref(false);
   // 妫�楠屽憳閫夋嫨
   const showInspectorSheet = ref(false);
   // 鎸囨爣閫夋嫨
@@ -363,8 +360,9 @@
     testStandardId: "",
     unit: "",
     quantity: "",
+    qualifiedQuantity: "",
+    unqualifiedQuantity: "",
     checkCompany: "",
-    checkResult: "",
     productMainId: null,
     purchaseLedgerId: null,
   });
@@ -384,11 +382,6 @@
   const modelOptions = ref([]);
   // 妫�楠屽憳鍒楄〃
   const userList = ref([]);
-  // 妫�娴嬬粨鏋滈�夐」
-  const resultOptions = ref([
-    { label: "鍚堟牸", value: "鍚堟牸" },
-    { label: "涓嶅悎鏍�", value: "涓嶅悎鏍�" },
-  ]);
   // 鎸囨爣閫夐」
   const testStandardOptions = ref([]);
   // 褰撳墠浜у搧ID
@@ -413,13 +406,6 @@
     return modelOptions.value.map(item => ({
       name: item.model,
       value: item.id,
-    }));
-  });
-
-  const resultSheetOptions = computed(() => {
-    return resultOptions.value.map(item => ({
-      name: item.label,
-      value: item.value,
     }));
   });
 
@@ -451,10 +437,9 @@
     ],
     unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
     quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    qualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+    unqualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
     checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
-    checkResult: [
-      { required: true, message: "璇烽�夋嫨妫�娴嬬粨鏋�", trigger: "change" },
-    ],
   };
 
   // 鏄惁涓虹紪杈戞ā寮�
@@ -559,12 +544,6 @@
       modelOptions.value.find(item => item.id == value)?.model || "";
     form.value.unit =
       modelOptions.value.find(item => item.id == value)?.unit || "";
-  };
-
-  // 閫夋嫨妫�娴嬬粨鏋�
-  const selectResult = e => {
-    form.value.checkResult = e.value;
-    showResultSheet.value = false;
   };
 
   // 閫夋嫨妫�楠屽憳
@@ -689,7 +668,15 @@
         return;
       }
       if (!form.value.quantity) {
-        showToast("璇疯緭鍏ユ暟閲�");
+        showToast("璇疯緭鍏ユ�绘暟閲�");
+        return;
+      }
+      if (!form.value.qualifiedQuantity && form.value.qualifiedQuantity !== 0) {
+        showToast("璇疯緭鍏ュ悎鏍兼暟閲�");
+        return;
+      }
+      if (!form.value.unqualifiedQuantity && form.value.unqualifiedQuantity !== 0) {
+        showToast("璇疯緭鍏ヤ笉鍚堟牸鏁伴噺");
         return;
       }
       if (!form.value.productId) {
@@ -700,11 +687,6 @@
         showToast("璇烽�夋嫨鎸囨爣");
         return;
       }
-      if (!form.value.checkResult) {
-        showToast("璇烽�夋嫨妫�娴嬬粨鏋�");
-        return;
-      }
-
       loading.value = true;
 
       form.value.inspectType = 1;
@@ -716,6 +698,8 @@
 
       const data = { ...form.value, qualityInspectParams: tableData.value };
       data.quantity = Number(data.quantity);
+      data.qualifiedQuantity = Number(data.qualifiedQuantity);
+      data.unqualifiedQuantity = Number(data.unqualifiedQuantity);
       if (isEdit.value) {
         const res = await qualityInspectUpdate(data);
         showToast("淇濆瓨鎴愬姛");
@@ -755,7 +739,8 @@
         unit: "",
         quantity: "",
         checkCompany: "",
-        checkResult: "",
+        qualifiedQuantity: "",
+        unqualifiedQuantity: "",
         productMainId: null,
         purchaseLedgerId: null,
       };
@@ -777,7 +762,8 @@
         unit: "kg",
         quantity: 1000,
         checkCompany: "绗笁鏂规娴嬫満鏋�",
-        checkResult: "鍚堟牸",
+        qualifiedQuantity: 0,
+        unqualifiedQuantity: 0,
         productMainId: null,
         purchaseLedgerId: null,
       };
@@ -856,8 +842,9 @@
         testStandardId: "",
         unit: "",
         quantity: "",
+        qualifiedQuantity: "",
+        unqualifiedQuantity: "",
         checkCompany: "",
-        checkResult: "",
         productMainId: null,
         purchaseLedgerId: null,
       };
diff --git a/src/pages/qualityManagement/processInspection/detail.vue b/src/pages/qualityManagement/processInspection/detail.vue
index 798aeee..ee368e4 100644
--- a/src/pages/qualityManagement/processInspection/detail.vue
+++ b/src/pages/qualityManagement/processInspection/detail.vue
@@ -15,11 +15,11 @@
           </view>
           <text class="header-title">{{ detailData.productName || '-' }}</text>
           <view class="status-tags">
-            <u-tag v-if="detailData.checkResult"
-                   :type="getTagType(detailData.checkResult)"
+            <u-tag v-if="detailData.passRate != null && detailData.passRate !== ''"
+                   type="primary"
                    size="small"
                    class="status-tag">
-              {{ detailData.checkResult }}
+              鍚堟牸鐜� {{ formatPassRate(detailData.passRate) }}
             </u-tag>
             <u-tag :type="getStateTagType(detailData.inspectState)"
                    size="small"
@@ -59,8 +59,20 @@
             <text class="detail-value">{{ detailData.unit || '-' }}</text>
           </view>
           <view class="detail-row">
-            <text class="detail-label">鏁伴噺</text>
-            <text class="detail-value">{{ detailData.quantity || 0 }}</text>
+            <text class="detail-label">鎬绘暟閲�</text>
+            <text class="detail-value">{{ detailData.quantity ?? 0 }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍚堟牸鏁伴噺</text>
+            <text class="detail-value">{{ detailData.qualifiedQuantity ?? 0 }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">涓嶅悎鏍兼暟閲�</text>
+            <text class="detail-value">{{ detailData.unqualifiedQuantity ?? 0 }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍚堟牸鐜�</text>
+            <text class="detail-value">{{ formatPassRate(detailData.passRate) }}</text>
           </view>
           <view class="detail-row">
             <text class="detail-label">妫�娴嬪崟浣�</text>
@@ -162,15 +174,12 @@
   };
 
   // 鑾峰彇鏍囩绫诲瀷
-  const getTagType = result => {
-    switch (result) {
-      case "鍚堟牸":
-        return "success";
-      case "涓嶅悎鏍�":
-        return "error";
-      default:
-        return "info";
-    }
+  const formatPassRate = rate => {
+    if (rate === null || rate === undefined || rate === "") return "-";
+    const num = Number(rate);
+    if (isNaN(num)) return rate;
+    if (num <= 1) return `${(num * 100).toFixed(2)}%`;
+    return `${num}%`;
   };
 
   // 鑾峰彇鐘舵�佹爣绛剧被鍨�
diff --git a/src/pages/qualityManagement/processInspection/index.vue b/src/pages/qualityManagement/processInspection/index.vue
index 40358ef..8f0d064 100644
--- a/src/pages/qualityManagement/processInspection/index.vue
+++ b/src/pages/qualityManagement/processInspection/index.vue
@@ -76,11 +76,11 @@
               </view>
             </view>
             <view class="status-tags">
-              <u-tag v-if="item.checkResult"
-                     :type="getTagType(item.checkResult)"
+              <u-tag v-if="item.passRate != null && item.passRate !== ''"
+                     type="primary"
                      size="mini"
                      class="status-tag">
-                {{ item.checkResult }}
+                鍚堟牸鐜� {{ formatPassRate(item.passRate) }}
               </u-tag>
               <u-tag :type="getStateTagType(item.inspectState)"
                      size="mini"
@@ -316,11 +316,13 @@
     return inspectState ? "checkmark-circle" : "time";
   };
 
-  // 鑾峰彇鏍囩绫诲瀷
-  const getTagType = checkResult => {
-    if (checkResult === "鍚堟牸") return "success";
-    if (checkResult === "涓嶅悎鏍�") return "error";
-    return "default";
+  // 鏍煎紡鍖栧悎鏍肩巼
+  const formatPassRate = rate => {
+    if (rate === null || rate === undefined || rate === "") return "-";
+    const num = Number(rate);
+    if (isNaN(num)) return rate;
+    if (num <= 1) return `${(num * 100).toFixed(2)}%`;
+    return `${num}%`;
   };
 
   // 鑾峰彇鐘舵�佹爣绛剧被鍨�
@@ -383,9 +385,11 @@
         pendingCount.value = inspectionList.value.filter(
           item => !item.inspectState
         ).length;
-        qualifiedCount.value = inspectionList.value.filter(
-          item => item.checkResult === "鍚堟牸"
-        ).length;
+        qualifiedCount.value = inspectionList.value.filter(item => {
+          const rate = Number(item.passRate);
+          if (isNaN(rate)) return false;
+          return rate <= 1 ? rate >= 1 : rate >= 100;
+        }).length;
       })
       .catch(err => {
         tableLoading.value = false;

--
Gitblit v1.9.3