303 lines
8.6 KiB
JavaScript
303 lines
8.6 KiB
JavaScript
// 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,
|
|
});
|
|
},
|
|
});
|