yyb
5 天以前 9b1805acd1f1bbc84fd670e282b52ae67e68afc5
拉丝和绞线的详情
已添加2个文件
已修改3个文件
632 ■■■■■ 文件已修改
src/api/routingInspection/routingInspection.ts 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages.json 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/routingInspection/detail/indexJX.vue 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/routingInspection/detail/indexLS.vue 294 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/routingInspection/list/index.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/routingInspection/routingInspection.ts
@@ -18,6 +18,22 @@
      data: data,
    });
  },
  // èŽ·å–æ‹‰ä¸å•ä¸ªç»“æž„è®°å½• 0
  getDrawInspectInfoById(params: any) {
    return request<BaseResult<any>>({
      url: "/wireInspection/getDrawInspectInfoById/" + params.id,
      method: "GET",
      // data: params,
    });
  },
  // èŽ·å–ç»žçº¿å•ä¸ªç»“æž„è®°å½• 1
  getStrandedInspectionStructureInfoById(params: any) {
    return request<BaseResult<any>>({
      url: "/wireInspection/getStrandedInspectionStructureInfoById/" + params.id,
      method: "GET",
      // data: params,
    });
  },
};
export default RoutingInspectionApi;
src/pages.json
@@ -6,7 +6,6 @@
      "^cu-(.*)": "@/components/cu-$1/index.vue"
    }
  },
  "pages": [
    {
      "path": "pages/index/index",
@@ -98,7 +97,6 @@
        "navigationBarTitleText": "个人资料"
      }
    },
    {
      "path": "pages/work/user/index",
      "style": {
@@ -145,12 +143,6 @@
      "path": "pages/production/index",
      "style": {
        "navigationBarTitleText": "生产管理"
      }
    },
    {
      "path": "pages/routingInspection/index",
      "style": {
        "navigationBarTitleText": "巡检"
      }
    },
    {
@@ -290,6 +282,24 @@
      "style": {
        "navigationBarTitleText": "时效报工"
      }
    },
    {
      "path": "pages/routingInspection/index",
      "style": {
        "navigationBarTitleText": "巡检"
      }
    },
    {
      "path": "pages/routingInspection/detail/indexJX",
      "style": {
        "navigationBarTitleText": "绞线巡检详情"
      }
    },
    {
      "path": "pages/routingInspection/detail/indexLS",
      "style": {
        "navigationBarTitleText": "拉丝巡检详情"
      }
    }
  ],
  "globalStyle": {
src/pages/routingInspection/detail/indexJX.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,285 @@
<template>
    <view class="list">
        <div class="inspection-report">
            <!-- åŸºæœ¬ä¿¡æ¯æ¨¡å— -->
            <wd-row>
                <text class="title">{{ "基本信息" }}</text>
                <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>
                <text class="title">{{ "自检记录详情" }}</text>
                <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>
                <text class="title">{{ "结构检查" }}</text>
                <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">
                <text class="title">{{ "结构标准值和实测" }}</text>
                <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">
                <text class="title">{{ "绞线工艺质量控制" }}</text>
                <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>
                <text class="title">{{ "外观和结论" }}</text>
                <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>
                <text class="title">{{ "巡检结果" }}</text>
                <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">
                <text class="title">{{ "附件" }}</text>
                <!-- ç”¨ 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>
        </div>
        <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 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;
    };
</script>
<style lang="scss" scoped>
    .list {
        height: calc(100vh - 80px);
        padding: 12px;
        background: #f3f9f8;
        :deep() {
            .round {
                border-radius: 4px;
            }
        }
    }
    .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);
        /* æ¯è¡Œ4张,间距由gap控制,需计算宽度 */
        box-sizing: border-box;
    }
    /* é€‚配小屏幕,可调整每行数量(如每行2张) */
    @media (max-width: 768px) {
        .attachment-item {
            width: calc(25% - 10px);
        }
    }
</style>
src/pages/routingInspection/detail/indexLS.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,294 @@
<template>
  <view class="list">
    <div class="inspection-report">
      <!-- åŸºæœ¬ä¿¡æ¯æ¨¡å— -->
      <wd-row>
        <text class="title">{{ "基本信息" }}</text>
        <wd-col :span="24">
          <wd-form-item label="日期" prop="recordDate">
            {{ formatDate(detailData.fixedInfo?.recordDate) }}
          </wd-form-item>
          <wd-form-item label="机台" prop="deviceModel">
            {{ formatValue(detailData.fixedInfo?.deviceModel) }}
          </wd-form-item>
          <wd-form-item label="班次" prop="workShift">
            {{ formatValue(detailData.fixedInfo?.workShift) }}
          </wd-form-item>
          <wd-form-item label="班组" prop="teamName">
            {{ formatValue(detailData.fixedInfo?.teamName) }}
          </wd-form-item>
          <wd-form-item label="单丝规格" prop="model">
            {{ formatValue(detailData.fixedInfo?.model) }}
          </wd-form-item>
          <wd-form-item label="生产轴数" prop="outputNumber">
            {{ formatValue(detailData.fixedInfo?.outputNumber, "è½´") }}
          </wd-form-item>
          <wd-form-item label="型号" prop="poleModel">
            {{ formatValue(detailData.fixedInfo?.poleModel) }}
          </wd-form-item>
          <wd-form-item label="批次" prop="poleNumber">
            {{ formatValue(detailData.fixedInfo?.poleNumber) }}
          </wd-form-item>
          <wd-form-item label="记录人" prop="createUserName">
            {{ formatValue(detailData.fixedInfo?.createUserName) }}
          </wd-form-item>
          <wd-form-item label="首检盘号" prop="firstNo">
            {{ formatValue(detailData.fixedInfo?.firstNo) }}
          </wd-form-item>
        </wd-col>
      </wd-row>
      <!-- è‡ªæ£€è®°å½•详情模块 -->
      <wd-row>
        <text class="title">{{ "自检记录详情" }}</text>
        <wd-col :span="24">
          <wd-form-item label="巡检员" prop="processInspectionUserName">
            {{ detailData.processInspectionUserName || "-" }}
          </wd-form-item>
          <wd-form-item label="状态" prop="status">
            <wd-tag custom-class="space" :type="getStatusType(detailData.status)">
              {{ getStatusText(detailData.status) }}
            </wd-tag>
          </wd-form-item>
        </wd-col>
      </wd-row>
      <!-- æ£€éªŒç»“æžœ -->
      <wd-row>
        <text class="title">{{ "检验结果" }}</text>
        <wd-col :span="24">
          <wd-form-item label="单丝直径" prop="dia">
            {{ formatValue(detailData.inspectionResult?.dia, "mm") || "-" }}
          </wd-form-item>
          <wd-form-item label="最大直径" prop="maxDia">
            {{ formatValue(detailData.inspectionResult?.maxDia, "mm") || "-" }}
          </wd-form-item>
          <wd-form-item label="最小直径" prop="minDia">
            {{ formatValue(detailData.inspectionResult?.minDia, "mm") || "-" }}
          </wd-form-item>
          <wd-form-item label="外观" prop="appearance">
            {{ formatProductAppearance(detailData.inspectionResult?.appearance) || "-" }}
          </wd-form-item>
          <wd-form-item label="卷绕紧密" prop="windingTightness">
            {{ formatValue(detailData.inspectionResult?.windingTightness) }}
          </wd-form-item>
          <wd-form-item label="排列整齐" prop="arrangementNeatness">
            {{ formatValue(detailData.inspectionResult?.arrangementNeatness) }}
          </wd-form-item>
          <wd-form-item
            label="外层铝线离侧板边缘距离"
            prop="aluminumWireDistance"
            label-width="500rpx"
          >
            {{ formatValue(detailData.inspectionResult?.aluminumWireDistance, "mm") || "-" }}
          </wd-form-item>
          <wd-form-item label="成品模后接头情况" prop="jointCondition" label-width="250rpx">
            {{ formatValue(detailData.inspectionResult?.jointCondition) || "-" }}
          </wd-form-item>
          <wd-form-item label="结论" prop="conclusion">
            {{ formatValue(detailData.inspectionResult?.conclusion) || "-" }}
          </wd-form-item>
        </wd-col>
      </wd-row>
      <!-- å·¡æ£€ç»“æžœ -->
      <wd-row v-if="detailData.processInspectionResult?.isFully">
        <text class="title">{{ "巡检结果" }}</text>
        <wd-col :span="24">
          <wd-form-item label="铝杆前、中、尾样品是否齐全" prop="processInspectionUserName">
            <wd-tag
              custom-class="space"
              :type="detailData.processInspectionResult?.isFully ? 'success' : 'danger'"
            >
              {{ detailData.processInspectionResult?.isFully ? "是" : "否" }}
            </wd-tag>
          </wd-form-item>
        </wd-col>
      </wd-row>
      <!-- é™„件模块 -->
      <wd-row class="attachment-section" v-if="detailData.files && detailData.files.length > 0">
        <text class="title">{{ "附件" }}</text>
        <view class="attachment-grid">
          <wd-col v-for="(file, index) in detailData.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>
    </div>
    <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 detailData = ref<any>({});
const show = ref(false);
const previewImageUrl = ref("");
// çŠ¶æ€ç±»åž‹æ˜ å°„
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.getDrawInspectInfoById({
      id: id,
    });
    detailData.value = response.data;
    console.log(detailData.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;
};
</script>
<style lang="scss" scoped>
.list {
  height: calc(100vh - 80px);
  padding: 12px;
  background: #f3f9f8;
  :deep() {
    .round {
      border-radius: 4px;
    }
  }
}
.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);
  /* æ¯è¡Œ4张,间距由gap控制,需计算宽度 */
  box-sizing: border-box;
}
/* é€‚配小屏幕,可调整每行数量(如每行2张) */
@media (max-width: 768px) {
  .attachment-item {
    width: calc(25% - 10px);
  }
}
</style>
src/pages/routingInspection/list/index.vue
@@ -55,14 +55,15 @@
const toDetail = (id: number, deviceType: number) => {
    console.log('点击卡片', id, deviceType);
        toast.show("点击卡片");
        if (deviceType == 0) {
    if (deviceType == 1) {
            // ç»žçº¿
            uni.navigateTo({
                url: `/pages/production/detail/wireDetail?id=${id}`,
                url: `/pages/routingInspection/detail/indexJX?id=${id}&deviceType=${deviceType}`,
            });
        } else if (deviceType == 1) {
    } else if (deviceType == 0) {
            // æ‹‰ä¸
            uni.navigateTo({
                url: `/pages/production/detail/twistDetail?id=${id}`,
                url: `/pages/routingInspection/detail/indexLS?id=${id}&deviceType=${deviceType}`,
            });
        }
    };