<template> 
 | 
  <view class="fixed-header"> 
 | 
    <view class="header-container"> 
 | 
      <wd-button 
 | 
        icon="file-add" 
 | 
        :round="false" 
 | 
        size="small" 
 | 
        custom-class="add_btn" 
 | 
        @click="editList" 
 | 
        v-if="!isEdit" 
 | 
      > 
 | 
        编辑 
 | 
      </wd-button> 
 | 
      <wd-button 
 | 
        icon="close" 
 | 
        type="info" 
 | 
        :round="false" 
 | 
        size="small" 
 | 
        custom-class="add_btn" 
 | 
        @click="close" 
 | 
        v-if="isEdit" 
 | 
      > 
 | 
        取消 
 | 
      </wd-button> 
 | 
      <wd-button 
 | 
        icon="check" 
 | 
        type="success" 
 | 
        :round="false" 
 | 
        size="small" 
 | 
        custom-class="add_btn" 
 | 
        @click="saveList" 
 | 
        v-if="isEdit" 
 | 
      > 
 | 
        保存 
 | 
      </wd-button> 
 | 
      <view class="placeholder"></view> 
 | 
      <view class="scan-wrapper" @click="openScan"> 
 | 
        <wd-icon name="scan" size="24px" color="#0D867F"></wd-icon> 
 | 
      </view> 
 | 
    </view> 
 | 
  </view> 
 | 
  <view class="list"> 
 | 
    <!-- 基本信息模块 --> 
 | 
    <wd-row> 
 | 
      <view style="margin: 10rpx"> 
 | 
        <text class="title">{{ "基本信息" }}</text> 
 | 
      </view> 
 | 
      <wd-col :span="24"> 
 | 
        <wd-form-item label="日期" prop="recordDate"> 
 | 
          {{ formatDate(recordData.fixedInfo?.recordDate) }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="班次" prop="workShift"> 
 | 
          {{ formatValue(recordData.fixedInfo?.workShift) }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="型号规格" prop="model"> 
 | 
          {{ formatValue(recordData.fixedInfo?.model) }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="成品线盘号" prop="systemNo"> 
 | 
          {{ formatValue(recordData.fixedInfo?.systemNo) }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="记录人" prop="createUserName"> 
 | 
          {{ formatValue(recordData.fixedInfo?.createUserName) }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="机台" prop="deviceModel"> 
 | 
          {{ formatValue(recordData.fixedInfo?.deviceModel) }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="产品类别" prop="productType"> 
 | 
          {{ formatValue(recordData.fixedInfo?.productType) }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="生产长度" prop="actuallyLength"> 
 | 
          {{ formatValue(recordData.fixedInfo?.actuallyLength, "m") }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="张力设置" prop="twistTension"> 
 | 
          {{ formatValue(recordData.fixedInfo?.twistTension, "N/m") }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="绞制外径" prop="twistDiameter"> 
 | 
          {{ formatValue(recordData.inspectionResult?.twistDiameter, "mm") }} 
 | 
        </wd-form-item> 
 | 
      </wd-col> 
 | 
    </wd-row> 
 | 
    <!-- 自检记录详情模块 --> 
 | 
    <wd-row> 
 | 
      <view style="margin: 10rpx"> 
 | 
        <text class="title">{{ "自检记录详情" }}</text> 
 | 
      </view> 
 | 
      <wd-col :span="24"> 
 | 
        <wd-form-item label="记录位置" prop="recordPosition"> 
 | 
          {{ recordData.structureInfo?.recordPosition || "-" }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="记录人" prop="createUserName"> 
 | 
          {{ recordData.structureInfo?.createUserName || "-" }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="状态" prop="status"> 
 | 
          <wd-tag custom-class="space" :type="getStatusType(recordData.structureInfo?.status)"> 
 | 
            {{ getStatusText(recordData.structureInfo?.status) }} 
 | 
          </wd-tag> 
 | 
        </wd-form-item> 
 | 
      </wd-col> 
 | 
    </wd-row> 
 | 
    <!-- 结构检查模块 --> 
 | 
    <wd-row> 
 | 
      <view style="margin: 10rpx"> 
 | 
        <text class="title">{{ "结构检查" }}</text> 
 | 
      </view> 
 | 
      <wd-col :span="24"> 
 | 
        <wd-form-item label="成品结构" prop="inspectStructure"> 
 | 
          {{ 
 | 
            recordData.structureInfo.structureRecordResult.inspectStructure.structureFormula || "-" 
 | 
          }} 
 | 
        </wd-form-item> 
 | 
      </wd-col> 
 | 
    </wd-row> 
 | 
    <wd-row v-if="recordData.structureInfo.structureRecordResult.inspectStructure.structureItems"> 
 | 
      <view style="margin: 10rpx"> 
 | 
        <text class="title">{{ "结构标准值和实测" }}</text> 
 | 
      </view> 
 | 
      <wd-col 
 | 
        :span="24" 
 | 
        v-for="(item, index) in recordData.structureInfo.structureRecordResult.inspectStructure 
 | 
          .structureItems" 
 | 
        :key="index" 
 | 
        style="padding-bottom: 10px" 
 | 
      > 
 | 
        <wd-form-item 
 | 
          :label="formatValue(item.structureName)" 
 | 
          label-width="400rpx" 
 | 
          style="color: red" 
 | 
        ></wd-form-item> 
 | 
        <wd-form-item label="标准值" prop="structureValue"> 
 | 
          {{ formatValue(item.structureValue) }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="实测根数" prop="actualValue1"> 
 | 
          {{ formatValue(item.actualValue1, "根") }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="实测直径" prop="actualValue2"> 
 | 
          {{ formatValue(item.actualValue2, "mm") }} 
 | 
        </wd-form-item> 
 | 
      </wd-col> 
 | 
    </wd-row> 
 | 
    <!-- 绞线工艺质量控制模块 --> 
 | 
    <wd-row v-if="recordData.structureInfo?.structureRecordResult?.inspectTwist"> 
 | 
      <view style="margin: 10rpx"> 
 | 
        <text class="title">{{ "绞线工艺质量控制" }}</text> 
 | 
      </view> 
 | 
      <wd-col 
 | 
        :span="24" 
 | 
        v-for="(item, index) in recordData.structureInfo.structureRecordResult.inspectTwist" 
 | 
        :key="index" 
 | 
        style="padding-bottom: 10px" 
 | 
      > 
 | 
        <wd-form-item 
 | 
          :label="formatValue(item.twistName)" 
 | 
          label-width="400rpx" 
 | 
          style="color: red" 
 | 
        ></wd-form-item> 
 | 
        <wd-form-item label="绞向" prop="direction"> 
 | 
          {{ formatValue(item.direction) }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="节距" prop="pitch">{{ formatValue(item.pitch, "mm") }}</wd-form-item> 
 | 
        <wd-form-item label="节径比" prop="pitchRatio"> 
 | 
          {{ formatValue(item.pitchRatio) }} 
 | 
        </wd-form-item> 
 | 
      </wd-col> 
 | 
    </wd-row> 
 | 
    <!-- 外观和结论模块 --> 
 | 
    <wd-row> 
 | 
      <view style="margin: 10rpx"> 
 | 
        <text class="title">{{ "外观和结论" }}</text> 
 | 
      </view> 
 | 
      <wd-col :span="24"> 
 | 
        <wd-form-item label="结论" prop="conclusion"> 
 | 
          {{ formatValue(recordData.structureInfo.structureRecordResult.conclusion) }} 
 | 
        </wd-form-item> 
 | 
        <wd-form-item label="产品外观" prop="productAppearance"> 
 | 
          {{ 
 | 
            formatProductAppearance( 
 | 
              recordData.structureInfo.structureRecordResult.productAppearance 
 | 
            ) 
 | 
          }} 
 | 
        </wd-form-item> 
 | 
      </wd-col> 
 | 
    </wd-row> 
 | 
    <!-- 巡检结果模块 --> 
 | 
    <wd-row> 
 | 
      <view style="margin: 10rpx"> 
 | 
        <text class="title">{{ "巡检结果" }}</text> 
 | 
      </view> 
 | 
      <wd-col :span="24"> 
 | 
        <wd-form-item label="样品是否齐全" prop="sampleComplete"> 
 | 
          {{ formatValue(recordData.inspectionResult?.sampleComplete) }} 
 | 
        </wd-form-item> 
 | 
      </wd-col> 
 | 
    </wd-row> 
 | 
    <!-- 附件模块 --> 
 | 
    <wd-row class="attachment-section"> 
 | 
      <view style="margin: 10rpx"> 
 | 
        <text class="title">{{ "附件" }}</text> 
 | 
      </view> 
 | 
      <!-- 用 flex 容器包裹图片列,实现自动换行 --> 
 | 
      <view class="attachment-grid"> 
 | 
        <wd-col 
 | 
          v-for="(file, index) in recordData.structureInfo.files" 
 | 
          :key="index" 
 | 
          class="attachment-item" 
 | 
        > 
 | 
          <wd-img :width="80" :height="80" :src="file.url" @click="previewImage(file.url)"> 
 | 
            <template #error> 
 | 
              <view class="error-wrap">加载失败</view> 
 | 
            </template> 
 | 
            <template #loading> 
 | 
              <view class="loading-wrap"> 
 | 
                <wd-loading /> 
 | 
              </view> 
 | 
            </template> 
 | 
          </wd-img> 
 | 
        </wd-col> 
 | 
      </view> 
 | 
    </wd-row> 
 | 
    <wd-popup v-model="show" custom-style="border-radius:32rpx;" @close="handleClose"> 
 | 
      <div class="image-preview"> 
 | 
        <img :src="previewImageUrl" alt="预览图片" style="width: 100%; height: auto" /> 
 | 
      </div> 
 | 
    </wd-popup> 
 | 
  </view> 
 | 
</template> 
 | 
  
 | 
<script setup lang="ts"> 
 | 
import { onLoad } from "@dcloudio/uni-app"; 
 | 
import RoutingInspectionApi from "@/api/routingInspection/routingInspection"; 
 | 
  
 | 
const paramsId = ref(""); 
 | 
const recordData = ref<any>({}); 
 | 
const show = ref(false); 
 | 
const previewImageUrl = ref(""); 
 | 
const isEdit = ref(false); 
 | 
  
 | 
// 状态类型映射 
 | 
const getStatusType = (status: number) => { 
 | 
  switch (status) { 
 | 
    case 0: 
 | 
      return "warning"; // 待巡检 
 | 
    case 1: 
 | 
      return "danger"; // 已驳回 
 | 
    case 2: 
 | 
      return "info"; // 待审核 
 | 
    case 3: 
 | 
      return "success"; // 通过 
 | 
    default: 
 | 
      return "info"; 
 | 
  } 
 | 
}; 
 | 
  
 | 
// 状态文本映射 
 | 
const getStatusText = (status: number) => { 
 | 
  switch (status) { 
 | 
    case 0: 
 | 
      return "待巡检"; 
 | 
    case 1: 
 | 
      return "已驳回"; 
 | 
    case 2: 
 | 
      return "待审核"; 
 | 
    case 3: 
 | 
      return "通过"; 
 | 
    default: 
 | 
      return "未知"; 
 | 
  } 
 | 
}; 
 | 
  
 | 
// 获取外观文本 
 | 
const getAppearanceText = (appearance: string[]) => { 
 | 
  if (!appearance || appearance.length === 0) return "-"; 
 | 
  return appearance.join("、"); 
 | 
}; 
 | 
  
 | 
// 格式化产品外观显示 
 | 
const formatProductAppearance = (productAppearance: string[]) => { 
 | 
  if (!productAppearance || productAppearance.length === 0) return "-"; 
 | 
  return productAppearance.join("、"); 
 | 
}; 
 | 
  
 | 
// 格式化数值显示 
 | 
const formatValue = (value: any, unit?: string) => { 
 | 
  if (value === null || value === undefined || value === "") return "-"; 
 | 
  return unit ? `${value}${unit}` : value; 
 | 
}; 
 | 
  
 | 
// 格式化日期显示 
 | 
const formatDate = (date: string) => { 
 | 
  if (!date) return "-"; 
 | 
  return new Date(date).toLocaleDateString("zh-CN", { 
 | 
    year: "numeric", 
 | 
    month: "2-digit", 
 | 
    day: "2-digit", 
 | 
  }); 
 | 
}; 
 | 
  
 | 
// 格式化结构值显示 
 | 
const formatStructureValue = (value1: any, value2: any) => { 
 | 
  const val1 = value1 || "-"; 
 | 
  const val2 = value2 ? `${value2}mm` : "-"; 
 | 
  return { count: val1, diameter: val2 }; 
 | 
}; 
 | 
  
 | 
const getDetailData = async (id: string, deviceType: string) => { 
 | 
  try { 
 | 
    let response; 
 | 
    // 获取绞线单个结构 
 | 
    response = await RoutingInspectionApi.getStrandedInspectionStructureInfoById({ 
 | 
      id: id, 
 | 
    }); 
 | 
    recordData.value = response.data; 
 | 
    console.log(recordData.value); 
 | 
  } catch (error) { 
 | 
    console.error("获取详情失败:", error); 
 | 
  } 
 | 
}; 
 | 
  
 | 
onLoad((options: any) => { 
 | 
  paramsId.value = options.id; 
 | 
  getDetailData(options.id, options.deviceType); 
 | 
}); 
 | 
  
 | 
const previewImage = (url: string) => { 
 | 
  previewImageUrl.value = url; 
 | 
  show.value = true; 
 | 
}; 
 | 
  
 | 
const handleClose = () => { 
 | 
  show.value = false; 
 | 
}; 
 | 
  
 | 
// 编辑列表 
 | 
const editList = () => {}; 
 | 
  
 | 
// 关闭 
 | 
const close = () => {}; 
 | 
  
 | 
// 保存列表 
 | 
const saveList = async () => { 
 | 
  // try { 
 | 
  //   let response; 
 | 
  //   // 保存列表 
 | 
  //   response = await RoutingInspectionApi.saveStrandedInspectionStructureInfo({ 
 | 
  //     id: paramsId.value, 
 | 
  //     structureInfo: recordData.value.structureInfo, 
 | 
  //   }); 
 | 
  //   if (response.code === 200) { 
 | 
  //     uni.showToast({ 
 | 
  //       title: "保存成功", 
 | 
  //       icon: "success", 
 | 
  //     }); 
 | 
  //     // 刷新详情数据 
 | 
  //     getDetailData(paramsId.value, recordData.value.deviceType); 
 | 
  //   } else { 
 | 
  //     uni.showToast({ 
 | 
  //       title: response.msg || "保存失败", 
 | 
  //       icon: "error", 
 | 
  //     }); 
 | 
  //   } 
 | 
  // } catch (error) { 
 | 
  //   console.error("保存列表失败:", error); 
 | 
  //   uni.showToast({ 
 | 
  //     title: "保存失败", 
 | 
  //     icon: "error", 
 | 
  //   }); 
 | 
  // } 
 | 
}; 
 | 
</script> 
 | 
<style lang="scss" scoped> 
 | 
.placeholder { 
 | 
  flex: 1; 
 | 
} 
 | 
.fixed-header { 
 | 
  position: fixed; 
 | 
  top: 44; 
 | 
  left: 0; 
 | 
  right: 0; 
 | 
  background: #f3f9f8; 
 | 
  z-index: 999; 
 | 
  padding: 12px; 
 | 
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 
 | 
  min-height: 60px; 
 | 
  box-sizing: border-box; 
 | 
  overflow: visible; 
 | 
} 
 | 
  
 | 
.header-container { 
 | 
  display: flex; 
 | 
  align-items: center; 
 | 
  width: 100%; 
 | 
  gap: 10px; 
 | 
} 
 | 
  
 | 
.search-wrapper { 
 | 
  flex: 1; 
 | 
  min-width: 0; 
 | 
} 
 | 
  
 | 
:deep(.search-wrapper .wd-search) { 
 | 
  width: 100% !important; 
 | 
  min-width: 0 !important; 
 | 
} 
 | 
  
 | 
.scan-wrapper { 
 | 
  width: 38px; 
 | 
  height: 38px; 
 | 
  display: flex; 
 | 
  align-items: center; 
 | 
  justify-content: center; 
 | 
  padding: 6px; 
 | 
  flex-shrink: 0; 
 | 
} 
 | 
  
 | 
.list { 
 | 
  padding: 12px; 
 | 
  
 | 
  padding-top: 84px; 
 | 
  background: #f3f9f8; 
 | 
  min-height: 100vh; 
 | 
  box-sizing: border-box; 
 | 
} 
 | 
  
 | 
.title { 
 | 
  position: relative; 
 | 
  margin-left: 10px; 
 | 
  font-size: 16px; 
 | 
  font-weight: 500; 
 | 
  color: #0d867f; 
 | 
} 
 | 
  
 | 
.title::after { 
 | 
  position: absolute; 
 | 
  content: ""; 
 | 
  top: 4px; 
 | 
  left: -10px; 
 | 
  width: 4px; 
 | 
  height: 16px; 
 | 
  background: #0d867f; 
 | 
  border-radius: 2px; 
 | 
} 
 | 
  
 | 
.attachment-section { 
 | 
  width: 100%; 
 | 
} 
 | 
  
 | 
.attachment-grid { 
 | 
  display: flex; 
 | 
  flex-wrap: wrap; 
 | 
  gap: 10px; 
 | 
  padding: 10px 0; 
 | 
} 
 | 
  
 | 
.attachment-item { 
 | 
  width: calc(25% - 10px); 
 | 
  box-sizing: border-box; 
 | 
} 
 | 
  
 | 
@media (max-width: 768px) { 
 | 
  .attachment-item { 
 | 
    width: calc(25% - 10px); 
 | 
  } 
 | 
} 
 | 
</style> 
 |