修复设备数据重复查询的问题
This commit is contained in:
parent
fb2f3a1da1
commit
61a3e7e594
@ -104,6 +104,10 @@ const fetchData = async () => {
|
||||
}
|
||||
};
|
||||
|
||||
// ioTDataType 与 props.value 两个 immediate 侦听在初值到达时序错开时会各调一次 fetchData,
|
||||
// 导致 DevicePatchListAsync 重复请求。用防抖把相邻触发合并为一次,执行时读取最终 query 状态。
|
||||
const scheduleFetch = useDebounceFn(() => fetchData(), 100);
|
||||
|
||||
/**
|
||||
* 处理搜索输入
|
||||
*/
|
||||
@ -145,7 +149,7 @@ watch(
|
||||
searchInput.value = '';
|
||||
pendingAutoSelectFirst.value = !!props.value;
|
||||
if (newVal) {
|
||||
fetchData();
|
||||
scheduleFetch();
|
||||
} else {
|
||||
options.value = [];
|
||||
total.value = 0;
|
||||
@ -172,7 +176,7 @@ watch(
|
||||
query.value.pageIndex = 1;
|
||||
query.value.deviceAddress = newVal;
|
||||
pendingAutoSelectFirst.value = true;
|
||||
fetchData();
|
||||
scheduleFetch();
|
||||
},
|
||||
{ immediate: true },
|
||||
);
|
||||
|
||||
@ -111,12 +111,25 @@ const isInitializing = ref(false);
|
||||
// 设备下拉自动选中真实路径时会连续触发多次表单值变化(原值 → 清空 → 完整路径),
|
||||
// 用防抖把这些变化合并为一次查询,并在执行时读取“最终”表单值,
|
||||
// 避免多次并发查询竞态导致空结果覆盖有数据结果。
|
||||
// 记录上一次实际发起查询的条件签名,避免“自动选中触发”与“初始化兜底触发”
|
||||
// 在同一完整路径下重复投递 DeviceDataInfoPage(两次都带数据、但纯属多余)。
|
||||
const lastReloadSig = ref<string>('');
|
||||
const debouncedReload = useDebounceFn(async () => {
|
||||
if (!gridApi?.formApi) {
|
||||
return;
|
||||
}
|
||||
const values = await gridApi.formApi.getValues();
|
||||
if (values.DeviceAddress && values.IoTDataType) {
|
||||
const sig = [
|
||||
values.IoTDataType,
|
||||
values.DeviceAddress,
|
||||
values.StartCreationTime,
|
||||
values.EndCreationTime,
|
||||
].join('|');
|
||||
if (sig === lastReloadSig.value) {
|
||||
return;
|
||||
}
|
||||
lastReloadSig.value = sig;
|
||||
gridApi.reload(values);
|
||||
}
|
||||
}, 200);
|
||||
@ -193,6 +206,9 @@ const gridOptions: VxeGridProps<any> = {
|
||||
showOverflow: true,
|
||||
showHeaderOverflow: true,
|
||||
proxyConfig: {
|
||||
// 关闭挂载时的自动查询:初始表单里的设备地址是路由带来的“原始地址”,
|
||||
// 直接作为 DevicePath 查询必然 204;真正的查询由设备下拉自动选中真实树路径后经防抖触发。
|
||||
autoLoad: false,
|
||||
ajax: {
|
||||
query: async ({ page, sorts, filters }, formValues) => {
|
||||
// 确保page参数存在
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user