From 17b92e9b60dda6dcc20c748046a5ff3c3958d52e Mon Sep 17 00:00:00 2001
From: wangrong <wangrong@shsening.com>
Date: 星期五, 28 八月 2026 16:19:11 +0800
Subject: [PATCH] 增加首页大屏显示
---
src/modules/report/hooks/use-screen.ts | 64 +++++++++++++++++++++++++------
1 files changed, 51 insertions(+), 13 deletions(-)
diff --git a/src/modules/report/hooks/use-screen.ts b/src/modules/report/hooks/use-screen.ts
index 0ea549a..a6621c0 100644
--- a/src/modules/report/hooks/use-screen.ts
+++ b/src/modules/report/hooks/use-screen.ts
@@ -2,10 +2,24 @@
import { useDark } from '@vueuse/core';
import { useTheme } from '/#/theme';
import { useCool } from '/@/cool';
-import { emptyScreen, type ScreenData, type TimeRange } from '../data/screen';
+import {
+ groupDemoFields,
+ isDemoField,
+ isDemoSection
+} from '../data/screen-field-meta';
+import {
+ initialScreenData,
+ resolveScreenData,
+ type ScreenDataMode
+} from '../data/screen-merge';
+import type { ScreenData, TimeRange } from '../data/screen';
const sharedTimeRange = ref<TimeRange>('month');
-const screenData = ref<ScreenData>(emptyScreen());
+const initial = initialScreenData(sharedTimeRange.value);
+const screenData = ref<ScreenData>(initial.data);
+const dataMode = ref<ScreenDataMode>(initial.mode);
+const demoFields = ref<string[]>(initial.demoFields);
+const liveFields = ref<string[]>(initial.liveFields);
const loading = ref(false);
const loadError = ref('');
@@ -21,6 +35,9 @@
return {
timeRange: sharedTimeRange,
data: screenData,
+ dataMode,
+ demoFields,
+ liveFields,
loading,
loadError,
reload: () => loadImpl()
@@ -29,6 +46,13 @@
let inited = false;
let loadImpl: () => Promise<void> = async () => {};
+
+function applyResolved(resolved: ReturnType<typeof resolveScreenData>) {
+ screenData.value = resolved.data;
+ dataMode.value = resolved.mode;
+ demoFields.value = resolved.demoFields;
+ liveFields.value = resolved.liveFields;
+}
export function useScreenLoader() {
const { service } = useCool();
@@ -46,17 +70,9 @@
method: 'POST',
data: payload
});
- const fallback = emptyScreen(sharedTimeRange.value);
- screenData.value = {
- ...fallback,
- ...(res || {}),
- kpis: { ...fallback.kpis, ...(res?.kpis || {}) },
- trend: { ...fallback.trend, ...(res?.trend || {}) },
- pointFlow: { ...fallback.pointFlow, ...(res?.pointFlow || {}) },
- ordersByType: { ...fallback.ordersByType, ...(res?.ordersByType || {}) }
- };
+ applyResolved(resolveScreenData(res, sharedTimeRange.value));
} catch (e: any) {
- screenData.value = emptyScreen(sharedTimeRange.value);
+ applyResolved(resolveScreenData(null, sharedTimeRange.value));
loadError.value = e?.message || '椹鹃┒鑸辨帴鍙h皟鐢ㄥけ璐�';
} finally {
loading.value = false;
@@ -72,7 +88,29 @@
load();
- return { load, loading, loadError };
+ return { load, loading, loadError, dataMode };
+}
+
+/** 鍒ゆ柇鍖哄潡/瀛楁鏄惁涓烘紨绀烘暟鎹紙mixed 妯″紡涓嬫寜瀛楁绾у垽瀹氾級 */
+export function useScreenFieldSource() {
+ const { dataMode, demoFields } = useScreenData();
+
+ const demoSections = computed(() => groupDemoFields(demoFields.value));
+
+ function demoSection(section: string) {
+ return isDemoSection(section, demoFields.value, dataMode.value);
+ }
+
+ function demoField(field: string) {
+ return isDemoField(field, demoFields.value, dataMode.value);
+ }
+
+ return {
+ dataMode,
+ demoSections,
+ isDemoSection: demoSection,
+ isDemoField: demoField
+ };
}
export function useChartTheme() {
--
Gitblit v1.9.1