173 lines
4.5 KiB
TypeScript
173 lines
4.5 KiB
TypeScript
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<E extends Recordable<keyof E>>(
|
|
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<E extends Recordable<keyof E>>(
|
|
obj: E,
|
|
options?: { disabledKeys?: (keyof E)[]; status?: (typeof PresetStatusColorTypes)[number][] } | undefined,
|
|
): ProSchemaValueEnumObj {
|
|
return EnumKeys(obj).reduce<ProSchemaValueEnumObj>((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;
|
|
}
|