import React from 'react'; import { Tabs, Form, Row, Col, Input, InputNumber, Button, Upload, Icon } from 'antd'; import './index.less'; import Page from '@src/containers/Page'; import Block from '@src/components/Block'; import { flattenObject } from '@src/services/Tools'; import { asyncSMessage } from '@src/services/AsyncTools'; import { ServiceParamMap } from '../../../../Constant'; import { System } from '../../../stores/system'; export default class extends Page { constructor(props) { super(props); this.state.tab = 'qx_cat'; this.vipList = ServiceParamMap.vip; } initData() { this.refresh(this.state.tab); } refresh(tab) { if (tab === 'qx_cat') { return this.refreshQxCat(); } if (tab === 'textbook') { return this.refreshTextbook(); } if (tab === 'vip') { return this.refreshVip(); } return Promise.reject(); } refreshQxCat() { return System.getServiceQxCat().then(result => { this.setState({ qx_cat: result || {} }); const { form } = this.props; form.setFieldsValue(flattenObject(result, 'qx_cat')); }); } refreshTextbook() { return System.getServiceTextbook().then(result => { this.setState({ textbook: result || {} }); const { form } = this.props; form.setFieldsValue(flattenObject(result, 'textbook')); }); } refreshVip() { return System.getServiceVip().then(result => { this.setState({ vip: result || {} }); const { form } = this.props; form.setFieldsValue(flattenObject(result, 'vip')); }); } changeMapValue(field, second, index, key, value) { const data = this.state[field] || {}; data[second] = data[second] || []; data[second][index] = data[second][index] || {}; data[second][index][key] = value; this.setState({ [field]: data }); } submit(tab) { let handler; if (tab === 'qx_cat') { handler = this.submitQxCat(); } if (tab === 'textbook') { handler = this.submitTextbook(); } if (tab === 'vip') { handler = this.submitVip(); } handler.then(() => { asyncSMessage('保存成功'); }); } submitQxCat() { const { qx_cat } = this.state; return System.setServiceQxCat(qx_cat); } submitTextbook() { const { textbook } = this.state; return System.setServiceTextbook(textbook); } submitVip() { const { vip } = this.state; return System.setServiceVip(vip); } renderQxCat() { const { getFieldDecorator, setFieldsValue, getFieldValue } = this.props.form; const image = getFieldValue('qx_cat.image') || null; return <Form> <Row> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='商品价格'> {getFieldDecorator('qx_cat.package[0].price', { rules: [ { required: true, message: '输入千行Cat价格' }, ], })( <InputNumber placeholder='请输入千行Cat价格' onChange={(value) => { this.changeMapValue('qx_cat', 'package', 0, 'price', value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='服务名称'> {getFieldDecorator('qx_cat.package[0].title', { rules: [ { required: true, message: '输入千行Cat名称' }, ], })( <Input placeholder='请输入千行Cat名称' onChange={(e) => { this.changeMapValue('qx_cat', 'package', 0, 'title', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='服务简介'> {getFieldDecorator('qx_cat.package[0].description', { rules: [ { required: true, message: '输入千行Cat服务简介' }, ], })( <Input placeholder='请输入千行Cat服务简介' onChange={(e) => { this.changeMapValue('qx_cat', 'package', 0, 'description', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='有效期说明'> {getFieldDecorator('qx_cat.package[0].expire_info', { rules: [ { required: true, message: '输入千行Cat有效期说明' }, ], })( <Input placeholder='请输入千行Cat有效期说明' onChange={(e) => { this.changeMapValue('qx_cat', 'package', 0, 'expire_info', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='退款政策'> {getFieldDecorator('qx_cat.package[0].refund_policy', { rules: [ { required: true, message: '输入千行Cat退款政策' }, ], })( <Input placeholder='请输入千行Cat退款政策' onChange={(e) => { this.changeMapValue('qx_cat', 'package', 0, 'refund_policy', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='版权说明'> {getFieldDecorator('qx_cat.package[0].copyright_notes', { rules: [ { required: true, message: '输入千行Cat版权说明' }, ], })( <Input placeholder='请输入千行Cat版权说明' onChange={(e) => { this.changeMapValue('qx_cat', 'package', 0, 'copyright_notes', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='商品图片'> {getFieldDecorator('qx_cat.image', { rules: [ { required: true, message: '上传图片' }, ], })( <Upload listType="picture-card" showUploadList={false} beforeUpload={(file) => System.uploadImage(file).then((result) => { setFieldsValue({ 'qx_cat.image': result.url }); return Promise.reject(); })} > {image ? <img src={image} alt="avatar" /> : <div> <Icon type={this.state.loading ? 'loading' : 'plus'} /> <div className="ant-upload-text">Upload</div> </div>} </Upload>, )} </Form.Item> </Row> </Form>; } renderTextbook() { const { getFieldDecorator, setFieldsValue, getFieldValue } = this.props.form; const image = getFieldValue('textbook.image') || null; return <Form> <Row> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='商品图片'> {getFieldDecorator('textbook.image', { rules: [ { required: true, message: '上传图片' }, ], })( <Upload listType="picture-card" showUploadList={false} beforeUpload={(file) => System.uploadImage(file).then((result) => { setFieldsValue({ 'textbook.image': result.url }); return Promise.reject(); })} > {image ? <img src={image} alt="avatar" /> : <div> <Icon type={this.state.loading ? 'loading' : 'plus'} /> <div className="ant-upload-text">Upload</div> </div>} </Upload>, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='商品价格'> {getFieldDecorator('textbook.package[0].price', { rules: [ { required: true, message: '输入数学机经价格' }, ], })( <InputNumber placeholder='请输入数学机经价格' onChange={(value) => { this.changeMapValue('textbook', 'package', 0, 'price', value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='服务名称'> {getFieldDecorator('textbook.package[0].title', { rules: [ { required: true, message: '输入数学机经名称' }, ], })( <Input placeholder='请输入数学机经名称' onChange={(e) => { this.changeMapValue('textbook', 'package', 0, 'title', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='服务简介'> {getFieldDecorator('textbook.package[0].description', { rules: [ { required: true, message: '输入数学机经服务简介' }, ], })( <Input placeholder='请输入数学机经服务简介' onChange={(e) => { this.changeMapValue('textbook', 'package', 0, 'description', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='有效期说明'> {getFieldDecorator('textbook.package[0].expire_info', { rules: [ { required: true, message: '输入数学机经有效期说明' }, ], })( <Input placeholder='请输入数学机经有效期说明' onChange={(e) => { this.changeMapValue('textbook', 'package', 0, 'expire_info', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='退款政策'> {getFieldDecorator('textbook.package[0].refund_policy', { rules: [ { required: true, message: '输入数学机经退款政策' }, ], })( <Input placeholder='请输入数学机经退款政策' onChange={(e) => { this.changeMapValue('textbook', 'package', 0, 'refund_policy', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='版权说明'> {getFieldDecorator('textbook.package[0].copyright_notes', { rules: [ { required: true, message: '输入数学机经版权说明' }, ], })( <Input placeholder='请输入数学机经版权说明' onChange={(e) => { this.changeMapValue('textbook', 'package', 0, 'copyright_notes', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> </Row> </Form>; } renderVip() { const { getFieldDecorator, setFieldsValue, getFieldValue } = this.props.form; const image = getFieldValue('vip.image') || null; return <Form> <Form.Item labelCol={{ span: 8 }} wrapperCol={{ span: 16 }} label='商品图片'> {getFieldDecorator('vip.image', { rules: [ { required: true, message: '上传图片' }, ], })( <Upload listType="picture-card" showUploadList={false} beforeUpload={(file) => System.uploadImage(file).then((result) => { setFieldsValue({ 'vip.image': result.url }); return Promise.reject(); })} > {image ? <img src={image} alt="avatar" /> : <div> <Icon type={this.state.loading ? 'loading' : 'plus'} /> <div className="ant-upload-text">Upload</div> </div>} </Upload>, )} </Form.Item> <Row> {this.vipList.map((row, index) => { return <Col span={12}> <h1>{row.label}</h1> <Form.Item labelCol={{ span: 8 }} wrapperCol={{ span: 16 }} label='商品价格'> {getFieldDecorator(`vip.package[${index}].price`, { rules: [ { required: true, message: '输入价格' }, ], })( <InputNumber placeholder={'输入价格'} onChange={(value) => { this.changeMapValue('vip', 'package', index, 'price', value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 8 }} wrapperCol={{ span: 16 }} label='服务名称'> {getFieldDecorator(`vip.package[${index}].title`, { rules: [ { required: true, message: '输入名称' }, ], })( <Input placeholder={'输入名称'} onChange={(e) => { this.changeMapValue('vip', 'package', index, 'title', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 8 }} wrapperCol={{ span: 16 }} label='服务简介'> {getFieldDecorator(`vip.package[${index}].description`, { rules: [ { required: true, message: '输入服务简介' }, ], })( <Input placeholder='请输入服务简介' onChange={(e) => { this.changeMapValue('vip', 'package', index, 'description', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 8 }} wrapperCol={{ span: 16 }} label='有效期说明'> {getFieldDecorator(`vip.package[${index}].expire_info`, { rules: [ { required: true, message: '输入有效期说明' }, ], })( <Input placeholder='请输入有效期说明' onChange={(e) => { this.changeMapValue('vip', 'package', index, 'expire_info', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 8 }} wrapperCol={{ span: 16 }} label='退款政策'> {getFieldDecorator(`vip.package[${index}].refund_policy`, { rules: [ { required: true, message: '输入退款政策' }, ], })( <Input placeholder='请输入退款政策' onChange={(e) => { this.changeMapValue('vip', 'package', index, 'refund_policy', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> <Form.Item labelCol={{ span: 8 }} wrapperCol={{ span: 16 }} label='版权说明'> {getFieldDecorator(`vip.package[${index}].copyright_notes`, { rules: [ { required: true, message: '输入版权说明' }, ], })( <Input placeholder='请输入版权说明' onChange={(e) => { this.changeMapValue('vip', 'package', index, 'copyright_notes', e.target.value); }} style={{ width: '200px' }} />, )} </Form.Item> </Col>; })} </Row> </Form>; } renderView() { const { tab } = this.state; return <Block><Tabs activeKey={tab} onChange={(value) => { this.setState({ tab: value, selectedKeys: [], checkedKeys: [] }); this.refresh(value); }}> <Tabs.TabPane tab="千行Cat" key="qx_cat"> {this.renderQxCat()} </Tabs.TabPane> <Tabs.TabPane tab="数学机经" key="textbook"> {this.renderTextbook()} </Tabs.TabPane> <Tabs.TabPane tab="Vip" key="vip"> {this.renderVip()} </Tabs.TabPane> </Tabs> <Row type="flex" justify="center"> <Col> <Button type="primary" onClick={() => { this.submit(tab); }}>保存</Button> </Col> </Row> </Block>; } }