diff --git a/src/apis/model/biz/entity/index.ts b/src/apis/model/biz/entity/index.ts
index 764883a..9acbc8c 100644
--- a/src/apis/model/biz/entity/index.ts
+++ b/src/apis/model/biz/entity/index.ts
@@ -15,4 +15,5 @@ export * from './alarm';
export * from './log';
export * from './other';
export * from './storage';
+export * from './upper-ndm';
export * from './video';
diff --git a/src/apis/model/biz/entity/upper-ndm/index.ts b/src/apis/model/biz/entity/upper-ndm/index.ts
new file mode 100644
index 0000000..f40cabb
--- /dev/null
+++ b/src/apis/model/biz/entity/upper-ndm/index.ts
@@ -0,0 +1,2 @@
+export * from './sync-camera-result';
+export * from './sync-camera-result-detail';
diff --git a/src/apis/model/biz/entity/upper-ndm/sync-camera-result-detail.ts b/src/apis/model/biz/entity/upper-ndm/sync-camera-result-detail.ts
new file mode 100644
index 0000000..3247e33
--- /dev/null
+++ b/src/apis/model/biz/entity/upper-ndm/sync-camera-result-detail.ts
@@ -0,0 +1,6 @@
+export interface SyncCameraResultDetail {
+ name: string;
+ deviceId: string;
+ ipAddress: string;
+ gbCode: string;
+}
diff --git a/src/apis/model/biz/entity/upper-ndm/sync-camera-result.ts b/src/apis/model/biz/entity/upper-ndm/sync-camera-result.ts
new file mode 100644
index 0000000..c311888
--- /dev/null
+++ b/src/apis/model/biz/entity/upper-ndm/sync-camera-result.ts
@@ -0,0 +1,10 @@
+import type { SyncCameraResultDetail } from './sync-camera-result-detail';
+
+export interface SyncCameraResult {
+ stationCode: string;
+ startTime: string;
+ endTime: string;
+ insertList: SyncCameraResultDetail[];
+ updateList: SyncCameraResultDetail[];
+ deleteList: SyncCameraResultDetail[];
+}
diff --git a/src/components/station-page/index.ts b/src/components/station-page/index.ts
index 878e9be..36fbc8f 100644
--- a/src/components/station-page/index.ts
+++ b/src/components/station-page/index.ts
@@ -4,3 +4,4 @@ export { default as DeviceParamsConfigModal } from './device-params-config-modal
export { default as OfflineDeviceDetailModal } from './offline-device-detail-modal.vue';
export { default as RecordCheckExportModal } from './record-check-export-modal.vue';
export { default as StationCard } from './station-card.vue';
+export { default as SyncCameraResultModal } from './sync-camera-result-modal.vue';
diff --git a/src/components/station-page/sync-camera-result-modal.vue b/src/components/station-page/sync-camera-result-modal.vue
new file mode 100644
index 0000000..5aa0ff6
--- /dev/null
+++ b/src/components/station-page/sync-camera-result-modal.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+ {{ stationName }}
+
+
+ {{ endTime }} 完成
+
+
+
+
+
+
+ {{ insertList.length }}
+
+
+
+
+
+ {{ updateList.length }}
+
+
+
+
+
+ {{ deleteList.length }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/composables/stomp/index.ts b/src/composables/stomp/index.ts
index cd77973..2cc88ae 100644
--- a/src/composables/stomp/index.ts
+++ b/src/composables/stomp/index.ts
@@ -1,5 +1,5 @@
-import type { NdmDeviceAlarmLogResultVO } from '@/apis';
-import { TOPIC_DEVICE_ALARM } from '@/constants';
+import type { NdmDeviceAlarmLogResultVO, Station, SyncCameraResult } from '@/apis';
+import { TOPIC_DEVICE_ALARM, SYNC_CAMERA_STATUS_TOPIC } from '@/constants';
import { useAlarmStore } from '@/stores';
import { Client } from '@stomp/stompjs';
import { destr } from 'destr';
@@ -19,6 +19,8 @@ export const useStompClient = () => {
const { unreadAlarmCount } = storeToRefs(alarmStore);
const stompClient = ref(null);
+ const syncCameraResult = ref>({});
+
onMounted(() => {
stompClient.value = new Client({
brokerURL: getBrokerUrl(),
@@ -33,10 +35,15 @@ export const useStompClient = () => {
unreadAlarmCount.value++;
}
});
+ stompClient.value?.subscribe(SYNC_CAMERA_STATUS_TOPIC, (message) => {
+ const { stationCode, startTime, endTime, insertList, updateList, deleteList } = destr(message.body);
+ syncCameraResult.value[stationCode] = { stationCode, startTime, endTime, insertList, updateList, deleteList };
+ });
},
onDisconnect: () => {
console.log('Stomp连接断开');
stompClient.value?.unsubscribe(TOPIC_DEVICE_ALARM);
+ stompClient.value?.unsubscribe(SYNC_CAMERA_STATUS_TOPIC);
},
onStompError: (frame) => {
console.log('Stomp错误', frame);
@@ -57,5 +64,10 @@ export const useStompClient = () => {
return {
stompClient,
+
+ syncCameraResult,
+ afterCheckSyncCamera: () => {
+ syncCameraResult.value = {};
+ },
};
};
diff --git a/src/constants/stomp.ts b/src/constants/stomp.ts
index 6360065..5711fa7 100644
--- a/src/constants/stomp.ts
+++ b/src/constants/stomp.ts
@@ -1 +1,3 @@
export const TOPIC_DEVICE_ALARM = '/topic/deviceAlarm';
+
+export const SYNC_CAMERA_STATUS_TOPIC = '/topic/syncCameraStatus';
diff --git a/src/layouts/app-layout.vue b/src/layouts/app-layout.vue
index e4993a0..742d9b0 100644
--- a/src/layouts/app-layout.vue
+++ b/src/layouts/app-layout.vue
@@ -5,7 +5,7 @@ function renderIcon(icon: Component): () => VNode {