huminmin
2026-07-30 1daa22ed05c77e4a8c3069124a1849d5d6504f69
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">
@@ -36,7 +36,7 @@
    <div class="detail-block">
      <div class="detail-block-title">填报内容</div>
      <!-- 默认表单展示 -->
      <FormPayloadFields v-if="!isSpecialApprovalType"
      <FormPayloadFields v-if="!isSpecialApprovalType && row.businessType !== 19"
                         :fields="formResolved.fields"
                         :form-payload="formResolved.formPayload"
                         readonly />
@@ -69,6 +69,39 @@
            </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 visibleFormFields"
              :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>
      
      <!-- 采购审批详情 -->
@@ -188,6 +221,7 @@
    approvalStatusLabel,
    approvalStatusTagType,
    resolveInstanceFormFields,
    formatFieldDisplayValue,
  } from "../approveListConstants.js";
  import FormPayloadFields from "./FormPayloadFields.vue";
@@ -197,6 +231,15 @@
  });
  const formResolved = computed(() => resolveInstanceFormFields(props.row));
  const visibleFormFields = computed(() =>
    (formResolved.value.fields || []).filter(field => {
      const key = String(field?.key || "").toLowerCase();
      const label = String(field?.label || "").trim();
      if (["approvalstatus", "auditstatus", "status", "workhours", "schedulingnum"].includes(key)) return false;
      if (["审批状态", "审核状态", "工时", "排产数量"].includes(label)) return false;
      return true;
    })
  );
  // 是否为特殊审批类型(采购、发货、报价)
@@ -207,6 +250,25 @@
  // 详情数据(直接使用传入的 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(() => {
@@ -246,6 +308,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));
@@ -283,4 +349,4 @@
    align-items: center;
    flex-shrink: 0;
  }
</style>
</style>