Release v0.1
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Layout, Typography, Table, Grid, InputNumber, Button, Space, Tag, message, Modal, Dropdown, Input } from 'antd';
|
import { Layout, Typography, Table, Grid, InputNumber, Button, Space, Tag, message, Modal, Dropdown, Input, Select } from 'antd';
|
||||||
import type { FormInstance } from 'antd';
|
import type { FormInstance } from 'antd';
|
||||||
import type { ColumnsType, ColumnType } from 'antd/es/table';
|
import type { ColumnsType, ColumnType } from 'antd/es/table';
|
||||||
import type { FilterDropdownProps } from 'antd/es/table/interface';
|
import type { FilterDropdownProps } from 'antd/es/table/interface';
|
||||||
@@ -477,7 +477,7 @@ function buildNumberRangeFilter(dataIndex: keyof Resource, label: string): Colum
|
|||||||
onClick={() => {
|
onClick={() => {
|
||||||
const key = `${localMin ?? ''}:${localMax ?? ''}`;
|
const key = `${localMin ?? ''}:${localMax ?? ''}`;
|
||||||
setSelectedKeys?.([key]);
|
setSelectedKeys?.([key]);
|
||||||
confirm?.();
|
confirm?.({ closeDropdown: true });
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
筛选
|
筛选
|
||||||
@@ -485,8 +485,11 @@ function buildNumberRangeFilter(dataIndex: keyof Resource, label: string): Colum
|
|||||||
<Button
|
<Button
|
||||||
size="small"
|
size="small"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
setLocalMin(undefined);
|
||||||
|
setLocalMax(undefined);
|
||||||
setSelectedKeys?.([]);
|
setSelectedKeys?.([]);
|
||||||
clearFilters?.();
|
clearFilters?.();
|
||||||
|
confirm?.({ closeDropdown: true });
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
重置
|
重置
|
||||||
@@ -509,6 +512,64 @@ function buildNumberRangeFilter(dataIndex: keyof Resource, label: string): Colum
|
|||||||
} as ColumnType<Resource>;
|
} as ColumnType<Resource>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 枚举筛选下拉(用于性别等枚举类列)
|
||||||
|
function buildEnumFilter(dataIndex: keyof Resource, label: string, options: Array<{ label: string; value: string }>): ColumnType<Resource> {
|
||||||
|
return {
|
||||||
|
title: label,
|
||||||
|
dataIndex,
|
||||||
|
key: String(dataIndex),
|
||||||
|
filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }: FilterDropdownProps) => {
|
||||||
|
const [val, setVal] = React.useState<string | undefined>(
|
||||||
|
(selectedKeys && selectedKeys[0] ? String(selectedKeys[0]) : undefined)
|
||||||
|
);
|
||||||
|
return (
|
||||||
|
<div className="byte-table-custom-filter" style={{ padding: 8 }}>
|
||||||
|
<Space direction="vertical" style={{ width: 200 }}>
|
||||||
|
<Select
|
||||||
|
allowClear
|
||||||
|
placeholder={`请选择${label}`}
|
||||||
|
value={val}
|
||||||
|
onChange={(v) => setVal(v)}
|
||||||
|
options={options}
|
||||||
|
style={{ width: '100%' }}
|
||||||
|
/>
|
||||||
|
<Space>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
icon={<SearchOutlined />}
|
||||||
|
onClick={() => {
|
||||||
|
setSelectedKeys?.(val ? [val] : []);
|
||||||
|
confirm?.({ closeDropdown: true });
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
筛选
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
size="small"
|
||||||
|
onClick={() => {
|
||||||
|
setVal(undefined);
|
||||||
|
setSelectedKeys?.([]);
|
||||||
|
clearFilters?.();
|
||||||
|
confirm?.({ closeDropdown: true });
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
重置
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
</Space>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
onFilter: (filterValue: React.Key | boolean, record: Resource) =>
|
||||||
|
String((record as any)[dataIndex]) === String(filterValue),
|
||||||
|
render: (g: string) => {
|
||||||
|
const color = g === '男' ? 'blue' : g === '女' ? 'magenta' : 'default';
|
||||||
|
return <Tag color={color}>{g}</Tag>;
|
||||||
|
},
|
||||||
|
} as ColumnType<Resource>;
|
||||||
|
}
|
||||||
|
|
||||||
type Props = { inputOpen?: boolean; onCloseInput?: () => void; containerEl?: HTMLElement | null };
|
type Props = { inputOpen?: boolean; onCloseInput?: () => void; containerEl?: HTMLElement | null };
|
||||||
|
|
||||||
const ResourceList: React.FC<Props> = ({ inputOpen = false, onCloseInput, containerEl }) => {
|
const ResourceList: React.FC<Props> = ({ inputOpen = false, onCloseInput, containerEl }) => {
|
||||||
@@ -649,21 +710,11 @@ const ResourceList: React.FC<Props> = ({ inputOpen = false, onCloseInput, contai
|
|||||||
// 非移动端显示更多列
|
// 非移动端显示更多列
|
||||||
...(!isMobile
|
...(!isMobile
|
||||||
? [
|
? [
|
||||||
{
|
buildEnumFilter('gender', '性别', [
|
||||||
title: '性别',
|
{ label: '男', value: '男' },
|
||||||
dataIndex: 'gender',
|
{ label: '女', value: '女' },
|
||||||
key: 'gender',
|
{ label: '其他/保密', value: '其他/保密' },
|
||||||
filters: [
|
]),
|
||||||
{ text: '男', value: '男' },
|
|
||||||
{ text: '女', value: '女' },
|
|
||||||
{ text: '其他/保密', value: '其他/保密' },
|
|
||||||
],
|
|
||||||
onFilter: (value: React.Key | boolean, record: Resource) => String(record.gender) === String(value),
|
|
||||||
render: (g: string) => {
|
|
||||||
const color = g === '男' ? 'blue' : g === '女' ? 'magenta' : 'default';
|
|
||||||
return <Tag color={color}>{g}</Tag>;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
buildNumberRangeFilter('age', '年龄'),
|
buildNumberRangeFilter('age', '年龄'),
|
||||||
buildNumberRangeFilter('height', '身高'),
|
buildNumberRangeFilter('height', '身高'),
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user