mentalHealth/01-Web/packages/utils/common/tools.ts

173 lines
4.5 KiB
TypeScript
Raw Normal View History

2024-02-18 06:52:01 +00:00
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;
}