|
@@ -1,17 +1,17 @@
|
|
|
import React from 'react';
|
|
|
-import { Tabs, Form, Row, Col, Input, InputNumber, Button, Upload, Icon } from 'antd';
|
|
|
+import { Tabs, Form, Row, Col, Input, InputNumber, Button } from 'antd';
|
|
|
import './index.less';
|
|
|
+import Editor from '@src/components/Editor';
|
|
|
import Page from '@src/containers/Page';
|
|
|
import Block from '@src/components/Block';
|
|
|
-import { flattenObject } from '@src/services/Tools';
|
|
|
+import { flattenObject, formatFormError } 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.vipList = ServiceParamMap.vip;
|
|
|
+ this.state.tab = 'sentence';
|
|
|
}
|
|
|
|
|
|
initData() {
|
|
@@ -19,39 +19,17 @@ export default class extends Page {
|
|
|
}
|
|
|
|
|
|
refresh(tab) {
|
|
|
- if (tab === 'qx_cat') {
|
|
|
- return this.refreshQxCat();
|
|
|
- }
|
|
|
- if (tab === 'textbook') {
|
|
|
- return this.refreshTextbook();
|
|
|
- }
|
|
|
- if (tab === 'vip') {
|
|
|
- return this.refreshVip();
|
|
|
+ if (tab === 'sentence') {
|
|
|
+ return this.refreshSentence();
|
|
|
}
|
|
|
return Promise.reject();
|
|
|
}
|
|
|
|
|
|
- refreshQxCat() {
|
|
|
- return System.getServiceQxCat().then(result => {
|
|
|
- this.setState({ qx_cat: result || {} });
|
|
|
+ refreshSentence() {
|
|
|
+ return System.getSentenceInfo().then(result => {
|
|
|
+ this.setState({ sentence: 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'));
|
|
|
+ form.setFieldsValue(flattenObject(result, 'sentence'));
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -63,328 +41,74 @@ export default class extends Page {
|
|
|
this.setState({ [field]: data });
|
|
|
}
|
|
|
|
|
|
+ changeValue(field, key, value) {
|
|
|
+ const { data } = this.state;
|
|
|
+ data[field] = data[field] || {};
|
|
|
+ data[field][key] = value;
|
|
|
+ this.setState({ data });
|
|
|
+ }
|
|
|
+
|
|
|
submit(tab) {
|
|
|
- let handler;
|
|
|
- if (tab === 'qx_cat') {
|
|
|
- handler = this.submitQxCat();
|
|
|
- }
|
|
|
- if (tab === 'textbook') {
|
|
|
- handler = this.submitTextbook();
|
|
|
- }
|
|
|
- if (tab === 'vip') {
|
|
|
- handler = this.submitVip();
|
|
|
+ let handler = Promise.reject();
|
|
|
+ if (tab === 'sentence') {
|
|
|
+ handler = this.submitSentence();
|
|
|
}
|
|
|
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>;
|
|
|
+ submitSentence() {
|
|
|
+ const { form } = this.props;
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ form.validateFields(['sentence'], (err, values) => {
|
|
|
+ if (err) {
|
|
|
+ reject(err);
|
|
|
+ }
|
|
|
+ const data = values.sentence;
|
|
|
+ return System.setSentenceInfo(data)
|
|
|
+ .then(() => {
|
|
|
+ resolve();
|
|
|
+ }).catch((e) => {
|
|
|
+ form.setFields(formatFormError(data, e.result));
|
|
|
+ reject(e);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
- renderTextbook() {
|
|
|
- const { getFieldDecorator, setFieldsValue, getFieldValue } = this.props.form;
|
|
|
- const image = getFieldValue('textbook.image') || null;
|
|
|
+ renderSentence() {
|
|
|
+ const { getFieldDecorator } = this.props.form;
|
|
|
return <Form>
|
|
|
<Row>
|
|
|
- <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='商品图片'>
|
|
|
- {getFieldDecorator('textbook.image', {
|
|
|
+ <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='购买链接'>
|
|
|
+ {getFieldDecorator('sentence.link', {
|
|
|
rules: [
|
|
|
- { required: true, message: '上传图片' },
|
|
|
+ { 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);
|
|
|
+ <Input placeholder='请输入购买链接' onChange={(e) => {
|
|
|
+ this.changeValue('sentence', 'link', e.target.value);
|
|
|
}} style={{ width: '200px' }} />,
|
|
|
)}
|
|
|
</Form.Item>
|
|
|
- <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='服务名称'>
|
|
|
- {getFieldDecorator('textbook.package[0].title', {
|
|
|
+ <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='购买价格'>
|
|
|
+ {getFieldDecorator('sentence.price', {
|
|
|
rules: [
|
|
|
- { required: true, message: '输入数学机经名称' },
|
|
|
+ { required: true, message: '输入购买价格' },
|
|
|
],
|
|
|
})(
|
|
|
- <Input placeholder='请输入数学机经名称' onChange={(e) => {
|
|
|
- this.changeMapValue('textbook', 'package', 0, 'title', e.target.value);
|
|
|
+ <InputNumber placeholder='请输入购买价格' onChange={(value) => {
|
|
|
+ this.changeValue('sentence', 'price', value);
|
|
|
}} style={{ width: '200px' }} />,
|
|
|
)}
|
|
|
</Form.Item>
|
|
|
- <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 16 }} label='服务简介'>
|
|
|
- {getFieldDecorator('textbook.package[0].description', {
|
|
|
- rules: [
|
|
|
- { required: true, message: '输入数学机经服务简介' },
|
|
|
- ],
|
|
|
+ <Form.Item label='Code说明'>
|
|
|
+ {getFieldDecorator('sentence.detail', {
|
|
|
})(
|
|
|
- <Input placeholder='请输入数学机经服务简介' onChange={(e) => {
|
|
|
- this.changeMapValue('textbook', 'package', 0, 'description', e.target.value);
|
|
|
- }} style={{ width: '200px' }} />,
|
|
|
+ <Editor placeholder='输入内容' />,
|
|
|
)}
|
|
|
</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>;
|
|
|
}
|
|
@@ -395,14 +119,8 @@ export default class extends Page {
|
|
|
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 tab="长难句购买" key="sentence">
|
|
|
+ {this.renderSentence()}
|
|
|
</Tabs.TabPane>
|
|
|
</Tabs>
|
|
|
<Row type="flex" justify="center">
|