king
2021-11-12 0c84df247914f893ef5e41d57a422e10a2dc814c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { Form, Row, Col, Input, InputNumber } from 'antd'
import { formRule } from '@/utils/option.js'
import TransferForm from '../transferform'
// import Utils from '@/utils/utils.js'
// import './index.scss'
 
class GroupForm extends Component {
  static propTpyes = {
    dict: PropTypes.object,     // 字典项
    group: PropTypes.object,    // 当前分组
    groups: PropTypes.array,    // 所有分组
    inputSubmit: PropTypes.any  // 回车提交事件
  }
 
  state = {
    source: null,
    selectds: null,
    default: null
  }
 
  UNSAFE_componentWillMount () {
    const { groups, group } = this.props
    let defaultgroup = groups.filter(item => item.isDefault)[0]
    let _source = defaultgroup.sublist.filter(item => !item.origin)
    let _selectds = group.sublist.map(item => item.uuid )
 
    _source = [..._source, ...group.sublist]
 
    this.setState({
      source: _source,
      selectds: _selectds,
    })
  }
 
  handleConfirm = () => {
    const { groups, group } = this.props
    let defaultgroup = groups.filter(item => item.isDefault)[0]
 
    // 表单提交时检查输入值是否正确
    return new Promise((resolve, reject) => {
      this.props.form.validateFieldsAndScroll((err, values) => {
        if (!err) {
          values.uuid = group.uuid
 
          if (group.isDefault) {
            values.isDefault = true
            values.sublist = group.sublist
            
            resolve(values)
          } else {
            let targetKeys = this.refs['fields-transfer'].state.targetKeys
            let defaultlist = this.state.source.filter(item => !targetKeys.includes(item.uuid))
 
            values.sublist = targetKeys.map(item => {
              return this.state.source.filter(cell => cell.uuid === item)[0]
            })
 
            resolve({
              default: {...defaultgroup, sublist: defaultlist},
              target: values
            })
          }
        } else {
          reject(err)
        }
      })
    })
  }
 
  handleSubmit = (e) => {
    e.preventDefault()
 
    if (this.props.inputSubmit) {
      this.props.inputSubmit()
    }
  }
 
  render() {
    const { group, groups } = this.props
    const { getFieldDecorator } = this.props.form
 
    const formItemLayout = {
      labelCol: {
        xs: { span: 24 },
        sm: { span: 8 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 }
      }
    }
    return (
      <Form {...formItemLayout}>
        <Row gutter={24}>
          <Col span={12}>
            <Form.Item label="分组名称">
              {getFieldDecorator('label', {
                initialValue: group.label,
                rules: [
                  {
                    required: true,
                    message: this.props.dict['form.required.input'] + '分组名称!'
                  },
                  {
                    max: formRule.input.max,
                    message: formRule.input.message
                  }
                ]
              })(<Input placeholder="" autoComplete="off" onPressEnter={this.handleSubmit} />)}
            </Form.Item>
          </Col>
          <Col span={12}>
            <Form.Item label="排序">
              {getFieldDecorator('sort', {
                initialValue: group.hasOwnProperty('sort') ? group.sort : groups.length
              })(<InputNumber min={0} max={100} precision={0} />)}
            </Form.Item>
          </Col>
          {!group.isDefault ? <Col span={24}>
            <TransferForm fields={this.state.source} ref="fields-transfer" selected={this.state.selectds}/>
          </Col> : null}
        </Row>
      </Form>
    )
  }
}
 
export default Form.create()(GroupForm)