From e1570f458b2ab42bb1a212be8de63134a50b2af1 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 30 七月 2026 16:09:03 +0800
Subject: [PATCH] 生产核算增加折算工时,隐藏工资

---
 src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue |  184 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 180 insertions(+), 4 deletions(-)

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
index 721a5c2..8bed52b 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
@@ -19,9 +19,9 @@
             {{ approvalTypeLabel(row.approvalType) }}
           </span>
         </el-descriptions-item>
-        <el-descriptions-item label="鐢宠浜虹紪鍙�">{{ row.applicantNo || "鈥�" }}</el-descriptions-item>
-        <el-descriptions-item label="鐢宠浜哄悕绉�">{{ row.applicantName || "鈥�" }}</el-descriptions-item>
-        <el-descriptions-item label="鐢宠鎽樿">{{ row.summary || "鈥�" }}</el-descriptions-item>
+        <el-descriptions-item label="鍙戣捣浜虹紪鍙�">{{ row.applicantNo || "鈥�" }}</el-descriptions-item>
+        <el-descriptions-item label="鍙戣捣浜哄悕绉�">{{ row.applicantName || "鈥�" }}</el-descriptions-item>
+        <el-descriptions-item label="鎽樿">{{ row.summary || "鈥�" }}</el-descriptions-item>
         <el-descriptions-item v-if="row.rejectReason"
                               label="椹冲洖鍘熷洜"
                               :span="2">
@@ -35,9 +35,149 @@
     </div>
     <div class="detail-block">
       <div class="detail-block-title">濉姤鍐呭</div>
-      <FormPayloadFields :fields="formResolved.fields"
+      <!-- 榛樿琛ㄥ崟灞曠ず -->
+      <FormPayloadFields v-if="!isSpecialApprovalType && row.businessType !== 19"
+                         :fields="formResolved.fields"
                          :form-payload="formResolved.formPayload"
                          readonly />
+      
+      <!-- 鍙戣揣瀹℃壒璇︽儏 -->
+      <template v-else-if="row.businessType === 7">
+        <div v-if="detailData.shippingInfo" class="shipment-detail">
+          <el-divider content-position="left">鍙戣揣璇︽儏</el-divider>
+          <el-descriptions :column="2" border>
+            <el-descriptions-item label="閿�鍞鍗�">{{ detailData.shippingInfo.salesContractNo || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣璁㈠崟鍙�">{{ detailData.shippingInfo.shippingNo || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="瀹㈡埛鍚嶇О">{{ detailData.shippingInfo.customerName || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣绫诲瀷">{{ detailData.shippingInfo.type || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣鏃ユ湡">{{ detailData.shippingInfo.shippingDateDate || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="瀹℃牳鐘舵��">{{ detailData.shippingInfo.status || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鍙戣揣杞︾墝鍙�">{{ detailData.shippingInfo.shippingCarNumber || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="蹇�掑叕鍙�">{{ detailData.shippingInfo.expressCompany || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="蹇�掑崟鍙�" :span="2">{{ detailData.shippingInfo.expressNumber || "--" }}</el-descriptions-item>
+          </el-descriptions>
+          <div v-if="detailData.shippingProductDetailDtoList.length" style="margin-top: 20px;">
+            <h4>浜у搧鏄庣粏</h4>
+            <el-table :data="detailData.shippingProductDetailDtoList"
+                      border
+                      size="small"
+                      style="width: 100%">
+              <el-table-column label="鎵瑰彿" prop="batchNo" min-width="160" show-overflow-tooltip />
+              <el-table-column label="浜у搧鍚嶇О" prop="productName" min-width="160" show-overflow-tooltip />
+              <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" min-width="160" show-overflow-tooltip />
+              <el-table-column label="鍙戣揣鏁伴噺" prop="deliveryQuantity" min-width="120" align="center" />
+            </el-table>
+          </div>
+        </div>
+      </template>
+
+      <!-- 鎶ュ伐瀹℃壒璇︽儏 -->
+      <template v-else-if="row.businessType === 19">
+        <div v-if="formResolved.fields.length || reportParamList.length" class="report-detail">
+          <el-divider content-position="left">鎶ュ伐濉姤鍐呭</el-divider>
+          <el-descriptions v-if="formResolved.fields.length" :column="2" border>
+            <el-descriptions-item
+              v-for="field in formResolved.fields"
+              :key="field.key"
+              :label="field.label || field.key"
+            >
+              {{ formatFieldDisplayValue(field, formResolved.formPayload?.[field.key]) }}
+            </el-descriptions-item>
+          </el-descriptions>
+          <div v-if="reportParamList.length" class="report-param-block">
+            <el-divider content-position="left">鎶ュ伐鍙傛暟</el-divider>
+            <el-table :data="reportParamList" border size="small" style="width: 100%">
+              <el-table-column label="鍙傛暟鍚嶇О" prop="paramName" min-width="180" show-overflow-tooltip />
+              <el-table-column label="鍙傛暟鍊�" prop="inputValue" min-width="180" show-overflow-tooltip>
+                <template #default="scope">
+                  {{ scope.row.inputValue || '鈥�' }}
+                </template>
+              </el-table-column>
+              <el-table-column label="鍗曚綅" prop="unit" min-width="100" show-overflow-tooltip>
+                <template #default="scope">
+                  {{ scope.row.unit || '鈥�' }}
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </div>
+        <el-empty v-else description="鏆傛棤鎶ュ伐濉姤鍐呭" />
+      </template>
+      
+      <!-- 閲囪喘瀹℃壒璇︽儏 -->
+      <template v-else-if="row.businessType === 5">
+        <div v-if="detailData" class="procurement-detail">
+          <el-divider content-position="left">閲囪喘璇︽儏</el-divider>
+          <el-descriptions :column="2" border>
+            <el-descriptions-item label="閲囪喘鍚堝悓鍙�">{{ detailData.purchaseContractNumber || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="渚涘簲鍟嗗悕绉�">{{ detailData.supplierName || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="椤圭洰鍚嶇О">{{ detailData.projectName || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="閿�鍞悎鍚屽彿">{{ detailData.salesContractNo || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="绛捐鏃ユ湡">{{ detailData.executionDate || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="褰曞叆鏃ユ湡">{{ detailData.entryDate || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="浠樻鏂瑰紡">{{ detailData.paymentMethod || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鍚堝悓閲戦" :span="2">
+              <span style="font-size: 18px; color: #e6a23c; font-weight: bold;">
+                楼{{ Number(detailData.contractAmount ?? 0).toFixed(2) }}
+              </span>
+            </el-descriptions-item>
+          </el-descriptions>
+          <div v-if="detailData.productData.length" style="margin-top: 20px;">
+            <h4>浜у搧鏄庣粏</h4>
+            <el-table :data="detailData.productData"
+                      border
+                      style="width: 100%">
+              <el-table-column prop="productCategory" label="浜у搧鍚嶇О" />
+              <el-table-column prop="specificationModel" label="瑙勬牸鍨嬪彿" />
+              <el-table-column prop="unit" label="鍗曚綅" />
+              <el-table-column prop="quantity" label="鏁伴噺" />
+              <el-table-column prop="taxInclusiveUnitPrice" label="鍚◣鍗曚环">
+                <template #default="scope">楼{{ Number(scope.row.taxInclusiveUnitPrice ?? 0).toFixed(2) }}</template>
+              </el-table-column>
+              <el-table-column prop="taxInclusiveTotalPrice" label="鍚◣鎬讳环">
+                <template #default="scope">楼{{ Number(scope.row.taxInclusiveTotalPrice ?? 0).toFixed(2) }}</template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </div>
+      </template>
+      
+      <!-- 鎶ヤ环瀹℃壒璇︽儏 -->
+      <template v-else-if="row.businessType === 6">
+        <div v-if="detailData" class="quotation-detail">
+          <el-divider content-position="left">鎶ヤ环璇︽儏</el-divider>
+          <el-descriptions :column="2" border>
+            <el-descriptions-item label="鎶ヤ环鍗曞彿">{{ detailData.quotationNo || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="瀹㈡埛鍚嶇О">{{ detailData.customer || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="涓氬姟鍛�">{{ detailData.salesperson || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鎶ヤ环鏃ユ湡">{{ detailData.quotationDate || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鏈夋晥鏈熻嚦">{{ detailData.validDate || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="浠樻鏂瑰紡">{{ detailData.paymentMethod || "--" }}</el-descriptions-item>
+            <el-descriptions-item label="鎶ヤ环鎬婚" :span="2">
+              <span style="font-size: 18px; color: #e6a23c; font-weight: bold;">
+                楼{{ Number(detailData.totalAmount ?? 0).toFixed(2) }}
+              </span>
+            </el-descriptions-item>
+          </el-descriptions>
+          <div v-if="detailData.products.length" style="margin-top: 20px;">
+            <h4>浜у搧鏄庣粏</h4>
+            <el-table :data="detailData.products"
+                      border
+                      style="width: 100%">
+              <el-table-column prop="product" label="浜у搧鍚嶇О" />
+              <el-table-column prop="specification" label="瑙勬牸鍨嬪彿" />
+              <el-table-column prop="unit" label="鍗曚綅" />
+              <el-table-column prop="unitPrice" label="鍗曚环">
+                <template #default="scope">楼{{ Number(scope.row.unitPrice ?? 0).toFixed(2) }}</template>
+              </el-table-column>
+            </el-table>
+          </div>
+          <div v-if="detailData.remark" style="margin-top: 20px;">
+            <h4>澶囨敞</h4>
+            <p>{{ detailData.remark }}</p>
+          </div>
+        </div>
+      </template>
     </div>
     <div v-if="attachmentList.length"
          class="detail-block">
@@ -81,14 +221,46 @@
     approvalStatusLabel,
     approvalStatusTagType,
     resolveInstanceFormFields,
+    formatFieldDisplayValue,
   } from "../approveListConstants.js";
   import FormPayloadFields from "./FormPayloadFields.vue";
 
   const props = defineProps({
     row: { type: Object, default: () => ({}) },
+    detailData: { type: Object, default: () => ({}) },
   });
 
   const formResolved = computed(() => resolveInstanceFormFields(props.row));
+
+
+  // 鏄惁涓虹壒娈婂鎵圭被鍨嬶紙閲囪喘銆佸彂璐с�佹姤浠凤級
+  const isSpecialApprovalType = computed(() => {
+    return [5, 7, 6].includes(props.row.businessType);
+  });
+
+  // 璇︽儏鏁版嵁锛堢洿鎺ヤ娇鐢ㄤ紶鍏ョ殑 detail-data 鍙傛暟锛�
+  const detailData = computed(() => {
+    return props.detailData || {};
+  });
+
+  const reportParamList = computed(() => {
+    const payload = formResolved.value?.formPayload || {};
+    const sources = [
+      payload.productionOperationParamList,
+      payload.reportParamList,
+      payload.paramList,
+      props.row?.productionOperationParamList,
+      props.row?.reportParamList,
+      props.row?.paramList,
+    ];
+    const list = sources.find(item => Array.isArray(item) && item.length) || [];
+    return list.map((param, index) => ({
+      id: param?.id ?? index,
+      paramName: param?.paramName || param?.parameterName || param?.name || `鍙傛暟${index + 1}`,
+      inputValue: param?.inputValue ?? param?.value ?? param?.paramValue ?? '',
+      unit: param?.unit || '',
+    }));
+  });
 
   const attachmentList = computed(() => {
     const list = props.row.storageBlobVOList || props.row.storageBlobDTOs || [];
@@ -127,6 +299,10 @@
     color: var(--el-color-danger);
   }
 
+  .report-param-block {
+    margin-top: 20px;
+  }
+
   .attachment-list {
     display: grid;
     grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));

--
Gitblit v1.9.3