From 79871604f3c79e0ee7a15d198ef321b42fe65c24 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期五, 27 三月 2026 17:54:56 +0800
Subject: [PATCH] 追踪进度页面修改
---
src/views/qualityManagement/processInspection/components/detailDialog.vue | 287 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 287 insertions(+), 0 deletions(-)
diff --git a/src/views/qualityManagement/processInspection/components/detailDialog.vue b/src/views/qualityManagement/processInspection/components/detailDialog.vue
new file mode 100644
index 0000000..8f4f159
--- /dev/null
+++ b/src/views/qualityManagement/processInspection/components/detailDialog.vue
@@ -0,0 +1,287 @@
+<template>
+ <div>
+ <el-dialog v-model="dialogVisible"
+ title="妫�楠岃鎯�"
+ width="1000px"
+ @close="closeDialog">
+ <el-card class="detail-card">
+ <template #header>
+ <div class="card-header">
+ <span>鍩烘湰淇℃伅</span>
+ </div>
+ </template>
+ <div class="detail-info">
+ <div class="info-row">
+ <div class="info-item">
+ <span class="info-label">鏃ユ湡锛�</span>
+ <span class="info-value">{{ dayjs(detailData.createTime) .format('YYYY-MM-DD') }}</span>
+ </div>
+ <div class="info-item">
+ <span class="info-label">鐢熶骇璁㈠崟鍙凤細</span>
+ <span class="info-value">{{ detailData.npsNo }}</span>
+ </div>
+ <div class="info-item">
+ <span class="info-label">宸ュ簭锛�</span>
+ <!-- <span class="info-value">{{ detailData.process }}</span> -->
+ <el-tag type="primary">{{ detailData.process }}</el-tag>
+ </div>
+ </div>
+ <div class="info-row">
+ <div class="info-item">
+ <span class="info-label">浜у搧缂栫爜锛�</span>
+ <span class="info-value">{{ detailData.materialCode }}</span>
+ </div>
+ <div class="info-item">
+ <span class="info-label">浜у搧绫诲瀷锛�</span>
+ <!-- <span class="info-value">{{ detailData.strength }}</span> -->
+ <el-tag type="info">{{ detailData.strength }}</el-tag>
+ </div>
+ <div class="info-item">
+ <span class="info-label">浜у搧鍚嶇О锛�</span>
+ <span class="info-value">{{ detailData.productName }}</span>
+ </div>
+ </div>
+ <div class="info-row">
+ <div class="info-item">
+ <span class="info-label">瑙勬牸锛�</span>
+ <span class="info-value">{{ detailData.model }}</span>
+ </div>
+ <div class="info-item">
+ <span class="info-label">鐝锛�</span>
+ <el-tag :type="detailData.schedule === '鐧界彮' ? 'primary' : 'warning'">{{ detailData.schedule }}</el-tag>
+ </div>
+ <div class="info-item">
+ <span class="info-label">宀椾綅浜哄憳锛�</span>
+ <span class="info-value">{{ detailData.postName }}</span>
+ </div>
+ </div>
+ <div class="info-row">
+ <!-- <div class="info-item">
+ <span class="info-label">鎶ュ伐鍗曞彿锛�</span>
+ <span class="info-value">{{ detailData.productionProductRouteItemId }}</span>
+ </div> -->
+ <div class="info-item">
+ <span class="info-label">浜у嚭鏁伴噺锛�</span>
+ <span class="info-value"><span style="font-weight: bold;color: #409eff;">{{ detailData.quantity }}</span> 鏂�</span>
+ </div>
+ <div class="info-item">
+ <span class="info-label">鍚堟牸鏁伴噺锛�</span>
+ <span class="info-value"><span style="font-weight: bold;color: #28e431;">{{ detailData.qualifiedQuantity }}</span> 鏂�</span>
+ </div>
+ <div class="info-item">
+ <span class="info-label">涓嶅悎鏍兼暟閲忥細</span>
+ <span class="info-value"><span style="font-weight: bold;color: #b43434;">{{ detailData.unqualifiedQuantity }}</span> 鏂�</span>
+ </div>
+ </div>
+ <div class="info-row">
+ <div class="info-item">
+ <span class="info-label">鎶ュ伐鍗曞彿锛�</span>
+ <span class="info-value">{{ detailData.productNo }}</span>
+ </div>
+ </div>
+ </div>
+ </el-card>
+ <el-card v-for="group in groupedInspectionData"
+ :key="group.sourceSort"
+ class="detail-card"
+ style="margin-top: 20px;">
+ <template #header>
+ <div class="card-header">
+ <span v-if="groupedInspectionData.length > 1">妫�楠寊hi缁� - {{ group.sourceSort }}</span>
+ <span v-else>妫�楠屾寚鏍�</span>
+ </div>
+ </template>
+ <el-table :data="group.items"
+ style="width: 100%"
+ :row-class-name="rowClassName">
+ <el-table-column prop="paramName"
+ label="鎸囨爣" />
+ <el-table-column prop="unit"
+ label="鍗曚綅"
+ width="100">
+ <template #default="scope">
+ {{ scope.row.unit || "/" }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="standardText"
+ label="鏍囧噯鍊�" />
+ <el-table-column prop="paramValue"
+ label="瀹為檯鍊�" />
+ <el-table-column prop="result"
+ label="缁撴灉"
+ width="100">
+ <template #default="scope">
+ <el-tag :type="scope.row.result === '鍚堟牸' ? 'success' : 'danger'">
+ {{ scope.row.result }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-card>
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button @click="closeDialog">鍏抽棴</el-button>
+ </div>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script setup>
+ import { ref, onMounted } from "vue";
+ import { qualityInspectProcessDetails } from "@/api/qualityManagement/rawMaterialInspection.js";
+ import dayjs from "dayjs";
+
+ const emit = defineEmits(["close"]);
+ const dialogVisible = ref(false);
+ const detailData = ref({});
+ const inspectionData = ref([]);
+ const groupedInspectionData = ref([]);
+ const loading = ref(false);
+
+ const openDialog = row => {
+ dialogVisible.value = true;
+ detailData.value = {
+ ...row,
+ createTime: row.createTime
+ ? dayjs(row.createTime).format("YYYY-MM-DD HH:mm:ss")
+ : "",
+ };
+ getInspectionDetails(row.productionProductRouteItemId);
+ };
+
+ const getInspectionDetails = id => {
+ loading.value = true;
+ qualityInspectProcessDetails({ productionProductRouteItemId: id })
+ .then(res => {
+ const data = res.data || [];
+ // 璁$畻缁撴灉
+ const processedData = data.map(item => {
+ let result = "鍚堟牸";
+ let standardText = "";
+ if (item.valueMode === 1) {
+ // 鍗曞�兼瘮杈�
+ if (item.standardValue !== null) {
+ standardText = item.standardValue;
+ if (item.paramValue !== item.standardValue) {
+ result = "涓嶅悎鏍�";
+ }
+ } else {
+ standardText = "-";
+ result = "鍚堟牸";
+ }
+ } else if (item.valueMode === 2) {
+ // 鍖洪棿姣旇緝
+ if (item.minValue !== null || item.maxValue !== null) {
+ standardText =
+ (item.minValue ? item.minValue : "-鈭�") +
+ "~" +
+ (item.maxValue ? item.maxValue : "+鈭�");
+ if (
+ item.paramValue < item.minValue ||
+ item.paramValue > item.maxValue
+ ) {
+ result = "涓嶅悎鏍�";
+ }
+ } else {
+ standardText = "-";
+ result = "鍚堟牸";
+ }
+ }
+ return {
+ ...item,
+ standardText,
+ result,
+ };
+ });
+
+ // 鎸塻ourceSort鍒嗙粍
+ const grouped = {};
+ processedData.forEach(item => {
+ const key = item.sourceSort || "榛樿";
+ if (!grouped[key]) {
+ grouped[key] = [];
+ }
+ grouped[key].push(item);
+ });
+
+ // 杞崲涓烘暟缁勬牸寮�
+ groupedInspectionData.value = Object.entries(grouped).map(
+ ([key, items]) => ({
+ sourceSort: key,
+ items,
+ })
+ );
+
+ loading.value = false;
+ })
+ .catch(err => {
+ loading.value = false;
+ console.error("鑾峰彇妫�楠岃鎯呭け璐�:", err);
+ });
+ };
+
+ const closeDialog = () => {
+ dialogVisible.value = false;
+ emit("close");
+ };
+
+ // 涓轰笉鍚堟牸鐨勮娣诲姞鏍峰紡
+ const rowClassName = ({ row }) => {
+ return row.result == "涓嶅悎鏍�" ? "unqualified-row" : "";
+ };
+
+ defineExpose({
+ openDialog,
+ });
+</script>
+
+<style scoped>
+ .detail-card {
+ margin-bottom: 20px;
+ }
+
+ .card-header {
+ font-size: 16px;
+ font-weight: bold;
+ color: #333;
+ }
+
+ .detail-info {
+ padding: 10px 0;
+ }
+
+ .info-row {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 10px;
+ }
+
+ .info-item {
+ width: 33%;
+ margin-bottom: 10px;
+ }
+
+ .info-label {
+ display: inline-block;
+ width: 100px;
+ font-weight: bold;
+ color: #666;
+ }
+
+ .info-value {
+ color: #333;
+ }
+
+ .dialog-footer {
+ text-align: center;
+ }
+
+ :deep(.unqualified-row) {
+ background-color: rgba(245, 108, 108, 0.05) !important;
+ }
+
+ :deep(.unqualified-row .cell) {
+ color: #f56c6c !important;
+ }
+</style>
\ No newline at end of file
--
Gitblit v1.9.3