import type { ComponentRenderProxy, VNode, VNodeChild, ComponentPublicInstance, FunctionalComponent, PropType as VuePropType } from 'vue'; declare global { // [perf-base-v1] 卡1/卡7: public/js/config.js 注入的全局配置(经典脚本顶层 const,为全局词法绑定,不在 window 上) const VUE_APP_URL: { baseUrl: string; // 后台地址 webRtcUrl: string; // rtsp 服务器地址前缀 wsUrl: string; // WebSocket 地址 onlyOfficeUrl?: string; // OnlyOffice Document Server 反向代理前缀 autoLoginToken?: string; // [SEC-20260913-R2] 跨系统自动登录票据(部署注入,与服务端 SDJT_AUTO_LOGIN_TOKEN 配套) difyUrl?: string; // [perf-base-v1] 卡7: Dify 服务反向代理前缀 difyApiKey?: string; // [perf-base-v1] 卡7: Dify 应用 Key(生产应由后端代理下发) }; // [perf-base-v1] 卡1: OnlyOffice Documents API 全局(由 src/utils/onlyOffice.ts loadDocsApi 按需注入) const DocsAPI: { DocEditor: new (placeholderId: string, config?: Recordable) => any; }; const VENT_PARAM: { simulatedPassword: string; showReport: boolean; isoOpenSso: string; modalText: string; productionCrlPlatformUrl: string; safetyCrlPlatformUrl: string; gasControlMock: boolean; historyIsMultiple: boolean; is2DModel: boolean; }; interface GlobalConfig { simulatedPassword: string; History_Type: string; pageType: string; showReport: boolean; is2DModel: boolean; } const __APP_INFO__: { pkg: { name: string; version: string; dependencies: Recordable; devDependencies: Recordable; }; lastBuildTime: string; }; // declare interface Window { // // Global vue app instance // __APP__: App; // } // vue declare type PropType = VuePropType; declare type VueNode = VNodeChild | JSX.Element; export type Writable = { -readonly [P in keyof T]: T[P]; }; declare type Nullable = T | null; declare type NonNullable = T extends null | undefined ? never : T; declare type Recordable = Record; declare type ReadonlyRecordable = { readonly [key: string]: T; }; declare type Indexable = { [key: string]: T; }; declare type DeepPartial = { [P in keyof T]?: DeepPartial; }; declare type TimeoutHandle = ReturnType; declare type IntervalHandle = ReturnType; declare interface ChangeEvent extends Event { target: HTMLInputElement; } declare interface WheelEvent { path?: EventTarget[]; } interface ImportMetaEnv extends ViteEnv { __: unknown; } interface ImportMeta { readonly env: ImportMetaEnv; } declare interface ViteEnv { VITE_PORT: number; VITE_USE_MOCK: boolean; VITE_PUBLIC_PATH: string; VITE_PROXY: [string, string][]; VITE_GLOB_APP_TITLE: string; VITE_GLOB_APP_SHORT_NAME: string; VITE_USE_CDN: boolean; VITE_BUILD_COMPRESS: 'gzip' | 'brotli' | 'none'; VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean; VITE_GLOB_DOMAIN_URL: string; VITE_CACHE_CIPHER_KEY_CHAR_CODE: string; VITE_CACHE_CIPHER_IV_CHAR_CODE: string; VITE_LOGIN_CIPHER_KEY_CHAR_CODE: string; VITE_LOGIN_CIPHER_IV_CHAR_CODE: string; VITE_MOCK_LOGIN_USERNAME_CHAR_CODE: string; VITE_MOCK_LOGIN_PASSWORD_CHAR_CODE: string; VITE_SIGNATURE_SECRET_CHAR_CODE: string; PROD: boolean; } declare function parseInt(s: string | number, radix?: number): number; declare function parseFloat(string: string | number): number; namespace JSX { // tslint:disable no-empty-interface type Element = VNode; // tslint:disable no-empty-interface type ElementClass = ComponentRenderProxy; interface ElementAttributesProperty { $props: any; } interface IntrinsicElements { [elem: string]: any; } interface IntrinsicAttributes { [elem: string]: any; } } } declare module 'vue' { export type JSXComponent = { new (): ComponentPublicInstance } | FunctionalComponent; }