@baishuyun/ui-business 2.0.6 → 3.0.3

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.
Files changed (49) hide show
  1. package/README.md +188 -1
  2. package/dist/DeptsMember/DeptsMember-CzJqr_LX.js +721 -0
  3. package/dist/DeptsMember/ExtraConcactPanel-BI9emYpp.js +674 -0
  4. package/dist/DeptsMember/OrganizationPanel-DcwvZ6X4.js +254 -0
  5. package/dist/DeptsMember/TabGroup-wNM86-Zq.js +141 -0
  6. package/dist/DeptsMember/index.js +2 -2
  7. package/dist/DeptsMember/subcomponents/Entity/Department/index.js +79 -304
  8. package/dist/DeptsMember/subcomponents/Entity/DeptsUser/index.d.ts +2 -0
  9. package/dist/DeptsMember/subcomponents/Entity/DeptsUser/index.js +38 -0
  10. package/dist/DeptsMember/subcomponents/Entity/Member/index.js +27 -672
  11. package/dist/components/DeptsMember/DeptsMember.type.d.ts +5 -1
  12. package/dist/components/DeptsMember/hooks/useDeptsMemberSelector.d.ts +1 -0
  13. package/dist/components/DeptsMember/subcomponents/Entity/Department/index.d.ts +1 -1
  14. package/dist/components/DeptsMember/subcomponents/Entity/DeptsUser/index.d.ts +6 -0
  15. package/dist/components/DeptsMember/subcomponents/Entity/Member/index.d.ts +1 -1
  16. package/dist/components/DeptsMember/subcomponents/SelectionTabs/SelectionTabList/SelectionTabList.d.ts +2 -2
  17. package/dist/components/DeptsMember/subcomponents/SelectionTabs/useSelectorType.d.ts +16 -0
  18. package/dist/components/DeptsMember/utils/constants.d.ts +8 -4
  19. package/dist/index.css +1 -1
  20. package/dist/index.d.ts +2 -1
  21. package/dist/index.js +7 -7
  22. package/dist/lang/en-US.json.d.ts +2 -1
  23. package/dist/lang/zh-CN.json.d.ts +2 -1
  24. package/dist/services/apiService.d.ts +16 -11
  25. package/dist/vendors/services/apiService.js +11 -86
  26. package/dist/vendors/services/corp/outsider.service.js +4 -4
  27. package/dist/vendors/services/data/department.service.js +2 -2
  28. package/dist/vendors/services/data/member.service.js +6 -6
  29. package/dist/vendors/services/data/member_limit.service.js +3 -3
  30. package/dist/vendors/services/data/outsider.service.js +4 -4
  31. package/package.json +2 -2
  32. package/dist/DeptsMember/DeptsMember-pFjdAocd.js +0 -702
  33. package/dist/DeptsMember/TabGroup-CznMwTOD.js +0 -137
  34. package/dist/vendors/axios.js +0 -1720
  35. package/dist/vendors/services/team/team.services.js +0 -5
  36. /package/dist/components/DeptsMember/subcomponents/Entity/Member/{MemberEntity/MemerList → MemerList}/MemberList.d.ts +0 -0
  37. /package/dist/components/DeptsMember/subcomponents/{Entity/Department/CurrentDepartmentEntity/CurrentDepartmentEntity.d.ts → Panels/CurrentUserDeptsPanel/CurrentUserDeptsPanel.d.ts} +0 -0
  38. /package/dist/components/DeptsMember/subcomponents/{Entity/Member/CurrentEntity/CurrentEntity.d.ts → Panels/CurrentUserPanel/CurrentUserPanel.d.ts} +0 -0
  39. /package/dist/components/DeptsMember/subcomponents/{Entity/Department/ExternalContactEntity/ExternalContactEntity.d.ts → Panels/ExtraConcactPanel/ExtraConcactPanel.d.ts} +0 -0
  40. /package/dist/components/DeptsMember/subcomponents/{Entity/Member/ExternalContactEntity/ExternalContactEntity.d.ts → Panels/ExtraContactGroupPanel/ExtraContactGroupPanel.d.ts} +0 -0
  41. /package/dist/components/DeptsMember/subcomponents/{Entity/Member/MemberEntity → Panels/MemberPanel}/AllMemeberCheck/AllMemeberCheck.d.ts +0 -0
  42. /package/dist/components/DeptsMember/subcomponents/{Entity/Member/MemberEntity → Panels/MemberPanel}/ExternalMember/ExternalMember.d.ts +0 -0
  43. /package/dist/components/DeptsMember/subcomponents/{Entity/Member/MemberEntity → Panels/MemberPanel}/InternalMemeber/InternalMemeber.d.ts +0 -0
  44. /package/dist/components/DeptsMember/subcomponents/{Entity/Member/MemberEntity/MemberEntity.d.ts → Panels/MemberPanel/MemberPanel.d.ts} +0 -0
  45. /package/dist/components/DeptsMember/subcomponents/{Entity/Department/OrganizationalEntity → Panels/OrganizationPanel}/ExternalOrganization/ExternalOrganization.d.ts +0 -0
  46. /package/dist/components/DeptsMember/subcomponents/{Entity/Department/OrganizationalEntity → Panels/OrganizationPanel}/InternalOrganization/InternalOrganization.d.ts +0 -0
  47. /package/dist/components/DeptsMember/subcomponents/{Entity/Department/OrganizationalEntity/OrganizationalEntity.d.ts → Panels/OrganizationPanel/OrganizationPanel.d.ts} +0 -0
  48. /package/dist/components/DeptsMember/subcomponents/{Entity/Member/MajorEntity/MajorEntity.d.ts → Panels/PositionPanel/PositionPanel.d.ts} +0 -0
  49. /package/dist/components/DeptsMember/subcomponents/{Entity/Member/RoleEntity/RoleEntity.d.ts → Panels/RolePanel/RolePanel.d.ts} +0 -0
package/README.md CHANGED
@@ -67,4 +67,191 @@ src/
67
67
 
68
68
  ## 许可证
69
69
 
70
- MIT
70
+ MIT
71
+
72
+ ## API Service 配置指南
73
+
74
+ 本组件库采用依赖注入架构,**要求业务项目传入自己的 Axios 实例**。这种设计确保了:
75
+
76
+ - 🔒 **统一认证体系**:组件库请求使用业务项目的认证逻辑
77
+ - 🎯 **完全请求控制**:业务项目可以感知和控制所有请求
78
+ - 🛡️ **统一错误处理**:所有请求使用相同的错误处理逻辑
79
+ - 📊 **统一状态管理**:Loading 状态、请求监控等统一管理
80
+
81
+ ## 基本用法
82
+
83
+ ### 1. 创建业务 Axios 实例
84
+
85
+ ```typescript
86
+ // src/api/request.ts
87
+ import axios from 'axios';
88
+ import { message } from 'antd';
89
+
90
+ const request = axios.create({
91
+ baseURL: process.env.REACT_APP_API_BASE_URL,
92
+ timeout: 10000,
93
+ withCredentials: true,
94
+ });
95
+
96
+ // 请求拦截器
97
+ request.interceptors.request.use(
98
+ (config) => {
99
+ // 添加认证 Token
100
+ const token = localStorage.getItem('access_token');
101
+ if (token) {
102
+ config.headers.Authorization = `Bearer ${token}`;
103
+ }
104
+ return config;
105
+ },
106
+ (error) => Promise.reject(error)
107
+ );
108
+
109
+ // 响应拦截器
110
+ request.interceptors.response.use(
111
+ (response) => response,
112
+ (error) => {
113
+ // 统一错误处理
114
+ if (error.response?.status === 401) {
115
+ message.error('登录已过期,请重新登录');
116
+ // 跳转到登录页
117
+ window.location.href = '/login';
118
+ } else {
119
+ message.error(error.response?.data?.message || '请求失败');
120
+ }
121
+ return Promise.reject(error);
122
+ }
123
+ );
124
+
125
+ export default request;
126
+ ```
127
+
128
+ ### 2. 注入到组件库
129
+
130
+ ```typescript
131
+ // src/main.ts 或 src/App.tsx
132
+ import { setApiServiceProvider } from '@baishuyun/ui-business';
133
+ import request from './api/request';
134
+
135
+ // 注入业务项目的 Axios 实例
136
+ setApiServiceProvider({
137
+ axiosInstance: request,
138
+ });
139
+ ```
140
+
141
+ ## 高级配置
142
+
143
+ ### 多环境配置
144
+
145
+ ```typescript
146
+ // src/api/config.ts
147
+ const API_CONFIG = {
148
+ development: {
149
+ baseURL: 'http://localhost:3000/api',
150
+ timeout: 10000,
151
+ },
152
+ production: {
153
+ baseURL: 'https://api.example.com',
154
+ timeout: 5000,
155
+ },
156
+ };
157
+
158
+ const config = API_CONFIG[process.env.NODE_ENV as keyof typeof API_CONFIG];
159
+
160
+ const request = axios.create(config);
161
+ ```
162
+
163
+ ### 请求重试机制
164
+
165
+ ```typescript
166
+ // 添加请求重试逻辑
167
+ request.interceptors.response.use(
168
+ (response) => response,
169
+ async (error) => {
170
+ const config = error.config;
171
+
172
+ // 重试逻辑
173
+ if (!config._retry && error.response?.status >= 500) {
174
+ config._retry = true;
175
+ config._retryCount = (config._retryCount || 0) + 1;
176
+
177
+ if (config._retryCount <= 3) {
178
+ await new Promise(resolve => setTimeout(resolve, 1000));
179
+ return request(config);
180
+ }
181
+ }
182
+
183
+ return Promise.reject(error);
184
+ }
185
+ );
186
+ ```
187
+
188
+ ### Loading 状态管理
189
+
190
+ ```typescript
191
+ // src/api/loading.ts
192
+ let loadingCount = 0;
193
+
194
+ const showLoading = () => {
195
+ if (loadingCount === 0) {
196
+ // 显示全局 loading
197
+ }
198
+ loadingCount++;
199
+ };
200
+
201
+ const hideLoading = () => {
202
+ loadingCount--;
203
+ if (loadingCount === 0) {
204
+ // 隐藏全局 loading
205
+ }
206
+ };
207
+
208
+ // 在拦截器中使用
209
+ request.interceptors.request.use((config) => {
210
+ showLoading();
211
+ return config;
212
+ });
213
+
214
+ request.interceptors.response.use(
215
+ (response) => {
216
+ hideLoading();
217
+ return response;
218
+ },
219
+ (error) => {
220
+ hideLoading();
221
+ return Promise.reject(error);
222
+ }
223
+ );
224
+ ```
225
+
226
+ ## 动态配置
227
+
228
+ 可以在运行时动态更换 Axios 实例:
229
+
230
+ ```typescript
231
+ // 切换到不同的 API 环境
232
+ const switchToTestEnv = () => {
233
+ const testRequest = axios.create({
234
+ baseURL: 'https://test-api.example.com',
235
+ // 其他配置...
236
+ });
237
+
238
+ setApiServiceProvider({ axiosInstance: testRequest });
239
+ };
240
+ ```
241
+
242
+ ## 注意事项
243
+
244
+ - ⚠️ **必须在使用组件库之前调用** `setApiServiceProvider`
245
+ - 📍 **推荐在应用入口文件**(如 `main.ts` 或 `App.tsx`)中进行配置
246
+ - 🔧 **Axios 实例应包含完整业务逻辑**(拦截器、错误处理、认证等)
247
+ - 🚫 **组件库不再提供内置的 HTTP 配置**,完全依赖外部注入
248
+
249
+ ## 错误处理
250
+
251
+ 如果未设置 API 服务提供者,组件库会抛出明确的错误提示:
252
+
253
+ ```
254
+ Error: API 服务提供者未设置。请先调用 setApiServiceProvider() 设置 Axios 实例。
255
+ ```
256
+
257
+ 确保在使用任何组件库功能之前完成配置。