import type { PresetStatusColorTypes } from 'antd/es/_util/colors'; import dayjs from 'dayjs'; import type { ProSchemaValueEnumObj } from '@ant-design/pro-components'; import { EnumKeys } from './objects'; export function resolveEnumOptions>( obj: E, options?: { disabledKeys?: (keyof E)[] } | undefined, ) { return EnumKeys(obj).map((k) => ({ label: k as string, value: obj[k], disabled: options?.disabledKeys?.includes(k) || false, })); } export function resolveEnumValues>( obj: E, options?: { disabledKeys?: (keyof E)[]; status?: (typeof PresetStatusColorTypes)[number][] } | undefined, ): ProSchemaValueEnumObj { return EnumKeys(obj).reduce((prev, curr, index) => { prev[obj[curr]] = { text: curr as string, status: options?.status?.[index] || 'processing', disabled: options?.disabledKeys?.includes(curr) || false, }; return prev; }, {}); } export function disabledDateBeforeToday(current: dayjs.Dayjs) { current.format('YYYY-MM-DD'); return current && current < dayjs().subtract(1, 'day'); } export function disabledDateAfterToday(current: dayjs.Dayjs) { current.format('YYYY-MM-DD'); return current && current > dayjs().subtract(0, 'day'); } export function disabledTimeBeforeCurrent(date: dayjs.Dayjs | null) { const hour = dayjs().hour(); const minute = dayjs().minute(); const second = dayjs().second(); const range = (start: number, end: number) => { const result = []; for (let i = start; i < end; i++) { result.push(i); } return result; }; if (date) { /** 已选择的日期是否大于当前日期 */ const isBefore = dayjs().isBefore(date); if (isBefore) { return { disabledHours: () => range(0, 24).splice(0, 0), disabledMinutes: () => range(0, 60).splice(0, 0), disabledSeconds: () => range(0, 60).splice(0, 0), }; } } return { disabledHours: () => range(0, 24).splice(0, hour), disabledMinutes: () => range(0, 60).splice(0, minute), disabledSeconds: () => range(0, 60).splice(0, second), }; } /** * 根据屏幕宽度取值 * - `step` 步长 * - `min` 最小值 * - `max` 最大值 * - `step` 步长,默认 `24` * * @param {number} start 起始值 * @param {?({min?: number;max?: number;step?: 6 | 12 | 24 | 48 | 60 | 72;})} [options] 配置参数 * @returns {number} 值 */ export function getValueRange( start: number, options?: { min?: number; max?: number; step?: 6 | 12 | 24 | 48 | 60 | 72; }, ): number { const step = options?.step ?? 24; const min = options?.min; const max = options?.max; if (min && max && min > max) return start; let ret = start; switch (true) { case innerWidth <= 576: ret = start; break; case 576 < innerWidth && innerWidth <= 768: ret = ret += step; break; case 768 < innerWidth && innerWidth <= 992: ret = ret += step * 2; break; case 992 < innerWidth && innerWidth <= 1200: ret = ret += step * 3; break; case 1200 < innerWidth && innerWidth <= 1600: ret = ret += step * 4; break; case 1600 < innerWidth: ret = ret += step * 5; break; default: break; } if (min && ret < min) ret = min; if (max && ret > max) ret = max; return ret; } /** * 设置表格尺寸 * * @export * @param {number} length 长度 * @param {{ large: number; middle: number; }} [options={ large: 6, middle: 12 }] 配置参数 */ export function getTableSize(length: number | null | undefined, options = { large: 6, middle: 12 }) { const { large, middle } = options; let size: 'large' | 'middle' | 'small' | undefined; if (length) { switch (true) { case length <= large: size = 'large'; break; case length > large && length <= middle: size = 'middle'; break; case length > middle: size = 'small'; break; default: size = undefined; break; } } return size; } export function isEmpty(res: unknown) { let s = res; if (typeof s === 'string') { s = s.trim(); } if (typeof s === 'number') { if (s === 0) return false; } if (s === '') return true; if (s === null) return true; if (typeof s === 'undefined') return true; if (Array.isArray(s)) { if (s.length === 0) return true; } if (typeof s === 'object') { if (Object.keys(s).length === 0) return true; } return false; }