@jnrs/lingshu-smart 2.2.33 → 2.2.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/AGENTS.md +56 -3
  2. package/README.md +140 -0
  3. package/dist/components/debug/DebugPanel.vue.d.ts +2 -0
  4. package/dist/components/debug/PerformanceStats.vue.d.ts +42 -0
  5. package/dist/components/debug/ScriptRunner/ConfigPanel.vue.d.ts +36 -0
  6. package/dist/components/debug/ScriptRunner/LogPanel.vue.d.ts +19 -0
  7. package/dist/components/debug/ScriptRunner/StepsPanel.vue.d.ts +42 -0
  8. package/dist/components/debug/ScriptRunner/index.vue.d.ts +16 -0
  9. package/dist/components/debug/ScriptRunner/script.d.ts +72 -0
  10. package/dist/components/editor/ControlBar/CaseTitleEdit.vue.d.ts +40 -40
  11. package/dist/components/editor/DrawingBoard.vue.d.ts +3 -1
  12. package/dist/components/editor/OptionCard/Equipment/models/PartConfig.vue.d.ts +2 -0
  13. package/dist/components/editor/index.vue.d.ts +3 -1
  14. package/dist/components/index.d.ts +3 -1
  15. package/dist/components/index.js +29307 -2053
  16. package/dist/components/preview/index.vue.d.ts +1859 -3
  17. package/dist/composables/useDebugEasterEgg.d.ts +2 -0
  18. package/dist/controller/AppController.d.ts +9 -0
  19. package/dist/controller/EditorController.d.ts +1 -1
  20. package/dist/index.js +153 -17
  21. package/dist/locales/en.d.ts +45 -0
  22. package/dist/locales/i18next.d.ts +102 -1
  23. package/dist/locales/index.js +94 -4
  24. package/dist/locales/zhCn.d.ts +45 -0
  25. package/dist/playground/ViewPageDemo.vue.d.ts +3744 -6
  26. package/dist/stores/index.d.ts +1 -0
  27. package/dist/stores/useAppStore.d.ts +5565 -3
  28. package/dist/stores/useDataStore.d.ts +5565 -3
  29. package/dist/stores/useDebugStore.d.ts +112 -0
  30. package/dist/stores/useEditorStore.d.ts +5 -2
  31. package/dist/types/app.types.d.ts +3 -0
  32. package/dist/types/enums.d.ts +1 -0
  33. package/dist/types/guards.d.ts +1 -0
  34. package/dist/types/models/config.types.d.ts +9 -1
  35. package/dist/types/models/operating.types.d.ts +8 -1
  36. package/dist/ui/abstract/BaseAbs.d.ts +23 -0
  37. package/dist/ui/abstract/ComponentAbs.d.ts +3 -15
  38. package/dist/ui/abstract/ModelAbs.d.ts +7 -17
  39. package/dist/ui/components/Light.d.ts +5 -0
  40. package/dist/ui/components/StationSlot.d.ts +2 -1
  41. package/dist/ui/models/ResourceStore.d.ts +5 -0
  42. package/dist/ui/models/ShuttleStation.d.ts +21 -0
  43. package/dist/utils/debug-flags.d.ts +9 -0
  44. package/dist/utils/formatOperating.d.ts +7 -0
  45. package/dist/utils/index.d.ts +19 -15
  46. package/dist/utils/logger.d.ts +22 -0
  47. package/dist/utils/performance-stats.d.ts +38 -0
  48. package/package.json +5 -3
  49. package/dist/index-g6O0IWAC.js +0 -24879
  50. package/dist/playground/mockWebSocketData.d.ts +0 -23
@@ -0,0 +1,112 @@
1
+ import { LogLevel } from '../utils/logger';
2
+ import { ScriptStep } from '../components/debug/ScriptRunner/script';
3
+ /** FPS 模式:自动或固定帧率 */
4
+ export type FpsMode = 'auto' | 30 | 60 | 120;
5
+ /** 语言类型 */
6
+ export type Locale = 'zhCn' | 'en';
7
+ export declare const useDebugStore: import('pinia').StoreDefinition<"@jnrs/lingshu-smart/debug", Pick<{
8
+ logLevel: import('vue').Ref<LogLevel, LogLevel>;
9
+ shadowsEnabled: import('vue').Ref<boolean, boolean>;
10
+ animationsEnabled: import('vue').Ref<boolean, boolean>;
11
+ fpsMode: import('vue').Ref<FpsMode, FpsMode>;
12
+ interactionsDisabled: import('vue').Ref<boolean, boolean>;
13
+ locale: import('vue').Ref<Locale, Locale>;
14
+ theme: import('vue').Ref<"light" | "dark", "light" | "dark">;
15
+ debugPanelVisible: import('vue').Ref<boolean, boolean>;
16
+ scriptSteps: import('vue').Ref<{
17
+ uid: string;
18
+ deviceType: string;
19
+ deviceId: string;
20
+ delay: number;
21
+ enabled: boolean;
22
+ params: Record<string, any>;
23
+ }[], ScriptStep[] | {
24
+ uid: string;
25
+ deviceType: string;
26
+ deviceId: string;
27
+ delay: number;
28
+ enabled: boolean;
29
+ params: Record<string, any>;
30
+ }[]>;
31
+ setScriptSteps: (list: ScriptStep[]) => void;
32
+ setLogLevel: (level: LogLevel) => void;
33
+ setShadowsEnabled: (enabled: boolean) => void;
34
+ setAnimationsEnabled: (enabled: boolean) => void;
35
+ setFpsMode: (mode: FpsMode) => void;
36
+ setInteractionsDisabled: (disabled: boolean) => void;
37
+ setLocale: (l: Locale) => void;
38
+ setTheme: (t: "dark" | "light") => void;
39
+ toggleTheme: () => void;
40
+ showDebugPanel: () => void;
41
+ hideDebugPanel: () => void;
42
+ }, "locale" | "logLevel" | "shadowsEnabled" | "animationsEnabled" | "fpsMode" | "interactionsDisabled" | "theme" | "debugPanelVisible" | "scriptSteps">, Pick<{
43
+ logLevel: import('vue').Ref<LogLevel, LogLevel>;
44
+ shadowsEnabled: import('vue').Ref<boolean, boolean>;
45
+ animationsEnabled: import('vue').Ref<boolean, boolean>;
46
+ fpsMode: import('vue').Ref<FpsMode, FpsMode>;
47
+ interactionsDisabled: import('vue').Ref<boolean, boolean>;
48
+ locale: import('vue').Ref<Locale, Locale>;
49
+ theme: import('vue').Ref<"light" | "dark", "light" | "dark">;
50
+ debugPanelVisible: import('vue').Ref<boolean, boolean>;
51
+ scriptSteps: import('vue').Ref<{
52
+ uid: string;
53
+ deviceType: string;
54
+ deviceId: string;
55
+ delay: number;
56
+ enabled: boolean;
57
+ params: Record<string, any>;
58
+ }[], ScriptStep[] | {
59
+ uid: string;
60
+ deviceType: string;
61
+ deviceId: string;
62
+ delay: number;
63
+ enabled: boolean;
64
+ params: Record<string, any>;
65
+ }[]>;
66
+ setScriptSteps: (list: ScriptStep[]) => void;
67
+ setLogLevel: (level: LogLevel) => void;
68
+ setShadowsEnabled: (enabled: boolean) => void;
69
+ setAnimationsEnabled: (enabled: boolean) => void;
70
+ setFpsMode: (mode: FpsMode) => void;
71
+ setInteractionsDisabled: (disabled: boolean) => void;
72
+ setLocale: (l: Locale) => void;
73
+ setTheme: (t: "dark" | "light") => void;
74
+ toggleTheme: () => void;
75
+ showDebugPanel: () => void;
76
+ hideDebugPanel: () => void;
77
+ }, never>, Pick<{
78
+ logLevel: import('vue').Ref<LogLevel, LogLevel>;
79
+ shadowsEnabled: import('vue').Ref<boolean, boolean>;
80
+ animationsEnabled: import('vue').Ref<boolean, boolean>;
81
+ fpsMode: import('vue').Ref<FpsMode, FpsMode>;
82
+ interactionsDisabled: import('vue').Ref<boolean, boolean>;
83
+ locale: import('vue').Ref<Locale, Locale>;
84
+ theme: import('vue').Ref<"light" | "dark", "light" | "dark">;
85
+ debugPanelVisible: import('vue').Ref<boolean, boolean>;
86
+ scriptSteps: import('vue').Ref<{
87
+ uid: string;
88
+ deviceType: string;
89
+ deviceId: string;
90
+ delay: number;
91
+ enabled: boolean;
92
+ params: Record<string, any>;
93
+ }[], ScriptStep[] | {
94
+ uid: string;
95
+ deviceType: string;
96
+ deviceId: string;
97
+ delay: number;
98
+ enabled: boolean;
99
+ params: Record<string, any>;
100
+ }[]>;
101
+ setScriptSteps: (list: ScriptStep[]) => void;
102
+ setLogLevel: (level: LogLevel) => void;
103
+ setShadowsEnabled: (enabled: boolean) => void;
104
+ setAnimationsEnabled: (enabled: boolean) => void;
105
+ setFpsMode: (mode: FpsMode) => void;
106
+ setInteractionsDisabled: (disabled: boolean) => void;
107
+ setLocale: (l: Locale) => void;
108
+ setTheme: (t: "dark" | "light") => void;
109
+ toggleTheme: () => void;
110
+ showDebugPanel: () => void;
111
+ hideDebugPanel: () => void;
112
+ }, "setScriptSteps" | "setLogLevel" | "setShadowsEnabled" | "setAnimationsEnabled" | "setFpsMode" | "setInteractionsDisabled" | "setLocale" | "setTheme" | "toggleTheme" | "showDebugPanel" | "hideDebugPanel">>;
@@ -10,6 +10,7 @@ export declare const useEditorStore: import('pinia').StoreDefinition<"@jnrs/ling
10
10
  initEditor: () => void;
11
11
  updateScene: import('@jnrs/shared/lodash').DebouncedFunc<() => void>;
12
12
  addLayer: (layer: ILayer) => void;
13
+ addLayerAtPosition: (layer: ILayer, worldX: number, worldY: number) => void;
13
14
  selectLayer: (uuid?: string) => void;
14
15
  updateLayer: (layer: ILayer) => void;
15
16
  renderLayers: import('@jnrs/shared/lodash').DebouncedFunc<() => void>;
@@ -24,10 +25,11 @@ export declare const useEditorStore: import('pinia').StoreDefinition<"@jnrs/ling
24
25
  initEditor: () => void;
25
26
  updateScene: import('@jnrs/shared/lodash').DebouncedFunc<() => void>;
26
27
  addLayer: (layer: ILayer) => void;
28
+ addLayerAtPosition: (layer: ILayer, worldX: number, worldY: number) => void;
27
29
  selectLayer: (uuid?: string) => void;
28
30
  updateLayer: (layer: ILayer) => void;
29
31
  renderLayers: import('@jnrs/shared/lodash').DebouncedFunc<() => void>;
30
- }, "currentCase" | "scene" | "layers" | "currentLayer">, Pick<{
32
+ }, "scene" | "layers" | "currentCase" | "currentLayer">, Pick<{
31
33
  currentCase: import('vue').ComputedRef<ICase | null>;
32
34
  scene: import('vue').ComputedRef<IScene | null>;
33
35
  layers: import('vue').ComputedRef<ILayer[]>;
@@ -38,7 +40,8 @@ export declare const useEditorStore: import('pinia').StoreDefinition<"@jnrs/ling
38
40
  initEditor: () => void;
39
41
  updateScene: import('@jnrs/shared/lodash').DebouncedFunc<() => void>;
40
42
  addLayer: (layer: ILayer) => void;
43
+ addLayerAtPosition: (layer: ILayer, worldX: number, worldY: number) => void;
41
44
  selectLayer: (uuid?: string) => void;
42
45
  updateLayer: (layer: ILayer) => void;
43
46
  renderLayers: import('@jnrs/shared/lodash').DebouncedFunc<() => void>;
44
- }, "initContainer" | "resizeContainer" | "destroyContainer" | "initEditor" | "updateScene" | "addLayer" | "selectLayer" | "updateLayer" | "renderLayers">>;
47
+ }, "initContainer" | "resizeContainer" | "destroyContainer" | "initEditor" | "updateScene" | "addLayer" | "addLayerAtPosition" | "selectLayer" | "updateLayer" | "renderLayers">>;
@@ -8,6 +8,7 @@ export interface IScene {
8
8
  runtime_width?: number;
9
9
  runtime_height?: number;
10
10
  zoomType: 'fit' | number;
11
+ fillVisible?: boolean;
11
12
  fill?: {
12
13
  type: 'solid' | 'linear' | 'radial' | 'image';
13
14
  color: string;
@@ -21,6 +22,8 @@ export interface IScene {
21
22
  to?: string;
22
23
  };
23
24
  texture?: string;
25
+ textureSize?: number;
26
+ textureOpacity?: number;
24
27
  }
25
28
  /**
26
29
  * 方案
@@ -18,6 +18,7 @@ export declare enum EnumModel {
18
18
  MARKING_MACHINE = "MarkingMachine",
19
19
  CLEANING_MACHINE = "CleaningMachine",
20
20
  LOADING_STATION = "LoadingStation",
21
+ SHUTTLE_STATION = "ShuttleStation",
21
22
  RAIL = "Rail",
22
23
  RESOURCE_STORE = "ResourceStore"
23
24
  }
@@ -9,3 +9,4 @@ export declare function isStationSlotGroupBoth(layer: ILayer | null): layer is E
9
9
  }>;
10
10
  export declare function hasFixtureChange(layer: ILayer | null): layer is import('./index').ISingleJointRobotConfig | import('./index').IDoubleJointRobotConfig;
11
11
  export declare function isRail(layer: ILayer | null): layer is import('./index').IRailConfig;
12
+ export declare function isShuttleStation(layer: ILayer | null): layer is import('./index').IShuttleStationConfig;
@@ -8,6 +8,8 @@ export interface IModel extends IBaseConfig, IEventState {
8
8
  uuid: string;
9
9
  equipmentName: string;
10
10
  nameplate?: string;
11
+ lightEnabled?: boolean;
12
+ nameplateEnabled?: boolean;
11
13
  model?: string;
12
14
  manufacturer?: string;
13
15
  group?: string;
@@ -41,6 +43,12 @@ export interface ILoadingStationConfig extends IModel {
41
43
  stationContainerDirection?: 'horizontal' | 'vertical';
42
44
  stationSlotGroup?: IStationSlotGroupConfig;
43
45
  }
46
+ /**
47
+ * 接驳站
48
+ */
49
+ export interface IShuttleStationConfig extends IModel {
50
+ className: EnumModel.SHUTTLE_STATION;
51
+ }
44
52
  /**
45
53
  * 打标机
46
54
  */
@@ -109,4 +117,4 @@ export interface IResourceStoreConfig extends IModel {
109
117
  /**
110
118
  * 设备层联合类型
111
119
  */
112
- export type ILayer = IMachineToolConfig | ILoadingStationConfig | IMarkingMachineConfig | ICleaningMachineConfig | ISingleJointRobotConfig | IDoubleJointRobotConfig | IRGVConfig | IRailConfig | IResourceStoreConfig;
120
+ export type ILayer = IMachineToolConfig | ILoadingStationConfig | IShuttleStationConfig | IMarkingMachineConfig | ICleaningMachineConfig | ISingleJointRobotConfig | IDoubleJointRobotConfig | IRGVConfig | IRailConfig | IResourceStoreConfig;
@@ -30,6 +30,13 @@ export interface ILoadingStationOperating extends IModelOperating {
30
30
  entrance?: IEntranceOperating;
31
31
  stationRotatable?: boolean;
32
32
  }
33
+ /**
34
+ * 接驳站运转状态
35
+ */
36
+ export interface IShuttleStationOperating extends IModelOperating {
37
+ className: EnumModel.SHUTTLE_STATION;
38
+ light?: Omit<ILightOperating, 'rotating'>;
39
+ }
33
40
  /**
34
41
  * 打标机站点状态
35
42
  */
@@ -110,4 +117,4 @@ export interface IResourceStoreOperating extends IModelOperating {
110
117
  /**
111
118
  * 设备层运转状态的联合类型
112
119
  */
113
- export type ILayerOperating = IMachineToolOperating | ILoadingStationOperating | IMarkingMachineOperating | ICleaningMachineOperating | ISingleJointRobotOperating | IDoubleJointRobotOperating | IRGVOperating | IRailOperating | IResourceStoreOperating;
120
+ export type ILayerOperating = IMachineToolOperating | ILoadingStationOperating | IShuttleStationOperating | IMarkingMachineOperating | ICleaningMachineOperating | ISingleJointRobotOperating | IDoubleJointRobotOperating | IRGVOperating | IRailOperating | IResourceStoreOperating;
@@ -0,0 +1,23 @@
1
+ import { UI } from 'leafer';
2
+ import { Logger } from '../../utils/logger';
3
+ export declare abstract class BaseAbs<T extends Record<string, any> = Record<string, any>> {
4
+ _ui: UI | null;
5
+ private _config;
6
+ private _initialized;
7
+ /** 实例级 logger,tag 为 className,用于 operating 日志输出 */
8
+ protected logger: Logger;
9
+ constructor(options: T);
10
+ get ui(): UI;
11
+ get config(): T;
12
+ protected get width_05(): number;
13
+ protected get width_02(): number;
14
+ protected get width_08(): number;
15
+ protected get height_05(): number;
16
+ protected get height_02(): number;
17
+ protected get height_08(): number;
18
+ protected abstract createUi(): UI;
19
+ init(): this;
20
+ destroyUI(): void;
21
+ destroy(): void;
22
+ get initialized(): boolean;
23
+ }
@@ -1,18 +1,6 @@
1
1
  import { IComponent, IComponentOperating } from '../../types';
2
- import { UI } from 'leafer';
3
- export declare abstract class ComponentAbs<T extends IComponent = IComponent> {
4
- _ui: UI | null;
5
- private _config;
6
- private _initialized;
7
- constructor(options: T);
8
- get ui(): UI<import('leafer').IUIInputData>;
9
- get config(): T;
10
- protected get width_05(): number;
11
- protected get height_05(): number;
12
- protected abstract createUi(): UI;
13
- protected operating(data: IComponentOperating): void;
14
- init(): this;
2
+ import { BaseAbs } from './BaseAbs';
3
+ export declare abstract class ComponentAbs<T extends IComponent = IComponent> extends BaseAbs<T> {
4
+ protected operating(_data: IComponentOperating): void;
15
5
  handleOperation: (data: IComponentOperating) => void;
16
- destroyUI(): void;
17
- destroy(): void;
18
6
  }
@@ -1,28 +1,18 @@
1
1
  import { ILayer, IEventHandler, ILayerOperating } from '../../types';
2
- import { UI } from 'leafer';
3
- export declare abstract class ModelAbs<T extends ILayer = ILayer> {
4
- _ui: UI | null;
5
- private _config;
2
+ import { BaseAbs } from './BaseAbs';
3
+ export declare abstract class ModelAbs<T extends ILayer = ILayer> extends BaseAbs<T> {
6
4
  private eventHandler;
7
- private _initialized;
8
- constructor(options: T);
9
- get ui(): UI<import('leafer').IUIInputData>;
10
- get config(): T;
11
- protected get width_05(): number;
12
- protected get width_02(): number;
13
- protected get width_08(): number;
14
- protected get height_05(): number;
15
- protected get height_02(): number;
16
- protected get height_08(): number;
17
- protected abstract createUi(): UI;
18
5
  protected abstract operating(data: ILayerOperating): void;
19
- init(): this;
20
6
  handleOperation: (data: ILayerOperating) => void;
21
7
  private shouldHandleInteraction;
22
8
  private tapCallback;
23
9
  private menuTapCallback;
24
10
  private dragCallback;
25
11
  setEventHandler(handler: IEventHandler): void;
12
+ /**
13
+ * 判断模型是否包含指定工位号
14
+ * 默认返回 false,由支持工位号的子类(如 ResourceStore)覆盖
15
+ */
16
+ containsStationIndex(_index: number): boolean;
26
17
  destroyUI(): void;
27
- destroy(): void;
28
18
  }
@@ -10,6 +10,9 @@ export interface IRectLightOperating extends Omit<ILightOperating, 'rotating'> {
10
10
  * 圆形灯
11
11
  */
12
12
  export declare class EllipseLight extends ComponentAbs<IEllipseLight> {
13
+ private lastColor?;
14
+ private lastBlinking?;
15
+ private lastRotating?;
13
16
  constructor(options: IEllipseLight);
14
17
  protected createUi(): Box;
15
18
  operating(val: ILightOperating): void;
@@ -18,6 +21,8 @@ export declare class EllipseLight extends ComponentAbs<IEllipseLight> {
18
21
  * 矩形灯
19
22
  */
20
23
  export declare class RectLight extends ComponentAbs<ILightConfig> {
24
+ private lastColor?;
25
+ private lastBlinking?;
21
26
  constructor(options: ILightConfig);
22
27
  protected createUi(): Box;
23
28
  operating(val: IRectLightOperating): void;
@@ -3,6 +3,7 @@ import { Box } from 'leafer';
3
3
  import { ComponentAbs } from '../abstract/ComponentAbs';
4
4
  export declare class StationSlot extends ComponentAbs<IStationSlotConfig> {
5
5
  private children;
6
+ private pendingDestroy;
6
7
  constructor(options: IStationSlotConfig);
7
8
  protected createUi(): Box;
8
9
  private get autoFixRotation();
@@ -13,7 +14,7 @@ export declare class StationSlot extends ComponentAbs<IStationSlotConfig> {
13
14
  */
14
15
  addPallet(d: IResourceOperating): void;
15
16
  /**
16
- * 移除托盘
17
+ * 移除托盘:先播放退场动画,动画结束后再销毁资源对象
17
18
  * @param d
18
19
  */
19
20
  removeAllPallet(d?: IResourceOperating): void;
@@ -10,6 +10,11 @@ export declare class ResourceStore extends ModelAbs<IResourceStoreConfig> {
10
10
  private stationSlotGroupPallet;
11
11
  private stationSlotGroupTool;
12
12
  protected createUi(): Box;
13
+ /**
14
+ * 判断本资源库是否包含指定工位号
15
+ * 用于同一 id 的 ResourceStore 被拆分为多个 UI 时的三级匹配
16
+ */
17
+ containsStationIndex(index: number): boolean;
13
18
  private moveX;
14
19
  protected operating(data: IResourceStoreOperating): void;
15
20
  }
@@ -0,0 +1,21 @@
1
+ import { IShuttleStationConfig, IShuttleStationOperating } from '../../types';
2
+ import { Box } from 'leafer';
3
+ import { ModelAbs } from '../abstract/ModelAbs';
4
+ /**
5
+ * 接驳站(ShuttleStation)
6
+ * 整体为 U 型结构,通过单个 Path 元素一体化绘制,内部透明;
7
+ * U 型下方底部区域较宽大,用于放置铭牌与长条状态灯;
8
+ * 该模型仅支持 light 运转状态
9
+ */
10
+ export declare class ShuttleStation extends ModelAbs<IShuttleStationConfig> {
11
+ private static readonly WALL_THICKNESS;
12
+ private static readonly BASE_HEIGHT;
13
+ private static readonly BOTTOM_RADIUS;
14
+ private static readonly LIGHT_Y_OFFSET;
15
+ private static readonly NAME_PLATE_Y_OFFSET;
16
+ private light;
17
+ private buildUPath;
18
+ private buildOutlinePath;
19
+ protected createUi(): Box;
20
+ protected operating(data: IShuttleStationOperating): void;
21
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @File : debug-flags.ts
3
+ * @Desc. : 调试标志位工具,提供模块级动画开关状态
4
+ * 供 UI 组件直接导入使用,无需依赖 Pinia store
5
+ */
6
+ /** 设置全局动画开关状态 */
7
+ export declare function setAnimationsEnabled(enabled: boolean): void;
8
+ /** 获取当前动画开关状态 */
9
+ export declare function isAnimationsEnabled(): boolean;
@@ -0,0 +1,7 @@
1
+ import { ILayerOperating } from '../types';
2
+ /**
3
+ * 将 ILayerOperating 格式化为结构化自然语言
4
+ * @param data 设备运转数据
5
+ * @returns 自然语言描述,如 "运行灯:绿色/旋转, 进度条:45%, 运行中, 上下料:上料"
6
+ */
7
+ export declare function formatOperating(data: ILayerOperating): string;
@@ -1,10 +1,5 @@
1
- /**
2
- * @Author : TanRui
3
- * @WeChat : Tan578853789
4
- * @File : index.ts
5
- * @Date : 2025/04/29
6
- * @Desc. : 工具类
7
- */
1
+ import { IScene } from '../types';
2
+ export * from './logger';
8
3
  /**
9
4
  * 数字生成器
10
5
  * @param {*} start 起始值
@@ -18,11 +13,11 @@ export declare function numberLoopGenerator(start: number, end: number, shouldLo
18
13
  * @param {*} x 初始值
19
14
  * @param {*} y 结束值
20
15
  * @param {*} n 递增时长
21
- * @param {*} rate 帧率(别低于100否则进度条动画来不及显示)
16
+ * @param {*} rate 帧率(别低于100否则进度条动画来不及显示),仅作为兼容参数保留,实际使用 rAF
22
17
  * @param {*} callback 回调函数
23
18
  * @returns
24
19
  */
25
- export declare const linearIncrease: (x: number | undefined, y: number | undefined, n: number | undefined, rate: number | undefined, callback: (val: number | string) => void) => false | Promise<unknown>;
20
+ export declare const linearIncrease: (x: number | undefined, y: number | undefined, n: number | undefined, _rate: number | undefined, callback: (val: number | string) => void) => false | Promise<void>;
26
21
  /**
27
22
  * 根据百分比数字转换为像素,或者根据像素转换为百分比
28
23
  * @param {number} val - 百分比数字(范围 0 ~ 1),或者像素数字
@@ -33,12 +28,21 @@ export declare const linearIncrease: (x: number | undefined, y: number | undefin
33
28
  */
34
29
  export declare function transPercentAndPixel(val?: number, size?: number, precision?: number, getPercent?: boolean): number;
35
30
  export declare function transFraction(val?: number, size?: number): number;
36
- export declare function transRuntimeToPixel(val: number, precision?: number, type?: 'width' | 'height'): number;
31
+ /**
32
+ * 将运行时百分比数值转换为像素数值
33
+ * @param val - 运行时百分比数值(范围 [0,1])
34
+ * @param scene - 场景配置,用于计算转换比例
35
+ * @param precision - 保留的小数位数
36
+ * @param type - 转换类型,'width' 或 'height'
37
+ * @returns 转换后的像素值
38
+ */
39
+ export declare function transRuntimeToPixel(val: number, scene: IScene | null | undefined, precision: number, type: 'width' | 'height'): number;
37
40
  /**
38
41
  * 百分比转换为像素数值
39
- * @param {number} percent - 百分比数字(范围 [0,1]
40
- * @param {number} [precision=0] - 保留的小数位数,默认为 0
41
- * @param {string} [type='width'] - 转换类型,'width' 或 'height',默认 'width'
42
- * @returns {number} 转换后的像素值
42
+ * @param percent - 百分比数字(范围 [0,1])
43
+ * @param scene - 场景配置,用于计算转换比例
44
+ * @param precision - 保留的小数位数
45
+ * @param type - 转换类型,'width' 或 'height'
46
+ * @returns 转换后的像素值
43
47
  */
44
- export declare function transPercentToPixel(percent: number, precision?: number, type?: 'width' | 'height'): number;
48
+ export declare function transPercentToPixel(percent: number, scene: IScene | null | undefined, precision: number, type: 'width' | 'height'): number;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @File : logger.ts
3
+ * @Desc. : 统一日志工具,按环境控制输出,支持 tag 着色 / LogLevel 过滤
4
+ */
5
+ /** 日志方法类型(对应 console 方法,operating 为自定义追踪级别) */
6
+ type LogMethod = 'log' | 'info' | 'warn' | 'error' | 'operating';
7
+ /** 日志显示等级,none 表示全部静默,operating 为最详细级别(含 UI 模型操作追踪),operating-only 仅显示 operating + error */
8
+ export type LogLevel = LogMethod | 'none' | 'operating-only';
9
+ /** 设置全局日志显示等级 */
10
+ export declare function setLogLevel(level: LogLevel): void;
11
+ /** 获取当前日志显示等级 */
12
+ export declare function getLogLevel(): LogLevel;
13
+ export interface Logger {
14
+ log: (...args: unknown[]) => void;
15
+ info: (...args: unknown[]) => void;
16
+ warn: (...args: unknown[]) => void;
17
+ error: (...args: unknown[]) => void;
18
+ operating: (...args: unknown[]) => void;
19
+ }
20
+ export declare function createLogger(tag?: string): Logger;
21
+ export declare const logger: Logger;
22
+ export {};
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @File : performance-stats.ts
3
+ * @Desc. : 性能统计工具,记录页面运行时间、WebSocket 数据接收量、FPS 和连接状态
4
+ * 统计节点从页面刷新(模块加载)开始
5
+ */
6
+ /** 性能统计数据 */
7
+ interface PerformanceStats {
8
+ /** 会话开始时间戳 */
9
+ sessionStart: number;
10
+ /** WebSocket 消息接收次数 */
11
+ wsCount: number;
12
+ /** WebSocket 消息接收总字节数 */
13
+ wsSize: number;
14
+ /** 当前帧率 (FPS) */
15
+ fps: number;
16
+ /** WebSocket 是否已连接 */
17
+ wsConnected: boolean;
18
+ }
19
+ export declare const performanceStats: PerformanceStats;
20
+ /** 设置 WebSocket 连接状态 */
21
+ export declare function setWebSocketConnected(connected: boolean): void;
22
+ /** 启动 FPS 监测(全局只启动一次) */
23
+ export declare function startPerformanceMonitor(): void;
24
+ /** 停止 FPS 监测 */
25
+ export declare function stopPerformanceMonitor(): void;
26
+ /** 记录一次 WebSocket 消息接收 */
27
+ export declare function trackWebSocketMessage(data: unknown): void;
28
+ /** 获取会话持续运行时长(毫秒) */
29
+ export declare function getSessionDuration(): number;
30
+ /** 格式化时长,超过 24 小时时显示天数,如 "1天 23:03:22" */
31
+ export declare function formatDuration(ms: number): string;
32
+ /** 格式化数字,添加千位分隔符 */
33
+ export declare function formatCount(n: number): string;
34
+ /** 格式化字节大小 */
35
+ export declare function formatSize(bytes: number): string;
36
+ /** 格式化时间戳为本地时间字符串 */
37
+ export declare function formatStartTime(ts: number): string;
38
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jnrs/lingshu-smart",
3
- "version": "2.2.33",
3
+ "version": "2.2.34",
4
4
  "description": "LingShu Smart 2D Digital Twin System.",
5
5
  "keywords": [
6
6
  "jnrs",
@@ -17,7 +17,9 @@
17
17
  },
18
18
  "type": "module",
19
19
  "types": "dist/index.d.ts",
20
- "sideEffects": true,
20
+ "sideEffects": [
21
+ "./dist/components/index.js"
22
+ ],
21
23
  "files": [
22
24
  "dist",
23
25
  "README.md",
@@ -46,7 +48,7 @@
46
48
  "pinia-plugin-persistedstate": "^4.7.1",
47
49
  "vue": "^3.5.22",
48
50
  "vue-i18n": "^9.14.5",
49
- "@jnrs/shared": "1.1.34"
51
+ "@jnrs/shared": "1.1.35"
50
52
  },
51
53
  "devDependencies": {
52
54
  "@types/lodash-es": "^4.17.12",