新增设备报修验收功能,更新报修表单,增加验收人字段,调整状态管理,优化报修详情展示。
已修改5个文件
209 ■■■■ 文件已修改
src/api/equipmentManagement/repair.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages.json 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/equipmentManagement/repair/add.vue 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/equipmentManagement/repair/index.vue 80 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/equipmentManagement/repair/maintain.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/equipmentManagement/repair.js
@@ -101,3 +101,16 @@
    method: "delete",
  });
};
/**
 * @desc 设备报修验收
 * @param {验收参数} data
 * @returns
 */
export const acceptRepair = (data) => {
  return request({
    url: "/device/repair/acceptance",
    method: "post",
    data,
  });
};
src/pages.json
@@ -598,6 +598,20 @@
      }
    },
    {
      "path": "pages/equipmentManagement/repair/detail",
      "style": {
        "navigationBarTitleText": "设备报修详情",
        "navigationStyle": "custom"
      }
    },
    {
      "path": "pages/equipmentManagement/repair/acceptance",
      "style": {
        "navigationBarTitleText": "设备报修验收",
        "navigationStyle": "custom"
      }
    },
    {
      "path": "pages/equipmentManagement/upkeep/index",
      "style": {
        "navigationBarTitleText": "设备保养",
src/pages/equipmentManagement/repair/add.vue
@@ -62,11 +62,19 @@
          </template>
        </u-form-item>
        <u-form-item label="报修人"
                     prop="repairName"
                     prop="maintenanceName"
                     required
                     border-bottom>
          <u-input v-model="form.repairName"
          <u-input v-model="form.maintenanceName"
                   placeholder="请输入报修人"
                   clearable />
        </u-form-item>
        <u-form-item label="验收人"
                     prop="acceptanceName"
                     required
                     border-bottom>
          <u-input v-model="form.acceptanceName"
                   placeholder="请输入验收人"
                   clearable />
        </u-form-item>
        <u-form-item label="故障现象"
@@ -150,6 +158,9 @@
  } from "@/api/equipmentManagement/repair";
  import dayjs from "dayjs";
  import { formatDateToYMD } from "@/utils/ruoyi";
  import useUserStore from "@/store/modules/user";
  const userStore = useUserStore();
  const showToast = message => {
    uni.showToast({
      title: message,
@@ -195,7 +206,12 @@
    repairTime: [
      { required: true, trigger: "change", message: "请选择报修日期" },
    ],
    repairName: [{ required: true, trigger: "blur", message: "请输入报修人" }],
    maintenanceName: [
      { required: true, trigger: "blur", message: "请输入报修人" },
    ],
    acceptanceName: [
      { required: true, trigger: "blur", message: "请输入验收人" },
    ],
    remark: [{ required: true, trigger: "blur", message: "请输入故障现象" }],
  };
@@ -204,7 +220,9 @@
    deviceLedgerId: undefined, // 设备ID
    deviceModel: undefined, // 规格型号
    repairTime: dayjs().format("YYYY-MM-DD"), // 报修日期
    repairName: undefined, // 报修人
    status: "0",
    maintenanceName: userStore.nickName || userStore.name || "", // 报修人
    acceptanceName: undefined, // 验收人
    remark: undefined, // 故障现象
  });
@@ -413,10 +431,11 @@
  // 报修状态选项
  const repairStatusOptions = ref([
    { name: "待维修", value: "0" },
    { name: "完结", value: "1" },
    { name: "失败", value: "2" },
    { name: "待验收", value: "3" },
    { name: "完成", value: "1" },
    { name: "维修失败", value: "2" },
  ]);
  const repairStatusText = ref("");
  const repairStatusText = ref("待维修");
  // 打开报修状态选择器
  const openRepairStatusPicker = () => {
@@ -458,12 +477,19 @@
          form.value.deviceLedgerId = data.deviceLedgerId;
          form.value.deviceModel = data.deviceModel;
          form.value.repairTime = dayjs(data.repairTime).format("YYYY-MM-DD");
          form.value.repairName = data.repairName;
          form.value.maintenanceName =
            data.maintenanceName || data.repairName || "";
          form.value.acceptanceName = data.acceptanceName || "";
          form.value.remark = data.remark;
          form.value.status =
            data.status !== undefined && data.status !== null
              ? String(data.status)
              : "0";
          await fetchRepairFileList(id);
          repairStatusText.value =
            repairStatusOptions.value.find(item => item.value == data.status)
              ?.name || "";
            repairStatusOptions.value.find(
              item => item.value == String(data.status)
            )?.name || "待维修";
          // 设置设备名称显示
          const device = deviceOptions.value.find(
            item => item.id === data.deviceLedgerId
@@ -476,8 +502,13 @@
        showToast("获取详情失败");
      }
    } else {
      // 新增模式
      operationType.value = "add";
      form.value.status = "0";
      repairStatusText.value = "待维修";
      if (!form.value.maintenanceName) {
        form.value.maintenanceName =
          userStore.nickName || userStore.name || "";
      }
    }
  };
@@ -604,9 +635,18 @@
      } else if (!form.value.repairTime || form.value.repairTime.trim() === "") {
        isValid = false;
        errorMessage = "请选择报修日期";
      } else if (!form.value.repairName || form.value.repairName.trim() === "") {
      } else if (
        !form.value.maintenanceName ||
        form.value.maintenanceName.trim() === ""
      ) {
        isValid = false;
        errorMessage = "请输入报修人";
      } else if (
        !form.value.acceptanceName ||
        form.value.acceptanceName.trim() === ""
      ) {
        isValid = false;
        errorMessage = "请输入验收人";
      } else if (!form.value.remark || form.value.remark.trim() === "") {
        isValid = false;
        errorMessage = "请输入故障现象";
@@ -621,7 +661,11 @@
      const id = getPageId();
      // 准备提交数据
      const submitData = { ...form.value };
      const submitData = {
        ...form.value,
        status: Number(form.value.status ?? 0),
        repairName: form.value.maintenanceName,
      };
      const result = id
        ? await editRepair({ id: id, ...submitData })
src/pages/equipmentManagement/repair/index.vue
@@ -37,10 +37,8 @@
              <text class="item-id">设备名称:{{ item.deviceName }}</text>
            </view>
            <view class="status-tag">
              <u-tag v-if="item.status === 1"
                     type="success">完结</u-tag>
              <u-tag v-if="item.status === 0"
                     type="error">待维修</u-tag>
              <u-tag :type="getStatusTagType(item.status)"
                     size="small">{{ getStatusText(item.status) }}</u-tag>
            </view>
          </view>
          <up-divider></up-divider>
@@ -55,15 +53,20 @@
            </view>
            <view class="detail-row">
              <text class="detail-label">报修人</text>
              <text class="detail-value">{{ item.repairName || '-' }}</text>
              <text class="detail-value">{{ item.maintenanceName || item.repairName || '-' }}</text>
            </view>
            <view class="detail-row">
              <text class="detail-label">验收人</text>
              <text class="detail-value">{{ item.acceptanceName || '-' }}</text>
            </view>
            <view class="detail-row">
              <text class="detail-label">故障现象</text>
              <text class="detail-value">{{ item.remark || '-' }}</text>
            </view>
            <view class="detail-row">
            <view class="detail-row"
                  v-if="Number(item.status) !== 0">
              <text class="detail-label">维修人</text>
              <text class="detail-value">{{ item.maintenanceName || '-' }}</text>
              <text class="detail-value">{{ item.maintenancePerson || item.maintenanceName || '-' }}</text>
            </view>
            <view class="detail-row">
              <text class="detail-label">维修结果</text>
@@ -76,19 +79,33 @@
          </view>
          <!-- 按钮区域 -->
          <view class="action-buttons">
            <u-button type="info"
                      size="small"
                      plain
                      class="action-btn"
                      @click="goDetail(item.id)">
              详情
            </u-button>
            <u-button type="primary"
                      size="small"
                      class="action-btn"
                      :disabled="item.status === 1"
                      :disabled="Number(item.status) !== 0"
                      @click="edit(item.id)">
              编辑
            </u-button>
            <u-button type="warning"
                      size="small"
                      class="action-btn"
                      :disabled="item.status === 1"
                      :disabled="Number(item.status) !== 0"
                      @click="addMaintain(item.id)">
              新增维修
            </u-button>
            <u-button type="success"
                      size="small"
                      class="action-btn"
                      :disabled="!canAccept(item)"
                      @click="goAcceptance(item.id)">
              验收
            </u-button>
            <u-button type="error"
                      size="small"
@@ -130,6 +147,30 @@
  };
  const userStore = useUserStore();
  const STATUS_MAP = {
    0: "待维修",
    3: "待验收",
    1: "完成",
    2: "维修失败",
  };
  const getStatusText = status => STATUS_MAP[Number(status)] || "-";
  const getStatusTagType = status => {
    const map = { 0: "error", 3: "warning", 1: "success", 2: "error" };
    return map[Number(status)] || "info";
  };
  const getCurrentUserName = () =>
    (userStore.nickName || userStore.name || "").trim();
  const canAccept = item => {
    if (Number(item?.status) !== 3) return false;
    const current = getCurrentUserName();
    const target = (item?.acceptanceName || "").trim();
    return Boolean(current && target && current === target);
  };
  // 搜索关键词
  const searchKeyword = ref("");
@@ -205,6 +246,24 @@
    });
  };
  const goDetail = id => {
    if (!id) return;
    uni.navigateTo({
      url: `/pages/equipmentManagement/repair/detail?id=${id}`,
    });
  };
  const goAcceptance = id => {
    if (!id) {
      showToast("参数错误");
      return;
    }
    uni.setStorageSync("repairId", id);
    uni.navigateTo({
      url: `/pages/equipmentManagement/repair/acceptance?id=${id}`,
    });
  };
  // 编辑 - 跳转到add页面,通过id区分新增还是编辑
  const edit = id => {
    if (!id) return;
@@ -262,6 +321,7 @@
  }
  .action-buttons {
    gap: 8px; // 与公共样式中的 12px 不同
    flex-wrap: wrap;
    gap: 8px;
  }
</style>
src/pages/equipmentManagement/repair/maintain.vue
@@ -12,10 +12,10 @@
      <u-cell-group title="维修信息"
                    inset>
        <u-form-item prop="maintenanceName"
                     label="报修人"
                     label="维修人"
                     required>
          <u-input v-model="form.maintenanceName"
                   placeholder="请输入报修人"
                   placeholder="请输入维修人"
                   clearable />
        </u-form-item>
        <u-form-item prop="maintenanceResult"
@@ -177,7 +177,7 @@
  // 表单验证规则
  const formRules = {
    maintenanceName: [
      { required: true, trigger: "blur", message: "请输入报修人" },
      { required: true, trigger: "blur", message: "请输入维修人" },
    ],
    maintenanceResult: [
      { required: true, trigger: "blur", message: "请输入维修结果" },
@@ -187,11 +187,11 @@
    ],
  };
  const repairStatusOptions = ref([
    { name: "待维修", value: "0" },
    { name: "完结", value: "1" },
    { name: "失败", value: "2" },
    { name: "待验收", value: "3" },
    { name: "完成", value: "1" },
    { name: "维修失败", value: "2" },
  ]);
  const repairStatusText = ref("完结");
  const repairStatusText = ref("待验收");
  // 打开报修状态选择器
  const openRepairStatusPicker = () => {
    uni.showActionSheet({
@@ -204,10 +204,10 @@
  };
  // 使用 ref 声明表单数据
  const form = ref({
    maintenanceName: userStore.nickName || "", // 默认使用当前用户昵称
    maintenanceResult: undefined, // 维修结果
    maintenanceTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), // 维修日期(只显示日期)
    status: "1",
    maintenanceName: userStore.nickName || userStore.name || "",
    maintenanceResult: undefined,
    maintenanceTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
    status: "3",
    sparePartsIds: [],
  });
@@ -222,10 +222,10 @@
  // 重置表单数据和校验状态
  const resetForm = () => {
    form.value = {
      maintenanceName: userStore.nickName || "",
      maintenanceName: userStore.nickName || userStore.name || "",
      maintenanceResult: undefined,
      maintenanceTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
      status: "1",
      status: "3",
      sparePartsIds: [],
    };
    selectedSpareParts.value = [];
@@ -411,9 +411,9 @@
  // 初始化表单数据
  const initForm = async () => {
    form.value.status = "1";
    // 设置报修人为当前用户昵称
    form.value.maintenanceName = userStore.nickName || "";
    form.value.status = "3";
    form.value.maintenanceName = userStore.nickName || userStore.name || "";
    repairStatusText.value = "待验收";
    // 设置当前日期(只包含年月日)
    form.value.maintenanceTime = dayjs().format("YYYY-MM-DD HH:mm:ss");