useSource 资源管理
由于钩子useSource作为前后台数据交互的传送门,页面中的数据最终需要汇聚在这里,如增删改查页面的table、form、useCurd,所以useSource需要抛出页面中需要用到的方法及变量,同时也需要收集相关组件的数据,以确保成功完成前后台交互。以下是useSource抛出的数据。
如何使用
ts
import { useSource } from '@dt-frames/ui'
const {
api, // 返回完整的api
form, // 与form进行交互
table, // 与table进行交互
curd, // 与useCurd进行交互
loading, // 加载状态集合
dataSource, // table中的数据
onOPenAddDialog, // 调用此方法可打开新增弹框
onOpenUpdateDialog, // 调用此方法可打开编辑弹框
onDelete, // 单个文件删除
onDeletes, // 批量删除
onQueryById, // 通过id查询数据
onSave, // 文件保存
onSearch, // 查询
onReset, // 重置
} = useSource({
baseUrl: 'xxxx',
exportName: '测试',
api: {
....
}
})
// 如果页面中用到table 需要将资源中的table与useTable挂上关系(** useCurd 与 useForm 一样的道理 **)
const [] = useTable({
...table,
columns: []
})SourceOption
| 属性 | 说明 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| baseUrl | 基础路径 | string | ||
| exportName | 文件导出名称 | string | ComputedRef | ||
| queryAfterUpdate | 编辑成功后是否需要查询 包括增删改 | boolean | true | |
| beforeUpdate | 编辑或修改之前需要做的公共操作 | (model: Recordable) => boolean | Recordable | undefined | ||
| afterUpdate | 编辑或修改之后需要做的公共操作 | (data: Recordable) => void | ||
| api | 配置api接口 | ApiObjType |
ApiObjType
以下是固定 api 的 key 值。
| 属性 | 说明 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| add | 新增 | string | ApiType | ||
| update | 修改 | string | ApiType | ||
| save | 保存 | string | ApiType | ||
| deletes | 删除 | string | ApiType | ||
| queryById | 查找 | string | ApiType | ||
| queryPage | 分页查询 | string | ApiType | ||
| [key: string] | 其他 | string | ApiType |
ApiType
以下是关于调用后台接口相关的配置数据,我们可以在请求接口前、后处理相关的参数。
| 属性 | 说明 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| api | 请求后台接口的路径 | string | ||
| type | 请求类型 | 'get' | 'post' | 'put' | 'delete' | 'post' | |
| header | 请求头信息 | { 'Content-Type': HttpContentTypeEnum } & Partial<AxiosRequestHeaders> | ||
| model | 默认的基础数据 | Recordable | ||
| beforeFetch | 请求之前 | ( params: Recordable ) => any | ||
| afterFetch | 请求之后 | ( data: Recordable) => void |
注意:
1、请求之前(beforeFetch),如果返回了false, 则会停止请求后台接口;
2、如果返回了数据,则请求后台时候使用返回的数据;
3、我们也可以利用对象内存空间的特性,直接修改params,而没有返回值。
某些情况,后台返回的数据结构与我们期望的完全不同,则需要重写返回的数据结构:
ts
import { useSource } from '@dt-frames/ui'
import { HttpContentTypeEnum } from '@dt-frames/core'
const { } = useSource({
....
api: {
queryPage: {
api: 'xxx',
header: {
onlyData: false, // 返回所有的数据,而不是只返回data数据
header: {
'Content-Type': HttpContentTypeEnum.FORM_DATA
}
},
afterFetch( data ) {
// 这里需要对数据进行处理
....
// 以下是公司框架需要返回的分页查询数据格式
return {
code: 200,
data: {
records: [], // 分页数据
current: 1, // 当前为第几页
pages: 1, // 总共多少页
size: 10, // 分页大小
total: 8 // 总共多少条数据
}
}
}
}
}
})