123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423 |
- 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] ? this.state[field][second] || {} : {};
- data[index] = data[index] || {};
- data[index][key] = value;
- this.setState({ [field]: data });
- }
- changeValue(field, key, value) {
- const data = this.state[field] || {};
- data[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={(value) => {
- this.changeMapValue('qx_cat', 'package', 0, 'title', 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={(value) => {
- this.changeMapValue('qx_cat', 'package', 0, 'description', 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={(value) => {
- this.changeMapValue('qx_cat', 'package', 0, 'expire_info', 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={(value) => {
- this.changeMapValue('qx_cat', 'package', 0, 'refund_policy', 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={(value) => {
- this.changeMapValue('qx_cat', 'package', 0, 'copyright_notes', 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={(value) => {
- this.changeMapValue('textbook', 'package', 0, 'title', 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={(value) => {
- this.changeMapValue('textbook', 'package', 0, 'description', 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={(value) => {
- this.changeMapValue('textbook', 'package', 0, 'expire_info', 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={(value) => {
- this.changeMapValue('textbook', 'package', 0, 'refund_policy', 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={(value) => {
- this.changeMapValue('textbook', 'package', 0, 'copyright_notes', 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={(value) => {
- this.changeMapValue('vip', 'package', index, 'title', 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={(value) => {
- this.changeMapValue('vip', 'package', index, 'description', 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={(value) => {
- this.changeMapValue('vip', 'package', index, 'expire_info', 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={(value) => {
- this.changeMapValue('vip', 'package', index, 'refund_policy', 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={(value) => {
- this.changeMapValue('vip', 'package', index, 'copyright_notes', 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>;
- }
- }
|