张诺
7 小时以前 754f4ccb397866d31bcfa71c3c8099539647a18b
src/pages/equipmentManagement/upkeep/add.vue
@@ -27,6 +27,13 @@
               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
@@ -97,7 +104,6 @@
// 设备选项
const deviceOptions = ref([]);
const deviceNameText = ref('');
// 转换为 action-sheet 需要的格式
const deviceActions = computed(() => {
   return deviceOptions.value.map(item => ({
@@ -115,12 +121,15 @@
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"), // 计划保养日期
});
@@ -137,12 +146,16 @@
// 加载表单数据(编辑模式)
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);
@@ -187,24 +200,25 @@
   }
   
   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) {
      // 找到匹配的设备,自动填充
@@ -227,7 +241,7 @@
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;