From daca252cb9d4ac6280251606f832d8c52d6cfd91 Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Thu, 5 Nov 2026 09:50:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(device):=20=E5=9C=A8=E7=BA=BF=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=94=B9=E4=B8=BA=E9=9D=9E=E9=98=BB=E5=A1=9E=E8=A1=A5?= =?UTF-8?q?=E9=BD=90=EF=BC=8C=E6=81=A2=E5=A4=8D=E8=A1=A8=E5=8D=95=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E8=87=AA=E5=8A=A8=E5=8E=BB=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 列表先渲染,批量在线状态返回后再更新;新增/编辑提交前 trim 文本字段,SN 与昵称拒绝纯空白。 --- src/views/devices/sn/config/add.ts | 22 ++++++++++++++++++++-- src/views/devices/sn/config/content.ts | 11 ++++------- src/views/devices/sn/config/edit.ts | 19 +++++++++---------- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/views/devices/sn/config/add.ts b/src/views/devices/sn/config/add.ts index cb6bbb3a..8f6922ec 100644 --- a/src/views/devices/sn/config/add.ts +++ b/src/views/devices/sn/config/add.ts @@ -2,6 +2,24 @@ import DeviceAPI from "@/api/device"; import type { DeviceForm } from "@/api/device/types"; import type { CrudFormConfig } from "@/components/Crud/types"; +/** 表单不再自动 trim,提交前去掉文本字段首尾空格 */ +function trimText(data: DeviceForm): DeviceForm { + const payload = { ...data }; + for (const key of [ + "serialno", + "snModel", + "snName", + "snMobile", + "snImei", + "deviceType", + "source", + ] as const) { + const value = payload[key]; + if (typeof value === "string") payload[key] = value.trim(); + } + return payload; +} + const addFormConfig: CrudFormConfig = { component: "dialog", dialog: { @@ -12,12 +30,12 @@ const addFormConfig: CrudFormConfig = { form: { labelWidth: 100, }, - submitForm: (data) => DeviceAPI.create(data), + submitForm: (data) => DeviceAPI.create(trimText(data)), fields: [ { label: "设备SN", prop: "serialno", - rules: [{ required: true, message: "设备SN不能为空", trigger: "blur" }], + rules: [{ required: true, whitespace: true, message: "设备SN不能为空", trigger: "blur" }], type: "input", attrs: { placeholder: "请输入设备序列号", diff --git a/src/views/devices/sn/config/content.ts b/src/views/devices/sn/config/content.ts index 144afa8c..a5605221 100644 --- a/src/views/devices/sn/config/content.ts +++ b/src/views/devices/sn/config/content.ts @@ -1,7 +1,7 @@ import DeviceAPI from "@/api/device"; import type { DeviceItem, DeviceQueryParams } from "@/api/device/types"; import type { CrudTableConfig } from "@/components/Crud/types"; -import { onlineStatus, syncOnlineStatus } from "./online"; +import { syncOnlineStatus, updateOnlineStatus } from "./online"; /** 列表接口不保证带在线状态,加载后批量补齐 */ async function fetchDevices(params: DeviceQueryParams) { @@ -9,12 +9,9 @@ async function fetchDevices(params: DeviceQueryParams) { syncOnlineStatus(page.list); const sns = page.list.map((item) => item.serialno).filter((sn): sn is string => !!sn); if (sns.length) { - await DeviceAPI.getOnlineStatusBatch(sns) - .then((onlineMap) => { - Object.values(onlineMap ?? {}).forEach((info) => { - if (info?.serialno) onlineStatus[info.serialno] = info.online ?? 0; - }); - }) + // 在线状态后补,不阻塞列表首屏 + void DeviceAPI.getOnlineStatusBatch(sns) + .then((onlineMap) => Object.values(onlineMap ?? {}).forEach(updateOnlineStatus)) .catch(() => undefined); } return page; diff --git a/src/views/devices/sn/config/edit.ts b/src/views/devices/sn/config/edit.ts index b899c6d1..dd1200eb 100644 --- a/src/views/devices/sn/config/edit.ts +++ b/src/views/devices/sn/config/edit.ts @@ -15,15 +15,14 @@ const editFormConfig: CrudFormConfig = { labelWidth: 100, }, // 编辑只回传可修改字段(仅设备昵称与状态) - submitForm: (data) => - DeviceAPI.update( - data.id as string, - { - id: data.id, - snName: data.snName, - status: data.status, - } as DeviceForm, - ), + submitForm: (data) => { + const payload = { + id: data.id, + snName: data.snName?.trim(), + status: data.status, + } as DeviceForm; + return DeviceAPI.update(payload.id as string, payload); + }, fields: [ { label: "设备SN", @@ -38,7 +37,7 @@ const editFormConfig: CrudFormConfig = { { label: "设备昵称", prop: "snName", - rules: [{ required: true, message: "设备昵称不能为空", trigger: "blur" }], + rules: [{ required: true, whitespace: true, message: "设备昵称不能为空", trigger: "blur" }], type: "input", attrs: { placeholder: "请输入设备昵称",