import React, {Component} from 'react'; import { Badge, Button, Col, Divider, Input, Layout, Row, Select, Space, Table, Tag, Tooltip, Typography } from "antd"; import qs from "qs"; import request from "../../common/request"; import {message} from "antd/es"; import {SyncOutlined, UndoOutlined} from '@ant-design/icons'; import {PROTOCOL_COLORS} from "../../common/constants"; import {isEmpty} from "../../utils/utils"; import dayjs from "dayjs"; const {Search} = Input; const {Content} = Layout; const {Title} = Typography; class ChooseAsset extends Component { inputRefOfName = React.createRef(); inputRefOfIp = React.createRef(); changeOwnerFormRef = React.createRef(); state = { items: [], total: 0, queryParams: { pageIndex: 1, pageSize: 10, protocol: 'ssh' }, loading: false, tags: [], model: {}, selectedRowKeys: [], selectedRows: [], delBtnLoading: false, changeOwnerModalVisible: false, changeSharerModalVisible: false, changeOwnerConfirmLoading: false, changeSharerConfirmLoading: false, users: [], selected: {}, totalSelectedRows: [], }; checkedAssets = undefined async componentDidMount() { this.checkedAssets = this.props.setCheckedAssets; this.loadTableData(); let result = await request.get('/tags'); if (result['code'] === 1) { this.setState({ tags: result['data'] }) } } async loadTableData(queryParams) { this.setState({ loading: true }); queryParams = queryParams || this.state.queryParams; // queryParams let paramsStr = qs.stringify(queryParams); let data = { items: [], total: 0 }; try { let result = await request.get('/assets/paging?' + paramsStr); if (result['code'] === 1) { data = result['data']; } else { message.error(result['message']); } } catch (e) { } finally { let sharer = this.state.sharer; const items = data.items.map(item => { let disabled = false; if (sharer === item['owner']) { disabled = true; } return {...item, 'key': item['id'], 'disabled': disabled} }) let totalSelectedRows = this.state.totalSelectedRows; let selectedRowKeys = totalSelectedRows.map(item => item['id']); this.setState({ items: items, total: data.total, queryParams: queryParams, loading: false, selectedRowKeys: selectedRowKeys }); } } handleChangPage = async (pageIndex, pageSize) => { let queryParams = this.state.queryParams; queryParams.pageIndex = pageIndex; queryParams.pageSize = pageSize; this.setState({ queryParams: queryParams }); await this.loadTableData(queryParams) }; handleSearchByName = name => { let query = { ...this.state.queryParams, 'pageIndex': 1, 'pageSize': this.state.queryParams.pageSize, 'name': name, } this.loadTableData(query); }; handleSearchByIp = ip => { let query = { ...this.state.queryParams, 'pageIndex': 1, 'pageSize': this.state.queryParams.pageSize, 'ip': ip, } this.loadTableData(query); }; handleTagsChange = tags => { console.log(tags) // this.setState({ // tags: tags // }) let query = { ...this.state.queryParams, 'pageIndex': 1, 'pageSize': this.state.queryParams.pageSize, 'tags': tags.join(','), } this.loadTableData(query); } unSelectRow = async (assetId) => { const selectedRowKeys = this.state.selectedRowKeys.filter(key => key !== assetId); const totalSelectedRows = this.state.totalSelectedRows.filter(item => item['id'] !== assetId); this.setState({ selectedRowKeys: selectedRowKeys, totalSelectedRows: totalSelectedRows }) if (this.checkedAssets) { this.checkedAssets(totalSelectedRows); } console.log(totalSelectedRows); } render() { const columns = [{ title: '序号', dataIndex: 'id', key: 'id', render: (id, record, index) => { return index + 1; } }, { title: '资产名称', dataIndex: 'name', key: 'name', render: (name, record) => { let short = name; if (short && short.length > 20) { short = short.substring(0, 20) + " ..."; } return ( {short} ); } }, { title: '连接协议', dataIndex: 'protocol', key: 'protocol', render: (text, record) => { const title = `${record['ip'] + ':' + record['port']}` return ( {text} ) } }, { title: '标签', dataIndex: 'tags', key: 'tags', render: tags => { if (!isEmpty(tags)) { let tagDocuments = [] let tagArr = tags.split(','); for (let i = 0; i < tagArr.length; i++) { if (tags[i] === '-') { continue; } tagDocuments.push({tagArr[i]}) } return tagDocuments; } } }, { title: '状态', dataIndex: 'active', key: 'active', render: text => { if (text) { return ( ) } else { return ( ) } } }, { title: '所有者', dataIndex: 'ownerName', key: 'ownerName' }, { title: '创建日期', dataIndex: 'created', key: 'created', render: (text, record) => { return ( {dayjs(text).fromNow()} ) } }, ]; const selectedRowKeys = this.state.selectedRowKeys; const rowSelection = { selectedRowKeys: selectedRowKeys, onChange: (selectedRowKeys, selectedRows) => { this.setState({selectedRowKeys, selectedRows}); let totalSelectedRows = this.state.totalSelectedRows; let totalSelectedRowKeys = totalSelectedRows.map(item => item['id']); for (let i = 0; i < selectedRows.length; i++) { let selectedRow = selectedRows[i]; if (totalSelectedRowKeys.includes(selectedRow['id'])) { continue; } totalSelectedRows.push(selectedRow); } this.setState({ totalSelectedRows: totalSelectedRows }) if (this.checkedAssets) { this.checkedAssets(totalSelectedRows); } console.log(totalSelectedRows); }, getCheckboxProps: (record) => ({ disabled: record['disabled'], }), }; return ( <> 已选择资产列表
{ this.state.totalSelectedRows.map(item => { return this.unSelectRow(item['id'])} key={item['id']}>{item['name']} }) }
全部资产列表
`总计 ${total} 条` }} loading={this.state.loading} /> ); } } export default ChooseAsset;