diff --git a/src/components/device/device-tree/device-tree.vue b/src/components/device/device-tree/device-tree.vue
index 80ecd32..721e0be 100644
--- a/src/components/device/device-tree/device-tree.vue
+++ b/src/components/device/device-tree/device-tree.vue
@@ -1,6 +1,6 @@
-
+
diff --git a/src/composables/device/use-device-management.ts b/src/composables/device/use-device-management.ts
index 18e5483..5969b7b 100644
--- a/src/composables/device/use-device-management.ts
+++ b/src/composables/device/use-device-management.ts
@@ -1,13 +1,13 @@
import { deleteDeviceApi, exportDeviceApi, importDeviceApi, type ImportMsg, type NdmDevicePageQuery, type PageParams, type Station } from '@/apis';
+import { useStationDevicesMutation } from '@/composables';
import { DEVICE_TYPE_NAMES, type DeviceType } from '@/enums';
import { useDeviceStore, useStationStore } from '@/stores';
import { downloadByData, parseErrorFeedback } from '@/utils';
import { useMutation } from '@tanstack/vue-query';
+import { isCancel } from 'axios';
import dayjs from 'dayjs';
import { storeToRefs } from 'pinia';
import { h, onBeforeUnmount } from 'vue';
-import { useStationDevicesMutation } from '../query';
-import { isCancel } from 'axios';
export const useDeviceManagement = () => {
const stationStore = useStationStore();
@@ -182,3 +182,5 @@ export const useDeviceManagement = () => {
deleteDevice,
};
};
+
+export type UseDeviceManagementReturn = ReturnType;
diff --git a/src/composables/device/use-device-selection.ts b/src/composables/device/use-device-selection.ts
index dd1319b..4c0e839 100644
--- a/src/composables/device/use-device-selection.ts
+++ b/src/composables/device/use-device-selection.ts
@@ -1,26 +1,28 @@
-import type { LineDevices, NdmDeviceResultVO } from '@/apis';
+import type { LineDevices, NdmDeviceResultVO, Station } from '@/apis';
import { tryGetDeviceType, type DeviceType } from '@/enums';
import { useDeviceStore } from '@/stores';
import { watchDebounced } from '@vueuse/core';
import { storeToRefs } from 'pinia';
-import { onMounted, ref, watch } from 'vue';
+import { onMounted, ref, toValue, watch, type MaybeRefOrGetter } from 'vue';
import { useRoute, useRouter } from 'vue-router';
-export const useDeviceSelection = () => {
+export const useDeviceSelection = (options?: { syncRoute?: MaybeRefOrGetter }) => {
+ const { syncRoute } = options ?? {};
+
const route = useRoute();
const router = useRouter();
const deviceStore = useDeviceStore();
const { lineDevices } = storeToRefs(deviceStore);
- const selectedStationCode = ref();
+ const selectedStationCode = ref();
const selectedDeviceType = ref();
const selectedDevice = ref();
const initFromRoute = (lineDevices: LineDevices) => {
const { stationCode, deviceType, deviceDbId } = route.query;
if (stationCode) {
- selectedStationCode.value = stationCode as string;
+ selectedStationCode.value = stationCode as Station['code'];
}
if (deviceType) {
selectedDeviceType.value = deviceType as DeviceType;
@@ -40,7 +42,7 @@ export const useDeviceSelection = () => {
}
};
- const selectDevice = (device: NdmDeviceResultVO, stationCode: string) => {
+ const selectDevice = (device: NdmDeviceResultVO, stationCode: Station['code']) => {
selectedDevice.value = device;
selectedStationCode.value = stationCode;
const deviceType = tryGetDeviceType(device.deviceType);
@@ -49,20 +51,6 @@ export const useDeviceSelection = () => {
}
};
- const routeDevice = (device: NdmDeviceResultVO, stationCode: string, to: { path: string }) => {
- const deviceDbId = device.id;
- const deviceType = tryGetDeviceType(device.deviceType);
- router.push({
- path: to.path,
- query: {
- stationCode,
- deviceType,
- deviceDbId,
- fromPage: route.path,
- },
- });
- };
-
const syncToRoute = () => {
const query = { ...route.query };
// 当选中的设备发生变化时,删除fromPage参数
@@ -81,14 +69,20 @@ export const useDeviceSelection = () => {
router.replace({ query });
};
- watch(selectedDevice, syncToRoute);
+ watch(selectedDevice, () => {
+ if (toValue(syncRoute)) {
+ syncToRoute();
+ }
+ });
// lineDevices是shallowRef,因此需要深度侦听才能获取内部变化,
// 而单纯的深度侦听又可能会引发性能问题,因此尝试使用防抖侦听
watchDebounced(
lineDevices,
(newLineDevices) => {
- initFromRoute(newLineDevices);
+ if (toValue(syncRoute)) {
+ initFromRoute(newLineDevices);
+ }
},
{
debounce: 500,
@@ -97,7 +91,9 @@ export const useDeviceSelection = () => {
);
onMounted(() => {
- initFromRoute(lineDevices.value);
+ if (toValue(syncRoute)) {
+ initFromRoute(lineDevices.value);
+ }
});
return {
@@ -107,6 +103,7 @@ export const useDeviceSelection = () => {
initFromRoute,
selectDevice,
- routeDevice,
};
};
+
+export type UseDeviceSelectionReturn = ReturnType;
diff --git a/src/composables/device/use-device-tree.ts b/src/composables/device/use-device-tree.ts
index d460389..619c2d4 100644
--- a/src/composables/device/use-device-tree.ts
+++ b/src/composables/device/use-device-tree.ts
@@ -1,8 +1,11 @@
+import type { MaybeRefOrGetter } from 'vue';
import { useDeviceManagement } from './use-device-management';
import { useDeviceSelection } from './use-device-selection';
-export const useDeviceTree = () => {
- const deviceSelection = useDeviceSelection();
+export const useDeviceTree = (options?: { syncRoute?: MaybeRefOrGetter }) => {
+ const { syncRoute } = options ?? {};
+
+ const deviceSelection = useDeviceSelection({ syncRoute });
const deviceManagement = useDeviceManagement();
return {
@@ -10,3 +13,5 @@ export const useDeviceTree = () => {
...deviceManagement,
};
};
+
+export type UseDeviceTreeReturn = ReturnType;
diff --git a/src/pages/device-page.vue b/src/pages/device-page.vue
index efc680e..d4051e0 100644
--- a/src/pages/device-page.vue
+++ b/src/pages/device-page.vue
@@ -12,7 +12,7 @@ const { stations } = storeToRefs(stationStore);
const selectedStation = ref();
const selectedDevice = ref();
-const onSelectDevice: DeviceTreeProps['onSelectDevice'] = (device, stationCode) => {
+const onAfterSelectDevice: DeviceTreeProps['onAfterSelectDevice'] = (device, stationCode) => {
selectedDevice.value = device;
selectedStation.value = stations.value.find((station) => station.code === stationCode);
};
@@ -21,7 +21,7 @@ const onSelectDevice: DeviceTreeProps['onSelectDevice'] = (device, stationCode)
-
+