4
hao
2025-04-16 c5fb1fbcbb2bf4d511773d348f9ef625855c61fc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
 
interface JQuery {
  zTree: IzTree;
}
 
interface IJSON { 
  [key: string]: any
}
 
 
type ApplicationType = 'application/x-www-form-urlencoded' | 'application/json';
type AjaxType = 'get' | 'post';
type dataType = 'text' | 'json' | 'jsonp' | 'html' | 'xml' | 'script';
 
interface IAsync {
  autoParam?: string[];
  contentType?: ApplicationType;
  dataFilter?: (treeId: string, parentNode: object, responseData: IJSON[] | IJSON | string) => IJSON[] | IJSON;
  dataType?: dataType;
  enable?: boolean;
  otherParam?: string[] | IJSON;
  type?: AjaxType;
  headers?: object;
  xhrFields?: object;
  url: string;
}
 
 
type CallBackBeforeFn = (treeId: string, treeNode: object) => boolean;
type CallBackOnFn = (event: Event, treeId: string, treeNode: IJSON) => void;
 
interface ICallback {
  beforeAsync?: CallBackBeforeFn;
  beforeCheck?: CallBackBeforeFn;
  beforeClick?: (treeId: string, treeNode: object, clickFlag: number) => boolean;
  beforeCollapse?: CallBackBeforeFn;
  beforeDblClick?: CallBackBeforeFn;
  beforeDrag?: (treeId: string, treeNode: IJSON[]) => boolean;
  beforeDragOpen?: CallBackBeforeFn;
  beforeDrop?: (treeId: string, treeNode: IJSON[], targetNode: object, moveType: string, isCopy: boolean) => boolean;
  beforeEditName?: CallBackBeforeFn;
  beforeExpand?: CallBackBeforeFn;
  beforeMouseDown?: CallBackBeforeFn;
  beforeMouseUp?: CallBackBeforeFn;
  beforeRemove?: CallBackBeforeFn;
  beforeRename?: (treeId: string, treeNode: object, newName: string, isCancel: boolean) => boolean;
  beforeRightClick?: CallBackBeforeFn;
 
  onAsyncError?: (event: Event, treeId: string, treeNode: object, XMLHttpRequest: any, textStatus: string, errorThrown: string) => void;
  onAsyncSuccess?: (event: Event, treeId: string, treeNode: object, msg: string | object) => void;
  onCheck?: (event: Event, treeId: string, treeNode: object) => void;
  onClick?: (event: Event, treeId: string, treeNode: object, clickFlag: number) => void;
  onCollapse?: (event: Event, treeId: string, treeNode: object) => void;
  onDblClick?: (event: Event, treeId: string, treeNode: object) => void;
  onDrag?: (event: Event, treeId: string, treeNodes: IJSON[]) => void;
  onDragMove?: (event: Event, treeId: string, treeNodes: IJSON[]) => void;
  onDrop?: (event: Event, treeId: string, treeNodes: IJSON[], targetNode: object, moveType: string, isCopy: boolean) => void;
  onExpand?: CallBackOnFn;
  onMouseDown?: CallBackOnFn;
  onMouseUp?: CallBackOnFn;
  onNodeCreated?: CallBackOnFn;
  onRemove?: CallBackOnFn;
  onRename?: (event: Event, treeId: string, treeNode: IJSON, isCancel: boolean) => void;
  onRightClick?: CallBackOnFn;
}
 
interface ICheck {
  autoCheckTrigger?: boolean;
  chkboxType?: IJSON;
  chkStyle?: string;
  enable?: boolean;
  nocheckInherit?: boolean;
  chkDisabledInherit?: boolean;
  radioType?: string;
}
 
interface IData {
  keep?: {
    leaf?: boolean;
    parent?: boolean;
  },
  key?: {
    checked?: string;
    children?: string;
    isParent?: string;
    isHidden?: string;
    name?: string;
    title?: string;
    url?: string;
  },
  simpleData?: {
    enable?: boolean;
    idKey?: string;
    pIdKey?: string;
    rootPId?: any;
  }
}
 
 
type removeFnType<T> = (treeId: string, treeNode: object) => T;
 
interface IEdit {
  drag?: {
    autoExpandTrigger?: boolean;
    isCopy?: boolean;
    isMove?: boolean;
    prev?: boolean;
    next?: boolean;
    inner?: boolean;
    borderMax?: number;
    borderMin?: number;
    minMoveSize?: number;
    maxShowNodeNum?: number;
    autoOpenTime?: number;
  },
  editNameSelectAll?: boolean;
  enable?: boolean;
  removeTitle?: string | removeFnType<string>;
  renameTitle?: string | removeFnType<string>;
  showRemoveBtn?: boolean | removeFnType<boolean>;
  showRenameBtn?: boolean | removeFnType<boolean>;
}
 
 
type dblClickExpandFn<T> = (treeId: string, treeNode: object) => T;
 
interface IView {
  addDiyDom?: dblClickExpandFn<void>;
  addHoverDom?: dblClickExpandFn<void>;
  autoCancelSelected?: boolean;
  dblClickExpand?: boolean | dblClickExpandFn<boolean>;
  expandSpeed?: string | number;
  fontCss?: IJSON | dblClickExpandFn<IJSON>;
  nameIsHTML?: boolean;
  removeHoverDom?: dblClickExpandFn<void>;
  selectedMulti?: boolean;
  showIcon?: boolean | dblClickExpandFn<boolean>;
  showLine?: boolean;
  showTitle?: boolean | dblClickExpandFn<boolean>;
  txtSelectedEnable?: boolean;
}
 
interface ISetting {
  async?: IAsync;
  callback?: ICallback;
  check?: ICheck;
  data?: IData;
  edit?: IEdit;
  view?: IView;
}
 
 
type filterFnType = (node: IJSON) => boolean;
 
interface IzTreeObj {
  setting: ISetting;
  addNodes: (parentNode: object, index?: number, newNodes?: IJSON[] | IJSON, isSilentBoolean?: boolean) => IJSON[];
  cancelEditName: (newName?: string) => void;
  cancelSelectedNode: (treeNode?: object) => void;
  checkAllNodes: (checked: boolean) => void;
  checkNode: (treeNode: IJSON, checked?: boolean, checkTypeFlag?: boolean, callbackFlag?: boolean) => void;
  copyNode: (targetNode: object, treeNode: IJSON, moveType: string, isSilent: boolean) => IJSON;
  destroy: () => void;
  editName: (treeNode: IJSON) => void;
  expandAll: (expandFlag: boolean) => boolean | null;
  expandNode: (treeNode: IJSON, expandFlag?: boolean, sonSign?: boolean, focus?: boolean, callbackFlag?: boolean) => boolean | null;
  getChangeCheckedNodes: () => IJSON[];
  getCheckedNodes: (checked?: boolean) => IJSON[];
  getNodeByParam: (key: string, value: any, parentNode?: object) => object;
  getNodeByTId: (tId: string) => object;
  getNodeIndex: (treeNode: IJSON) => number;
  getNodes: () => IJSON[];
  getNodesByFilter: (filter: filterFnType, isSingle?: boolean, parentNode?: IJSON, invokeParam?: any) => object;
  getNodesByParam: (key: string, value: any, parentNode?: object) => object;
  getNodesByParamFuzzy: (key: string, value: string, parentNode?: object) => object;
  getSelectedNodes: () => any;
  hideNode: (treeNode: IJSON) => void;
  hideNodes: (treeNodes: IJSON[]) => void;
  moveNode: (targetNode: object, treeNode: IJSON, moveType: string, isSilent?: boolean) => IJSON;
  reAsyncChildNodes: (parentNode: IJSON, reloadType: string, isSilent?: boolean, callback?: any) => void;
  reAsyncChildNodesPromise: (parentNode: IJSON, reloadType: string, isSilent?: boolean) => any; // ps: return Promise object
  refresh: () => void;
  removeChildNodes: (parentNode: IJSON) => IJSON[];
  removeNode: (treeNode: IJSON, callbackFlag?: boolean) => void;
  selectNode: (treeNode: IJSON, addFlag?: boolean, isSilent?: boolean) => void;
  setChkDisabled: (treeNode: IJSON, disabled?: boolean, inheritParent?: boolean, inheritChildren?: boolean) => void;
  setEditable: (editable: boolean) => void;
  showNode: (treeNode: IJSON) => void;
  showNodes: (treeNodes: IJSON[]) => void;
  transformToArray: (treeNodes: IJSON[] | IJSON) => IJSON[];
  transformTozTreeNodes: (simpleNodes: IJSON[] | IJSON) => IJSON[];
  updateNode: (treeNode: IJSON, checkTypeFlag?: boolean) => void;
}
 
interface IzTree {
  init?: (dom: any, setting: ISetting, zNodes: IJSON[] | object) => IzTreeObj;
  getZTreeObj?: (treeId: string) => IzTreeObj;
  destroy?: (treeId: string) => void;
  _z?: any;
}