123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376 |
- import React from 'react';
- import { Form, Row, Col, Input, Button, Icon } from 'antd';
- import './index.less';
- import Page from '@src/containers/Page';
- import Block from '@src/components/Block';
- import { flattenObject, formatFormError } from '@src/services/Tools';
- import { asyncSMessage } from '@src/services/AsyncTools';
- import { System } from '../../../stores/system';
- export default class extends Page {
- initData() {
- System.getPromote().then(result => {
- const { form } = this.props;
- (result.video_list || []).forEach((row, index) => {
- form.getFieldDecorator(`video_list[${index}].number`);
- form.getFieldDecorator(`video_list[${index}].percent`);
- });
- (result.vs_list || []).forEach((row, index) => {
- form.getFieldDecorator(`vs_list[${index}].number`);
- form.getFieldDecorator(`vs_list[${index}].percent`);
- });
- (result.ask_time || []).forEach((row, index) => {
- form.getFieldDecorator(`ask_time[${index}].money`);
- form.getFieldDecorator(`ask_time[${index}].hour`);
- });
- (result.vs_video_money || []).forEach((row, index) => {
- form.getFieldDecorator(`vs_video_money[${index}].money`);
- form.getFieldDecorator(`vs_video_money[${index}].value`);
- });
- (result.vs_vs_number || []).forEach((row, index) => {
- form.getFieldDecorator(`vs_vs_number[${index}].number`);
- form.getFieldDecorator(`vs_vs_number[${index}].value`);
- });
- form.setFieldsValue(flattenObject(result));
- this.setState({ load: true, data: result });
- });
- }
- addLength(field, info) {
- let { data } = this.state;
- data = data || {};
- data[field] = data[field] || [];
- data[field].push(info);
- this.setState({ data });
- }
- deleteLength(field, start, length) {
- let { data } = this.state;
- data = data || {};
- data[field] = data[field] || [];
- data[field].splice(start, length);
- this.setState({ data });
- }
- changeMapValue(field, index, key, value) {
- const { data } = this.state;
- data[field] = data[field] || {};
- data[field][index] = data[field][index] || {};
- data[field][index][key] = value;
- this.setState({ data });
- }
- changeValue(field, key, value) {
- const { data } = this.state;
- data[field] = data[field] || {};
- data[field][key] = value;
- this.setState({ data });
- }
- submit() {
- const { form } = this.props;
- form.validateFields((err) => {
- if (!err) {
- const data = form.getFieldsValue();
- data.video_list = (data.video_list || []).map(row => {
- return { number: Number(row.number), percent: Number(row.percent) };
- });
- data.vs_list = (data.vs_list || []).map(row => {
- return { number: Number(row.number), percent: Number(row.percent) };
- });
- data.ask_time = (data.ask_time || []).map(row => {
- return { money: Number(row.money), hour: Number(row.hour) };
- });
- System.setPromote(data)
- .then(() => {
- this.setState(data);
- asyncSMessage('保存成功');
- }).catch((e) => {
- form.setFields(formatFormError(data, e.result));
- });
- }
- });
- }
- renderVideo() {
- const { getFieldDecorator } = this.props.form;
- const { data } = this.state;
- const videos = data.video_list || [];
- return <Block>
- <h1>视频课折扣</h1>
- <Form>
- <Form.Item label='按购买课程数量计算' />
- {videos.map((row, index) => {
- return <Row>
- <Col span={2}>
- <Form.Item>
- {getFieldDecorator(`video_list[${index}].number`, {
- rules: [
- { required: true, message: '输入数量' },
- ],
- })(
- <Input placeholder={'输入数量'} onChange={(value) => {
- this.changeMapValue('video_list', index, 'number', value);
- }} />,
- )}
- </Form.Item>
- </Col>
- <Col span={1}>
- 门
- </Col>
- <Col span={2}>
- <Form.Item>
- {getFieldDecorator(`video_list[${index}].percent`, {
- rules: [
- { required: true, message: '输入百分比' },
- ],
- })(
- <Input placeholder={'输入百分比'} onChange={(value) => {
- this.changeMapValue('video_list', index, 'percent', value);
- }} />,
- )}
- </Form.Item>
- </Col>
- <Col span={1}>
- %
- </Col>
- <Col span={1} onClick={() => {
- this.deleteLength('video_list', index, 1);
- }}>
- <Button><Icon type="minus" /></Button>
- </Col>
- </Row>;
- })}
- <Button onClick={() => {
- this.addLength('video_list', { number: 0, precent: 0 });
- }}><Icon type={'plus'} /></Button>
- <Form.Item labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label='促销文案'>
- {getFieldDecorator('video.text', {
- rules: [
- { required: true, message: '输入促销文案' },
- ],
- })(
- <Input placeholder='2门9折,3门88折,4门85折(套餐不享受此优惠)' onChange={(value) => {
- this.changeValue('video', 'text', value);
- }} />,
- )}
- </Form.Item>
- </Form>
- </Block>;
- }
- renderVs() {
- const { getFieldDecorator } = this.props.form;
- const { data } = this.state;
- const vss = data.vs_list || [];
- return <Block>
- <h1>1v1课折扣</h1>
- <Form>
- <Form.Item label='按购买课程数量计算' />
- {vss.map((row, index) => {
- return <Row>
- <Col span={2}>
- <Form.Item>
- {getFieldDecorator(`vs_list[${index}].number`, {
- rules: [
- { required: true, message: '输入数量' },
- ],
- })(
- <Input placeholder={'输入数量'} onChange={(value) => {
- this.changeMapValue('vs_list', index, 'number', value);
- }} />,
- )}
- </Form.Item>
- </Col>
- <Col span={1}>
- 课
- </Col>
- <Col span={2}>
- <Form.Item>
- {getFieldDecorator(`vs_list[${index}].percent`, {
- rules: [
- { required: true, message: '输入百分比' },
- ],
- })(
- <Input placeholder={'输入百分比'} onChange={(value) => {
- this.changeMapValue('vs_list', index, 'percent', value);
- }} />,
- )}
- </Form.Item>
- </Col>
- <Col span={1}>
- %
- </Col>
- <Col span={1} onClick={() => {
- this.deleteLength('vs_list', index, 1);
- }}>
- <Button><Icon type="minus" /></Button>
- </Col>
- </Row>;
- })}
- <Button onClick={() => {
- this.addLength('vs_list', { number: 0, precent: 0 });
- }}><Icon type={'plus'} /></Button>
- <Form.Item labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label='促销文案'>
- {getFieldDecorator('vs.text', {
- rules: [
- { required: true, message: '输入促销文案' },
- ],
- })(
- <Input placeholder='满30课时95折' onChange={(value) => {
- this.changeValue('vs', 'text', value);
- }} />,
- )}
- </Form.Item>
- </Form>
- </Block>;
- }
- renderAskTime() {
- const { getFieldDecorator } = this.props.form;
- const { data } = this.state;
- const ask_time = data.ask_time || [];
- const vs_video_money = data.vs_video_money || [];
- const vs_vs_number = data.vs_vs_number || [];
- return <Block>
- <h1>课程赠品</h1>
- <Form>
- <Form.Item label='满额送回复时长服务' />
- {ask_time.map((row, index) => {
- return <Row>
- <Col span={6}>
- <Form.Item labelCol={{ span: 10 }} wrapperCol={{ span: 14 }} label='实付金额'>
- {getFieldDecorator(`ask_time[${index}].money`, {
- rules: [
- { required: true, message: '输入金额' },
- ],
- })(
- <Input placeholder={'输入金额'} onChange={(value) => {
- this.changeMapValue('ask_time', index, 'money', value);
- }} />,
- )}
- </Form.Item>
- </Col>
- <Col span={6}>
- <Form.Item labelCol={{ span: 10 }} wrapperCol={{ span: 14 }} label='赠送'>
- {getFieldDecorator(`ask_time[${index}].hour`, {
- rules: [
- { required: true, message: '输入小时' },
- ],
- })(
- <Input placeholder={'输入小时'} onChange={(value) => {
- this.changeMapValue('ask_time', index, 'hour', value);
- }} />,
- )}
- </Form.Item>
- </Col>
- <Col span={1} onClick={() => {
- this.deleteLength('ask_time', index, 1);
- }}>
- <Button><Icon type="minus" /></Button>
- </Col>
- </Row>;
- })}
- <Button onClick={() => {
- this.addLength('ask_time', { money: 0, hour: 0 });
- }}><Icon type={'plus'} /></Button>
- <Form.Item label='满额送1v1辅导' />
- {vs_video_money.map((row, index) => {
- return <Row>
- <Col span={6}>
- <Form.Item labelCol={{ span: 10 }} wrapperCol={{ span: 14 }} label='实付金额'>
- {getFieldDecorator(`vs_video_money[${index}].money`, {
- rules: [
- { required: true, message: '输入金额' },
- ],
- })(
- <Input placeholder={'输入金额'} onChange={(value) => {
- this.changeMapValue('vs_video_money', index, 'money', value);
- }} />,
- )}
- </Form.Item>
- </Col>
- <Col span={6}>
- <Form.Item labelCol={{ span: 10 }} wrapperCol={{ span: 14 }} label='赠送'>
- {getFieldDecorator(`vs_video_money[${index}].value`, {
- rules: [
- { required: true, message: '输入课时' },
- ],
- })(
- <Input placeholder={'输入课时'} onChange={(value) => {
- this.changeMapValue('vs_video_money', index, 'value', value);
- }} />,
- )}
- </Form.Item>
- </Col>
- <Col span={1} onClick={() => {
- this.deleteLength('vs_video_money', index, 1);
- }}>
- <Button><Icon type="minus" /></Button>
- </Col>
- </Row>;
- })}
- <Button onClick={() => {
- this.addLength('vs_video_money', { money: 0, value: 0 });
- }}><Icon type={'plus'} /></Button>
- <Form.Item label='满课时送1v1辅导' />
- {vs_vs_number.map((row, index) => {
- return <Row>
- <Col span={6}>
- <Form.Item labelCol={{ span: 10 }} wrapperCol={{ span: 14 }} label='购买课时'>
- {getFieldDecorator(`vs_vs_number[${index}].number`, {
- rules: [
- { required: true, message: '输入课时' },
- ],
- })(
- <Input placeholder={'输入课时'} onChange={(value) => {
- this.changeMapValue('vs_vs_number', index, 'number', value);
- }} />,
- )}
- </Form.Item>
- </Col>
- <Col span={6}>
- <Form.Item labelCol={{ span: 10 }} wrapperCol={{ span: 14 }} label='赠送'>
- {getFieldDecorator(`vs_vs_number[${index}].value`, {
- rules: [
- { required: true, message: '输入课时' },
- ],
- })(
- <Input placeholder={'输入课时'} onChange={(value) => {
- this.changeMapValue('vs_vs_number', index, 'value', value);
- }} />,
- )}
- </Form.Item>
- </Col>
- <Col span={1} onClick={() => {
- this.deleteLength('vs_vs_number', index, 1);
- }}>
- <Button><Icon type="minus" /></Button>
- </Col>
- </Row>;
- })}
- <Button onClick={() => {
- this.addLength('vs_vs_number', { number: 0, value: 0 });
- }}><Icon type={'plus'} /></Button>
- </Form>
- </Block>;
- }
- renderView() {
- const { tab } = this.state;
- return <div>
- {this.renderVideo()}
- {this.renderVs()}
- {this.renderAskTime()}
- <Row type="flex" justify="center">
- <Col>
- <Button type="primary" onClick={() => {
- this.submit(tab);
- }}>保存</Button>
- </Col>
- </Row>
- </div>;
- }
- }
|