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.
- package/esm2022/lib/am/am.component.mjs +3 -1
- package/esm2022/lib/form/form/form.component.mjs +17 -6
- package/esm2022/lib/form/form-type/codemirror.type.mjs +3 -3
- package/esm2022/lib/grid/cell-render/async-link-renderer.mjs +45 -0
- package/esm2022/lib/grid/grid/grid.component.mjs +4 -3
- package/esm2022/lib/grid/mock-data.mjs +4 -2
- package/esm2022/lib/page-form/page-form.component.mjs +316 -37
- package/esm2022/lib/page-form/page-form.interface.mjs +1 -1
- package/esm2022/lib/share/data-utils.mjs +156 -0
- package/esm2022/lib/share/utils.mjs +1 -1
- package/fesm2022/imm-element-ui.mjs +533 -46
- package/fesm2022/imm-element-ui.mjs.map +1 -1
- package/lib/am/am.component.d.ts +2 -0
- package/lib/form/form/form.component.d.ts +2 -0
- package/lib/grid/cell-render/async-link-renderer.d.ts +14 -0
- package/lib/grid/grid/grid.component.d.ts +2 -0
- package/lib/grid/mock-data.d.ts +2 -0
- package/lib/page-form/page-form.component.d.ts +43 -1
- package/lib/page-form/page-form.interface.d.ts +11 -0
- package/lib/share/data-utils.d.ts +49 -0
- package/package.json +1 -1
- package/src/lib/page-form/page-form.component.scss +18 -0
package/lib/am/am.component.d.ts
CHANGED
|
@@ -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;
|
package/lib/grid/mock-data.d.ts
CHANGED
|
@@ -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
|
|
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
|
@@ -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;
|