@hzab/data-model 2.0.3-alpha.0 → 2.1.0-alpha.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/CHANGELOG.md CHANGED
@@ -1,147 +1,11 @@
1
- # @hzab/data-model@2.0.2
1
+ # @hzab/data-model
2
+
3
+ ## 2.1.0-alpha.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 接入重构版 data-model
2
8
 
3
- fix: getList _data.content total == 0 情况处理
9
+ ## 0.0.1
4
10
 
5
- # @hzab/data-model@2.0.1
6
-
7
- feat: ReqMap 支持异步
8
-
9
- # @hzab/data-model@2.0.0
10
-
11
- break: axios 默认导出实例化后的 axios 实例,axios 源对象通过 axiosDef 导出
12
- refactor: js 文件改为 js 文件
13
-
14
- # @hzab/data-model@1.8.8
15
-
16
- feat: array-data-model 支持 query 过滤
17
-
18
- # @hzab/data-model@1.8.6
19
-
20
- fix: getToken opt.hasCookie 是否读取 cookie 的 token。默认不读取 cookie 的 token
21
- fix: setToken 默认不设置到 cookie 上
22
-
23
- # @hzab/data-model@1.8.4
24
-
25
- fix: response undefined 兼容处理
26
-
27
- # @hzab/data-model@1.8.3
28
-
29
- fix: 无 response 默认返回网络异常文案
30
-
31
- # @hzab/data-model@1.8.2
32
-
33
- fix: errorHandler err 为 undefined 的情况兼容
34
-
35
- # @hzab/data-model@1.8.1
36
-
37
- fix: handleMsg 新增 response.message 获取
38
-
39
- # @hzab/data-model@1.8.0
40
-
41
- fix: public utils getPublicUrl 多层目录问题修复 isFullPath
42
-
43
- # @hzab/data-model@1.7.6
44
-
45
- feat: getPublicUrl 获取 public 文件路径(自动拼接 hash 数据)
46
-
47
- # @hzab/data-model@1.7.5
48
-
49
- fix: array-data-model 数据报错异常处理
50
-
51
- # @hzab/data-model@1.7.4
52
-
53
- fix: axios 拦截优化,解决请求取消异常问题
54
-
55
- # @hzab/data-model@1.7.3
56
-
57
- fix: axios 统一
58
-
59
- # @hzab/data-model@1.7.2
60
-
61
- feat: axios.js getCancelTokenSource 获取 axios.CancelToken.source, 用于取消请求
62
-
63
- # @hzab/data-model@1.7.1
64
-
65
- feat: sortKey/orderByColumn 支持对象格式,支持定义数据类型、自定义数据处理函数;自定义数据对比函数
66
-
67
- # @hzab/data-model@1.7.0
68
-
69
- feat: 本地数据支持排序查询列表数据
70
-
71
- # @hzab/data-model@1.6.1
72
-
73
- fix: array-data-modal getMap getListMap 修复;getListMap、getListResMap 逻辑优化
74
-
75
- # @hzab/data-model@1.6.0
76
-
77
- fix: 注释;通用函数抽离
78
- feat: ArrayDataModel 本地数据 DataModel
79
-
80
- # @hzab/data-model@1.5.0
81
-
82
- - feat: 增加 patch 请求方式函数
83
-
84
- # @hzab/data-model@1.4.1
85
-
86
- - fix: handleMsg useStatusText 问题修复
87
-
88
- # @hzab/data-model@1.4.0
89
-
90
- - 兼容分页列表是 content 及相关数据同层的问题 data: { content: [], pageNumber: 1, pageSize: 10, total: 0 }
91
- - handleResponse 统一 response 回调,用于处理定制 response 格式
92
-
93
- # @hzab/data-model@1.3.1
94
-
95
- - fix: useStatusText: true 问题修复
96
-
97
- # @hzab/data-model@1.3.0
98
-
99
- - feat: 网络情况判断
100
- - feat: 新增参数 isResponseData 是否返回完整的接口数据(response.data); isResponse 是否直接返回 response
101
-
102
- # @hzab/data-model@1.2.1
103
-
104
- - fix: setAxTimeout default timeout 0
105
-
106
- # @hzab/data-model@1.2.0
107
-
108
- - feat: 增删改查 axiosConf 允许独立配置 xxxAxiosConf。如: createAxiosConf
109
-
110
- # @hzab/data-model@1.1.1
111
-
112
- - fix: formData header 覆盖问题修复
113
-
114
- # @hzab/data-model@1.1.0
115
-
116
- - formData 问题修复
117
-
118
- # @hzab/data-model@1.0.2
119
-
120
- - fix: getApiUrl 增加调用来源,错误提示增加入参展示
121
-
122
- # @hzab/data-model@1.0.1
123
-
124
- - fix: 修复 delete 入参问题
125
- - fix: getApiUrl :xx 参数替换正则处理
126
-
127
- # @hzab/data-model@0.2.3
128
-
129
- - fix: axios delete 入参写法问题修复
130
-
131
- # @hzab/data-model@0.2.2
132
-
133
- - feat: useDataModel,解决 hooks 写法 model 重复实例化导致 query 丢失的问题
134
-
135
- # @hzab/data-model@0.1.2
136
-
137
- - 错误信息逻辑修复
138
- - status 错误信息
139
- - 默认错误信息
140
-
141
- # @hzab/data-model@0.1.0
142
-
143
- - token 设置在 cookie 中
144
-
145
- # @hzab/data-model@0.0.1
146
-
147
- 组件初始化
11
+ - 初始化包骨架(2.1 唯一发布物:再导出 core + `useDataModel`)。
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 @hzab/react-maintainers
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,270 +1,50 @@
1
- # @hzab/data-model
2
-
3
- 组件模板
4
-
5
- - node@14.21
6
-
7
- # 组件
8
-
9
- ## 示例
10
-
11
- ```jsx
12
- import DataModel, {
13
- // 设置 token localStorage cookie,可以设置 opt.hasCookie(setToken(token, { hasCookie: false })) 关闭设置 token 到 cookie 上
14
- setToken,
15
- // 从 cookie 或 localStorage 获取 token
16
- getToken,
17
- // 设置默认兜底的错误信息
18
- setDefaultErrMsg,
19
- // 设置默认网络异常的错误信息
20
- setNetworkErrMsg,
21
- // 设置 DataModel 中默认的 axios
22
- setDefaultAxios,
23
- } from "@hzab/data-model";
24
-
25
- const listDM = new DataModel({
26
- // query 参数
27
- query,
28
- // 新增接口 post url
29
- createApi,
30
- // 新增接口 post 入参枚举函数
31
- createMap,
32
- // 详情接口 get url
33
- getApi,
34
- // 详情接口 get 出参枚举函数
35
- getMap,
36
- // 详情接口 get url
37
- getListApi,
38
- // 列表接口 get 出参枚举函数
39
- getListMap,
40
- // 列表请求函数
41
- getListFunc,
42
- // put 编辑接口 url
43
- updateApi,
44
- // put 编辑接口 入参枚举函数
45
- updateMap,
46
- // patch 编辑接口 url
47
- patchApi,
48
- // patch 编辑接口 入参枚举函数
49
- patchMap,
50
- // 删除接口 delete url
51
- deleteApi,
52
- // 批量删除接口 delete url
53
- multipleDeleteApi,
54
- // 统一 response 回调,用于处理定制 response 格式
55
- handleResponse,
56
- // axios 实例对象
57
- axios,
58
- // axios 相关配置
59
- axiosConf,
60
- // getList 接口 axios 相关配置
61
- getListAxiosConf,
62
- // get 接口 axios 相关配置
63
- getAxiosConf,
64
- // create 接口 axios 相关配置
65
- createAxiosConf,
66
- // update 接口 axios 相关配置
67
- updateAxiosConf,
68
- // patch 接口 axios 相关配置
69
- patchAxiosConf,
70
- // delete 接口 axios 相关配置
71
- deleteAxiosConf,
72
- // multipleDelete 接口 axios 相关配置
73
- multipleDeleteAxiosConf,
74
- // 列表接口 get 入参枚举函数
75
- getListReqMap,
76
- // 列表接口 get 出参枚举函数
77
- getListResMap,
78
- // 详情接口 get 入参枚举函数
79
- getReqMap,
80
- // 详情接口 get 出参枚举函数
81
- getResMap,
82
- // 新增接口 post 入参枚举函数
83
- createReqMap,
84
- // 新增接口 post 出参枚举函数
85
- createResMap,
86
- // 编辑接口 put 入参枚举函数
87
- updateReqMap,
88
- // 编辑接口 put 出参枚举函数
89
- updateResMap,
90
- // patch 编辑接口 put 入参枚举函数
91
- patchReqMap,
92
- // patch 编辑接口 put 出参枚举函数
93
- patchResMap,
94
- // 删除接口 delete 入参枚举函数
95
- deleteReqMap,
96
- // 删除接口 delete 出参枚举函数
97
- deleteResMap,
98
- // 批量删除接口 delete 入参枚举函数
99
- multipleDeleteReqMap,
100
- // 批量删除接口 delete 出参枚举函数
101
- multipleDeleteResMap,
102
- // 是否返回完整的接口数据(response.data)
103
- isResponseData,
104
- // 是否直接返回 response
105
- isResponse,
106
- });
107
-
108
- // useDataModel,解决 hooks 写法 model 重复实例化导致 query 丢失的问题
109
- function Demo({ orgId }) {
110
- // 第一个入参同 new DataModel,第二个参数为需要监听的动态参数数组
111
- const model = useDataModel(
112
- // 初始值
113
- {
114
- getListApi: "/getList",
115
- query: { orgId },
116
- },
117
- {
118
- // 动态的 params 数据
119
- effectParams: { orgId },
120
- // 动态 query 数据
121
- effectQuery: { orgId },
122
- // 动态数据监听的值
123
- effectTargets: [orgId],
124
- },
125
- );
126
- return <ListRender model={model} />;
127
- }
128
- ```
129
-
130
-
131
- #### 重复请求拦截
132
- ```tsx
133
- import RequestCache from "@hzab/data-model/RequestCache";
134
- import { AxiosRequestConfigWithCache, setAxRequest } from "@hzab/data-model";
135
-
136
- const requestCache = new RequestCache({ options: { cacheTTL: 2000 } });
137
-
138
- setAxRequest((config: AxiosRequestConfigWithCache) => {
139
- // 拦截 get 请求
140
- if (config.method.toLowerCase() === "get") {
141
- return requestCache.handleAxRequest(config);
142
- }
143
- return config;
144
- });
145
- ```
146
-
147
- ## DataModel
148
-
149
- | 参数 | 类型 | 必填 | 默认值 | 说明 |
150
- | ----------------------- | -------- | ---- | ------ | ---------------------------------------------- |
151
- | query | Object | 否 | - | query 参数对象 |
152
- | createApi | string | 否 | - | post 接口地址 |
153
- | getApi | string | 否 | - | 详情 get 接口地址 |
154
- | getListApi | string | 否 | - | 列表 get 接口地址 |
155
- | updateApi | string | 否 | - | put 接口地址 |
156
- | patchApi | string | 否 | - | patch 接口地址 |
157
- | deleteApi | string | 否 | - | delete 接口地址 |
158
- | multipleDeleteApi | string | 否 | - | 批量删除 delete 接口地址 |
159
- | createMap | Function | 否 | - | createApi 接口提交前的处理函数 |
160
- | getMap | Function | 否 | - | getApi 接口返回结果的处理函数 |
161
- | getListMap | Function | 否 | - | getListApi 接口返回结果的处理函数 |
162
- | getListFunc | Function | 否 | - | 自定义的列表请求函数,优先级高于 getListApi |
163
- | updateMap | Function | 否 | - | updateApi 接口提交前的处理函数 |
164
- | patchMap | Function | 否 | - | patchApi 接口提交前的处理函数 |
165
- | axios | Object | 否 | - | axios 实例对象 |
166
- | axiosConf | Object | 否 | - | axios 相关配置 |
167
- | getListAxiosConf | Object | 否 | - | getList 接口 axios 相关配置 |
168
- | getAxiosConf | Object | 否 | - | get 接口 axios 相关配置 |
169
- | createAxiosConf | Object | 否 | - | create 接口 axios 相关配置 |
170
- | updateAxiosConf | Object | 否 | - | update 接口 axios 相关配置 |
171
- | patchAxiosConf | Object | 否 | - | patch 接口 axios 相关配置 |
172
- | deleteAxiosConf | Object | 否 | - | delete 接口 axios 相关配置 |
173
- | multipleDeleteAxiosConf | Object | 否 | - | multipleDelete 接口 axios 相关配置 |
174
- | getListReqMap | Function | 否 | - | 列表接口 get 入参枚举函数 |
175
- | getListResMap | Function | 否 | - | 列表接口 get 出参枚举函数 |
176
- | getReqMap | Function | 否 | - | 详情接口 get 入参枚举函数 |
177
- | getResMap | Function | 否 | - | 详情接口 get 出参枚举函数 |
178
- | createReqMap | Function | 否 | - | 新增接口 get 入参枚举函数 |
179
- | createResMap | Function | 否 | - | 新增接口 get 出参枚举函数 |
180
- | updateReqMap | Function | 否 | - | 编辑接口 get 入参枚举函数 |
181
- | updateResMap | Function | 否 | - | 编辑接口 get 出参枚举函数 |
182
- | patchReqMap | Function | 否 | - | patch 接口 get 入参枚举函数 |
183
- | patchResMap | Function | 否 | - | patch 接口 get 出参枚举函数 |
184
- | deleteReqMap | Function | 否 | - | 删除接口 get 入参枚举函数 |
185
- | deleteResMap | Function | 否 | - | 删除接口 get 出参枚举函数 |
186
- | multipleDeleteReqMap | Function | 否 | - | 批量删除接口 get 入参枚举函数 |
187
- | multipleDeleteResMap | Function | 否 | - | 批量删除接口 get 出参枚举函数 |
188
- | isResponseData | boolean | 否 | - | 是否返回完整的接口数据(response.data) |
189
- | isResponse | boolean | 否 | - | 是否直接返回 response |
190
- | handleResponse | Function | 否 | - | 统一 response 回调,用于处理定制 response 格式 |
191
-
192
- ## useDataModel
193
-
194
- | 参数 | 类型 | 必填 | 默认值 | 说明 |
195
- | ----------------- | ------ | ---- | ------ | -------------------------------- |
196
- | initParams | Object | 是 | - | 初始参数,通同 DataModel |
197
- | opt | Object | 否 | - | 配置参数 |
198
- | opt.effectTargets | Object | 否 | - | 动态数据监听的目标 |
199
- | opt.effectParams | Object | 否 | - | 动态的 params 数据,包含了 query |
200
- | opt.effectQuery | Object | 否 | - | 动态的 query 数据 |
201
-
202
- ## array-data-model
203
-
204
- - 参数通 DataModel
205
-
206
- ### query 配置
207
-
208
- | 参数 | 类型 | 必填 | 默认值 | 说明 |
209
- | --------------------- | ----------------------------------------- | ---- | ------ | --------------------------------------------------------- |
210
- | sortKey/orderByColumn | string/Object/Array[string]/Array[Object] | 否 | - | 排序字段,支持多维度排序,按照传入的顺序排优先级 |
211
- | sortType/isAsc | string/Object | 否 | - | 排序规则,支持对象配置各字段排序规则 正序: asc 倒序: desc |
212
-
213
- ### sortKey/orderByColumn Object 配置
214
-
215
- | 参数 | 类型 | 必填 | 默认值 | 说明 |
216
- | ------------- | -------- | ---- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
217
- | path | string | 否 | - | path 取值路径字符串 |
218
- | type | string | 否 | - | 值类型 用于进行内部相关转换 date |
219
- | customFormat | Function | 否 | - | 自定义数据处理函数 |
220
- | customCompare | Function | 否 | - | 自定义数据对比函数 (a, b)=>number,如果 a 小于 b,返回值为负数,如果 a 大于 b,返回值为正数,如果两个元素相等,返回值为 0。NaN 被视为 0。 |
221
-
222
- - type 目前支持的类型: date
223
-
224
- # 组件开发流程
225
-
226
- - 在 config/webpack.config.js 中按需修改 library 配置的文件名
227
- - 在 config/webpack.config.js 中按需修改 alias 配置的包名,便于本地调试
228
- - 在 tsconfig.json 中按需修改 paths 配置的包名,解决 ts 报错问题
229
- - npm run dev
230
-
231
- ## 文件目录
232
-
233
- - example 本地开发测试代码
234
- - src 组件源码
235
-
236
- ## 命令
237
-
238
- - 生成文档:npm run docs
239
- - 本地运行:npm run dev
240
- - 打包编译:npm run build
241
-
242
- ## 发布
243
-
244
- - npm 源和云效源都需要发布
245
-
246
- - 命令:npm publish --access public
247
- - 发布目录:
248
- - src
249
-
250
- ### nrm
251
-
252
- - 安装
253
- npm install -g nrm
254
- - 增加源
255
- nrm add aliyun https://packages.aliyun.com/62046985b3ead41b374a17f7/npm/npm-registry/
256
- - 切换源
257
- nrm use aliyun
258
- nrm use npm
259
- - 登录(账号密码在 https://packages.aliyun.com/npm/npm-registry/guide 查看)
260
- npm login --registry=https://packages.aliyun.com/62046985b3ead41b374a17f7/npm/npm-registry/
261
-
262
- ## 配置
263
-
264
- ### 配置文件
265
-
266
- - 本地配置文件:config/config.js
267
-
268
- ### webpack 配置文件
269
-
270
- - config/webpack.config.js
1
+ # @hzab/data-model
2
+
3
+ 数据模型 2.1:再导出 `@hzab/data-model-core`(打进 dist,不单独发布),并提供 `useDataModel`。后继 API 与 2.x 旧写法双轨。
4
+
5
+ 老页面继续 `import { useDataModel, DataModel, axios } from "@hzab/data-model"`。不要安装 `@hzab/data-model-core`。
6
+
7
+ ## 安装
8
+
9
+ ```bash
10
+ pnpm add @hzab/data-model
11
+ ```
12
+
13
+ peer:`react` `^17 || ^18 || ^19`(使用 `useDataModel` 时由消费方提供)。
14
+
15
+ ## 用法
16
+
17
+ ### 新页面(后继 API)
18
+
19
+ ```ts
20
+ import DataModel, { axios, createAxiosClient } from "@hzab/data-model";
21
+
22
+ const model = DataModel.getInstance("items", {
23
+ getListApi: "/api/items",
24
+ responseAdapter: {},
25
+ });
26
+ model.configure({ query: { tenantId: "1" } });
27
+ ```
28
+
29
+ ### 旧写法(useDataModel / 旧 list-render)
30
+
31
+ ```ts
32
+ import { useDataModel } from "@hzab/data-model";
33
+
34
+ const model = useDataModel({ getListApi: "/api/items", query: { tenantId: "1" } });
35
+ model
36
+ .getList({})
37
+ .catch((err) => {
38
+ if (err?.code === "ERR_CANCELED") return;
39
+ throw err;
40
+ });
41
+ ```
42
+
43
+ 取消请求由调用方 catch `ERR_CANCELED`(模型不再静默不 settle)。
44
+
45
+ 计划:[docs/data-model-from-ccc-plan.md](../../../docs/data-model-from-ccc-plan.md)。
46
+
47
+ ## 维护
48
+
49
+ - Owner:@hzab/react-maintainers
50
+ - 层级:react(唯一发布物)