新增设备报修验收功能,更新报修表单,增加验收人字段,调整状态管理,优化报修详情展示。
| | |
| | | method: "delete", |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * @desc 设备报修验收 |
| | | * @param {验收参数} data |
| | | * @returns |
| | | */ |
| | | export const acceptRepair = (data) => { |
| | | return request({ |
| | | url: "/device/repair/acceptance", |
| | | method: "post", |
| | | data, |
| | | }); |
| | | }; |
| | |
| | | } |
| | | }, |
| | | { |
| | | "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": "设备保养", |
| | |
| | | </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="故障现象" |
| | |
| | | } 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, |
| | |
| | | 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: "请输入故障现象" }], |
| | | }; |
| | | |
| | |
| | | deviceLedgerId: undefined, // 设备ID |
| | | deviceModel: undefined, // 规格型号 |
| | | repairTime: dayjs().format("YYYY-MM-DD"), // 报修日期 |
| | | repairName: undefined, // 报修人 |
| | | status: "0", |
| | | maintenanceName: userStore.nickName || userStore.name || "", // 报修人 |
| | | acceptanceName: undefined, // 验收人 |
| | | remark: undefined, // 故障现象 |
| | | }); |
| | | |
| | |
| | | // 报修状态选项 |
| | | 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 = () => { |
| | |
| | | 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 |
| | |
| | | showToast("获取详情失败"); |
| | | } |
| | | } else { |
| | | // 新增模式 |
| | | operationType.value = "add"; |
| | | form.value.status = "0"; |
| | | repairStatusText.value = "待维修"; |
| | | if (!form.value.maintenanceName) { |
| | | form.value.maintenanceName = |
| | | userStore.nickName || userStore.name || ""; |
| | | } |
| | | } |
| | | }; |
| | | |
| | |
| | | } 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 = "请输入故障现象"; |
| | |
| | | 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 }) |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | </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" |
| | |
| | | }; |
| | | |
| | | 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(""); |
| | |
| | | }); |
| | | }; |
| | | |
| | | 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; |
| | |
| | | } |
| | | |
| | | .action-buttons { |
| | | gap: 8px; // 与公共样式中的 12px 不同 |
| | | flex-wrap: wrap; |
| | | gap: 8px; |
| | | } |
| | | </style> |
| | |
| | | <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" |
| | |
| | | // 表单验证规则 |
| | | const formRules = { |
| | | maintenanceName: [ |
| | | { required: true, trigger: "blur", message: "请输入报修人" }, |
| | | { required: true, trigger: "blur", message: "请输入维修人" }, |
| | | ], |
| | | maintenanceResult: [ |
| | | { required: true, trigger: "blur", message: "请输入维修结果" }, |
| | |
| | | ], |
| | | }; |
| | | 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({ |
| | |
| | | }; |
| | | // 使用 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: [], |
| | | }); |
| | | |
| | |
| | | // 重置表单数据和校验状态 |
| | | 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 = []; |
| | |
| | | |
| | | // 初始化表单数据 |
| | | 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"); |
| | | |