| | |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | <u-form-item label="保养项目" prop="maintenanceItem" border-bottom required> |
| | | <u-input |
| | | v-model="form.maintenanceItem" |
| | | placeholder="请输入保养项目" |
| | | clearable |
| | | /> |
| | | </u-form-item> |
| | | |
| | | <u-form-item label="计划保养日期" prop="maintenancePlanTime" required border-bottom> |
| | | <u-input |
| | |
| | | |
| | | // 设备选项 |
| | | const deviceOptions = ref([]); |
| | | const deviceNameText = ref(''); |
| | | // 转换为 action-sheet 需要的格式 |
| | | const deviceActions = computed(() => { |
| | | return deviceOptions.value.map(item => ({ |
| | |
| | | const formRules = { |
| | | deviceLedgerId: [{ required: true, trigger: "change", message: "请选择设备名称" }], |
| | | maintenancePlanTime: [{ required: true, trigger: "change", message: "请选择计划保养日期" }], |
| | | maintenanceItem: [{ required: true, trigger: "blur", message: "请输入保养项目" }], |
| | | }; |
| | | |
| | | // 使用 ref 声明表单数据 |
| | | const form = ref({ |
| | | deviceLedgerId: undefined, // 设备ID |
| | | deviceNameText: '', // 设备名称显示 |
| | | deviceModel: undefined, // 规格型号 |
| | | maintenanceItem: '', // 保养项目 |
| | | maintenancePlanTime: dayjs().format("YYYY-MM-DD"), // 计划保养日期 |
| | | }); |
| | | |
| | |
| | | // 加载表单数据(编辑模式) |
| | | const loadForm = async (id) => { |
| | | if (id) { |
| | | console.log('id:', id); |
| | | |
| | | operationType.value = 'edit'; |
| | | try { |
| | | const { code, data } = await getUpkeepById(id); |
| | | console.log('获取详情:', data); |
| | | if (code == 200) { |
| | | form.value.deviceLedgerId = data.deviceLedgerId; |
| | | form.value.deviceModel = data.deviceModel; |
| | | form.value.maintenanceItem = data.maintenanceItem; |
| | | form.value.maintenancePlanTime = dayjs(data.maintenancePlanTime).format("YYYY-MM-DD"); |
| | | // 设置设备名称显示 |
| | | const device = deviceOptions.value.find(item => item.id === data.deviceLedgerId); |
| | |
| | | } |
| | | |
| | | isScanning.value = true; |
| | | showToast('扫码成功,3秒后自动填充设备信息'); |
| | | showToast('扫码成功'); |
| | | |
| | | // 3秒后处理扫码结果 |
| | | scanTimer.value = setTimeout(() => { |
| | | processScanResult(scanResult); |
| | | isScanning.value = false; |
| | | }, 3000); |
| | | }, 1000); |
| | | }; |
| | | |
| | | function getDeviceIdByRegExp(url) { |
| | | // 匹配deviceId=后面的数字 |
| | | const reg = /deviceId=(\d+)/; |
| | | const match = url.match(reg); |
| | | // 如果匹配到结果,返回数字类型,否则返回null |
| | | return match ? Number(match[1]) : null; |
| | | } |
| | | // 处理扫码结果并匹配设备 |
| | | const processScanResult = (scanResult) => { |
| | | // 在设备列表中查找匹配的设备 |
| | | // 假设二维码内容是设备名称或设备编号 |
| | | const matchedDevice = deviceOptions.value.find(device => |
| | | device.deviceName === scanResult || |
| | | device.deviceCode === scanResult || |
| | | device.id.toString() === scanResult |
| | | ); |
| | | const deviceId = getDeviceIdByRegExp(scanResult); |
| | | const matchedDevice = deviceOptions.value.find(item => item.id == deviceId); |
| | | |
| | | if (matchedDevice) { |
| | | // 找到匹配的设备,自动填充 |
| | |
| | | const onDeviceConfirm = (selected) => { |
| | | // selected 返回的是选中项 |
| | | form.value.deviceLedgerId = selected.value; |
| | | form.value.deviceNameText = selected.name; |
| | | form.value.deviceNameText = selected.text; |
| | | const selectedDevice = deviceOptions.value.find(item => item.id === selected.value); |
| | | if (selectedDevice) { |
| | | form.value.deviceModel = selectedDevice.deviceModel; |