index.vue 5.34 KB
<template>
  <view class="u-page">
    <!-- 页面级加载组件 -->
    <up-loading-page
        v-if="loading"
        :loading="true"
        title="加载中..."
        color="#3c9cff"
    ></up-loading-page>

    <!-- 内容容器 -->
    <view v-else class="content-wrap">


      <template v-for="(i, index) in orderDetail" :key="index">
        <!-- 工单详情内容 -->
        <up-cell-group :border="false" inset style="margin: 20rpx;">
          <!-- 1. 工单编号 -->
          <up-cell
              :title="i.planName"

              class="up-line-1"
              align="middle"
          ></up-cell>

          <!-- 2. 工单位置 -->
          <up-cell
              title="计划编码"
              :value="i.planNo || '--'"
              class="up-line-1"
              align="middle"
          ></up-cell>

          <!-- 3. 工单名称 -->
          <up-cell
              title="养护周期"
              :value="`${i.rate}${uni.$dict.getDictLabel('cycle_id_type', i.cycleId)}`"
              class="up-line-1"
              align="middle"
          ></up-cell>

          <!-- 4. 情况描述 -->
          <up-cell
              title="计划有效期"
              :value="`${timeFormat(i.beginTime,'yy-mm-dd hh:MM:ss')} 至 ${timeFormat(i. endTime,'yy-mm-dd hh:MM:ss')}`"
              class="up-line-1"
              align="middle"
          ></up-cell>

          <!-- 5. 问题照片(核心修复:判断条件+空值处理) -->
          <up-cell title="照片" >
            <template #value>
              <view class="cell-content-wrap">

                <!-- 修复1:正确判断problemImgsList,补充空数组默认值 -->
                <up-album
                    v-if="!!i.imgList?.length"
                    :urls="i.imgList || []"
                    singleSize="70"
                    :preview-full-image="true"

                ></up-album>
                <text v-else class="empty-text">暂无问题照片</text>
              </view>
            </template>
          </up-cell>

          <!-- 7. 处理结果 -->
          <up-cell
              title="巡查描述"
              :value="i.remark || '--'"
              class="up-line-1"
              align="middle"
              :border="false"
          ></up-cell>

          <up-cell
              title="提交时间"
              :value="timeFormat(i.finishTime,'yy-mm-dd hh:MM:ss') || '--'"
              class="up-line-1"
              align="middle"
              :border="false"
          ></up-cell>


          <up-cell
              title="提交人"
              :value="i.userName || '--'"
              class="up-line-1"
              align="middle"
              :border="false"
          ></up-cell>
        </up-cell-group>
      </template>


    </view>
  </view>
</template>

<script setup lang="ts">
import { ref, reactive } from 'vue';
import { inspectioDetailByPlanno } from "@/api/patrol-manage/patrol-plan";
import { onLoad, onShow } from '@dcloudio/uni-app';
import { timeFormat } from '@/uni_modules/uview-plus';
// 状态管理
const loading = ref(true);
const orderDetail = ref([]);


/**
 * 获取工单详情
 */
const getOrderDetail = async (plan_no: string) => {
  try {
    loading.value = true;
    const res = await inspectioDetailByPlanno({ plan_no });
    console.log('接口返回:', res);
    // 优化:确保图片数组为数组类型,避免非数组导致渲染错误
    orderDetail.value = {
      ...res,
      problemImgsList: Array.isArray(res.problemImgsList) ? res.problemImgsList : [],
      completeImgsList: Array.isArray(res.completeImgsList) ? res.completeImgsList : []
    };
  } catch (error) {
    console.error('获取工单详情失败:', error);
    uni.showToast({ title: '加载失败,请重试', icon: 'none' });
  } finally {
    loading.value = false;
  }
};

// 页面加载
onLoad((options) => {
  const { planNo } = options;
  if (planNo) {
    getOrderDetail(planNo);
  } else {
    loading.value = false;
    uni.showToast({ title: '缺少工单ID', icon: 'none' });
  }
});
</script>

<style scoped lang="scss">
// 页面基础样式
.u-page {
  min-height: 100vh;
  background-color: #f5f5f5;
  box-sizing: border-box;
}

// 内容容器
.content-wrap {
  background: #fff;
  width: 100%;
  box-sizing: border-box;
  overflow-y: auto;
  min-height: calc(100vh - 40rpx);
}



// 空文本样式
.empty-text {
  color: #999;
  font-size: 28rpx;
  line-height: 80rpx;
  display: block;
  text-align: left;
}

// 优化uview组件样式
:deep(.up-cell-group) {
  --u-cell-group-background-color: #fff;
  --u-cell-group-border-radius: 12rpx;
  --u-cell-group-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
}

:deep(.up-cell) {
  --u-cell-title-font-size: 28rpx;
  --u-cell-value-font-size: 28rpx;
  --u-cell-title-color: #666;
  --u-cell-value-color: #333;
  --u-cell-padding: 20rpx 15rpx;
  --u-cell-border-color: #f5f5f5;
}

// 相册样式优化(关键:适配图片展示)
:deep(.up-album) {
  width: 100%;
  box-sizing: border-box;
}

:deep(.up-album__list) {
  display: flex;
  flex-wrap: wrap;
  padding: 0;
  margin: 0;
}

:deep(.up-album__item) {
  width: calc(33.333% - 10rpx);
  height: 200rpx; // 固定图片高度,避免变形
  margin: 5rpx;
  border-radius: 8rpx;
  overflow: hidden;
  background-color: #f8f8f8;
}

:deep(.up-album__image) {
  width: 100%;
  height: 100%;
  object-fit: cover; // 图片裁剪填充,避免拉伸
}


</style>