| | |
| | | import { useTheme } from '/#/theme'; |
| | | import { useCool } from '/@/cool'; |
| | | import { |
| | | groupDemoFields, |
| | | isDemoField, |
| | | isDemoSection |
| | | groupDemoFields |
| | | } from '../data/screen-field-meta'; |
| | | import { |
| | | initialScreenData, |
| | |
| | | const liveFields = ref<string[]>(initial.liveFields); |
| | | const loading = ref(false); |
| | | const loadError = ref(''); |
| | | /** 驾驶舱是否处于浏览器全屏;萤石播放器在全屏切换后需 remount 才能恢复画面 */ |
| | | const screenFullscreen = ref(false); |
| | | const playerRemountKey = ref(0); |
| | | |
| | | export function provideScreenTime() { |
| | | return sharedTimeRange; |
| | |
| | | |
| | | export function useScreenTime() { |
| | | return sharedTimeRange; |
| | | } |
| | | |
| | | export function useScreenFullscreen() { |
| | | function bumpPlayerRemount(delay = 280) { |
| | | window.setTimeout(() => { |
| | | playerRemountKey.value += 1; |
| | | window.dispatchEvent( |
| | | new CustomEvent('report-screen-fullscreen-change', { |
| | | detail: { remountKey: playerRemountKey.value } |
| | | }) |
| | | ); |
| | | }, delay); |
| | | } |
| | | |
| | | function setFullscreen(active: boolean) { |
| | | const changed = screenFullscreen.value !== active; |
| | | screenFullscreen.value = active; |
| | | if (changed) { |
| | | bumpPlayerRemount(); |
| | | } |
| | | } |
| | | |
| | | return { |
| | | isFullscreen: screenFullscreen, |
| | | playerRemountKey, |
| | | bumpPlayerRemount, |
| | | setFullscreen |
| | | }; |
| | | } |
| | | |
| | | export function useScreenData() { |
| | |
| | | applyResolved(resolveScreenData(res, sharedTimeRange.value)); |
| | | } catch (e: any) { |
| | | applyResolved(resolveScreenData(null, sharedTimeRange.value)); |
| | | loadError.value = e?.message || '驾驶舱接口调用失败'; |
| | | const msg = e?.message || ''; |
| | | // 首页静默降级到演示数据,不展示登录/权限类错误文案 |
| | | if (!/登录失效|无权限/.test(msg)) { |
| | | loadError.value = msg || '驾驶舱接口调用失败'; |
| | | } |
| | | } finally { |
| | | loading.value = false; |
| | | } |
| | |
| | | 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 demoSection(_section: string) { |
| | | return false; |
| | | } |
| | | |
| | | function demoField(field: string) { |
| | | return isDemoField(field, demoFields.value, dataMode.value); |
| | | function demoField(_field: string) { |
| | | return false; |
| | | } |
| | | |
| | | return { |