@gz-fronted/gz-pc 0.1.2 → 0.1.3-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 CHANGED
@@ -126,7 +126,7 @@ function gzFetch<TResponse, TRequestParams = unknown>(
126
126
  | `paramsInUrl` | `boolean` | 否 | 仅 DELETE 生效;为 `true` 时参数放入 Query |
127
127
  | `headers` | `Record<string, string>` | 否 | 本次请求附加的请求头 |
128
128
  | `timeout` | `number` | 否 | 本次请求超时时间,单位毫秒;优先于实例配置 |
129
- | `showErrorMessage` | `boolean` | 否 | 是否调用 gg-ui 的 `message.error` |
129
+ | `showErrorMessage` | `boolean` | 否 | 是否显示普通消息或 Debug Drawer 错误反馈 |
130
130
  | `skipAuth` | `boolean` | 否 | 为 `true` 时跳过 Token 注入 |
131
131
  | `responseType` | `'json' \| 'blob' \| 'text'` | 否 | 响应数据类型,默认 `json` |
132
132
  | `signal` | `AbortSignal` | 否 | 取消请求的标准 AbortSignal |
@@ -270,7 +270,7 @@ HTTP 非 `2xx` 时仅尝试读取响应体的 `msg`。没有有效 `msg` 时使
270
270
  - `CANCELED_ERROR`
271
271
  - `UNKNOWN_ERROR`
272
272
 
273
- 错误 Message 默认开启,优先级为“单请求配置 > 实例配置 > 默认值 true”:
273
+ 错误反馈默认开启,优先级为“单请求配置 > 实例配置 > 默认值 true”:
274
274
 
275
275
  ```ts
276
276
  configureGzFetch({ showErrorMessage: true });
@@ -283,7 +283,7 @@ await gzFetch<void, SaveParams>({
283
283
  });
284
284
  ```
285
285
 
286
- 取消请求会转换成 `CANCELED_ERROR`,且默认不调用 `message.error`:
286
+ 取消请求会转换成 `CANCELED_ERROR`,且默认不显示错误反馈:
287
287
 
288
288
  ```ts
289
289
  const controller = new AbortController();
@@ -326,7 +326,7 @@ configureGzFetch({
326
326
  | `modalMessage` | `string` | `当前登录状态已失效,请重新登录。` |
327
327
  | `onUnauthorized` | `() => void` | 无;确认后使用 `window.location.assign` |
328
328
 
329
- 为了让普通错误消息和 401 弹窗都继承宿主项目当前的 gg-ui 主题,需要在应用根部的
329
+ 为了让普通错误消息、Debug Drawer 和 401 弹窗都继承宿主项目当前的 gg-ui 主题,需要在应用根部的
330
330
  `ConfigProvider` 内挂载一次 `GzFetchFeedbackProvider`:
331
331
 
332
332
  ```tsx
@@ -340,12 +340,11 @@ import { ConfigProvider } from '@chenhui996/gg-ui';
340
340
  </ConfigProvider>;
341
341
  ```
342
342
 
343
- 该 Provider 使用 `message.useMessage()` 和受控 gg-ui `Modal`,不会在已接入的项目中
344
- 调用脱离 React 上下文的静态反馈 API。因此主题切换时,普通错误消息和 401 弹窗都会
345
- 继续读取宿主 `ConfigProvider` 的主题 Token,无需复制亮色或暗色样式。业务页面不需要
346
- 维护反馈状态。未挂载该 Provider 的已有项目仍会回退到原来的静态 `message.error`,
347
- 不会产生 breaking change。`GzFetchUnauthorizedModal` 继续保留为兼容 API,但新项目
348
- 优先使用统一 Provider。
343
+ 该 Provider 使用 `message.useMessage()`、受控 gg-ui `Modal` 和 `Drawer`,不会在已接入
344
+ 的项目中调用脱离 React 上下文的静态反馈 API。因此主题切换时,三类反馈都会继续读取
345
+ 宿主 `ConfigProvider` 的主题 Token。业务页面不需要维护反馈状态。未挂载该 Provider 的
346
+ 已有项目仍会回退到原来的静态 `message.error`,不会静默丢失错误提示。
347
+ `GzFetchUnauthorizedModal` 继续保留为兼容 API,但新项目优先使用统一 Provider。
349
348
 
350
349
  所有由同一份 gz-pc 包创建的默认客户端和独立客户端共享一个 401 管理器。首个 401
351
350
  打开弹窗,后续并发 401 不会创建新弹窗;取消或弹窗关闭动画结束后会释放状态,后续
@@ -368,6 +367,24 @@ configureGzFetch({
368
367
  开启该能力后,401 仍会作为 `GzFetchError` 抛给调用方,但请求核心不会再为同一个
369
368
  401 额外调用普通 `message.error`。其他 HTTP 错误、网络错误、超时和取消请求行为不变。
370
369
 
370
+ ## Debug 错误反馈
371
+
372
+ 非 401 HTTP 异常的响应体包含对象类型的 `debug`,并且以下任一开关开启时,错误会进入
373
+ Provider 内的 Debug Drawer,不再重复调用普通 `message.error`:
374
+
375
+ - 当前 URL Query 包含 `showDebug=1`;
376
+ - `localStorage.getItem('showDebug') === '1'`。
377
+
378
+ 该判断不依赖构建环境,并会安全处理无 `window`、无 `localStorage` 或存储访问被禁用的
379
+ 运行环境。Drawer 从右侧打开,在同一个列表中追加每一次错误且不去重;可逐条删除、全部
380
+ 清除或手动关闭。关闭 Drawer 不会清空列表,后续新错误会再次打开。每条记录展示错误
381
+ 摘要、请求 method/url,以及完整格式化的 `debug.request`、`debug.stackTrace` 和
382
+ `debug.mdc`;缺失字段显示为空占位。
383
+
384
+ `showErrorMessage: false` 会同时关闭普通错误消息和 Debug Drawer。HTTP 401 始终优先走
385
+ 原有 unauthorized 分支,不进入 Debug Drawer。未挂载 Provider 时会回退普通
386
+ `message.error`,避免吞掉错误反馈。
387
+
371
388
  ## 中间件
372
389
 
373
390
  中间件的 `onRequest`、`onResponse` 和 `onError` 都按注册顺序执行,不采用洋葱