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