import React, { PureComponent } from 'react'; import { Button, Card, Col, Form, Input, InputNumber, Row, Tree, Cascader, Radio, message, Modal, } from 'antd'; import Panel from '../../../components/Panel'; import styles from '@/layouts/Sword.less'; import { getLazyTree, detail, submit, remove } from '../../../services/region'; import { getButton, hasButton } from '../../../utils/authority'; import Func from '../../../utils/Func'; const FormItem = Form.Item; const { TreeNode } = Tree; const { TextArea } = Input; const ButtonGroup = Button.Group; @Form.create() class Region extends PureComponent { state = { topCode: '00', treeData: [], treeCascader: [], debugVisible: false, }; // ============ 初始化数据 =============== componentWillMount() { this.initTree(); this.initCascader('00'); } initTree = () => { const { topCode } = this.state; getLazyTree({ parentCode: topCode }).then(resp => { if (resp.success) { this.setState({ treeData: resp.data.map(item => { return { ...item, isLeaf: !item.hasChildren }; }), }); } }); }; initCascader = code => { getLazyTree({ parentCode: code }).then(resp => { if (resp.success) { this.setState({ treeCascader: resp.data.map(item => { return { label: item.title, value: item.value, isLeaf: !item.hasChildren, }; }), }); } }); }; onSelect = checkedTreeKeys => { const code = checkedTreeKeys[0]; if (Func.isEmpty(code)) { return; } detail({ code }).then(resp => { if (resp.success) { const { form } = this.props; const { data } = resp; form.setFieldsValue({ parentCode: data.parentCode, parentName: data.parentName, code: data.code, name: data.name, level: data.level, sort: data.sort, remark: data.remark, }); } }); }; onLoadData = treeNode => new Promise(resolve => { if (treeNode.props.children) { resolve(); return; } getLazyTree({ parentCode: treeNode.props.id }).then(resp => { if (resp.success) { const { treeData } = this.state; // eslint-disable-next-line no-param-reassign treeNode.props.dataRef.children = resp.data.map(item => { return { ...item, isLeaf: !item.hasChildren }; }); this.setState({ treeData: [...treeData], }); } resolve(); }); }); onCascaderChange = (value, selectedOptions) => { window.console.log(value, selectedOptions); }; onLoadCascaderData = selectedOptions => { const targetOption = selectedOptions[selectedOptions.length - 1]; targetOption.loading = true; getLazyTree({ parentCode: targetOption.value }).then(resp => { if (resp.success) { targetOption.loading = false; targetOption.children = resp.data.map(item => { return { label: item.title, value: item.value, isLeaf: !item.hasChildren, }; }); const { treeCascader } = this.state; this.setState({ treeCascader: [...treeCascader], }); } }); }; handleAdd = () => { const { form } = this.props; const region = form.getFieldsValue(); if (!region.code || !region.name) { message.warn('请先选择一项区划!'); return; } form.setFieldsValue({ parentCode: region.code, parentName: region.name, code: region.code, name: '', level: region.level < 5 ? region.level + 1 : region.level, remark: region.remark, }); }; handleDelete = () => { const { form } = this.props; const code = form.getFieldValue('code'); Modal.confirm({ title: '删除确认', content: '确定删除该条记录?', okText: '确定', okType: 'danger', cancelText: '取消', onOk() { remove({ id: code }).then(resp => { if (resp.success) { message.success(resp.msg); form.resetFields(); } else { message.error(resp.msg || '删除失败'); } }); }, onCancel() {}, }); }; handleDebug = () => { this.setState({ debugVisible: true }); }; handleDebugCancel = () => { this.setState({ debugVisible: false }); }; handleSubmit = e => { e.preventDefault(); const { form } = this.props; const { topCode } = this.state; form.validateFieldsAndScroll((err, values) => { if (err) return; const parentCode = form.getFieldValue('parentCode'); const code = form.getFieldValue('code'); if (parentCode === code) { message.warn('请输入正确的区划子编号!'); return; } const params = { ...values, parentCode: parentCode === topCode ? '' : parentCode, }; submit(params).then(resp => { if (resp.success) { message.success(resp.msg); form.resetFields(); } else { message.error(resp.msg || '提交失败'); } }); }); }; handleReset = () => { const { form } = this.props; form.resetFields(); }; renderTreeNodes = data => data.map(item => { if (item.children) { return ( {this.renderTreeNodes(item.children)} ); } return ; }); render() { const { form: { getFieldDecorator }, } = this.props; const buttons = getButton('region'); const { treeData, treeCascader, debugVisible } = this.state; const formItemLayout = { labelCol: { xs: { span: 24 }, sm: { span: 5 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 12 }, md: { span: 16 }, }, }; return ( {this.renderTreeNodes(treeData)} {hasButton(buttons, 'region_add') ? ( ) : null} {hasButton(buttons, 'region_delete') ? ( ) : null} {hasButton(buttons, 'region_debug') ? ( ) : null}
{getFieldDecorator('parentCode', { rules: [ { required: true, message: '请输入父区划编号', }, ], })()} {getFieldDecorator('parentName', { rules: [ { required: true, message: '请输入父区划名称', }, ], })()} {getFieldDecorator('code', { rules: [ { required: true, message: '请输入区划编号', }, ], })()} {getFieldDecorator('name', { rules: [ { required: true, message: '请输入区划名称', }, ], })()} {getFieldDecorator('level', { rules: [ { required: true, message: '请输入区划等级', }, ], })( 国家 省份/直辖市 地市 区县 乡镇 村委 )} {getFieldDecorator('sort', { rules: [ { required: true, message: '请输入区划排序', }, ], })()} {getFieldDecorator('remark', {})(