| | |
| | | import { Table, Input, Popconfirm, Form, message } from 'antd' |
| | | import { ArrowUpOutlined, ArrowDownOutlined, DeleteOutlined, PlusOutlined, SwapOutlined } from '@ant-design/icons' |
| | | |
| | | import { formRule } from '@/utils/option.js' |
| | | import Utils from '@/utils/utils.js' |
| | | import './index.scss' |
| | | |
| | |
| | | } |
| | | |
| | | save = e => { |
| | | const { record, handleSave, datatype } = this.props |
| | | const { record, handleSave } = this.props |
| | | this.form.validateFields((error, values) => { |
| | | if (datatype === 'number') { |
| | | Object.keys(values).forEach(key => { |
| | | values[key] = parseFloat(values[key]) |
| | | if (isNaN(values[key])) { |
| | | values[key] = 0 |
| | | } |
| | | }) |
| | | } |
| | | handleSave({ ...record, ...values }) |
| | | if (error && error[e.currentTarget.id]) { |
| | | return |
| | |
| | | |
| | | renderCell = form => { |
| | | this.form = form |
| | | const { children, dataIndex, record, datatype } = this.props |
| | | const { children, dataIndex, record } = this.props |
| | | const { editing } = this.state |
| | | |
| | | let rules = [] |
| | | if (datatype === 'number') { |
| | | rules.push({ |
| | | pattern: /^(-?\d+)(\.\d+)?$/, |
| | | message: formRule.input.numbermsg |
| | | }) |
| | | } |
| | | |
| | | return editing ? ( |
| | | <Form.Item style={{ margin: '0 -5px 0 -5px' }}> |
| | |
| | | { |
| | | required: dataIndex === 'Text', |
| | | message: '不可为空.', |
| | | }, |
| | | ...rules |
| | | } |
| | | ], |
| | | initialValue: record[dataIndex] |
| | | })(<Input ref={node => (this.input = node)} autoComplete="off" onPressEnter={this.save} onBlur={this.save} />)} |
| | |
| | | count: data.length |
| | | }) |
| | | } |
| | | |
| | | // changeDatatype = (column) => { |
| | | // const { columns, dataSource } = this.state |
| | | // let value = column.datatype !== 'number' ? 'number' : 'string' |
| | | // let _data = dataSource.map(item => { |
| | | // let val = item[column.dataIndex] |
| | | // if (value === 'number') { |
| | | // val = parseFloat(val) |
| | | // if (isNaN(val)) { |
| | | // val = 0 |
| | | // } |
| | | // } else { |
| | | // val = '' + val |
| | | // } |
| | | |
| | | // item[column.dataIndex] = val |
| | | |
| | | // return item |
| | | // }) |
| | | |
| | | // this.setState({ |
| | | // dataSource: _data, |
| | | // columns: columns.map(col => { |
| | | // if (col.dataIndex === column.dataIndex) { |
| | | // col.datatype = value |
| | | // } |
| | | |
| | | // if (col.dataIndex !== 'operation') { |
| | | // col.title = <div> |
| | | // {col.$title} |
| | | // {/* <Popconfirm |
| | | // title={`确定切换为${col.datatype === 'number' ? '文本' : '数值'}吗?`} |
| | | // overlayClassName="popover-confirm" |
| | | // onConfirm={() => this.changeDatatype(col) |
| | | // }> |
| | | // <SwapOutlined style={{ color: col.datatype === 'number' ? '#1890ff' : ''}} /> |
| | | // </Popconfirm> */} |
| | | // </div> |
| | | // } |
| | | |
| | | // return col |
| | | // }) |
| | | // }, () => { |
| | | // this.props.onChange(_data) |
| | | // }) |
| | | // } |
| | | |
| | | handleUpDown = (record, direction) => { |
| | | const { dataSource } = this.state |
| | |
| | | |
| | | let _dataSource = fromJS(dataSource).toJS() |
| | | let fields = [] |
| | | let dataItem = '' |
| | | let subFields = linkSubFields.filter(m => m !== 'Value' && m !== 'Text') |
| | | |
| | | if (subFields.length > 0) { |
| | |
| | | return data |
| | | }) |
| | | |
| | | dataItem = _dataSource ? _dataSource[0] : '' |
| | | |
| | | fields = subFields.map(field => { |
| | | return { |
| | | title: transfield[field] || field, |
| | | $title: transfield[field] || field, |
| | | dataIndex: field, |
| | | editable: true, |
| | | datatype: dataItem && typeof(dataItem[field]) === 'number' ? 'number' : 'string' |
| | | } |
| | | }) |
| | | } else { |
| | | dataItem = _dataSource ? _dataSource[0] : '' |
| | | } |
| | | |
| | | let columns = [ |
| | |
| | | title: 'Value', |
| | | $title: 'Value', |
| | | dataIndex: 'Value', |
| | | editable: true, |
| | | datatype: dataItem && typeof(dataItem.Value) === 'number' ? 'number' : 'string' |
| | | editable: true |
| | | }, |
| | | { |
| | | title: 'Text', |
| | | $title: 'Text', |
| | | dataIndex: 'Text', |
| | | editable: true, |
| | | datatype: dataItem && typeof(dataItem.Text) === 'number' ? 'number' : 'string' |
| | | editable: true |
| | | }, |
| | | ...fields, |
| | | { |
| | |
| | | title: 'ParentID', |
| | | $title: 'ParentID', |
| | | dataIndex: 'ParentID', |
| | | editable: true, |
| | | datatype: dataItem && typeof(dataItem.ParentID) === 'number' ? 'number' : 'string' |
| | | editable: true |
| | | }) |
| | | } |
| | | |
| | |
| | | if (col.dataIndex !== 'operation') { |
| | | col.title = <div> |
| | | {col.$title} |
| | | {/* <Popconfirm |
| | | title={`确定切换为${col.datatype === 'number' ? '文本' : '数值'}吗?`} |
| | | overlayClassName="popover-confirm" |
| | | onConfirm={() => this.changeDatatype(col) |
| | | }> |
| | | <SwapOutlined style={{ color: col.datatype === 'number' ? '#1890ff' : ''}} /> |
| | | </Popconfirm> */} |
| | | </div> |
| | | } |
| | | return col |
| | |
| | | editable: col.editable, |
| | | dataIndex: col.dataIndex, |
| | | title: col.title, |
| | | datatype: col.datatype, |
| | | handleSave: this.handleSave, |
| | | handleSave: this.handleSave |
| | | }) |
| | | } |
| | | }) |