feat 项目部署代ç 优化
parent
c4f096623a
commit
e51acef3aa
@ -0,0 +1,230 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
import { Space, Switch, Table, Tag, Transfer } from 'antd';
|
||||||
|
import type { ColumnsType, TableRowSelection } from 'antd/es/table/interface';
|
||||||
|
import type { TransferItem, TransferProps } from 'antd/es/transfer';
|
||||||
|
import difference from 'lodash/difference';
|
||||||
|
import {randomInt} from "@antv/xflow-extension";
|
||||||
|
import {ProTable} from "@ant-design/pro-components";
|
||||||
|
|
||||||
|
interface RecordType {
|
||||||
|
key: string;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
tag: string;
|
||||||
|
age: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface DataType {
|
||||||
|
key: string;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
tag: string;
|
||||||
|
age: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const tableListDataSource = [];
|
||||||
|
const valueEnum = {
|
||||||
|
0: 'close',
|
||||||
|
1: 'running',
|
||||||
|
2: 'online',
|
||||||
|
3: 'error',
|
||||||
|
};
|
||||||
|
|
||||||
|
const creators = ['付小小', '曲丽丽', '林东东', '陈帅帅', '兼某某'];
|
||||||
|
|
||||||
|
for (let i = 0; i < 5; i += 1) {
|
||||||
|
tableListDataSource.push({
|
||||||
|
key: i,
|
||||||
|
name: 'AppName',
|
||||||
|
containers: Math.floor(Math.random() * 20),
|
||||||
|
creator: creators[Math.floor(Math.random() * creators.length)],
|
||||||
|
status: valueEnum[((Math.floor(Math.random() * 10) % 4) + '') as '0'],
|
||||||
|
createdAt: Date.now() - Math.floor(Math.random() * 100000),
|
||||||
|
memo:
|
||||||
|
i % 2 === 1
|
||||||
|
? '很长很长很长很长很长很长很长的文字要展示但是要留下尾巴'
|
||||||
|
: '简短备注文案',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
console.log(tableListDataSource)
|
||||||
|
const columns1 = [
|
||||||
|
{
|
||||||
|
title: '应用名称',
|
||||||
|
width: 80,
|
||||||
|
dataIndex: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '容器数量',
|
||||||
|
dataIndex: 'containers',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '状态',
|
||||||
|
width: 80,
|
||||||
|
dataIndex: 'status',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建者',
|
||||||
|
width: 80,
|
||||||
|
dataIndex: 'creator',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
interface TableTransferProps extends TransferProps<TransferItem> {
|
||||||
|
dataSource: DataType[];
|
||||||
|
leftColumns: ColumnsType<DataType>;
|
||||||
|
rightColumns: ColumnsType<Pick<DataType, 'title'| 'key'>>
|
||||||
|
}
|
||||||
|
|
||||||
|
// Customize Table Transfer
|
||||||
|
const TableTransfer = ({ leftColumns, rightColumns, ...restProps }: TableTransferProps) => (
|
||||||
|
<Transfer {...restProps} locale={{ itemUnit: '项', itemsUnit: '项', searchPlaceholder: '请输入搜索内容' }}
|
||||||
|
>
|
||||||
|
{({
|
||||||
|
direction,
|
||||||
|
filteredItems,
|
||||||
|
onItemSelectAll,
|
||||||
|
onItemSelect,
|
||||||
|
selectedKeys: listSelectedKeys,
|
||||||
|
disabled: listDisabled,
|
||||||
|
}) => {
|
||||||
|
const columns = direction === 'left' ? leftColumns : rightColumns;
|
||||||
|
|
||||||
|
const rowSelection: TableRowSelection<TransferItem> = {
|
||||||
|
getCheckboxProps: (item) => ({ disabled: listDisabled || item.disabled }),
|
||||||
|
// onSelectAll(selected, selectedRows) {
|
||||||
|
// console.log(4545, selected)
|
||||||
|
// const treeSelectedKeys = selectedRows
|
||||||
|
// .filter((item) => !item.disabled)
|
||||||
|
// .map(({ key }) => key);
|
||||||
|
// const diffKeys = selected
|
||||||
|
// ? difference(treeSelectedKeys, listSelectedKeys)
|
||||||
|
// : difference(listSelectedKeys, treeSelectedKeys);
|
||||||
|
// onItemSelectAll(diffKeys as string[], selected);
|
||||||
|
// },
|
||||||
|
onChange(selected, selectedRows, info) {
|
||||||
|
// console.log(4545, selected, info)
|
||||||
|
|
||||||
|
if (info.type == 'all') {
|
||||||
|
const treeSelectedKeys = selectedRows
|
||||||
|
.filter((item) => !item.disabled)
|
||||||
|
.map(({ key }) => key);
|
||||||
|
const diffKeys = selected
|
||||||
|
? difference(treeSelectedKeys, listSelectedKeys)
|
||||||
|
: difference(listSelectedKeys, treeSelectedKeys);
|
||||||
|
console.log(45678, diffKeys)
|
||||||
|
onItemSelectAll(diffKeys as string[], true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onSelect({ key }, selected) {
|
||||||
|
console.log(890, key)
|
||||||
|
onItemSelect(key as string, selected);
|
||||||
|
},
|
||||||
|
selectedRowKeys: listSelectedKeys,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return (
|
||||||
|
|
||||||
|
<Table<any>
|
||||||
|
rowSelection={rowSelection}
|
||||||
|
columns={columns}
|
||||||
|
dataSource={filteredItems}
|
||||||
|
size="small"
|
||||||
|
style={{ pointerEvents: listDisabled ? 'none' : undefined, width: 500 }}
|
||||||
|
onRow={({ key, disabled: itemDisabled }) => ({
|
||||||
|
onClick: () => {
|
||||||
|
if (itemDisabled || listDisabled) return;
|
||||||
|
onItemSelect(key as string, !listSelectedKeys.includes(key as string));
|
||||||
|
},
|
||||||
|
})}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
</Transfer>
|
||||||
|
);
|
||||||
|
|
||||||
|
const mockTags = ['cat', 'dog', 'bird'];
|
||||||
|
|
||||||
|
const mockData: RecordType[] = Array.from({ length: 20 }).map((_, i) => ({
|
||||||
|
key: i.toString(),
|
||||||
|
title: `监控1`,
|
||||||
|
description: `DEVICE1002`,
|
||||||
|
tag: "走廊123",
|
||||||
|
age: "rtsp://129.12.12.12:90001"
|
||||||
|
}));
|
||||||
|
|
||||||
|
const originTargetKeys = mockData
|
||||||
|
.filter((item) => Number(item.key) % 3 > 1)
|
||||||
|
.map((item) => item.key);
|
||||||
|
|
||||||
|
const leftTableColumns: ColumnsType<DataType> = [
|
||||||
|
{
|
||||||
|
dataIndex: 'title',
|
||||||
|
title: '名称',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex: 'tag',
|
||||||
|
title: '位置',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex: 'description',
|
||||||
|
title: '编码',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex: 'age',
|
||||||
|
title: '参数',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const rightTableColumns: ColumnsType<Pick<DataType, 'title' | 'key'>> = [
|
||||||
|
{
|
||||||
|
dataIndex: 'title',
|
||||||
|
title: '名称',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex: 'tag',
|
||||||
|
title: '位置',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex: 'description',
|
||||||
|
title: '编码',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dataIndex: 'age',
|
||||||
|
title: '参数',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export type UpdateFormProps = {
|
||||||
|
targetKeys: string[];
|
||||||
|
setTargetKeys: (data: string[])=>void;
|
||||||
|
};
|
||||||
|
|
||||||
|
const TableTransferList: React.FC<UpdateFormProps> = (props) => {
|
||||||
|
const [showSearch, setShowSearch] = useState(false);
|
||||||
|
|
||||||
|
const onChange = (nextTargetKeys: string[]) => {
|
||||||
|
props.setTargetKeys(nextTargetKeys);
|
||||||
|
};
|
||||||
|
const triggerShowSearch = (checked: boolean) => {
|
||||||
|
setShowSearch(checked);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<TableTransfer
|
||||||
|
dataSource={mockData}
|
||||||
|
|
||||||
|
targetKeys={props.targetKeys}
|
||||||
|
showSearch={showSearch}
|
||||||
|
onChange={onChange}
|
||||||
|
leftColumns={leftTableColumns}
|
||||||
|
rightColumns={rightTableColumns}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default TableTransferList;
|
Loading…
Reference in New Issue