import React, { Component } from 'react';
import Cropper from 'react-cropper';
import 'cropperjs/dist/cropper.css';
import './index.less';
import { Checkbox, Icon } from 'antd';
import FileUpload from '@src/components/FileUpload';
import Assets from '@src/components/Assets';
import scale from '@src/services/Scale';
import { asyncSMessage } from '@src/services/AsyncTools';
import AnswerButton from '../AnswerButton';
import { SelectInput, VerificationInput, DefaultInput, Input, Textarea } from '../Input';
import { MobileArea, TextbookFeedbackTarget, TextbookSubject, AskTarget } from '../../../Constant';
import Invite from '../Invite';
import Modal from '../Modal';
import { Common } from '../../stores/common';
import { User } from '../../stores/user';
import { My } from '../../stores/my';
import Select from '../Select';
import { formatDate, getMap } from '../../../../src/services/Tools';
const TextbookFeedbackTargetMap = getMap(TextbookFeedbackTarget, 'value', 'tip');
export class BindPhone extends Component {
constructor(props) {
super(props);
this.validNumber = 0;
this.props.data = this.props.data || {};
this.state = Object.assign({ step: 0, data: {}, empty: {} }, this.initState(this.props));
this.stepProp = {
0: {
title: '绑定手机',
onConfirm: props.onConfirm,
},
1: {
title: '绑定手机',
onConfirm: () => {
this.submit();
},
onCancel: props.onCancel,
confirmText: '提交',
},
};
}
initState(props) {
if (!props.show || this.props.show) return {};
const data = Object.assign({}, props.data);
if (!data.area) data.area = MobileArea[0].value;
return { step: props.data.mobile ? 0 : 1, data, validError: '', empty: {} };
}
componentWillReceiveProps(nextProps) {
this.setState(this.initState(nextProps));
}
onNext() {
this.setState({ step: 1, validError: '', mobileError: '', empty: {} });
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty, mobileError: null });
}
validMobile() {
const { data } = this.state;
const { area, mobile } = data;
if (!area || !mobile) return;
this.validNumber += 1;
const number = this.validNumber;
if (mobile === this.props.data.mobile) {
this.setState({ mobileError: '' });
return;
}
User.validMobile(area, mobile)
.then(result => {
if (number !== this.validNumber) return Promise.resolve();
if (result) {
this.setState({ mobileError: '' });
return Promise.resolve();
}
return Promise.reject(new Error('该手机已绑定其他账号,请更换手机号码'));
})
.catch(err => {
this.setState({ mobileError: err.message });
});
}
sendValid() {
const { data, mobileError } = this.state;
const { area, mobile } = data;
if (mobileError) return Promise.reject();
if (!area || !mobile) {
this.setState({ empty: { area: !data.area, mobile: !data.mobile } });
return Promise.reject();
}
return Common.sendSms(area, mobile)
.then(result => {
if (result) {
asyncSMessage('发送成功');
this.setState({ mobileError: '', validError: '' });
} else {
throw new Error('发送失败');
}
})
.catch(err => {
this.setState({ mobileError: err.message });
throw err;
});
}
submit() {
const { data, validError, mobileError } = this.state;
if (validError || mobileError) return;
const { area, mobile, mobileVerifyCode } = data;
if (!area || !mobile || !mobileVerifyCode) {
this.setState({ empty: { area: !data.area, mobile: !data.mobile, mobileVerifyCode: !mobileVerifyCode } });
return;
}
My.bindMobile(area, mobile, mobileVerifyCode)
.then(() => {
asyncSMessage('操作成功');
this.setState({ step: 0, validError: '', mobileError: '' });
User.infoHandle(Object.assign(this.props.data, { area, mobile }));
this.props.onConfirm();
})
.catch(err => {
if (err.message.indexOf('验证码') >= 0) {
this.setState({ validError: err.message });
} else {
this.setState({ mobileError: err.message });
}
});
}
render() {
const { show } = this.props;
const { step = 0 } = this.state;
return (
{this[`renderStep${step}`]()}
);
}
renderStep0() {
const { data } = this.state;
return (
);
}
renderStep1() {
return (
手机号
{
this.changeData('area', value);
this.validMobile();
}}
onChange={e => {
this.changeData('mobile', e.target.value);
this.validMobile();
}}
/>
{
return this.sendValid();
}}
onChange={e => {
this.changeData('mobileVerifyCode', e.target.value);
this.setState({ validError: '' });
}}
/>
);
}
}
export class BindEmail extends Component {
constructor(props) {
super(props);
this.validNumber = 0;
this.props.data = this.props.data || {};
this.state = Object.assign({ step: 0, data: {}, empty: {} }, this.initState(this.props));
this.stepProp = {
0: {
title: '绑定邮箱',
onConfirm: props.onConfirm,
},
1: {
title: '绑定邮箱',
onConfirm: () => {
this.submit();
},
onCancel: props.onCancel,
confirmText: '提交',
},
};
}
initState(props) {
if (!props.show || this.props.show) return {};
return { step: props.data.email ? 0 : 1, data: Object.assign({}, props.data) };
}
componentWillReceiveProps(nextProps) {
this.setState(this.initState(nextProps));
}
onNext() {
this.setState({ step: 1, error: '', empty: {} });
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty, error: null });
}
validEmail() {
const { data } = this.state;
const { email } = data;
if (!email) return;
this.validNumber += 1;
const number = this.validNumber;
if (email === this.props.data.email) {
this.setState({ error: '' });
return;
}
User.validEmail(email)
.then(result => {
if (number !== this.validNumber) return Promise.resolve();
if (result) {
this.setState({ error: '' });
return Promise.resolve();
}
return Promise.reject(new Error('该邮箱已绑定其他账号,请更换邮箱地址'));
})
.catch(err => {
this.setState({ error: err.message });
});
}
submit() {
const { data, error } = this.state;
if (error) return;
if (!data.email) {
this.setState({ empty: { email: !data.email } });
return;
}
const { email } = data;
My.bindEmail(email)
.then(() => {
asyncSMessage('操作成功');
this.setState({ step: 0, error: '' });
User.infoHandle(Object.assign(this.props.data, { email }));
this.props.onConfirm();
})
.catch(e => {
this.setState({ error: e.message });
});
}
render() {
const { show } = this.props;
const { step = 0 } = this.state;
return (
{this[`renderStep${step}`]()}
);
}
renderStep0() {
const { data } = this.state;
return (
);
}
renderStep1() {
return (
邮箱地址
{
this.changeData('email', e.target.value);
this.validEmail();
}}
/>
);
}
}
export class EditInfo extends Component {
constructor(props) {
super(props);
this.props.data = this.props.data || {};
this.state = Object.assign({ data: {}, empty: {} }, this.initState(this.props));
}
initState(props) {
if (props.image && this.waitImage) {
const { state } = this;
Common.upload(props.image)
.then(result => {
const { data } = this.state;
data.avatar = result.url;
this.setState({ data, uploading: false });
})
.catch(e => {
this.setState({ imageError: e.message });
});
state.uploading = true;
this.waitImage = false;
return state;
}
if (!props.show || this.props.show) return {};
return { data: Object.assign({}, props.data) };
}
componentWillReceiveProps(nextProps) {
this.setState(this.initState(nextProps));
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty, nicknameError: null });
}
strLen(str) {
let len = 0;
for (let i = 0; i < str.length; i += 1) {
if (str.charCodeAt(i) > 255 || str.charCodeAt(i) < 0) len += 2; else len += 1;
}
return len;
}
// 将字符串拆成字符,并存到数组中
strToChars(str) {
const chars = [];
for (let i = 0; i < str.length; i += 1) {
chars[i] = [str.substr(i, 1), this.isCHS(str, i)];
}
return chars;
}
// 判断某个字符是否是汉字
isCHS(str, i) {
if (str.charCodeAt(i) > 255 || str.charCodeAt(i) < 0) {
return true;
}
return false;
}
// 截取字符串(从start字节到end字节)
subCHString(str, start, end) {
let len = 0;
let s = '';
const chars = this.strToChars(str);
for (let i = 0; i < str.length; i += 1) {
if (chars[i][1]) {
len += 2;
} else {
len += 1;
}
if (end < len) {
return s;
}
if (start < len) {
s += chars[i][0];
}
}
return s;
}
// 截取字符串(从start字节截取length个字节)
subCHStr(str, start, length) {
return this.subCHString(str, start, start + length);
}
submit() {
const { data, nicknameError } = this.state;
if (nicknameError) return;
if (!data.nickname) {
this.setState({ empty: { nickname: !data.nickname } });
return;
}
const len = this.strLen(data.nickname);
if (len < 2 || len > 14) {
this.setState({ nicknameError: '用户名长度不足2个字符或超过14个字符' });
return;
}
const { nickname, avatar } = data;
My.editInfo({ nickname, avatar })
.then(() => {
asyncSMessage('操作成功');
User.infoHandle(Object.assign(this.props.data, { nickname, avatar }));
this.props.onConfirm();
this.setState({ nicknameError: '' });
})
.catch(e => {
this.setState({ nicknameError: e.message });
});
}
render() {
const { show, onCancel, onSelectImage } = this.props;
return (
{
this.submit();
}}
>
用户名
{
this.changeData('nickname', e.target.value);
}}
/>
头像
{
this.waitImage = true;
onSelectImage(file);
return Promise.reject();
}}
/>
{this.state.imageError || ''}
);
}
}
export class RealAuth extends Component {
constructor(props) {
super(props);
this.state = { data: {} };
}
render() {
const { show, onConfirm } = this.props;
return (
完成实名认证即可领取:
6个月VIP权限 和 5折机经优惠劵。
扫码关注公众号,点击“我的-实名认证”
);
}
}
export class EditAvatar extends Component {
constructor(props) {
super(props);
this.state = Object.assign({ data: {} }, this.initState(this.props));
}
initState(props) {
if (props.image) this.loadImage(props.image);
if (!props.show || this.props.show) return {};
return { data: {} };
}
componentWillReceiveProps(nextProps) {
this.setState(this.initState(nextProps));
}
loadImage(file) {
this.defaultZoomValue = 1;
if (window.FileReader) {
const reader = new FileReader();
reader.readAsDataURL(file);
// 渲染文件
reader.onload = arg => {
this.setState({ image: arg.target.result, fileName: file.name, zoomValue: 1 });
};
} else {
const img = new Image();
img.onload = function () {
const canvas = document.createElement('canvas');
canvas.height = img.height;
canvas.width = img.width;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
this.setState({ image: canvas.toDataURL() });
};
img.src = '1.gif';
}
}
computerZoom() {
const data = this.cropRef.getImageData();
this.defaultZoomValue = 200 / parseFloat(Math.max(data.naturalWidth, data.naturalHeight));
}
crop() {
// image in dataUrl
// console.log(this.cropRef.getCroppedCanvas().toDataURL())
// const canvas = this.cropRef.getCroppedCanvas();
// const avatar = scale(this.props.crop, canvas, 'png-src');
// let scaleCanvas = this.cropRef.getCroppedCanvas(this.props.crop)
// this.setState({ avatar });
}
select() {
const { fileName } = this.state;
const { onConfirm } = this.props;
const canvas = this.cropRef.getCroppedCanvas();
const scaleCanvas = scale(this.props.crop, canvas);
// let scaleCanvas = this.cropRef.getCroppedCanvas(this.props.crop)
scaleCanvas.toBlob(blob => {
const file = new File([blob], fileName);
onConfirm(file);
});
}
render() {
const { show, onCancel } = this.props;
const { image } = this.state;
return (
{
this.select();
}}
onCancel={onCancel}
>
{
this.cropRef = ref;
}}
src={image}
ready={() => {
this.computerZoom();
}}
style={{ height: 360, width: 360 }}
// Cropper.js options
aspectRatio={1}
viewMode={0}
// autoCropArea={0.8}
preview=".img-preview"
// dragMode='move'
guides={false}
movable={false}
rotatable={false}
scalable={false}
// zoom={(value) => {
// console.log('zoom', value);
// const zoomValue = value * this.defaultZoomValue / 50;
// this.cropRef.zoomTo(zoomValue);
// }}
cropmove={() => {
this.crop();
}}
toggleDragModeOnDblclick={false}
cropBoxResizable
/>
);
}
}
export class InviteModal extends Component {
constructor(props) {
super(props);
this.state = { data: {} };
}
render() {
const { show, onClose, data } = this.props;
return (
每邀请一位小伙伴加入“千行GMAT”, 您的VIP权限会延长7天,可累加 无上限!赶紧行动吧~
);
}
}
// 模考选择下载
export class DownloadModal extends Component {
constructor(props) {
super(props);
this.state = { checkMap: {} };
}
onConfirm() {
const { onConfirm, data } = this.props;
if (onConfirm) onConfirm();
const { checkMap } = this.state;
Object.keys(checkMap).forEach(key => {
if (!checkMap[key]) return;
const link = data[`${key}`];
if (link) {
openLink(`${link}&download=true`);
}
});
this.setState({ checkList: [] });
}
render() {
const { show, data = {}, onCancel } = this.props;
const { checkMap = {} } = this.state;
const quantVersion = data.quantVersion || 0;
const irVersion = data.irVersion || 0;
const rcVersion = data.rcVersion || 0;
return (
this.onConfirm()}
onCancel={onCancel}
>
请选择下载科目
{quantVersion > 0 && (
{
checkMap.quant = !checkMap.quant;
this.setState({ checkMap });
}}
/>
数学
(版本{quantVersion} 最后更新:{formatDate(data.quantTime, 'YYYY-MM-DD HH:mm:ss')})
)}
{irVersion > 0 && (
{
checkMap.ir = !checkMap.ir;
this.setState({ checkMap });
}}
/>
逻辑
(版本{irVersion} 最后更新:{formatDate(data.irTime, 'YYYY-MM-DD HH:mm:ss')})
)}
{rcVersion > 0 && (
{
checkMap.rc = !checkMap.rc;
this.setState({ checkMap });
}}
/>
阅读
(版本{rcVersion} 最后更新:{formatDate(data.rcTime, 'YYYY-MM-DD HH:mm:ss')})
)}
);
}
}
// 模考开通确认
export class OpenConfirmModal extends Component {
render() {
const { show, onConfirm, onCancel, data = {} } = this.props;
return (
您正在开通「{data.title}」。
模考有效期至:{data.endTime && formatDate(data.endTime, 'YYYY-MM-DD')}
);
}
}
// 模考重置确认
export class RestartConfirmModal extends Component {
render() {
const { show, onConfirm, onCancel } = this.props;
return (
重置后,可进行新一轮的模考。
本轮模考的成绩和报告可在本页面或「我的报告」查看。
只有 1 次重置机会。
);
}
}
export class FeedbackErrorDataModal extends Component {
constructor(props) {
super(props);
this.state = { data: { position: ['', '', ''], content: '', originContent: '' } };
}
componentWillReceiveProps(nextProps) {
if (nextProps.show && nextProps.defaultData) {
this.setState({ data: Object.assign({}, nextProps.defaultData, this.state.data) });
}
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty });
}
changeDataIndex(field, index, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field][index] = value;
if (value) empty[`${field}[${index}]`] = !value;
this.setState({ data, empty });
}
onConfirm() {
const { onConfirm } = this.props;
const { data } = this.state;
if (!data.position[0] || !data.position[1] || !data.position[2] || !data.content || !data.originContent) {
this.setState({
empty: {
'position[0]': !data.position[0],
'position[1]': !data.position[1],
'position[2]': !data.position[2],
content: !data.content,
originContent: !data.originContent,
},
});
return Promise.reject();
}
return My.addFeedbackErrorData(
data.dataId,
data.title,
data.position.join(','),
data.originContent,
data.content,
).then(() => {
this.setState({ data: { position: ['', '', ''], content: '', originContent: '' } });
if (onConfirm) onConfirm();
});
}
onCancel() {
const { onCancel } = this.props;
this.setState({ data: { position: ['', '', ''], content: '', originContent: '' } });
if (onCancel) onCancel();
}
render() {
const { show } = this.props;
const { data, empty = {} } = this.state;
return (
this.onConfirm()}
onCancel={() => this.onCancel()}
>
定位:
{
this.changeDataIndex('position', 0, e.target.value);
}}
/>
页
{
this.changeDataIndex('position', 1, e.target.value);
}}
/>
行 , 题号
{
this.changeDataIndex('position', 2, e.target.value);
}}
/>
错误内容是:
);
}
}
export class AskCourseModal extends Component {
constructor(props) {
super(props);
this.state = { data: { position: [], content: '', originContent: '' } };
}
componentWillReceiveProps(nextProps) {
if (nextProps.show && nextProps.defaultData) {
this.setState({ data: Object.assign({}, nextProps.defaultData, this.state.data) });
}
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty });
}
onConfirm() {
const { course, courseNo, onConfirm } = this.props;
const { data } = this.state;
if (!data.content || !data.originContent) {
this.setState({ empty: { content: !data.content, originContent: !data.originContent } });
return Promise.reject();
}
return My.addCourseAsk(course.id, courseNo.id, data.position.join(','), data.originContent, data.content).then(
() => {
this.setState({ data: { position: [], content: '', originContent: '' } });
if (onConfirm) onConfirm();
},
);
}
onCancel() {
const { onCancel } = this.props;
this.setState({ data: { position: [], content: '', originContent: '' } });
if (onCancel) onCancel();
}
render() {
const { show, selectList, courseNo, getContainer } = this.props;
const { data, empty = {} } = this.state;
return (
this.onConfirm()}
onCancel={() => this.onCancel()}
>
针对课时{courseNo.no}的{' '}
老师讲解的内容是:
);
}
}
export class CourseNoteModal extends Component {
constructor(props) {
super(props);
this.state = { data: { content: '' } };
}
componentWillReceiveProps(nextProps) {
if (nextProps.show && nextProps.defaultData) {
this.setState({ data: Object.assign({}, nextProps.defaultData, this.state.data) });
}
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty });
}
onConfirm() {
const { course, onConfirm } = this.props;
const { data } = this.state;
if (!data.content || !data.originContent) {
this.setState({ empty: { content: !data.content } });
return Promise.reject();
}
return My.updateCourseNote(course.id, data.courseNoId, data.content).then(() => {
this.setState({ data: { content: '' } });
if (onConfirm) onConfirm();
});
}
onCancel() {
const { onCancel } = this.props;
this.setState({ data: { content: '' } });
if (onCancel) onCancel();
}
render() {
const { show, course = {}, courseNos = [], noteMap = {}, getContainer } = this.props;
const { data, empty = {} } = this.state;
return (
this.onConfirm()}
onCancel={() => this.onCancel()}
>
{course.title}
{
this.changeData('content', e.target.value);
}}
/>
);
}
}
export class TextbookFeedbackModal extends Component {
constructor(props) {
super(props);
this.state = {
data: { content: '' },
targetList: TextbookFeedbackTarget.map(row => {
return {
title: row.label,
key: row.value,
};
}),
textbookSubject: TextbookSubject.map(row => {
return {
title: row.label,
key: row.value,
};
}),
};
}
componentWillReceiveProps(nextProps) {
if (nextProps.show && nextProps.defaultData) {
this.setState({ data: Object.assign({}, nextProps.defaultData, this.state.data) });
}
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty });
}
onConfirm() {
const { onConfirm } = this.props;
const { data } = this.state;
if (data.target !== 'new' && (!data.no || !data.content)) {
this.setState({ empty: { content: !data.content, no: !data.no } });
return Promise.reject();
}
if (!data.content) {
this.setState({ empty: { content: !data.content } });
return Promise.reject();
}
return My.addTextbookFeedback(data.textbookSubject, data.target, data.no, data.content)
.then(() => {
this.setState({ data: { content: '' } });
if (onConfirm) onConfirm();
})
.catch(e => {
asyncSMessage(e.message, 'error');
});
}
onCancel() {
const { onCancel } = this.props;
this.setState({ data: { content: '' } });
if (onCancel) onCancel();
}
render() {
const { show } = this.props;
const { data, targetList, textbookSubject, empty = {} } = this.state;
return (
this.onConfirm()} onCancel={() => this.onCancel()}>
机经类别:{' '}
{TextbookFeedbackTargetMap[data.target]}:
{
this.changeData('content', e.target.value);
}}
/>
);
}
}
export class FaqModal extends Component {
constructor(props) {
super(props);
this.state = { data: { content: '' } };
}
componentWillReceiveProps(nextProps) {
if (nextProps.defaultData && nextProps.show) {
this.setState({ data: Object.assign({}, nextProps.defaultData, this.state.data) });
}
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty });
}
onConfirm() {
const { onConfirm } = this.props;
const { data } = this.state;
if (!data.content) {
this.setState({ empty: { content: !data.content } });
return Promise.reject();
}
return My.addFaq(data.channel, data.position, data.content).then(() => {
this.setState({ data: { content: '' } });
if (onConfirm) onConfirm();
});
}
onCancel() {
const { onCancel } = this.props;
this.setState({ data: { content: '' } });
if (onCancel) onCancel();
}
render() {
const { show } = this.props;
const { data, empty = {} } = this.state;
return (
this.onConfirm()} onCancel={() => this.onCancel()}>
{
this.changeData('content', e.target.value);
}}
/>
);
}
}
export class CommentModal extends Component {
constructor(props) {
super(props);
this.state = { data: { content: '' } };
}
componentWillReceiveProps(nextProps) {
if (nextProps.show && nextProps.defaultData) {
this.setState({ data: Object.assign({}, nextProps.defaultData, this.state.data) });
}
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty });
}
onConfirm() {
const { onConfirm } = this.props;
const { data } = this.state;
if (!data.content) {
this.setState({ empty: { content: !data.content } });
return Promise.reject();
}
return My.addComment(data.channel, data.position, data.content).then(() => {
this.setState({ data: { content: '' } });
if (onConfirm) onConfirm();
});
}
onCancel() {
const { onCancel } = this.props;
this.setState({ data: { content: '' } });
if (onCancel) onCancel();
}
render() {
const { show } = this.props;
const { data, empty = {} } = this.state;
return (
this.onConfirm()} onCancel={() => this.onCancel()}>
{
this.changeData('content', e.target.value);
}}
/>
);
}
}
export class FinishModal extends Component {
render() {
const { show, onConfirm } = this.props;
return (
onConfirm()}>
您的每一次反馈都是千行进步的动力。
);
}
}
export class SuppleModal extends Component {
constructor(props) {
super(props);
this.state = { data: { content: '' } };
}
componentWillReceiveProps(nextProps) {
if (nextProps.show && nextProps.defaultData) {
this.setState({ data: Object.assign({}, nextProps.defaultData, this.state.data) });
}
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty });
}
onConfirm() {
const { onConfirm } = this.props;
const { data } = this.state;
if (!data.content) {
this.setState({ empty: { content: !data.content } });
return Promise.reject();
}
return My.addRoomFeedback(data.roomId, data.content).then(() => {
this.setState({ data: { content: '' } });
if (onConfirm) onConfirm();
});
}
onCancel() {
const { onCancel } = this.props;
this.setState({ data: { content: '' } });
if (onCancel) onCancel();
}
render() {
const { show, info = {} } = this.props;
const { data, empty = {} } = this.state;
return (
this.onConfirm()} onCancel={() => this.onCancel()}>
考场位置: {info.isOverseas ? '海外' : '中国'}
{info.area ? ` ${info.area}` : ''} {info.title}
补充内容:
{
this.changeData('content', e.target.value);
}}
/>
);
}
}
export class SuppleFinishModal extends Component {
render() {
const { show, onConfirm } = this.props;
return (
onConfirm()}>
内容将在审核通过后发布,感谢您的参与。
);
}
}
export class QuestionNoteModal extends Component {
constructor(props) {
super(props);
this.state = { data: {}, noteField: AskTarget[0].value };
}
componentWillReceiveProps(nextProps) {
if (nextProps.show && nextProps.defaultData) {
this.setState({ data: Object.assign({}, nextProps.defaultData, this.state.data) });
}
}
changeData(field, value) {
let { data, empty } = this.state;
data = data || {};
empty = empty || {};
data[field] = value;
if (value) empty[field] = !value;
this.setState({ data, empty });
}
onConfirm(close) {
const { questionNo, onConfirm } = this.props;
const { data } = this.state;
return My.updateQuestionNote(questionNo.id, data).then(() => {
if (close) {
this.setState({ data: {}, noteField: AskTarget[0].value });
if (onConfirm) onConfirm();
}
});
}
onCancel() {
const { onCancel } = this.props;
this.setState({ data: { content: '' } });
if (onCancel) onCancel();
}
render() {
const { show } = this.props;
const { data, noteField } = this.state;
return (
提问
{AskTarget.map(item => {
return (
{
this.setState({ noteField: item.key });
}}
>
{item.label}
{data[`${item.key}Time`] ? formatDate(data[`${item.key}Time`]) : ''}
);
})}
{
data[`${noteField}Time`] = new Date();
data[`${noteField}Content`] = e.target.value;
this.setState({ data });
}}
/>
{
this.onCancel();
}}
>
取消
{
this.onConfirm();
}}
>
编辑
{
this.onConfirm(true);
}}
>
保存
);
}
}