// pages/device_maintenance/create/index.js const { deviceApi, deviceMaintenanceApi, dictionaryApi } = require("../../../utils/api"); const dayjs = require("../../../miniprogram_npm/dayjs/index"); Page({ data: { loading: true, submitting: false, isEditMode: false, maintenanceId: null, subDevice: {}, // 子设备信息 maintenanceTypes: [], // 保养类型 typeIndex: -1, form: { sub_device_id: "", maintenance_type: "", start_time: "", start_time_display: "", end_time: "", end_time_display: "", notes: "", }, customType: "", // 自定义类型 showCustomInput: false, // 选择器可见性 typePickerVisible: false, startTimePickerVisible: false, endTimePickerVisible: false, currentDate: dayjs().format("YYYY-MM-DD HH:mm"), }, onLoad: function (options) { const sub_device_id = options.sub_device_id; const maintenance_id = options.maintenance_id; this.setData({ isEditMode: !!maintenance_id, maintenanceId: maintenance_id || null, "form.sub_device_id": parseInt(sub_device_id), }); wx.setNavigationBarTitle({ title: this.data.isEditMode ? "编辑保养记录" : "创建保养记录", }); this.initializePage(sub_device_id, maintenance_id); }, async initializePage(sub_device_id, maintenance_id) { try { await this.loadMaintenanceTypes(); if (this.data.isEditMode) { await this.loadMaintenanceData(maintenance_id); } else { await this.loadSubDeviceInfo(sub_device_id); this.setData({ "form.start_time": new Date().getTime(), "form.start_time_display": dayjs().format("YYYY-MM-DD HH:mm"), }); } } catch (error) { this.showMessage("页面加载失败,请返回重试", "error"); } finally { this.setData({ loading: false }); } }, async loadMaintenanceTypes() { try { const res = await dictionaryApi.getDictionaryByType("maintenance_type"); if (res.code === 200) { const types = res.data.map(item => ({ value: item.value, label: item.value, })); types.push({ value: "custom", label: "手动输入" }); this.setData({ maintenanceTypes: types }); if (!this.data.isEditMode && types.length > 1) { this.setData({ typeIndex: 0, "form.maintenance_type": types[0].value, }); } else if (types.length === 1) { // 只有手动输入选项 this.setData({ typeIndex: 0, showCustomInput: true, "form.maintenance_type": "", }); } } } catch (error) { this.setData({ maintenanceTypes: [{ value: "custom", label: "手动输入" }], typeIndex: 0, showCustomInput: true, "form.maintenance_type": "", }); } }, async loadSubDeviceInfo(sub_device_id) { try { const res = await deviceApi.getSubDeviceById(sub_device_id); if (res.code === 200 || res.code === 0) { this.setData({ subDevice: res.data }); } else { throw new Error('获取子设备信息失败'); } } catch (error) { this.showMessage("加载设备信息失败", "error"); this.setData({ subDevice: { name: '加载失败' } }); } }, async loadMaintenanceData(maintenance_id) { try { const res = await deviceMaintenanceApi.getMaintenance(maintenance_id); if (res.code === 200) { const maintenance = res.data; await this.loadSubDeviceInfo(maintenance.sub_device_id); this.setData({ form: { sub_device_id: maintenance.sub_device_id, maintenance_type: maintenance.maintenance_type, start_time: new Date(maintenance.start_time).getTime(), start_time_display: dayjs(maintenance.start_time).format("YYYY-MM-DD HH:mm"), end_time: maintenance.end_time ? new Date(maintenance.end_time).getTime() : "", end_time_display: maintenance.end_time ? dayjs(maintenance.end_time).format("YYYY-MM-DD HH:mm") : "", notes: maintenance.notes || "", }, }); } else { throw new Error('获取保养记录失败'); } } catch (error) { this.showMessage("加载保养记录失败", "error"); } }, showTypePicker() { this.setData({ typePickerVisible: true }); }, showStartTimePicker() { this.setData({ startTimePickerVisible: true }); }, showEndTimePicker() { this.setData({ endTimePickerVisible: true }); }, onTypeConfirm(e) { const selectedValue = e.detail.value[0]; const selectedIndex = this.data.maintenanceTypes.findIndex(type => type.value === selectedValue); const selectedType = this.data.maintenanceTypes[selectedIndex]; if (!selectedType) { this.showMessage("选择的保养类型无效", "error"); return; } if (selectedType.value === "custom") { this.setData({ typeIndex: selectedIndex, showCustomInput: true, "form.maintenance_type": "", typePickerVisible: false, }); } else { this.setData({ typeIndex: selectedIndex, showCustomInput: false, "form.maintenance_type": selectedType.value, typePickerVisible: false, }); } }, onTypePickerCancel() { this.setData({ typePickerVisible: false }); }, onTypeChange(e) { const selectedValue = e.detail.value[0]; const selectedIndex = this.data.maintenanceTypes.findIndex(type => type.value === selectedValue); this.setData({ typeIndex: selectedIndex }); }, onCustomTypeChange(e) { const customType = e.detail.value; this.setData({ customType: customType, "form.maintenance_type": customType, }); }, onStartTimeConfirm(e) { const { value } = e.detail; // 将ISO格式转换为iOS兼容格式 const formattedValue = value.replace('T', ' ').substring(0, 16); this.setData({ "form.start_time": new Date(value).getTime(), "form.start_time_display": dayjs(value).format("YYYY-MM-DD HH:mm"), startTimePickerVisible: false, }); }, onStartTimeCancel() { this.setData({ startTimePickerVisible: false }); }, onEndTimeConfirm(e) { const { value } = e.detail; // 将ISO格式转换为iOS兼容格式 const formattedValue = value.replace('T', ' ').substring(0, 16); this.setData({ "form.end_time": new Date(value).getTime(), "form.end_time_display": dayjs(value).format("YYYY-MM-DD HH:mm"), endTimePickerVisible: false, }); }, onEndTimeCancel() { this.setData({ endTimePickerVisible: false }); }, onNotesChange(e) { this.setData({ "form.notes": e.detail.value }); }, validateForm() { const { sub_device_id, maintenance_type, start_time } = this.data.form; if (!sub_device_id) { this.showMessage("子设备信息加载失败", "error"); return false; } if (!maintenance_type) { this.showMessage("请选择或输入保养类型", "error"); return false; } if (!start_time) { this.showMessage("请选择开始时间", "error"); return false; } return true; }, async submitForm() { if (!this.validateForm()) { return; } this.setData({ submitting: true }); try { const formData = { sub_device_id: this.data.form.sub_device_id, maintenance_type: this.data.form.maintenance_type, start_time: dayjs(this.data.form.start_time).format("YYYY-MM-DD HH:mm:ss"), end_time: this.data.form.end_time ? dayjs(this.data.form.end_time).format("YYYY-MM-DD HH:mm:ss") : null, notes: this.data.form.notes || '', }; let res; if (this.data.isEditMode) { res = await deviceMaintenanceApi.updateMaintenance(this.data.maintenanceId, formData); } else { res = await deviceMaintenanceApi.createMaintenance(formData); } if (res.code === 200 || res.code === 0) { this.showMessage(this.data.isEditMode ? "更新成功" : "添加成功", "success"); setTimeout(() => { wx.navigateBack(); }, 1500); } else { throw new Error(res.message || (this.data.isEditMode ? "更新失败" : "添加失败")); } } catch (error) { this.showMessage(error.message || (this.data.isEditMode ? "更新失败" : "添加失败"), "error"); } finally { this.setData({ submitting: false }); } }, showMessage(message, type = "info") { wx.showToast({ title: message, icon: type === "success" ? "success" : type === "error" ? "error" : "none", duration: 2000, }); }, });