| | |
| | | import { PlusOutlined, EditOutlined, DeleteOutlined, SwapOutlined } from '@ant-design/icons' |
| | | |
| | | import Utils from '@/utils/utils.js' |
| | | import FileUpload from '@/tabviews/zshare/fileupload' |
| | | import asyncComponent from '@/utils/asyncComponent' |
| | | // import FileUpload from '@/tabviews/zshare/fileupload' |
| | | import './index.scss' |
| | | |
| | | const SourceComponent = asyncComponent(() => import('@/menu/components/share/sourcecomponent')) |
| | | const EditableContext = React.createContext() |
| | | let dragingIndex = -1 |
| | | |
| | |
| | | getInput = (form) => { |
| | | const { inputType, record } = this.props |
| | | if (inputType === 'file') { |
| | | return <FileUpload config={{ |
| | | initval: record ? (record.$url || '') : '', |
| | | suffix: '', |
| | | maxfile: 1, |
| | | fileType: 'picture-card' |
| | | }}/> |
| | | return <SourceComponent initialValue={record ? (record.$url || '') : ''} type="" placement="right"/> |
| | | // return <FileUpload config={{ |
| | | // initval: record ? (record.$url || '') : '', |
| | | // suffix: '', |
| | | // maxfile: 1, |
| | | // fileType: 'picture-card' |
| | | // }}/> |
| | | } else { |
| | | return <Input onPressEnter={() => this.getValue(form)} /> |
| | | } |
| | |
| | | |
| | | class EdiDataTable extends Component { |
| | | static propTpyes = { |
| | | dict: PropTypes.object, // 字典项 |
| | | transfield: PropTypes.object, // 字段名称 |
| | | type: PropTypes.string, // 是否为关联表单 |
| | | display: PropTypes.string, // 数据类型,文本、图片 |
| | |
| | | !is(fromJS(this.props.fields), fromJS(nextProps.fields)) || |
| | | !is(fromJS(this.props.linkSubFields), fromJS(nextProps.linkSubFields)) || |
| | | this.props.display !== nextProps.display || |
| | | (nextProps.multiple && this.props.multiple !== nextProps.multiple) || |
| | | this.props.type !== nextProps.type |
| | | ) { |
| | | this.setState({editingKey: ''}, () => { |
| | |
| | | } |
| | | |
| | | getCloumns = () => { |
| | | const { display, fields, linkSubFields, transfield, type } = this.props |
| | | const { display, fields, linkSubFields, transfield, type, multiple } = this.props |
| | | let columns = [] |
| | | let keys = ['ParentID'] |
| | | let keys = ['ParentID', 'pid'] |
| | | |
| | | if (display === 'picture') { |
| | | columns.push({ |
| | |
| | | return <span style={{display: 'block', width: '70px', height: '70px'}}><img style={{width: '100%', height: '100%'}} src={text} alt="" /></span> |
| | | } |
| | | }) |
| | | } else { |
| | | columns = fields.map(item => { |
| | | keys.push(item.field) |
| | | return { |
| | | title: item.field, |
| | | dataIndex: item.field, |
| | | editable: true, |
| | | } else if (display === 'color') { |
| | | columns.push({ |
| | | title: 'Color', |
| | | dataIndex: '$color', |
| | | inputType: 'text', |
| | | editable: true, |
| | | render: (text) => { |
| | | if (!text) return '' |
| | | return <div style={{height: '20px', background: text}}></div> |
| | | } |
| | | }) |
| | | } |
| | | |
| | | fields.forEach(item => { |
| | | keys.push(item.field) |
| | | columns.push({ |
| | | title: item.field, |
| | | dataIndex: item.field, |
| | | editable: true, |
| | | }) |
| | | }) |
| | | |
| | | if (linkSubFields.length > 0) { |
| | | linkSubFields.forEach(m => { |
| | |
| | | dataIndex: '$value', |
| | | editable: true, |
| | | }) |
| | | |
| | | if (multiple === 'dropdown' && display === 'text') { |
| | | columns.unshift({ |
| | | title: 'pid', |
| | | dataIndex: 'pid', |
| | | editable: true, |
| | | }) |
| | | } |
| | | |
| | | if (type === 'link') { |
| | | columns.unshift({ |
| | |
| | | <span className="hide-control" title="显示/隐藏" onClick={() => {editingKey === '' && this.handleHide(record.key)}}><SwapOutlined /></span> |
| | | {editingKey === '' ? <Popconfirm |
| | | overlayClassName="popover-confirm" |
| | | title={this.props.dict['model.query.delete']} |
| | | title="确定删除吗?" |
| | | onConfirm={() => this.handleDelete(record.key) |
| | | }> |
| | | <span className="danger"><DeleteOutlined /></span> |
| | |
| | | |
| | | if (display === 'picture') { |
| | | item.$url = '' |
| | | } else { |
| | | fields.forEach(f => { |
| | | item[f.field] = `${this.state.data.length + 1}` |
| | | }) |
| | | } else if (display === 'color') { |
| | | item.$color = '' |
| | | } |
| | | |
| | | fields.forEach(f => { |
| | | item[f.field] = `${this.state.data.length + 1}` |
| | | }) |
| | | |
| | | let data = [...this.state.data, item] |
| | | |
| | |
| | | } |
| | | |
| | | render() { |
| | | const { display, fields } = this.props |
| | | |
| | | const components = { |
| | | body: { |
| | | row: DragableBodyRow, |
| | |
| | | }) |
| | | |
| | | let addable = false |
| | | if (this.props.display === 'picture') { |
| | | if (display === 'picture' || display === 'color') { |
| | | addable = true |
| | | } else if (this.props.fields && this.props.fields.length > 0) { |
| | | } else if (fields && fields.length > 0) { |
| | | addable = true |
| | | } |
| | | |