From 2dd434830299e781cd942ef5e6e938160dd12704 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期二, 03 三月 2026 17:15:18 +0800
Subject: [PATCH] 原材料检验功能开发

---
 src/pages/qualityManagement/materialInspection/detail.vue |  526 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 526 insertions(+), 0 deletions(-)

diff --git a/src/pages/qualityManagement/materialInspection/detail.vue b/src/pages/qualityManagement/materialInspection/detail.vue
new file mode 100644
index 0000000..7bd3443
--- /dev/null
+++ b/src/pages/qualityManagement/materialInspection/detail.vue
@@ -0,0 +1,526 @@
+<template>
+  <view class="material-inspection-detail">
+    <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
+    <PageHeader title="鍘熸潗鏂欐楠岃鎯�"
+                @back="goBack" />
+    <!-- 璇︽儏鍐呭 -->
+    <view class="detail-section"
+          v-if="detailData">
+      <view class="detail-card">
+        <view class="card-header">
+          <view class="header-icon">
+            <up-icon name="file-text"
+                     size="20"
+                     color="#ffffff"></up-icon>
+          </view>
+          <text class="header-title">{{ detailData.productName || '-' }}</text>
+          <view class="status-tags">
+            <u-tag :type="getTagType(detailData.checkResult)"
+                   size="small"
+                   class="status-tag">
+              {{ detailData.checkResult || '-' }}
+            </u-tag>
+            <u-tag :type="getStateTagType(detailData.inspectState)"
+                   size="small"
+                   class="status-tag">
+              {{ detailData.inspectState ? '宸叉彁浜�' : '鏈彁浜�' }}
+            </u-tag>
+          </view>
+        </view>
+        <up-divider></up-divider>
+        <view class="detail-content">
+          <view class="detail-row">
+            <text class="detail-label">妫�娴嬫棩鏈�</text>
+            <text class="detail-value">{{ formatDateTime(detailData.checkTime) || '-' }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">閲囪喘璁㈠崟鍙�</text>
+            <text class="detail-value">{{ detailData.purchaseContractNo || '-' }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">渚涘簲鍟�</text>
+            <text class="detail-value">{{ detailData.supplier || '-' }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">妫�楠屽憳</text>
+            <text class="detail-value">{{ detailData.checkName || '-' }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">浜у搧鍚嶇О</text>
+            <text class="detail-value">{{ detailData.productName || '-' }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">瑙勬牸鍨嬪彿</text>
+            <text class="detail-value">{{ detailData.model || '-' }}</text>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">鍗曚綅</text>
+            <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>
+          </view>
+          <view class="detail-row">
+            <text class="detail-label">妫�娴嬪崟浣�</text>
+            <text class="detail-value">{{ detailData.checkCompany || '-' }}</text>
+          </view>
+          <!-- <view class="detail-row">
+            <text class="detail-label">妫�楠屾爣鍑�</text>
+            <text class="detail-value">{{ detailData.testStandardName || '-' }}</text>
+          </view> -->
+        </view>
+      </view>
+      <!-- 妫�楠岄」鐩� -->
+      <view class="detail-card"
+            v-if="inspectionItems.length > 0">
+        <view class="card-header">
+          <view class="header-icon secondary">
+            <up-icon name="list"
+                     size="20"
+                     color="#ffffff"></up-icon>
+          </view>
+          <text class="header-title">妫�楠岄」鐩�</text>
+        </view>
+        <up-divider></up-divider>
+        <view class="inspection-items">
+          <view v-for="(item, index) in inspectionItems"
+                :key="index"
+                class="inspection-item">
+            <text class="item-name">{{ item.parameterItem || '妫�楠岄」鐩�' }}</text>
+            <view class="item-details">
+              <view class="item-detail-row">
+                <text class="item-detail-label">鍗曚綅:</text>
+                <text class="item-detail-value">{{ item.unit || '-' }}</text>
+              </view>
+              <view class="item-detail-row">
+                <text class="item-detail-label">鏍囧噯鍊�:</text>
+                <text class="item-detail-value">{{ item.standardValue || '-' }}</text>
+              </view>
+              <view class="item-detail-row">
+                <text class="item-detail-label">鍐呮帶鍊�:</text>
+                <text class="item-detail-value">{{ item.controlValue || '-' }}</text>
+              </view>
+              <view class="item-detail-row">
+                <text class="item-detail-label">妫�楠屽��:</text>
+                <text class="item-detail-value result"
+                      :class="getResultClass(item.testValue, item.standardValue)">
+                  {{ item.testValue || '-' }}
+                </text>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+      <!-- 鎿嶄綔鎸夐挳 -->
+      <!-- <view class="action-buttons">
+        <u-button type="primary"
+                  class="action-btn"
+                  @click="downloadReport">
+          涓嬭浇鎶ュ憡
+        </u-button>
+      </view> -->
+    </view>
+    <view v-else
+          class="no-data">
+      <up-empty mode="data"
+                text="鏆傛棤妫�楠岃鎯�"></up-empty>
+    </view>
+  </view>
+</template>
+
+<script setup>
+  import { ref, onMounted } from "vue";
+  import { onShow } from "@dcloudio/uni-app";
+  import PageHeader from "@/components/PageHeader.vue";
+  import dayjs from "dayjs";
+  import { qualityInspectParamInfo } from "@/api/qualityManagement/materialInspection.js";
+
+  // 鏄剧ず鎻愮ず淇℃伅
+  const showToast = message => {
+    uni.showToast({
+      title: message,
+      icon: "none",
+    });
+  };
+
+  // 璇︽儏鏁版嵁
+  const detailData = ref(null);
+  // 妫�楠岄」鐩�
+  const inspectionItems = ref([]);
+
+  // 杩斿洖涓婁竴椤�
+  const goBack = () => {
+    uni.navigateBack();
+  };
+
+  // 鏍煎紡鍖栨棩鏈熸椂闂�
+  const formatDateTime = date => {
+    if (!date) return "";
+    return dayjs(date).format("YYYY-MM-DD");
+  };
+
+  // 鑾峰彇鏍囩绫诲瀷
+  const getTagType = result => {
+    switch (result) {
+      case "鍚堟牸":
+        return "success";
+      case "涓嶅悎鏍�":
+        return "error";
+      default:
+        return "info";
+    }
+  };
+
+  // 鑾峰彇鐘舵�佹爣绛剧被鍨�
+  const getStateTagType = state => {
+    return state ? "success" : "warning";
+  };
+
+  // 鑾峰彇缁撴灉鏍峰紡
+  const getResultClass = (testValue, standardValue) => {
+    // 绠�鍗曠殑缁撴灉鍒ゆ柇閫昏緫锛屽疄闄呴」鐩腑鍙兘闇�瑕佹洿澶嶆潅鐨勫垽鏂�
+    if (testValue === "鍚堟牸") {
+      return "result-passed";
+    } else if (testValue === "涓嶅悎鏍�") {
+      return "result-rejected";
+    }
+    return "";
+  };
+
+  // 涓嬭浇鎶ュ憡
+  const downloadReport = () => {
+    uni.showToast({
+      title: "鎶ュ憡涓嬭浇涓�...",
+      icon: "loading",
+    });
+
+    // 妯℃嫙涓嬭浇
+    setTimeout(() => {
+      uni.showToast({
+        title: "鎶ュ憡涓嬭浇鎴愬姛",
+        icon: "success",
+      });
+    }, 1500);
+  };
+
+  // 鑾峰彇椤甸潰ID
+  const getPageId = () => {
+    const pages = getCurrentPages();
+    const currentPage = pages[pages.length - 1];
+    return currentPage.options.id;
+  };
+
+  // 鑾峰彇璇︽儏鏁版嵁
+  const getDetail = () => {
+    const id = getPageId();
+    if (!id) {
+      showToast("鍙傛暟閿欒");
+      return;
+    }
+
+    // 浠庢湰鍦板瓨鍌ㄨ幏鍙栬鎯呮暟鎹�
+    try {
+      const detailDataFromStorage = uni.getStorageSync("inspectionEditData");
+      if (detailDataFromStorage) {
+        detailData.value = detailDataFromStorage;
+        // 浣跨敤qualityInspectParamInfo鑾峰彇妫�楠岄」鐩�
+        qualityInspectParamInfo(id)
+          .then(res => {
+            if (res.data && res.data.length > 0) {
+              inspectionItems.value = res.data;
+            } else if (
+              detailDataFromStorage.qualityInspectParams &&
+              detailDataFromStorage.qualityInspectParams.length > 0
+            ) {
+              // 濡傛灉鎺ュ彛娌℃湁杩斿洖鏁版嵁锛屼娇鐢ㄦ湰鍦板瓨鍌ㄤ腑鐨勬暟鎹�
+              inspectionItems.value = detailDataFromStorage.qualityInspectParams;
+            } else {
+              // 妯℃嫙妫�楠岄」鐩�
+              inspectionItems.value = [
+                {
+                  parameterItem: "鍘氬害",
+                  unit: "mm",
+                  standardValue: "2.0 卤 0.1",
+                  controlValue: "2.0 卤 0.05",
+                  testValue: "2.05",
+                },
+                {
+                  parameterItem: "纭害",
+                  unit: "HB",
+                  standardValue: "鈮� 200",
+                  controlValue: "鈮� 210",
+                  testValue: "220",
+                },
+                {
+                  parameterItem: "琛ㄩ潰璐ㄩ噺",
+                  unit: "",
+                  standardValue: "鏃犲垝鐥曘�佹棤閿堣殌",
+                  controlValue: "鏃犲垝鐥曘�佹棤閿堣殌",
+                  testValue: "鍚堟牸",
+                },
+              ];
+            }
+          })
+          .catch(error => {
+            console.error("鑾峰彇妫�楠岄」鐩け璐�:", error);
+            // 鎺ュ彛璋冪敤澶辫触鏃讹紝浣跨敤鏈湴瀛樺偍涓殑鏁版嵁鎴栨ā鎷熸暟鎹�
+            if (
+              detailDataFromStorage.qualityInspectParams &&
+              detailDataFromStorage.qualityInspectParams.length > 0
+            ) {
+              inspectionItems.value = detailDataFromStorage.qualityInspectParams;
+            }
+          });
+      } else {
+        // 妯℃嫙鏁版嵁
+        detailData.value = {
+          id: id,
+          checkTime: "2026-03-03",
+          purchaseContractNo: "PO20260303001",
+          supplier: "涓婃捣閲戝睘鏉愭枡鏈夐檺鍏徃",
+          checkName: "寮犱笁",
+          productName: "涓嶉攬閽㈡澘鏉�",
+          model: "304",
+          unit: "kg",
+          quantity: 1000,
+          checkCompany: "绗笁鏂规娴嬫満鏋�",
+          checkResult: "鍚堟牸",
+          inspectState: true,
+        };
+
+        // 妯℃嫙妫�楠岄」鐩�
+        inspectionItems.value = [
+          {
+            parameterItem: "鍘氬害",
+            unit: "mm",
+            standardValue: "2.0 卤 0.1",
+            controlValue: "2.0 卤 0.05",
+            testValue: "2.05",
+          },
+          {
+            parameterItem: "纭害",
+            unit: "HB",
+            standardValue: "鈮� 200",
+            controlValue: "鈮� 210",
+            testValue: "220",
+          },
+          {
+            parameterItem: "琛ㄩ潰璐ㄩ噺",
+            unit: "",
+            standardValue: "鏃犲垝鐥曘�佹棤閿堣殌",
+            controlValue: "鏃犲垝鐥曘�佹棤閿堣殌",
+            testValue: "鍚堟牸",
+          },
+        ];
+      }
+    } catch (error) {
+      console.error("鍔犺浇璇︽儏鏁版嵁澶辫触:", error);
+      showToast("鍔犺浇璇︽儏鏁版嵁澶辫触锛岃閲嶈瘯");
+      // 鍔犺浇澶辫触鏃朵娇鐢ㄦā鎷熸暟鎹�
+      detailData.value = {
+        id: id,
+        checkTime: "2026-03-03",
+        purchaseContractNo: "PO20260303001",
+        supplier: "涓婃捣閲戝睘鏉愭枡鏈夐檺鍏徃",
+        checkName: "寮犱笁",
+        productName: "涓嶉攬閽㈡澘鏉�",
+        model: "304",
+        unit: "kg",
+        quantity: 1000,
+        checkCompany: "绗笁鏂规娴嬫満鏋�",
+        checkResult: "鍚堟牸",
+        inspectState: true,
+      };
+
+      inspectionItems.value = [
+        {
+          parameterItem: "鍘氬害",
+          unit: "mm",
+          standardValue: "2.0 卤 0.1",
+          controlValue: "2.0 卤 0.05",
+          testValue: "2.05",
+        },
+        {
+          parameterItem: "纭害",
+          unit: "HB",
+          standardValue: "鈮� 200",
+          controlValue: "鈮� 210",
+          testValue: "220",
+        },
+        {
+          parameterItem: "琛ㄩ潰璐ㄩ噺",
+          unit: "",
+          standardValue: "鏃犲垝鐥曘�佹棤閿堣殌",
+          controlValue: "鏃犲垝鐥曘�佹棤閿堣殌",
+          testValue: "鍚堟牸",
+        },
+      ];
+    }
+  };
+
+  onShow(() => {
+    getDetail();
+  });
+
+  onMounted(() => {
+    getDetail();
+  });
+</script>
+
+<style scoped lang="scss">
+  .material-inspection-detail {
+    min-height: 100vh;
+    background: #f5f5f5;
+    padding-bottom: 20px;
+  }
+
+  .detail-section {
+    padding: 15px;
+  }
+
+  .detail-card {
+    background: #fff;
+    border-radius: 12px;
+    padding: 16px;
+    margin-bottom: 12px;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+  }
+
+  .card-header {
+    display: flex;
+    align-items: center;
+    margin-bottom: 12px;
+  }
+
+  .header-icon {
+    width: 40px;
+    height: 40px;
+    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+    border-radius: 8px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin-right: 12px;
+  }
+
+  .header-icon.secondary {
+    background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
+  }
+
+  .header-icon.tertiary {
+    background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
+  }
+
+  .header-title {
+    flex: 1;
+    font-size: 16px;
+    font-weight: 600;
+    color: #333;
+  }
+
+  .status-tag {
+    margin-left: 20rpx;
+  }
+
+  .detail-content {
+    padding-top: 8px;
+  }
+
+  .detail-row {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 10px 0;
+    border-bottom: 1px solid #f0f0f0;
+  }
+
+  .detail-row:last-child {
+    border-bottom: none;
+  }
+
+  .detail-label {
+    font-size: 14px;
+    color: #666;
+    min-width: 100px;
+  }
+
+  .detail-value {
+    font-size: 14px;
+    color: #333;
+    text-align: right;
+    flex: 1;
+  }
+
+  // 妫�楠岄」鐩�
+  .inspection-items {
+    padding-top: 8px;
+  }
+
+  .inspection-item {
+    padding: 12px;
+    background: #f8f9fa;
+    border-radius: 8px;
+    margin-bottom: 10px;
+  }
+
+  .inspection-item:last-child {
+    margin-bottom: 0;
+  }
+
+  .item-name {
+    display: block;
+    font-size: 14px;
+    font-weight: 500;
+    color: #333;
+    margin-bottom: 8px;
+    padding-bottom: 8px;
+    border-bottom: 1px solid #f0f0f0;
+  }
+
+  .item-details {
+    padding-top: 8px;
+  }
+
+  .item-detail-row {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 6px;
+  }
+
+  .item-detail-row:last-child {
+    margin-bottom: 0;
+  }
+
+  .item-detail-label {
+    font-size: 12px;
+    color: #666;
+    min-width: 60px;
+  }
+
+  .item-detail-value {
+    font-size: 12px;
+    color: #333;
+    text-align: right;
+    flex: 1;
+  }
+
+  .item-detail-value.result {
+    font-weight: 500;
+  }
+
+  .result-passed {
+    color: #67c23a;
+  }
+
+  .result-rejected {
+    color: #f56c6c;
+  }
+
+  // 绌虹姸鎬�
+  .no-data {
+    padding: 60px 20px;
+    text-align: center;
+  }
+</style>

--
Gitblit v1.9.3