import { MyResponseType, renderTextHelper } from '@/common'; import { Apis } from '@/gen/Apis'; import { ProColumns } from '@ant-design/pro-components'; import { Popconfirm, Space, Tag } from 'antd'; type ReturnType = ProColumns, 'text'>; export const MyColumns = { ID(props?: ReturnType): ReturnType { return { title: 'ID', dataIndex: 'id', hideInSearch: true, ...props }; }, DayStatus: (start: string, end: string) => { const now = new Date(); const startDate = new Date(start); const endDate = new Date(end); // 判断当前时间与开始时间和结束时间的关系 if (now < startDate) { return ( 未开始 ); } else if (now > endDate) { return ( 已结束 ); } else { return ( 进行中 ); } }, Images({ ...rest }: ReturnType): ReturnType { return { hideInSearch: true, renderText: renderTextHelper.Images, ...rest, }; }, SoftDelete({ onRestore, onSoftDelete, ...rest }: { onRestore: (data: { id: number }) => Promise; onSoftDelete: (data: { id: number }) => Promise; } & ReturnType): ReturnType { return { title: '启/禁用', render: (_, item, index, action) => item?.deleted_at ? ( { onRestore?.({ id: item.id }).then(() => action?.reload()); }} okText="Yes" cancelText="No" > 已禁用 ) : ( { onSoftDelete?.({ id: item.id }).then(() => action?.reload()); }} okText="Yes" cancelText="No" > 已启用 ), search: false, ...rest, }; }, CreatedAt(props?: ReturnType): ReturnType { return { title: '创建时间', dataIndex: 'created_at', hideInSearch: true, valueType: 'dateTime', sorter: true, align: 'right', ...props, }; }, UpdatedAt(): ReturnType { return { title: '最近修改', dataIndex: 'updated_at', hideInSearch: true, valueType: 'dateTime', sorter: true, align: 'right', }; }, FinishedAt(): ReturnType { return { title: '完成时间', dataIndex: 'finished_at', hideInSearch: true, valueType: 'dateTime', sorter: true, align: 'right', }; }, Boolean({ label, ...rest }: { label?: string[] } & ReturnType): ReturnType { const option: { value: boolean; label: string; color: string }[] = [ { value: false, label: label?.[0] ?? '否', color: 'gray' }, { value: true, label: label?.[1] ?? '是', color: 'green' }, ]; return { align: 'center', request: async () => option, renderText(text: boolean) { const item = option.find((item) => item.value === Boolean(text)); return {item?.label}; }, ...rest, }; }, YesOrNo({ yes = '已', no = '未', ...rest }: { yes?: string; no?: string; } & ReturnType): ReturnType { return { align: 'center', renderText(text) { return ( {text ? yes : no} ); }, ...rest, }; }, EnumTag({ ...rest }: ReturnType): ReturnType { return { align: 'center', renderText(text: string | number) { const _enum = rest.valueEnum ?? {}; if (!_enum) return <>-; const item = _enum[text] ?? undefined; if (!item) return <>-; return {item.text}; }, ...rest, }; }, Option({ ...rest }: ReturnType): ReturnType { return { title: '操作', valueType: 'option', align: 'right', fixed: 'right', ...rest, }; }, Network(props?: ReturnType): ReturnType { return { title: 'network', ...props, render: (_: any, item: any) => { const data = props?.dataIndex === 'network' ? item.network : item; return (
{data.name}
); }, valueType: 'select', key: 'networks_id', fieldProps: { fieldNames: { value: 'id', label: 'name' }, optionRender: (item: any) => { return (
{item.data.name}
); }, }, request: async () => (await Apis.Select.Networks()).data, }; }, Token({ ...rest }) { return { title: 'Token', renderText(text: string) { return {text}; }, ...rest, }; }, };