// export const debounce = function (
//     fn: (...args: any[]) => void,
//     delay: number = 500,
//     immediate: boolean = false,
//     toast: boolean = true
// ) {
//     let timer: number | null;
//     return function (this: any, ...args: any[]) {
//         if (timer) {
//             toast &&
//                 uni.showToast({
//                     title: '请勿频繁操作',
//                     icon: 'none',
//                 });
//             clearTimeout(timer);
//         }
//         if (immediate) {
//             !timer && fn.apply(this, args);
//             timer = setTimeout(() => {
//                 timer = null;
//             }, delay);
//         } else {
//             timer = setTimeout(() => {
//                 fn.apply(this, args);
//                 timer = null;
//             }, delay);
//         }
//     };
// };

// export const throttle = function (
//     fn: (...args: any[]) => void,
//     delay: number = 500,
//     immediate: boolean = true
// ) {
//     let timer: number | undefined;
//     let flag: boolean;

//     return function (this: any, ...args: any[]) {
//         if (immediate) {
//             if (!flag) {
//                 flag = true;
//                 fn.apply(this, args);
//                 timer = setTimeout(() => {
//                     flag = false;
//                     clearTimeout(timer);
//                     timer = undefined;
//                 }, delay);
//             }
//         } else if (!flag) {
//             flag = true;
//             timer = setTimeout(() => {
//                 flag = false;
//                 fn.apply(this, args);
//                 clearTimeout(timer);
//                 timer = undefined;
//             }, delay);
//         }
//     };
// };

// export const genId = (prefix: string = '') => `${prefix}${Math.random().toString(16).slice(2)}`;

// interface Tranining {
//     callback: (...args: any[]) => Promise<boolean> | boolean;
//     gap?: number;
//     duration?: number;
//     success?: Function;
//     fail?: Function;
// }

// export function training({ callback, gap, duration, success, fail }: Tranining) {
//     let stop = false;
//     let timer: any = null;
//     const end = () => {
//         stop = true;
//         clearTimeout(timer);
//     };
//     const loop = async (...args: any[]) => {
//         try {
//             if (await callback(...args)) {
//                 end();
//                 success?.();
//             }
//         } catch {
//             end();
//             fail?.();
//         }
//         if (stop) return;
//         setTimeout(() => {
//             loop(...args);
//         }, gap || 3000);
//     };
//     return {
//         start: (...args: any[]) => {
//             timer = setTimeout(() => {
//                 end();
//                 fail?.();
//             }, duration || 60000);
//             loop(...args);
//         },
//         end,
//     };
// }

// export function showErrToast(code: number, title: string) {
//     if (code !== 200) {
//         uni.showToast({
//             icon: 'error',
//             title,
//         });
//     }
// }

// /**
//  * @description: 将数组映射为对象
//  * @param {*} arr
//  * @param {*} key
//  * @param {*} value
//  * @return {*} {key:value}
//  */
// export const ArrToObj = (
//     arr: Record<string, any>[],
//     key = 'code',
//     value = 'value'
// ): { [key: string]: string } => {
//     let obj: Record<string, any> = {};
//     let i = 0;
//     for (i; i < arr.length; i++) {
//         obj[arr[i][key]] = arr[i][value];
//     }
//     return obj;
// };
// /**
//  * @description: 获取字典值
//  * @param {string} key
//  */
// export const getDict = (key: string) => {
//     const d = uni.getStorageSync('DICT').find((i: Record<string, any>) => i.code === key);
//     return d ? d.children : [];
// };
