imm-element-ui 2.4.7 → 2.4.9

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.
@@ -6,6 +6,7 @@ import { ConfirmationService, MessageService } from 'primeng/api';
6
6
  import { ActivatedRoute, Router } from '@angular/router';
7
7
  import { LoadingService } from '../service/loading.service';
8
8
  import { I18nService } from '../service/i18n.service';
9
+ import { toPrimeNGTree as _toPrimeNGTree } from '../share/data-utils';
9
10
  import * as i0 from "@angular/core";
10
11
  export interface Param {
11
12
  id?: number;
@@ -158,6 +159,7 @@ export declare class AmComponent {
158
159
  route: ActivatedRoute;
159
160
  router: Router;
160
161
  i18n: I18nService;
162
+ toPrimeNGTree: typeof _toPrimeNGTree;
161
163
  constructor();
162
164
  rfd(prm: Rfd): Observable<any>;
163
165
  webget(param: amWeb): Observable<any>;
@@ -40,6 +40,7 @@ export declare class FormComponent {
40
40
  fieldList: FormField[];
41
41
  hookObservers: Function[];
42
42
  labelMinWidth: import("@angular/core").WritableSignal<string | undefined>;
43
+ private fallbackUpsert;
43
44
  isMain: boolean;
44
45
  subsert: any;
45
46
  extra: any;
@@ -55,6 +56,7 @@ export declare class FormComponent {
55
56
  parseFields(fields: FormField[]): void;
56
57
  handleFieldControl(field: FormField): void;
57
58
  handleValueChange(value: any, field: FormField): void;
59
+ private getUpsertState;
58
60
  handleUpsert(key: string, value: any, isLog?: boolean): void;
59
61
  handleSubsert(key: string, value: any, field: FormField): void;
60
62
  handleHideExpression(): void;
@@ -0,0 +1,14 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Router } from '@angular/router';
3
+ import * as i0 from "@angular/core";
4
+ export declare class AsyncLinkRenderer {
5
+ label: any;
6
+ params: any;
7
+ router: Router;
8
+ optionsHook?: (value: any) => Observable<any[]>;
9
+ agInit(params: any): void;
10
+ triggerOptionsHook(value: any): void;
11
+ onLink(): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<AsyncLinkRenderer, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<AsyncLinkRenderer, "ng-component", never, {}, {}, never, never, true, never>;
14
+ }
@@ -54,6 +54,7 @@ export declare class GridComponent {
54
54
  rowSpanRenderer: typeof import("../cell-render/row-span").RowSpanRenderer;
55
55
  cellEditSelectFieldComponent: typeof import("imm-element-ui").CellEditSelectFieldComponent;
56
56
  primeActionsRenderer: typeof import("../cell-render/primeAct-renderer").PrimeActionsRenderer;
57
+ asyncLinkRenderer: typeof import("../cell-render/async-link-renderer").AsyncLinkRenderer;
57
58
  };
58
59
  columnDefs: ColDef[];
59
60
  initGrid: boolean;
@@ -93,6 +94,7 @@ export declare class GridComponent {
93
94
  noRows: boolean;
94
95
  showHorizontal: boolean;
95
96
  dragBeforeIndex: number;
97
+ private searchPrmSub;
96
98
  onResize(): void;
97
99
  constructor(action: ActionService);
98
100
  ngOnInit(): void;
@@ -5,6 +5,7 @@ import { ChipRenderer } from './cell-render/chip-render';
5
5
  import { ImgRenderer } from './cell-render/img-renderer';
6
6
  import { RowSpanRenderer } from './cell-render/row-span';
7
7
  import { PrimeActionsRenderer } from './cell-render/primeAct-renderer';
8
+ import { AsyncLinkRenderer } from './cell-render/async-link-renderer';
8
9
  export declare const CLIENTLIMIT = 9999;
9
10
  export declare const components: {
10
11
  cellEditInputNumberCompoent: typeof CellEditInputNumberCompoent;
@@ -19,4 +20,5 @@ export declare const components: {
19
20
  rowSpanRenderer: typeof RowSpanRenderer;
20
21
  cellEditSelectFieldComponent: typeof CellEditSelectFieldComponent;
21
22
  primeActionsRenderer: typeof PrimeActionsRenderer;
23
+ asyncLinkRenderer: typeof AsyncLinkRenderer;
22
24
  };
@@ -2,6 +2,7 @@ import { UserHistoryService } from '../service/userHistory.service';
2
2
  import { AfterContentInit, AfterViewInit, OnDestroy, OnInit, QueryList, TemplateRef } from '@angular/core';
3
3
  import { FormComponent, FormOptions } from '../form/form/form.component';
4
4
  import { RowSelectorComponent } from '../row-selector/row-selector.component';
5
+ import { TreeNode } from 'primeng/api';
5
6
  import { Step, StepsComponent } from '../steps/steps.component';
6
7
  import { GridComponent, GridOptions } from '../grid/grid/grid.component';
7
8
  import { AmComponent, Get, Search } from '../am/am.component';
@@ -64,9 +65,13 @@ export declare class PageFormComponent extends AmComponent implements OnInit, On
64
65
  selectionKeys: any[];
65
66
  subDeleteIds: any[];
66
67
  leftPanelItems: any[];
68
+ leftPanelTreeNodes: TreeNode[];
69
+ leftPanelSelectedNode: TreeNode | null;
67
70
  leftPanelSelectedValue: any;
68
71
  leftPanelSelectedItem: any;
72
+ leftPanelExpandedKeys: Record<string, boolean>;
69
73
  leftPanelInitialized: boolean;
74
+ private leftPanelInitializedMode;
70
75
  private baseGridListSnapshot;
71
76
  stepsVisible: boolean;
72
77
  private destroy$;
@@ -92,16 +97,53 @@ export declare class PageFormComponent extends AmComponent implements OnInit, On
92
97
  ngAfterContentInit(): void;
93
98
  ngOnInit(): void;
94
99
  ngOnDestroy(): void;
100
+ private resetLeftPanelState;
95
101
  private initializeLeftPanel;
102
+ private initializeLeftPanelList;
96
103
  private loadLeftPanelItems;
104
+ private getLeftPanelMode;
105
+ getPanelOptionLabel(): string;
106
+ getPanelOptionValue(): string;
107
+ getPanelAllowDeselect(): boolean;
108
+ getPanelEmptyMessage(): string;
109
+ private getPanelDataSource;
110
+ private getTreeChildrenField;
111
+ private getTreeParentSelectable;
112
+ private getTreeExpandedKeysStateKey;
113
+ private getTreeFieldValue;
97
114
  private resolveMaybeAsync;
98
115
  private createLeftPanelEventContext;
99
116
  private runLeftPanelEvent;
100
- private resolveLeftPanelValue;
117
+ private resolvePanelOptionValue;
101
118
  onLeftPanelSelectionChange(event: SingleSelectListboxChangeEvent): Promise<void>;
102
119
  private applyLeftPanelSelection;
103
120
  private syncGetPrmFiterPreloads;
104
121
  private syncGetPrmForCurrentView;
122
+ private syncLeftPanelSelectionState;
123
+ private initializeLeftPanelTree;
124
+ private buildTreeNodes;
125
+ private buildTreeNodeKey;
126
+ private resolveTreeNodeLabel;
127
+ private shouldExpandTreeNode;
128
+ private readTreeExpandedKeysState;
129
+ private syncTreeExpandedKeysState;
130
+ private applyTreeDefaultSelection;
131
+ private findFirstSelectableTreeNode;
132
+ private resolveTreeNodeBySelection;
133
+ private findTreeNodeByValue;
134
+ private findTreeNodeByKey;
135
+ private isTreeParentNode;
136
+ private isSelectableTreeNode;
137
+ onLeftPanelTreeNodeSelect(event: {
138
+ node: TreeNode;
139
+ }): Promise<void>;
140
+ onLeftPanelTreeNodeExpand(event: {
141
+ node: TreeNode;
142
+ }): void;
143
+ onLeftPanelTreeNodeCollapse(event: {
144
+ node: TreeNode;
145
+ }): void;
146
+ private applyLeftPanelTreeSelection;
105
147
  private buildFormOptions;
106
148
  private resolveLeftPanelAppendGroups;
107
149
  private mergeDetailWithLeftPanel;
@@ -83,6 +83,12 @@ export interface PageLeftPanelTreeConfig {
83
83
  nodeValue?: string;
84
84
  childrenField?: string;
85
85
  defaultExpand?: boolean;
86
+ expandedKeysStateKey?: string;
87
+ iconField?: string;
88
+ leafField?: string;
89
+ disabledField?: string;
90
+ parentSelectable?: boolean;
91
+ emptyMessage?: string;
86
92
  dataSource?: PageLeftPanelDataSource;
87
93
  }
88
94
  export interface PageLeftPanelConfig {
@@ -90,6 +96,11 @@ export interface PageLeftPanelConfig {
90
96
  mode?: 'list' | 'tree';
91
97
  stateKey?: string;
92
98
  panelSelectedDataKey?: string;
99
+ optionLabel?: string;
100
+ optionValue?: string;
101
+ allowDeselect?: boolean;
102
+ emptyMessage?: string;
103
+ dataSource?: PageLeftPanelDataSource;
93
104
  appendGroups?: any[] | ((context?: any) => any[]);
94
105
  list?: PageLeftPanelListConfig;
95
106
  tree?: PageLeftPanelTreeConfig;
@@ -0,0 +1,49 @@
1
+ import { TreeNode } from 'primeng/api';
2
+ /**
3
+ * 树形结构转换配置项
4
+ */
5
+ export interface TreeConvertOptions {
6
+ /** 节点唯一标识字段名,默认 'id' */
7
+ idKey?: string;
8
+ /** 父节点标识字段名,默认 'pid' */
9
+ pidKey?: string;
10
+ /** 节点显示文本字段名,默认 'orgName' */
11
+ labelKey?: string;
12
+ /** 子节点存放字段名,默认 'children' */
13
+ childrenKey?: string;
14
+ /** 根节点的pid值,默认 undefined(pid不存在或为null/undefined的作为根节点) */
15
+ rootPidValue?: any;
16
+ /** 是否保留原始数据,默认 true */
17
+ preserveData?: boolean;
18
+ }
19
+ /**
20
+ * 将扁平数组转换为 PrimeNG TreeNode 树形结构
21
+ * @param list 原始数据数组
22
+ * @param options 配置项
23
+ * @returns PrimeNG TreeNode 数组
24
+ */
25
+ export declare function toPrimeNGTree<T extends Record<string, any>>(list: T[], options?: TreeConvertOptions): TreeNode[];
26
+ /**
27
+ * 简化版:只指定关键字段
28
+ * @param list 原始数据
29
+ * @param idField id字段名
30
+ * @param pidField 父id字段名
31
+ * @param labelField 显示文本字段名
32
+ */
33
+ export declare function toPrimeNGTreeSimple<T extends Record<string, any>>(list: T[], idField?: string, pidField?: string, labelField?: string): TreeNode[];
34
+ /**
35
+ * 从树中查找节点
36
+ * @param tree 树形数据
37
+ * @param predicate 查找条件
38
+ */
39
+ export declare function findTreeNode(tree: TreeNode[], predicate: (node: TreeNode) => boolean): TreeNode | null;
40
+ /**
41
+ * 展开/折叠所有节点
42
+ * @param tree 树形数据
43
+ * @param expanded 是否展开
44
+ */
45
+ export declare function expandAllTreeNodes(tree: TreeNode[], expanded?: boolean): void;
46
+ /**
47
+ * 获取树的所有叶子节点
48
+ */
49
+ export declare function getLeafNodes(tree: TreeNode[]): TreeNode[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "imm-element-ui",
3
- "version": "2.4.7",
3
+ "version": "2.4.9",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0"
@@ -17,6 +17,10 @@
17
17
  // color: #1F2937 !important;
18
18
  border-color: #d8dadd;
19
19
  }
20
+ .page-form-left-tree {
21
+ border: none !important;
22
+ padding: 0 !important;
23
+ }
20
24
  }
21
25
  .form-panel {
22
26
  border: solid 1px #dbdbdb;
@@ -24,6 +28,20 @@
24
28
  .page-form-left-panel {
25
29
  height: 100%;
26
30
  }
31
+ .page-form-tree-panel {
32
+ border: 1px solid #e2e8f0;
33
+ border-radius: 4px;
34
+ background: #fff;
35
+ padding: 4px;
36
+ }
37
+ .page-form-left-panel-empty {
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: center;
41
+ min-height: 160px;
42
+ color: #94a3b8;
43
+ font-size: 12px;
44
+ }
27
45
  .icon-sidebar {
28
46
  color: #334155;
29
47
  padding: 2.5px;