@baishuyun/ui-business 6.0.7 → 6.1.0
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/dist/DeptsMemberSelector/Department-lQJcetBA.js +267 -0
- package/dist/DeptsMemberSelector/DeptsMemberSelector-DmwD1Ls_.js +1336 -0
- package/dist/DeptsMemberSelector/DeptsUser-wWfkuBDp.js +974 -0
- package/dist/DeptsMemberSelector/Member-K4kgwY7b.js +603 -0
- package/dist/DeptsMemberSelector/MemberPanel-Cm1Hv-GV.js +698 -0
- package/dist/DeptsMemberSelector/OrganizationPanel-2QDNfFtJ.js +401 -0
- package/dist/DeptsMemberSelector/RelationShipList-DkF9XivU.js +75 -0
- package/dist/DeptsMemberSelector/index.js +12 -14
- package/dist/DeptsMemberSelector/services/contact/selector.service-BUQcY5DZ.js +380 -0
- package/dist/DeptsMemberSelector/subcomponents/Entity/Department/index.js +4 -5
- package/dist/DeptsMemberSelector/subcomponents/Entity/DeptsUser/index.js +6 -8
- package/dist/DeptsMemberSelector/subcomponents/Entity/Member/index.js +4 -5
- package/dist/DeptsMemberSelector/subcomponents/Panels/MemberRelationShipPanel/RelationShipList/index.js +2 -2
- package/dist/DeptsMemberSelector/useDeptsMemberSelector-CHK0U3R4.js +155 -0
- package/dist/DeptsMemberSelector/useOutsiderGroupPanelState-d2EiLVaV.js +648 -0
- package/dist/DeptsMemberSelector/utils/index.js +2 -87
- package/dist/DeptsMemberSelector/utils-BVfGpRu5.js +103 -0
- package/dist/components/DeptsMemberSelector/context/DeptsMemberContext.d.ts +17 -1
- package/dist/components/DeptsMemberSelector/hooks/useDeptsMemberSelector.d.ts +5 -0
- package/dist/components/DeptsMemberSelector/hooks/useOutsiderGroupPanelState.d.ts +19 -0
- package/dist/components/DeptsMemberSelector/hooks/useSlidingTabIndicator.d.ts +29 -0
- package/dist/components/DeptsMemberSelector/index.d.ts +2 -0
- package/dist/components/DeptsMemberSelector/subcomponents/Entity/Member/MemberSearch/useMemberSearchData.d.ts +2 -2
- package/dist/components/DeptsMemberSelector/subcomponents/Entity/Member/MemerList/MemberListCheckboxRow.d.ts +17 -0
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/DeptUsersExtraContactPanel/useDeptUsersExtraContactPanelData.d.ts +11 -5
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/DeptUsersPositionPanel/useDeptUsersPositionPanelData.d.ts +5 -1
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/DeptUsersRolePanel/useDeptUsersRolePanelData.d.ts +2 -1
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/ExtraConcactPanel/useExtraContactPanelData.d.ts +8 -10
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/ExtraContactGroupPanel/ExtraContactGroupPanel.d.ts +2 -2
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/FlowCreatorPanel/FlowCreatorPanel.d.ts +2 -0
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/MemberPanel/ExternalMember/ExternalMember.d.ts +2 -0
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/MemberPanel/asideFallback.d.ts +26 -0
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/MemberPanel/resolveMemberPanelShowSidebar.d.ts +13 -0
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/MemberPanel/useMemberPanelData.d.ts +6 -1
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/MemberRelationShipPanel/RelationShipList/index.d.ts +4 -12
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/MemberRelationShipPanel/types.d.ts +1 -13
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/MemberRelationShipPanel/useMemberRelationShipPanelData.d.ts +7 -36
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/OrganizationPanel/ExternalOrganization/ExternalOrganization.d.ts +2 -1
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/OrganizationPanel/InternalOrganization/InternalOrganization.d.ts +2 -1
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/OrganizationPanel/utils/treeExpandedKeys.d.ts +23 -0
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/OrganizationPanel/utils/useOrganizationTreeExpandedKeys.d.ts +9 -0
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/PositionPanel/usePositionPanelData.d.ts +5 -0
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/RolePanel/useRolePanelData.d.ts +1 -1
- package/dist/components/DeptsMemberSelector/subcomponents/SelectedItemIcon/SelectedItemIcon.d.ts +8 -0
- package/dist/components/DeptsMemberSelector/subcomponents/SelectionTabs/SelectionTabList/SelectionTabList.d.ts +4 -0
- package/dist/components/DeptsMemberSelector/subcomponents/SelectionTabs/useSelectorType.d.ts +1 -0
- package/dist/components/DeptsMemberSelector/subcomponents/SlidingTabIndicatorBar/SlidingTabIndicatorBar.d.ts +10 -0
- package/dist/components/DeptsMemberSelector/subcomponents/TagIcon/TagIcon.d.ts +9 -3
- package/dist/components/DeptsMemberSelector/types/selector.d.ts +90 -3
- package/dist/components/DeptsMemberSelector/utils/constants.d.ts +27 -0
- package/dist/components/DeptsMemberSelector/utils/currentUserDepts.d.ts +21 -0
- package/dist/components/DeptsMemberSelector/utils/departmentSearchVisibility.d.ts +9 -0
- package/dist/components/DeptsMemberSelector/utils/deptUsersRelationSearchGroup.d.ts +37 -0
- package/dist/components/DeptsMemberSelector/utils/deptUsersSearchVisibility.d.ts +30 -0
- package/dist/components/DeptsMemberSelector/utils/entityItemType.d.ts +32 -0
- package/dist/components/DeptsMemberSelector/utils/flowCreator.d.ts +8 -0
- package/dist/components/DeptsMemberSelector/utils/index.d.ts +10 -2
- package/dist/components/DeptsMemberSelector/utils/jobTitleDepartmentLimit.d.ts +3 -0
- package/dist/components/DeptsMemberSelector/utils/memberBadgeText.d.ts +20 -0
- package/dist/components/DeptsMemberSelector/utils/memberStatus.d.ts +4 -0
- package/dist/components/DeptsMemberSelector/utils/memberUsersDepartmentLimit.d.ts +7 -0
- package/dist/components/DeptsMemberSelector/utils/normalizeIdList.d.ts +2 -0
- package/dist/components/DeptsMemberSelector/utils/outsiderGroupBuckets.d.ts +18 -0
- package/dist/components/DeptsMemberSelector/utils/requestContext.d.ts +4 -2
- package/dist/components/DeptsMemberSelector/utils/resolveExternalMemberUserType.d.ts +6 -0
- package/dist/components/DeptsMemberSelector/utils/resolveOutsiderFlatMemberMode.d.ts +4 -0
- package/dist/components/DeptsMemberSelector/utils/resolveOutsiderGroupTabs.d.ts +21 -0
- package/dist/components/DeptsMemberSelector/utils/resolveSelectedItemVisual.d.ts +10 -0
- package/dist/components/DeptsMemberSelector/utils/widgetRequestLimits.d.ts +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +50 -35
- package/dist/lang/en-US.json.d.ts +5 -3
- package/dist/lang/zh-CN.json.d.ts +5 -3
- package/dist/lang/zh-TW.json.d.ts +5 -3
- package/dist/services/contact/selector.service.d.ts +34 -12
- package/dist/vendors/lodash-es.js +689 -175
- package/dist/vendors/simplebar-react.js +2 -2
- package/package.json +3 -3
- package/dist/DeptsMemberSelector/Department-6R-BZNZ4.js +0 -252
- package/dist/DeptsMemberSelector/DeptsMemberSelector-CC32KXc8.js +0 -1064
- package/dist/DeptsMemberSelector/DeptsUser-9Lf7ytTr.js +0 -981
- package/dist/DeptsMemberSelector/Member-BY8mtQb0.js +0 -517
- package/dist/DeptsMemberSelector/MemberPanel-Dw1b2J3V.js +0 -510
- package/dist/DeptsMemberSelector/OrganizationPanel-Di4dqUlZ.js +0 -366
- package/dist/DeptsMemberSelector/RelationShipDepts-__eb4oDP.js +0 -55
- package/dist/DeptsMemberSelector/RelationShipList-CS5uhLos.js +0 -52
- package/dist/DeptsMemberSelector/TabGroup-Dht9ylk4.js +0 -114
- package/dist/DeptsMemberSelector/services/contact/selector.service-BFwBe9fo.js +0 -346
- package/dist/DeptsMemberSelector/subcomponents/Panels/MemberRelationShipPanel/RelationShipDepts/index.d.ts +0 -4
- package/dist/DeptsMemberSelector/subcomponents/Panels/MemberRelationShipPanel/RelationShipDepts/index.js +0 -6
- package/dist/DeptsMemberSelector/useDeptsMemberSelector-B2Un1d5r.js +0 -123
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/MemberRelationShipPanel/RelationShipDepts/index.d.ts +0 -7
- package/dist/components/DeptsMemberSelector/subcomponents/Panels/MemberRelationShipPanel/RelationShipMember/RelationShipMember.d.ts +0 -9
- package/dist/vendors/useLocale.js +0 -209
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 树展开 baseline 策略(浏览态默认展开第一层)。
|
|
3
|
+
* - all-roots:展开所有根节点(组织架构面板)
|
|
4
|
+
* - single-root-only:仅单根时展开(成员面板等场景预留)
|
|
5
|
+
* - none:不默认展开,完全依赖 selection 层
|
|
6
|
+
*/
|
|
7
|
+
type TreeBaselineMode = 'all-roots' | 'single-root-only' | 'none';
|
|
8
|
+
type ResolveTreeExpandedKeysOptions = {
|
|
9
|
+
baselineMode: TreeBaselineMode;
|
|
10
|
+
/** 选中项祖先链,由 departmentExpandState 计算(path.slice(0, -1)) */
|
|
11
|
+
selectionExpandKeys?: Array<string | number>;
|
|
12
|
+
};
|
|
13
|
+
type TreeNodeWithId = {
|
|
14
|
+
_id: string | number;
|
|
15
|
+
};
|
|
16
|
+
declare const resolveBaselineKeys: (treeData: TreeNodeWithId[], mode: TreeBaselineMode) => Array<string | number>;
|
|
17
|
+
/**
|
|
18
|
+
* 合并 baseline 与 selection 两层展开键:uniq(baseline ∪ selection)。
|
|
19
|
+
* 不可使用 ?? 二选一——选中根节点时 selection 为 [],会错误覆盖 baseline。
|
|
20
|
+
*/
|
|
21
|
+
declare const resolveTreeExpandedKeys: (treeData: TreeNodeWithId[], options: ResolveTreeExpandedKeysOptions) => Array<string | number>;
|
|
22
|
+
export { resolveBaselineKeys, resolveTreeExpandedKeys };
|
|
23
|
+
export type { ResolveTreeExpandedKeysOptions, TreeBaselineMode, TreeNodeWithId };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 组织树展开态:默认跟随 resolvedExpandedKeys,用户手动折叠/展开后保留 manual 态;
|
|
3
|
+
* resolved 变化(数据加载、选中变化、Tab 切换)时重置 manual。
|
|
4
|
+
*/
|
|
5
|
+
declare const useOrganizationTreeExpandedKeys: (resolvedExpandedKeys: Array<string | number>) => {
|
|
6
|
+
expandedKeys: (string | number)[];
|
|
7
|
+
onExpand: import('react').Dispatch<import('react').SetStateAction<(string | number)[] | null>>;
|
|
8
|
+
};
|
|
9
|
+
export { useOrganizationTreeExpandedKeys };
|
|
@@ -6,6 +6,11 @@ type PositionItem = string | {
|
|
|
6
6
|
};
|
|
7
7
|
declare const usePositionPanelData: () => {
|
|
8
8
|
containerHeight: number;
|
|
9
|
+
departmentTree: any[];
|
|
10
|
+
defaultExpandedKeys: string[];
|
|
11
|
+
selectedDeptId: string;
|
|
12
|
+
loadingDepartments: boolean;
|
|
13
|
+
handleSelectDepartment: (deptId: string | number, node?: any) => void;
|
|
9
14
|
positionList: PositionItem[];
|
|
10
15
|
activePositionIndex: number | undefined;
|
|
11
16
|
setActivePositionIndex: import('react').Dispatch<import('react').SetStateAction<number | undefined>>;
|
package/dist/components/DeptsMemberSelector/subcomponents/Panels/RolePanel/useRolePanelData.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ declare const useRolePanelData: () => {
|
|
|
7
7
|
containerHeight: number;
|
|
8
8
|
menuItems: MenuItem[];
|
|
9
9
|
activeKey: string | undefined;
|
|
10
|
-
setActiveKey:
|
|
10
|
+
setActiveKey: (key: string) => void;
|
|
11
11
|
roleId: string | undefined;
|
|
12
12
|
setRoleId: import('react').Dispatch<import('react').SetStateAction<string | undefined>>;
|
|
13
13
|
roleTreeList: any[];
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** 搜索框 trailing debounce:末次输入后等待该时长再触发 onSearch(非 throttle) */
|
|
2
|
+
export declare const SELECTION_TAB_SEARCH_DEBOUNCE_MS = 400;
|
|
1
3
|
type TabBar = {
|
|
2
4
|
value?: string;
|
|
3
5
|
defaultValue?: string;
|
|
@@ -9,6 +11,8 @@ type TabBar = {
|
|
|
9
11
|
onChange?: (tabKey: string) => void;
|
|
10
12
|
onSearch?: (text: string) => void;
|
|
11
13
|
searchPlaceholder?: string;
|
|
14
|
+
/** deptusers 无可用搜索维度时为 false,隐藏搜索框 */
|
|
15
|
+
searchEnabled?: boolean;
|
|
12
16
|
};
|
|
13
17
|
export declare const SelectionTabList: (props: TabBar) => import("react/jsx-runtime").JSX.Element;
|
|
14
18
|
export default SelectionTabList;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SlidingTabIndicatorStyle } from '../../hooks/useSlidingTabIndicator';
|
|
2
|
+
type SlidingTabIndicatorBarProps = {
|
|
3
|
+
className: string;
|
|
4
|
+
animatedClassName: string;
|
|
5
|
+
enableTransition: boolean;
|
|
6
|
+
indicatorVisible: boolean;
|
|
7
|
+
indicatorStyle: SlidingTabIndicatorStyle;
|
|
8
|
+
};
|
|
9
|
+
declare const SlidingTabIndicatorBar: React.FC<SlidingTabIndicatorBarProps>;
|
|
10
|
+
export default SlidingTabIndicatorBar;
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
type EntityIconProps = {
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated 请使用 type。过渡期仍可通过 normalize 桥接。
|
|
4
|
+
*/
|
|
5
|
+
iconType?: string;
|
|
6
|
+
/** 业务实体 canonical / legacy type,驱动图标渲染 */
|
|
7
|
+
type?: string;
|
|
3
8
|
size?: number;
|
|
4
|
-
}
|
|
9
|
+
};
|
|
10
|
+
declare const EntityIcon: React.FC<EntityIconProps>;
|
|
5
11
|
export default EntityIcon;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 选择器对外暴露的业务模式。
|
|
3
|
-
* `deptusers`
|
|
3
|
+
* `deptusers` 不是普通成员选择,而是"部门 -> 成员 -> 关系"的联动视图。
|
|
4
|
+
* `transfer` 是流程转交专用,只保留成员 + 外部联系人;流程发起人由顶层 flowCreator 传入。
|
|
4
5
|
*/
|
|
5
|
-
type SelectorType = 'user' | 'usergroup' | 'dept' | 'deptgroup' | 'deptusers';
|
|
6
|
+
type SelectorType = 'user' | 'usergroup' | 'dept' | 'deptgroup' | 'deptusers' | 'transfer';
|
|
6
7
|
type RequestContext = {
|
|
7
8
|
appId?: string;
|
|
8
9
|
entryId?: string;
|
|
@@ -16,6 +17,7 @@ type MemberSearchLimit = {
|
|
|
16
17
|
dockuserValue: Array<string | number>;
|
|
17
18
|
dockroleValue: Array<string | number>;
|
|
18
19
|
departs: Array<string | number>;
|
|
20
|
+
widgetDeparts: Array<string | number>;
|
|
19
21
|
roles: Array<string | number>;
|
|
20
22
|
jobtitle: Array<string | number>;
|
|
21
23
|
};
|
|
@@ -24,6 +26,7 @@ type SelectorLimits = {
|
|
|
24
26
|
jobTitleDepartmentLimit?: Array<string | number>;
|
|
25
27
|
groupLimit?: Array<string | number>;
|
|
26
28
|
roleLimit?: Array<string | number>;
|
|
29
|
+
dockRoleLimit?: Array<string | number>;
|
|
27
30
|
memberLimit?: Array<string | number>;
|
|
28
31
|
memberSearchLimit?: MemberSearchLimit;
|
|
29
32
|
};
|
|
@@ -32,6 +35,15 @@ type DepartmentSelectableRange = {
|
|
|
32
35
|
hasOutsiderGroupRange: boolean;
|
|
33
36
|
departmentIds: Array<string | number>;
|
|
34
37
|
outsiderGroupIds: Array<string | number>;
|
|
38
|
+
/**
|
|
39
|
+
* @description 是否限定为"当前用户所处部门"范围(对应 jQuery 版 _hasType 的 dynamic)。
|
|
40
|
+
* 当 limit.creator 或 limit.deptcurrentsubdept 为启用值时为 true。
|
|
41
|
+
*/
|
|
42
|
+
hasCurrentUserDeptRange: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* @description 是否为对接表单(is_dock_form)。为 true 时隐藏"外部联系人分组"面板。
|
|
45
|
+
*/
|
|
46
|
+
isDockForm: boolean;
|
|
35
47
|
source: 'default' | 'limit-empty-array' | 'limit-array' | 'limit-object' | 'rely-limit-array';
|
|
36
48
|
};
|
|
37
49
|
type CurrentContext = {
|
|
@@ -74,6 +86,12 @@ type WidgetAttr = {
|
|
|
74
86
|
limit?: WidgetLimit | WidgetDepartmentArrayLimit | [] | null;
|
|
75
87
|
limitWidget?: string | Record<string, unknown> | null;
|
|
76
88
|
__departmentRelyLimit?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* @description 是否为对接表单(dock form)。
|
|
91
|
+
* 为 true 时,在默认面板可见性(未配置 limit)下隐藏"岗位"和"外部联系人"Tab,
|
|
92
|
+
* 与 jQuery 版 _hasType 的兜底分支语义对齐。
|
|
93
|
+
*/
|
|
94
|
+
is_dock_form?: boolean;
|
|
77
95
|
[key: string]: unknown;
|
|
78
96
|
};
|
|
79
97
|
type DeptRelyLimitContext = {
|
|
@@ -159,6 +177,75 @@ type EntitySelectorProps = {
|
|
|
159
177
|
*/
|
|
160
178
|
managerPermissionEnable?: boolean;
|
|
161
179
|
};
|
|
180
|
+
/**
|
|
181
|
+
* @description deptusers 模式下各面板(Tab)的可见性开关。
|
|
182
|
+
* 仅对 type === 'deptusers' 生效;默认全 true,显式传 false 时隐藏对应 Tab。
|
|
183
|
+
* 对标 jQuery 版 bby-MemberSelectPane.js 的 xxxEnable 开关。
|
|
184
|
+
*/
|
|
185
|
+
deptUsersPanelConfig?: DeptUsersPanelConfig;
|
|
186
|
+
/**
|
|
187
|
+
* @description 是否查询对接(dock)数据。仅在 type === 'deptusers' 时生效。
|
|
188
|
+
* 为 false 时强制隐藏组织架构/成员面板的内部/外部切换菜单,只查内部数据,
|
|
189
|
+
* 并作为参数传给后端。对标 jQuery 版 bby-MemberSelectPane.js 的 hasDock。
|
|
190
|
+
* @default true
|
|
191
|
+
*/
|
|
192
|
+
hasDock?: boolean;
|
|
193
|
+
/**
|
|
194
|
+
* @description 是否只查询对接(dock)数据、隐藏内部。仅在 type === 'deptusers' 时生效。
|
|
195
|
+
* 为 true 时强制隐藏组织架构/成员面板的内部切换菜单,只查外部数据。
|
|
196
|
+
* 与 hasDock: false 互为镜像(hasDock:false 只查内部,hasDeptDock:true 只查外部)。
|
|
197
|
+
* @default false
|
|
198
|
+
*/
|
|
199
|
+
hasDeptDock?: boolean;
|
|
200
|
+
/**
|
|
201
|
+
* @description 是否多选。仅在 type === 'deptusers' 时生效。
|
|
202
|
+
* 为 false 时整个 deptusers 弹窗切换为单选模式:组织架构/成员/职位/角色/外部联系人
|
|
203
|
+
* 均改为单选(radio + 选择即替换),并隐藏底部「清空」与成员列表「全选」。
|
|
204
|
+
* @default true
|
|
205
|
+
*/
|
|
206
|
+
multiple?: boolean;
|
|
207
|
+
/**
|
|
208
|
+
* @description 流程发起人,仅 type === 'transfer' 生效。
|
|
209
|
+
* 与 currentUsers 中任意一项身份重合时隐藏「流程发起人」Tab。
|
|
210
|
+
*/
|
|
211
|
+
flowCreator?: FlowCreator;
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* @description transfer 模式流程发起人,由调用方传入的固定结构。
|
|
215
|
+
* @example
|
|
216
|
+
* {
|
|
217
|
+
* "_id": "5e8ceaa6545cdd93973d9e16",
|
|
218
|
+
* "mode": "member",
|
|
219
|
+
* "nickname": "191测试",
|
|
220
|
+
* "status": 0
|
|
221
|
+
* }
|
|
222
|
+
*/
|
|
223
|
+
type FlowCreator = {
|
|
224
|
+
_id: string;
|
|
225
|
+
mode: string;
|
|
226
|
+
nickname: string;
|
|
227
|
+
status: number;
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* @description deptusers 模式面板可见性开关。默认全 true(兼容现状),显式传 false 隐藏对应面板。
|
|
231
|
+
*/
|
|
232
|
+
type DeptUsersPanelConfig = {
|
|
233
|
+
/** 组织架构面板 */
|
|
234
|
+
organizationEnable?: boolean;
|
|
235
|
+
/** 成员面板 */
|
|
236
|
+
memberEnable?: boolean;
|
|
237
|
+
/** 职位面板 */
|
|
238
|
+
positionEnable?: boolean;
|
|
239
|
+
/** 成员关系面板 */
|
|
240
|
+
relationEnable?: boolean;
|
|
241
|
+
/** 角色面板 */
|
|
242
|
+
roleEnable?: boolean;
|
|
243
|
+
/** 外部联系人面板 */
|
|
244
|
+
externalContactEnable?: boolean;
|
|
245
|
+
/** 外部联系人分组(外部联系人面板内的分组列表) */
|
|
246
|
+
outsiderGroupEnable?: boolean;
|
|
247
|
+
/** 外部联系人成员(外部联系人面板内的成员列表) */
|
|
248
|
+
outsiderMemberEnable?: boolean;
|
|
162
249
|
};
|
|
163
250
|
export { DEPARTMENT_PANEL_REQUEST_GUARD_REASON, MEMBER_PANEL_REQUEST_GUARD_REASON };
|
|
164
|
-
export type { SelectorType, RequestContext, MemberSearchLimit, SelectorLimits, DepartmentSelectableRange, CurrentContext, WidgetLimit, WidgetDepartmentArrayLimit, WidgetAttr, DeptRelyLimitContext, OnRequestRelyLimit, MemberPanelRequestGuardReason, MemberPanelRequestGuard, DepartmentPanelRequestGuardReason, DepartmentPanelRequestGuard, MemberPanelVisibility, EntitySelectorProps, };
|
|
251
|
+
export type { SelectorType, RequestContext, MemberSearchLimit, SelectorLimits, DepartmentSelectableRange, CurrentContext, WidgetLimit, WidgetDepartmentArrayLimit, WidgetAttr, DeptRelyLimitContext, OnRequestRelyLimit, MemberPanelRequestGuardReason, MemberPanelRequestGuard, DepartmentPanelRequestGuardReason, DepartmentPanelRequestGuard, MemberPanelVisibility, EntitySelectorProps, FlowCreator, DeptUsersPanelConfig, };
|
|
@@ -19,6 +19,10 @@ declare const Entity: {
|
|
|
19
19
|
* @description 部门成员类型
|
|
20
20
|
*/
|
|
21
21
|
DEPT_USERS: string;
|
|
22
|
+
/**
|
|
23
|
+
* @description 流程转交类型(成员多选,只保留成员 + 外部联系人)
|
|
24
|
+
*/
|
|
25
|
+
TRANSFER: string;
|
|
22
26
|
};
|
|
23
27
|
declare const ELLIPSIS_BUTTON_WIDTH = 110;
|
|
24
28
|
declare const TWO_LINE_HEIGHT = 68;
|
|
@@ -27,3 +31,26 @@ declare const GAP_WIDTH = 8;
|
|
|
27
31
|
declare const PLACEHOLDER_HEIGHT = 90;
|
|
28
32
|
export { ELLIPSIS_BUTTON_WIDTH, TWO_LINE_HEIGHT, MIN_LINE_HEIGHT, GAP_WIDTH, PLACEHOLDER_HEIGHT };
|
|
29
33
|
export { Entity };
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated 选中项图标已改为 type 驱动。onChange/onConfirm 仍会双写 iconType 以兼容旧消费方。
|
|
36
|
+
* 新接入请只传/存 canonical `type`(成员用 `user`),不必传 iconType。
|
|
37
|
+
*/
|
|
38
|
+
declare const IconType: {
|
|
39
|
+
/** 成员(内部成员/对接成员,显示头像) */
|
|
40
|
+
readonly MEMBER: "member";
|
|
41
|
+
/** 部门(内部/对接部门,TagIcon 部门图标) */
|
|
42
|
+
readonly DEPARTMENT: "department";
|
|
43
|
+
/** 职位(iconfont 无独立图标,复用角色图标) */
|
|
44
|
+
readonly POSITION: "position";
|
|
45
|
+
/** 角色(含角色组/对接角色) */
|
|
46
|
+
readonly ROLE: "role";
|
|
47
|
+
/** 外部联系人分组 */
|
|
48
|
+
readonly GROUP: "group";
|
|
49
|
+
/** 外部联系人成员 */
|
|
50
|
+
readonly OUTSIDER: "outsider";
|
|
51
|
+
/** 成员关系 */
|
|
52
|
+
readonly RELATION: "relation";
|
|
53
|
+
/** 公开权限/系统管理员组 */
|
|
54
|
+
readonly PUBLIC: "public";
|
|
55
|
+
};
|
|
56
|
+
export { IconType };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CurrentContext, DepartmentPanelRequestGuard, DepartmentSelectableRange } from '../types/selector';
|
|
2
|
+
type CurrentUserDeptItem = {
|
|
3
|
+
_id?: string | number;
|
|
4
|
+
id?: string | number;
|
|
5
|
+
name?: string;
|
|
6
|
+
} & Record<string, any>;
|
|
7
|
+
/**
|
|
8
|
+
* 解析「我所在部门」可显示的部门列表(来自 currentContext,即 window.FX.STATIC.user 的部门)。
|
|
9
|
+
*
|
|
10
|
+
* 供 CurrentUserDeptsPanel 面板与「我所在部门」Tab 的前端搜索共同复用,保证两处口径一致:
|
|
11
|
+
* - is_dock_form:true 时只取对接部门,否则只取内部部门;
|
|
12
|
+
* - 按 departmentSelectableRange.departmentIds 过滤(rely-limit-array 不参与);
|
|
13
|
+
* - 按 _id 去重。
|
|
14
|
+
*/
|
|
15
|
+
declare const resolveCurrentUserDepartments: ({ currentContext, departmentSelectableRange, departmentPanelRequestGuard, }: {
|
|
16
|
+
currentContext: CurrentContext;
|
|
17
|
+
departmentSelectableRange: DepartmentSelectableRange;
|
|
18
|
+
departmentPanelRequestGuard?: DepartmentPanelRequestGuard;
|
|
19
|
+
}) => CurrentUserDeptItem[];
|
|
20
|
+
export { resolveCurrentUserDepartments };
|
|
21
|
+
export type { CurrentUserDeptItem };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DepartmentPanelVisibility } from './departmentPanelVisibility';
|
|
2
|
+
type DepartmentSearchVisibility = {
|
|
3
|
+
showOrganizationalSearch: boolean;
|
|
4
|
+
showOutsiderGroupSearch: boolean;
|
|
5
|
+
showCurrentUserDeptLocalSearch: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare const resolveDepartmentSearchVisibility: (panelVisibility: DepartmentPanelVisibility) => DepartmentSearchVisibility;
|
|
8
|
+
export { resolveDepartmentSearchVisibility };
|
|
9
|
+
export type { DepartmentSearchVisibility };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ENTITY_ITEM_TYPE } from './entityItemType';
|
|
3
|
+
import { RequestContext } from '../types/selector';
|
|
4
|
+
type RelationSearchVariant = 'department' | 'member';
|
|
5
|
+
type DepartmentRelationSearchGroup = {
|
|
6
|
+
title: string;
|
|
7
|
+
_id: string;
|
|
8
|
+
children: Array<{
|
|
9
|
+
_id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
type: typeof ENTITY_ITEM_TYPE.RELATION;
|
|
12
|
+
title: ReactNode;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
type MemberRelationSearchGroup = {
|
|
16
|
+
title: string;
|
|
17
|
+
value: string;
|
|
18
|
+
children: Array<{
|
|
19
|
+
_id: string;
|
|
20
|
+
value: string;
|
|
21
|
+
name: string;
|
|
22
|
+
type: typeof ENTITY_ITEM_TYPE.RELATION;
|
|
23
|
+
title: ReactNode;
|
|
24
|
+
}>;
|
|
25
|
+
};
|
|
26
|
+
declare function useDeptUsersRelationSearchGroup<V extends RelationSearchVariant>({ enabled, variant, requestContext, wd, groupTitle, }: {
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
variant: V;
|
|
29
|
+
requestContext: RequestContext;
|
|
30
|
+
wd?: string;
|
|
31
|
+
groupTitle: string;
|
|
32
|
+
}): {
|
|
33
|
+
searchGroup: V extends 'department' ? DepartmentRelationSearchGroup | null : MemberRelationSearchGroup | null;
|
|
34
|
+
loading: boolean;
|
|
35
|
+
};
|
|
36
|
+
export { useDeptUsersRelationSearchGroup };
|
|
37
|
+
export type { RelationSearchVariant, DepartmentRelationSearchGroup, MemberRelationSearchGroup };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DeptUsersPanelConfig } from '../types/selector';
|
|
2
|
+
/** deptusers 模式下具备后端搜索能力的 Tab key(角色/职位/其他无搜索)。 */
|
|
3
|
+
declare const SEARCHABLE_DEPT_USERS_TAB_KEYS: readonly ["organizational", "member", "extraContact"];
|
|
4
|
+
type SearchableDeptUsersTabKey = (typeof SEARCHABLE_DEPT_USERS_TAB_KEYS)[number] | 'relation';
|
|
5
|
+
type DeptUsersSearchVisibility = {
|
|
6
|
+
showDepartmentSearch: boolean;
|
|
7
|
+
showOutsiderGroupSearch: boolean;
|
|
8
|
+
showMemberSearch: boolean;
|
|
9
|
+
showOutsiderMemberSearch: boolean;
|
|
10
|
+
/** 成员关系:参与 deptusers 全局搜索树,全量拉取后按关键词本地过滤(非 Tab 内搜索)。 */
|
|
11
|
+
showRelationLocalSearch: boolean;
|
|
12
|
+
needsDepartmentSearchPanel: boolean;
|
|
13
|
+
needsMemberSearchPanel: boolean;
|
|
14
|
+
useMemberSearchComponent: boolean;
|
|
15
|
+
/** config 层:是否存在任一可搜索维度(未与可见 Tab 求交) */
|
|
16
|
+
hasSearchDimension: boolean;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* deptusers 搜索可见性的单一事实来源。
|
|
20
|
+
* Tab 过滤仍由 deptUsersPanelConfig + useDeptUserTabItems 负责;
|
|
21
|
+
* 搜索入口是否展示由 resolveSearchEntryVisible(config, visibleTabKeys) 收敛二者。
|
|
22
|
+
*/
|
|
23
|
+
declare const resolveDeptUsersSearchVisibility: (config?: DeptUsersPanelConfig) => DeptUsersSearchVisibility;
|
|
24
|
+
/**
|
|
25
|
+
* 搜索入口可见性:可见 Tab 列表与搜索维度求交。
|
|
26
|
+
* 仅当至少一个当前展示的 Tab 对应活跃搜索维度时为 true。
|
|
27
|
+
*/
|
|
28
|
+
declare const resolveSearchEntryVisible: (config?: DeptUsersPanelConfig, visibleTabKeys?: string[]) => boolean;
|
|
29
|
+
export { SEARCHABLE_DEPT_USERS_TAB_KEYS, resolveDeptUsersSearchVisibility, resolveSearchEntryVisible, };
|
|
30
|
+
export type { DeptUsersSearchVisibility, SearchableDeptUsersTabKey };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** 选中项 canonical type(消费侧推荐传这些值) */
|
|
2
|
+
declare const ENTITY_ITEM_TYPE: {
|
|
3
|
+
readonly USER: "user";
|
|
4
|
+
readonly DEPARTMENTS: "departments";
|
|
5
|
+
readonly ROLE: "role";
|
|
6
|
+
readonly GROUP: "group";
|
|
7
|
+
readonly OUTSIDER: "outsider";
|
|
8
|
+
readonly RELATION: "relation";
|
|
9
|
+
readonly POSITION: "position";
|
|
10
|
+
readonly PUBLIC: "public";
|
|
11
|
+
readonly DOCKCORP: "dockcorp";
|
|
12
|
+
readonly DOCKCORPDEPT: "dockcorpdept";
|
|
13
|
+
readonly LABEL: "label";
|
|
14
|
+
readonly LABELCORP: "labelCorp";
|
|
15
|
+
};
|
|
16
|
+
type EntityItemType = (typeof ENTITY_ITEM_TYPE)[keyof typeof ENTITY_ITEM_TYPE];
|
|
17
|
+
type SelectorItemLike = {
|
|
18
|
+
_id?: string | number;
|
|
19
|
+
type?: string;
|
|
20
|
+
iconType?: string;
|
|
21
|
+
role_id?: string | number;
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
};
|
|
24
|
+
declare const LEGACY_TYPE_ALIASES: Record<string, EntityItemType>;
|
|
25
|
+
declare const normalizeEntityItemType: (rawType?: string, item?: SelectorItemLike) => EntityItemType | string;
|
|
26
|
+
declare const canonicalToDeprecatedIconType: (canonicalType: string) => string | undefined;
|
|
27
|
+
declare const ensureSelectorItem: <T extends SelectorItemLike>(item: T) => T & {
|
|
28
|
+
type: string;
|
|
29
|
+
iconType?: string;
|
|
30
|
+
};
|
|
31
|
+
export { ENTITY_ITEM_TYPE, LEGACY_TYPE_ALIASES, normalizeEntityItemType, ensureSelectorItem, canonicalToDeprecatedIconType, };
|
|
32
|
+
export type { EntityItemType, SelectorItemLike };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FlowCreator, SelectorType } from '../types/selector';
|
|
2
|
+
declare const resolveEffectiveFlowCreator: ({ type, flowCreator, currentUsers, }: {
|
|
3
|
+
type: SelectorType;
|
|
4
|
+
flowCreator?: FlowCreator;
|
|
5
|
+
currentUsers: Record<string, unknown>[];
|
|
6
|
+
}) => FlowCreator | undefined;
|
|
7
|
+
declare const filterTransferCandidates: <T extends Record<string, unknown>>(type: SelectorType, list: T[], currentUsers?: Record<string, unknown>[]) => T[];
|
|
8
|
+
export { resolveEffectiveFlowCreator, filterTransferCandidates };
|
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
declare const ENTITY_COLORS: string[];
|
|
5
5
|
/**
|
|
6
|
-
* @description
|
|
6
|
+
* @description 根据名称获取头像显示文字
|
|
7
|
+
* @param name 名称
|
|
8
|
+
* @returns 头像文字
|
|
9
|
+
*/
|
|
10
|
+
declare const getAvatarText: (name?: string) => string;
|
|
11
|
+
/**
|
|
12
|
+
* @description 根据名称获取颜色(与 getAvatarText 使用同一 key 字符)
|
|
7
13
|
* @param name 名称
|
|
8
14
|
* @returns 颜色
|
|
9
15
|
*/
|
|
@@ -41,4 +47,6 @@ declare const buildTree: <T extends BaseNode>(treeData: T[], fieldNames?: Partia
|
|
|
41
47
|
declare const findNodeInTree: <T extends BaseNode>(id: string | number, treeData: TreeNode<T>[], fieldNames?: Partial<FieldNames>) => TreeNode<T> | null;
|
|
42
48
|
/** 部门成员树形结构 */
|
|
43
49
|
export declare function buildDeptTree(data: Array<any>): any[];
|
|
44
|
-
export {
|
|
50
|
+
export { getMemberBadgeLabels, resolveMemberBadgeText } from './memberBadgeText';
|
|
51
|
+
export type { MemberBadgeItem, MemberBadgeLabels, ResolveMemberBadgeOptions, } from './memberBadgeText';
|
|
52
|
+
export { getColorByName, getMemberDisplayName, getAvatarText, ENTITY_COLORS, buildTree, findNodeInTree, };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type MemberBadgeLabels = {
|
|
2
|
+
external: string;
|
|
3
|
+
member: string;
|
|
4
|
+
};
|
|
5
|
+
type MemberBadgeItem = {
|
|
6
|
+
type?: string;
|
|
7
|
+
user_type?: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
deptnames?: string;
|
|
10
|
+
dock_corpname?: string;
|
|
11
|
+
};
|
|
12
|
+
type MemberBadgeTranslate = (key: 'department.external' | 'member.title') => string;
|
|
13
|
+
declare const getMemberBadgeLabels: (translate: MemberBadgeTranslate) => MemberBadgeLabels;
|
|
14
|
+
type ResolveMemberBadgeOptions = {
|
|
15
|
+
/** 仅成员面板外部树等场景启用;搜索保持旧逻辑,不做 dock_corpname 兜底。 */
|
|
16
|
+
allowDockCorpFallback?: boolean;
|
|
17
|
+
};
|
|
18
|
+
declare const resolveMemberBadgeText: (item: MemberBadgeItem, labels: MemberBadgeLabels, options?: ResolveMemberBadgeOptions) => string | undefined;
|
|
19
|
+
export { getMemberBadgeLabels, resolveMemberBadgeText };
|
|
20
|
+
export type { MemberBadgeItem, MemberBadgeLabels, ResolveMemberBadgeOptions };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SelectorLimits } from '../types/selector';
|
|
2
|
+
/**
|
|
3
|
+
* member/users 专用 departmentLimit:departs + users + dockcorpValue + dockdeptValue + dockuserValue。
|
|
4
|
+
* limitWidget 模式下 widgetDeparts 承载部门 id 数组。
|
|
5
|
+
*/
|
|
6
|
+
declare const resolveMemberUsersDepartmentLimit: (limits?: SelectorLimits) => (string | number)[];
|
|
7
|
+
export { resolveMemberUsersDepartmentLimit };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type OutsiderGroup = {
|
|
2
|
+
type?: string | number;
|
|
3
|
+
order?: string | number;
|
|
4
|
+
sort?: string | number;
|
|
5
|
+
[key: string]: any;
|
|
6
|
+
};
|
|
7
|
+
type OutsiderGroupTabKey = 'default' | 'custom';
|
|
8
|
+
declare const EMPTY_OUTSIDER_GROUPS: OutsiderGroup[];
|
|
9
|
+
declare const splitOutsiderGroups: <T extends OutsiderGroup>(groups?: T[]) => {
|
|
10
|
+
defaultGroups: T[];
|
|
11
|
+
customGroups: T[];
|
|
12
|
+
};
|
|
13
|
+
declare const splitOrderedOutsiderGroups: <T extends OutsiderGroup>(groups?: T[]) => {
|
|
14
|
+
defaultGroups: T[];
|
|
15
|
+
customGroups: T[];
|
|
16
|
+
};
|
|
17
|
+
export { EMPTY_OUTSIDER_GROUPS, splitOrderedOutsiderGroups, splitOutsiderGroups };
|
|
18
|
+
export type { OutsiderGroup, OutsiderGroupTabKey };
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import { CurrentContext, DepartmentSelectableRange, EntitySelectorProps, MemberPanelRequestGuard, MemberPanelVisibility, RequestContext, SelectorLimits, SelectorType } from '../types/selector';
|
|
1
|
+
import { CurrentContext, DepartmentSelectableRange, DeptUsersPanelConfig, EntitySelectorProps, FlowCreator, MemberPanelRequestGuard, MemberPanelVisibility, RequestContext, SelectorLimits, SelectorType } from '../types/selector';
|
|
2
2
|
type NormalizedSelectorContext = {
|
|
3
3
|
type: SelectorType;
|
|
4
4
|
auth: {
|
|
5
5
|
publicPermissionEnable: boolean;
|
|
6
6
|
managerPermissionEnable: boolean;
|
|
7
7
|
};
|
|
8
|
+
deptUsersPanelConfig?: DeptUsersPanelConfig;
|
|
8
9
|
requestContext: RequestContext;
|
|
9
10
|
limits: SelectorLimits;
|
|
10
11
|
departmentSelectableRange: DepartmentSelectableRange;
|
|
11
12
|
currentContext: CurrentContext;
|
|
12
13
|
currentUsers: Record<string, unknown>[];
|
|
14
|
+
flowCreator?: FlowCreator;
|
|
13
15
|
memberPanelVisibility: MemberPanelVisibility;
|
|
14
16
|
memberPanelRequestGuard: MemberPanelRequestGuard;
|
|
15
17
|
};
|
|
16
|
-
declare const resolveSelectorContext: (props: Pick<EntitySelectorProps, "type" | "auth" | "requestContext" | "widgetAttr">) => NormalizedSelectorContext;
|
|
18
|
+
declare const resolveSelectorContext: (props: Pick<EntitySelectorProps, "type" | "auth" | "requestContext" | "widgetAttr" | "flowCreator">) => NormalizedSelectorContext;
|
|
17
19
|
export { resolveSelectorContext };
|
|
18
20
|
export type { NormalizedSelectorContext };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 外部成员二级 Tab 与 member 接口 userType 的映射。
|
|
3
|
+
* dockcorp(对接人)→ dock_user;dockcorpdept(部门)→ dock_dept。
|
|
4
|
+
*/
|
|
5
|
+
declare const resolveExternalMemberUserType: (activeKey: string, externalActiveTab: string) => "dock_user" | "dock_dept" | undefined;
|
|
6
|
+
export { resolveExternalMemberUserType };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { SelectorLimits, SelectorType } from '../types/selector';
|
|
2
|
+
/** memberLimit 有值且 groupLimit 为空时,外部联系人面板走扁平成员列表。 */
|
|
3
|
+
declare const resolveOutsiderFlatMemberMode: (type: SelectorType, limits?: Pick<SelectorLimits, "memberLimit" | "groupLimit">) => boolean;
|
|
4
|
+
export { resolveOutsiderFlatMemberMode };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { OutsiderGroupTabKey } from './outsiderGroupBuckets';
|
|
2
|
+
type OutsiderGroupTab = {
|
|
3
|
+
key: OutsiderGroupTabKey;
|
|
4
|
+
label: string;
|
|
5
|
+
};
|
|
6
|
+
declare const resolveOutsiderGroupTabs: <T>({ defaultGroups, customGroups, activeKey, labels, }: {
|
|
7
|
+
defaultGroups: T[];
|
|
8
|
+
customGroups: T[];
|
|
9
|
+
activeKey: OutsiderGroupTabKey;
|
|
10
|
+
labels: {
|
|
11
|
+
default: string;
|
|
12
|
+
custom: string;
|
|
13
|
+
};
|
|
14
|
+
}) => {
|
|
15
|
+
tabs: OutsiderGroupTab[];
|
|
16
|
+
isPanelEmpty: boolean;
|
|
17
|
+
activeKey: OutsiderGroupTabKey;
|
|
18
|
+
currentGroups: T[];
|
|
19
|
+
};
|
|
20
|
+
export { resolveOutsiderGroupTabs };
|
|
21
|
+
export type { OutsiderGroupTab };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SelectorItemLike } from './entityItemType';
|
|
2
|
+
type SelectedItemVisual = {
|
|
3
|
+
kind: 'avatar';
|
|
4
|
+
} | {
|
|
5
|
+
kind: 'tag';
|
|
6
|
+
tagType: string;
|
|
7
|
+
};
|
|
8
|
+
declare const resolveSelectedItemVisual: (rawType?: string, item?: SelectorItemLike) => SelectedItemVisual;
|
|
9
|
+
export { resolveSelectedItemVisual };
|
|
10
|
+
export type { SelectedItemVisual };
|
|
@@ -8,6 +8,7 @@ declare const EMPTY_MEMBER_SEARCH_LIMIT: {
|
|
|
8
8
|
readonly dockuserValue: readonly [];
|
|
9
9
|
readonly dockroleValue: readonly [];
|
|
10
10
|
readonly departs: readonly [];
|
|
11
|
+
readonly widgetDeparts: readonly [];
|
|
11
12
|
readonly roles: readonly [];
|
|
12
13
|
readonly jobtitle: readonly [];
|
|
13
14
|
};
|