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