123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import { CombineService, Mutate } from '@ahooksjs/use-request/lib/types'
- import { message } from 'antd'
- import moment from 'moment'
- import { useRequest } from 'umi'
- interface Options {
- manual?: boolean,//手动模式true开启
- pollingInterval?: number,//轮询间隔,单位为毫秒。设置后,将进入轮询模式,定时触发 run
- pollingWhenHidden?: boolean,//在页面隐藏时,是否继续轮询。默认为 true,即不会停止轮询
- debounceInterval?: number,//防抖间隔, 单位为毫秒,设置后,请求进入防抖模式。
- throttleInterval?: number,//节流间隔, 单位为毫秒,设置后,请求进入节流模式。
- cacheKey?: string,//请求唯一标识。如果设置了 cacheKey启用缓存机制
- onSuccess?: (data: any, params: any[]) => void,//service resolve 时触发,参数为 data 和 params
- onError?: (error: Error, params: any[]) => void,//service 报错时触发,参数为 error 和 params。
- formatResult?: boolean,//格式化请求结果
- initialData?: any,//默认的 data
- msgNmae?: string,
- }
- /**
- *
- * @param fnc
- * @param options:Options
- * @param manual?: boolean,//手动模式true开启
- * @param pollingInterval?: number,//轮询间隔,单位为毫秒。设置后,将进入轮询模式,定时触发 run
- * @param pollingWhenHidden?: boolean,//在页面隐藏时,是否继续轮询。默认为 true,即不会停止轮询
- * @param debounceInterval?: number,//防抖间隔, 单位为毫秒,设置后,请求进入防抖模式。开启后then获取不到res
- * @param throttleInterval?: number,//节流间隔, 单位为毫秒,设置后,请求进入节流模式。开启后then获取不到res
- * @param cacheKey?: string,//请求唯一标识。如果设置了 cacheKey启用缓存机制
- * @param onSuccess?: (data: any, params: any[]) => void,//service resolve 时触发,参数为 data 和 params
- * @param onError?: (error: Error, params: any[]) => void,//service 报错时触发,参数为 error 和 params。
- * @param formatResult?: boolean,// 开启返回原数据,不开启默认返回res.data
- * @param initialData?: any,//默认的 data
- * @param msgNmae?: string,//操作完成提示文字
- *
- */
- export interface FnAjax<T>{
- loading:boolean,
- data:T,
- run:(...args:any)=>Promise<any>,
- refresh:()=>Promise<any>,
- mutate: Mutate<any>
- }
- export function useAjax(fnc: CombineService<any, any>, options?: Options){
- const ajax = useRequest(fnc, {
- manual: options?.manual || true,
- cacheKey: options?.cacheKey,
- pollingInterval: options?.pollingInterval || undefined,
- debounceInterval: options?.debounceInterval || undefined,
- // throttleInterval:500,
- formatResult: (res) => {
- let reqTime = moment().format('YYYY-MM-DD HH:mm:ss')
- res['reqTime'] = reqTime
- return options?.formatResult ? {...res,reqTime} :res.data
-
- },
- onSuccess: (res) => {
- if (res) {
- options?.msgNmae && message.success(options?.msgNmae + '成功!', 2)
- }
- return null
- },
- onError: () => {
- }
- })
- return ajax
- }
|