@blueking/bk-user-selector 0.0.39-beta.3 → 0.1.1-beta.1
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/README.md +316 -88
- package/package.json +2 -2
- package/typings/api/user.d.ts +42 -21
- package/typings/components/me-tag.vue.d.ts +14 -35
- package/typings/components/selection-popover.vue.d.ts +48 -197
- package/typings/components/user-render.d.ts +20 -1
- package/typings/components/user-selector.vue.d.ts +23 -29
- package/typings/components/user-tag.vue.d.ts +16 -0
- package/typings/constants/index.d.ts +25 -0
- package/typings/hooks/use-current-user.d.ts +30 -0
- package/typings/hooks/use-focus-state.d.ts +48 -0
- package/typings/hooks/use-input-handler.d.ts +44 -0
- package/typings/hooks/use-resize-observer.d.ts +17 -0
- package/typings/hooks/use-selected-users.d.ts +78 -0
- package/typings/hooks/use-sortable.d.ts +41 -0
- package/typings/hooks/use-tenant-data.d.ts +17 -0
- package/typings/hooks/use-user-search.d.ts +38 -0
- package/typings/hooks/use-user-selection.d.ts +32 -0
- package/typings/hooks/use-visible-tags.d.ts +51 -0
- package/typings/types/index.d.ts +127 -98
- package/typings/utils/logger.d.ts +47 -0
- package/vue2/index.es.min.js +3308 -4631
- package/vue2/index.iife.min.js +4610 -5899
- package/vue2/index.umd.min.js +3300 -4623
- package/vue2/vue2.css +34 -81
- package/vue3/index.es.min.js +1393 -1597
- package/vue3/index.iife.min.js +3298 -4621
- package/vue3/index.umd.min.js +1392 -1596
- package/vue3/vue3.css +34 -67
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 租户数据处理 Hook
|
|
3
|
+
* @module hooks/useTenantData
|
|
4
|
+
*/
|
|
5
|
+
import { type Ref } from 'vue';
|
|
6
|
+
/**
|
|
7
|
+
* 使用租户数据的Hook
|
|
8
|
+
* @param apiBaseUrl - API基础URL
|
|
9
|
+
* @param tenantId - 租户ID
|
|
10
|
+
* @param enableMultiTenantMode - 是否启用多租户模式
|
|
11
|
+
* @returns 租户数据和加载状态
|
|
12
|
+
*/
|
|
13
|
+
export declare const useTenantData: (apiBaseUrl: string, tenantId: string, enableMultiTenantMode?: boolean) => {
|
|
14
|
+
tenants: Ref<Record<string, string>, Record<string, string>>;
|
|
15
|
+
loading: Ref<boolean, boolean>;
|
|
16
|
+
fetchTenants: () => Promise<void>;
|
|
17
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用户搜索 Hook
|
|
3
|
+
* @module hooks/useUserSearch
|
|
4
|
+
*/
|
|
5
|
+
import { type Ref } from 'vue';
|
|
6
|
+
import type { FormattedUser } from '../types';
|
|
7
|
+
export interface UseUserSearchOptions {
|
|
8
|
+
/** API 基础 URL */
|
|
9
|
+
apiBaseUrl: string;
|
|
10
|
+
/** 防抖延迟时间(毫秒) */
|
|
11
|
+
debounceDelay?: number;
|
|
12
|
+
/** 是否启用多租户模式 */
|
|
13
|
+
enableMultiTenantMode?: boolean;
|
|
14
|
+
/** 租户 ID */
|
|
15
|
+
tenantId: string;
|
|
16
|
+
}
|
|
17
|
+
export interface UseUserSearchReturn {
|
|
18
|
+
/** 加载状态 */
|
|
19
|
+
loading: Ref<boolean>;
|
|
20
|
+
/** 搜索关键词 */
|
|
21
|
+
searchQuery: Ref<string>;
|
|
22
|
+
/** 搜索结果 */
|
|
23
|
+
searchResults: Ref<FormattedUser[]>;
|
|
24
|
+
/** 清空搜索 */
|
|
25
|
+
clearSearch: () => void;
|
|
26
|
+
/** 处理输入变化(带防抖) */
|
|
27
|
+
handleSearchInput: (value: string) => void;
|
|
28
|
+
/** 执行搜索 */
|
|
29
|
+
performSearch: (keyword: string) => Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 使用用户搜索的Hook
|
|
33
|
+
* @param apiBaseUrl - API基础URL
|
|
34
|
+
* @param tenantId - 租户ID
|
|
35
|
+
* @param enableMultiTenantMode - 是否启用多租户模式
|
|
36
|
+
* @returns 用户搜索相关状态和方法
|
|
37
|
+
*/
|
|
38
|
+
export declare const useUserSearch: (apiBaseUrl: string, tenantId: string, enableMultiTenantMode?: boolean) => UseUserSearchReturn;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用户选择公共逻辑 Hook
|
|
3
|
+
* @module hooks/useUserSelection
|
|
4
|
+
*/
|
|
5
|
+
import { type ComputedRef, type Ref } from 'vue';
|
|
6
|
+
import type { FormattedUser, UserGroupConfig } from '../types';
|
|
7
|
+
export interface UseUserSelectionOptions {
|
|
8
|
+
/** 排除的用户ID列表 */
|
|
9
|
+
excludeUserIds?: Ref<string[]>;
|
|
10
|
+
/** 搜索关键词 */
|
|
11
|
+
searchQuery: Ref<string>;
|
|
12
|
+
/** 已选用户ID列表(用于过滤) */
|
|
13
|
+
selectedUserIds: Ref<string[]>;
|
|
14
|
+
/** 用户群组配置 */
|
|
15
|
+
userGroup?: Ref<UserGroupConfig[]>;
|
|
16
|
+
}
|
|
17
|
+
export interface UseUserSelectionReturn {
|
|
18
|
+
/** 过滤后的用户群组(带搜索过滤) */
|
|
19
|
+
filteredUserGroup: ComputedRef<UserGroupConfig[]>;
|
|
20
|
+
/** 创建自定义用户 */
|
|
21
|
+
createCustomUser: (loginName: string) => FormattedUser;
|
|
22
|
+
/** 过滤选项(排除已选和排除列表) */
|
|
23
|
+
filterOptions: (options: FormattedUser[]) => FormattedUser[];
|
|
24
|
+
/** 检查用户是否已选中 */
|
|
25
|
+
isUserSelected: (userId: string) => boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 用户选择公共逻辑 Hook
|
|
29
|
+
* @param options - 配置选项
|
|
30
|
+
* @returns 用户选择相关方法
|
|
31
|
+
*/
|
|
32
|
+
export declare const useUserSelection: (options: UseUserSelectionOptions) => UseUserSelectionReturn;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
2
|
+
import type { FormattedUser } from '../types';
|
|
3
|
+
export interface UseVisibleTagsOptions {
|
|
4
|
+
/**
|
|
5
|
+
* 折叠容器引用
|
|
6
|
+
*/
|
|
7
|
+
collapsedContainerRef: Ref<HTMLDivElement | null>;
|
|
8
|
+
/**
|
|
9
|
+
* 是否聚焦状态
|
|
10
|
+
*/
|
|
11
|
+
isFocused: Ref<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* 已选用户列表
|
|
14
|
+
*/
|
|
15
|
+
selectedUsers: Ref<FormattedUser[]>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 可见标签计算 hook
|
|
19
|
+
*/
|
|
20
|
+
export declare function useVisibleTags(options: UseVisibleTagsOptions): {
|
|
21
|
+
visibleUsers: Ref<{
|
|
22
|
+
bk_username?: string | undefined;
|
|
23
|
+
data_source_type?: string | undefined;
|
|
24
|
+
display_name?: string | undefined;
|
|
25
|
+
full_name?: string | undefined;
|
|
26
|
+
hidden?: boolean | undefined;
|
|
27
|
+
id: string;
|
|
28
|
+
login_name?: string | undefined;
|
|
29
|
+
name: string;
|
|
30
|
+
owner_tenant_id?: string | undefined;
|
|
31
|
+
tenantId: string;
|
|
32
|
+
type?: import("../types").UserType | undefined;
|
|
33
|
+
username?: string | undefined;
|
|
34
|
+
}[], FormattedUser[] | {
|
|
35
|
+
bk_username?: string | undefined;
|
|
36
|
+
data_source_type?: string | undefined;
|
|
37
|
+
display_name?: string | undefined;
|
|
38
|
+
full_name?: string | undefined;
|
|
39
|
+
hidden?: boolean | undefined;
|
|
40
|
+
id: string;
|
|
41
|
+
login_name?: string | undefined;
|
|
42
|
+
name: string;
|
|
43
|
+
owner_tenant_id?: string | undefined;
|
|
44
|
+
tenantId: string;
|
|
45
|
+
type?: import("../types").UserType | undefined;
|
|
46
|
+
username?: string | undefined;
|
|
47
|
+
}[]>;
|
|
48
|
+
hiddenCount: Ref<number, number>;
|
|
49
|
+
calculateVisibleUsers: () => void;
|
|
50
|
+
scheduleVisibleUsersCalculation: () => void;
|
|
51
|
+
};
|
package/typings/types/index.d.ts
CHANGED
|
@@ -1,68 +1,138 @@
|
|
|
1
1
|
import type { createVNode } from 'vue';
|
|
2
2
|
import type { VNode } from 'vue';
|
|
3
|
+
import type { USER_TYPE } from '../constants';
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
+
* 基础选择器属性
|
|
5
6
|
*/
|
|
6
|
-
export interface
|
|
7
|
+
export interface BaseSelectorProps {
|
|
7
8
|
/**
|
|
8
|
-
*
|
|
9
|
+
* 是否允许创建用户
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
+
allowCreate?: boolean;
|
|
11
12
|
/**
|
|
12
|
-
*
|
|
13
|
+
* 接口基础URL
|
|
13
14
|
*/
|
|
14
|
-
|
|
15
|
+
apiBaseUrl: string;
|
|
15
16
|
/**
|
|
16
|
-
*
|
|
17
|
+
* 头像基础URL
|
|
18
|
+
* @default ''
|
|
17
19
|
*/
|
|
18
|
-
|
|
20
|
+
avatarBaseUrl?: string;
|
|
19
21
|
/**
|
|
20
|
-
*
|
|
22
|
+
* 本人ID
|
|
21
23
|
*/
|
|
22
|
-
|
|
24
|
+
currentUserId?: string;
|
|
23
25
|
/**
|
|
24
|
-
*
|
|
26
|
+
* 是否禁用
|
|
25
27
|
*/
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* 多选模式属性
|
|
30
|
-
*/
|
|
31
|
-
export interface MultipleSelectorProps extends BaseSelectorProps {
|
|
28
|
+
disabled?: boolean;
|
|
32
29
|
/**
|
|
33
|
-
*
|
|
30
|
+
* 无匹配人员时的提示文本
|
|
34
31
|
*/
|
|
35
|
-
|
|
32
|
+
emptyText?: string;
|
|
33
|
+
/**
|
|
34
|
+
* 是否启用多租户模式
|
|
35
|
+
*/
|
|
36
|
+
enableMultiTenantMode?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* 精确查找key
|
|
39
|
+
*/
|
|
40
|
+
exactSearchKey?: string;
|
|
41
|
+
/**
|
|
42
|
+
* 排除的用户ID列表
|
|
43
|
+
*/
|
|
44
|
+
excludeUserIds?: string[];
|
|
36
45
|
/**
|
|
37
46
|
* 是否允许粘贴任意文本
|
|
38
47
|
*/
|
|
39
48
|
freePaste?: boolean;
|
|
40
49
|
/**
|
|
41
|
-
*
|
|
50
|
+
* 是否显示头像
|
|
51
|
+
* @default false
|
|
42
52
|
*/
|
|
43
|
-
|
|
53
|
+
hasAvatar?: boolean;
|
|
44
54
|
/**
|
|
45
|
-
*
|
|
55
|
+
* 占位文字
|
|
46
56
|
*/
|
|
47
|
-
|
|
57
|
+
placeholder?: string;
|
|
48
58
|
/**
|
|
49
|
-
*
|
|
59
|
+
* 渲染列表项
|
|
50
60
|
*/
|
|
51
|
-
|
|
61
|
+
renderListItem?: RenderFunction;
|
|
62
|
+
/**
|
|
63
|
+
* 渲染标签
|
|
64
|
+
*/
|
|
65
|
+
renderTag?: RenderFunction;
|
|
66
|
+
/**
|
|
67
|
+
* 租户ID
|
|
68
|
+
*/
|
|
69
|
+
tenantId: string;
|
|
70
|
+
/**
|
|
71
|
+
* 用户组配置
|
|
72
|
+
*/
|
|
73
|
+
userGroup?: UserGroupConfig[];
|
|
74
|
+
/**
|
|
75
|
+
* 用户组名称
|
|
76
|
+
*/
|
|
77
|
+
userGroupName?: string;
|
|
52
78
|
}
|
|
53
79
|
/**
|
|
54
|
-
*
|
|
80
|
+
* 格式化后的用户信息
|
|
55
81
|
*/
|
|
56
|
-
export interface
|
|
82
|
+
export interface FormattedUser {
|
|
83
|
+
/**
|
|
84
|
+
* 用户名
|
|
85
|
+
*/
|
|
86
|
+
bk_username?: string;
|
|
87
|
+
/**
|
|
88
|
+
* 数据源类型
|
|
89
|
+
*/
|
|
90
|
+
data_source_type?: string;
|
|
91
|
+
/**
|
|
92
|
+
* 显示名称
|
|
93
|
+
*/
|
|
94
|
+
display_name?: string;
|
|
95
|
+
/**
|
|
96
|
+
* 全名
|
|
97
|
+
*/
|
|
98
|
+
full_name?: string;
|
|
99
|
+
/**
|
|
100
|
+
* 是否隐藏
|
|
101
|
+
*/
|
|
102
|
+
hidden?: boolean;
|
|
103
|
+
/**
|
|
104
|
+
* 用户ID
|
|
105
|
+
*/
|
|
106
|
+
id: string;
|
|
107
|
+
/**
|
|
108
|
+
* 登录名
|
|
109
|
+
*/
|
|
110
|
+
login_name?: string;
|
|
111
|
+
/**
|
|
112
|
+
* 用户名称
|
|
113
|
+
*/
|
|
114
|
+
name: string;
|
|
57
115
|
/**
|
|
58
|
-
*
|
|
116
|
+
* 所属租户ID
|
|
117
|
+
*/
|
|
118
|
+
owner_tenant_id?: string;
|
|
119
|
+
/**
|
|
120
|
+
* 租户ID
|
|
59
121
|
*/
|
|
60
|
-
|
|
122
|
+
tenantId: string;
|
|
61
123
|
/**
|
|
62
|
-
*
|
|
124
|
+
* 用户类型
|
|
63
125
|
*/
|
|
64
|
-
|
|
126
|
+
type?: UserType;
|
|
127
|
+
/**
|
|
128
|
+
* 旧版用户名
|
|
129
|
+
*/
|
|
130
|
+
username?: string;
|
|
65
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* 自定义渲染函数类型
|
|
134
|
+
*/
|
|
135
|
+
export type RenderFunction = (h: typeof createVNode, userInfo: FormattedUser) => VNode;
|
|
66
136
|
/**
|
|
67
137
|
* 租户信息
|
|
68
138
|
*/
|
|
@@ -76,6 +146,10 @@ export interface Tenant {
|
|
|
76
146
|
*/
|
|
77
147
|
name: string;
|
|
78
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* 租户信息映射
|
|
151
|
+
*/
|
|
152
|
+
export type TenantMap = Record<string, string>;
|
|
79
153
|
/**
|
|
80
154
|
* 用户对象接口
|
|
81
155
|
*/
|
|
@@ -110,89 +184,44 @@ export interface User {
|
|
|
110
184
|
username: string;
|
|
111
185
|
}
|
|
112
186
|
/**
|
|
113
|
-
*
|
|
187
|
+
* 用户群组配置
|
|
114
188
|
*/
|
|
115
|
-
export interface
|
|
189
|
+
export interface UserGroupConfig {
|
|
116
190
|
/**
|
|
117
|
-
*
|
|
191
|
+
* 是否隐藏
|
|
118
192
|
*/
|
|
119
|
-
|
|
193
|
+
hidden?: boolean;
|
|
120
194
|
/**
|
|
121
|
-
*
|
|
195
|
+
* 群组ID
|
|
122
196
|
*/
|
|
123
|
-
|
|
197
|
+
id: string;
|
|
124
198
|
/**
|
|
125
|
-
*
|
|
199
|
+
* 群组名称
|
|
126
200
|
*/
|
|
127
|
-
|
|
201
|
+
name: string;
|
|
128
202
|
}
|
|
129
203
|
/**
|
|
130
|
-
*
|
|
204
|
+
* 用户选择器属性
|
|
131
205
|
*/
|
|
132
|
-
interface BaseSelectorProps {
|
|
133
|
-
/**
|
|
134
|
-
* 是否允许创建用户
|
|
135
|
-
*/
|
|
136
|
-
allowCreate?: boolean;
|
|
137
|
-
/**
|
|
138
|
-
* 接口基础URL
|
|
139
|
-
*/
|
|
140
|
-
apiBaseUrl: string;
|
|
141
|
-
/**
|
|
142
|
-
* 本人ID
|
|
143
|
-
*/
|
|
144
|
-
currentUserId?: string;
|
|
145
|
-
/**
|
|
146
|
-
* 是否禁用
|
|
147
|
-
*/
|
|
148
|
-
disabled?: boolean;
|
|
149
|
-
/**
|
|
150
|
-
* 无匹配人员时的提示文本
|
|
151
|
-
*/
|
|
152
|
-
emptyText?: string;
|
|
153
|
-
/**
|
|
154
|
-
* 是否启用多租户模式
|
|
155
|
-
*/
|
|
156
|
-
enableMultiTenantMode?: boolean;
|
|
157
|
-
/**
|
|
158
|
-
* 精确查找key
|
|
159
|
-
*/
|
|
160
|
-
exactSearchKey?: string;
|
|
161
|
-
/**
|
|
162
|
-
* 排除的用户ID列表
|
|
163
|
-
*/
|
|
164
|
-
excludeUserIds?: string[];
|
|
165
|
-
/**
|
|
166
|
-
* 是否允许粘贴任意文本
|
|
167
|
-
*/
|
|
168
|
-
freePaste?: boolean;
|
|
169
|
-
/**
|
|
170
|
-
* 占位文字
|
|
171
|
-
*/
|
|
172
|
-
placeholder?: string;
|
|
173
|
-
/**
|
|
174
|
-
* 租户ID
|
|
175
|
-
*/
|
|
176
|
-
tenantId: string;
|
|
206
|
+
export interface UserSelectorProps extends BaseSelectorProps {
|
|
177
207
|
/**
|
|
178
|
-
*
|
|
208
|
+
* 是否支持拖拽排序
|
|
179
209
|
*/
|
|
180
|
-
|
|
210
|
+
draggable?: boolean;
|
|
181
211
|
/**
|
|
182
|
-
*
|
|
212
|
+
* 最大可选数量(0 表示不限制)
|
|
183
213
|
*/
|
|
184
|
-
|
|
214
|
+
maxCount?: number;
|
|
185
215
|
/**
|
|
186
|
-
*
|
|
216
|
+
* 默认选中的用户(单选时为字符串,多选时为数组)
|
|
187
217
|
*/
|
|
188
|
-
|
|
218
|
+
modelValue?: string | string[];
|
|
189
219
|
/**
|
|
190
|
-
*
|
|
220
|
+
* 是否多选
|
|
191
221
|
*/
|
|
192
|
-
|
|
193
|
-
hidden?: boolean;
|
|
194
|
-
id: string;
|
|
195
|
-
name: string;
|
|
196
|
-
}[];
|
|
222
|
+
multiple?: boolean;
|
|
197
223
|
}
|
|
198
|
-
|
|
224
|
+
/**
|
|
225
|
+
* 用户类型
|
|
226
|
+
*/
|
|
227
|
+
export type UserType = (typeof USER_TYPE)[keyof typeof USER_TYPE];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 日志级别
|
|
3
|
+
*/
|
|
4
|
+
export type LogLevel = 'debug' | 'error' | 'info' | 'warn';
|
|
5
|
+
/**
|
|
6
|
+
* 日志配置
|
|
7
|
+
*/
|
|
8
|
+
interface LoggerConfig {
|
|
9
|
+
/** 是否启用日志 */
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
/** 最小日志级别 */
|
|
12
|
+
level: LogLevel;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 配置日志
|
|
16
|
+
*/
|
|
17
|
+
export declare const configureLogger: (options: Partial<LoggerConfig>) => void;
|
|
18
|
+
/**
|
|
19
|
+
* 日志工具
|
|
20
|
+
*/
|
|
21
|
+
export declare const logger: {
|
|
22
|
+
/**
|
|
23
|
+
* 调试日志
|
|
24
|
+
*/
|
|
25
|
+
debug: (message: string, ...args: unknown[]) => void;
|
|
26
|
+
/**
|
|
27
|
+
* 信息日志
|
|
28
|
+
*/
|
|
29
|
+
info: (message: string, ...args: unknown[]) => void;
|
|
30
|
+
/**
|
|
31
|
+
* 警告日志
|
|
32
|
+
*/
|
|
33
|
+
warn: (message: string, ...args: unknown[]) => void;
|
|
34
|
+
/**
|
|
35
|
+
* 错误日志
|
|
36
|
+
*/
|
|
37
|
+
error: (message: string, error?: unknown) => void;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* API 错误处理
|
|
41
|
+
*/
|
|
42
|
+
export declare const handleApiError: (operation: string, error: unknown) => void;
|
|
43
|
+
/**
|
|
44
|
+
* 参数校验警告
|
|
45
|
+
*/
|
|
46
|
+
export declare const warnMissingParams: (operation: string, params: string[]) => void;
|
|
47
|
+
export {};
|