import React from 'react';
import { Spin, Form, Button, message, Radio, Table, InputNumber } from 'antd';
import ajax from 'jquery/src/ajax/xhr.js'
import $ from 'jquery/src/ajax';
import money from '@/money.js';
const RadioButton = Radio.Button;
const RadioGroup = Radio.Group;
const FormItem = Form.Item;
const formItemLayout = {
labelCol: { span: 4 },
wrapperCol: { span: 10 },
};
const NUMBERS = {
1: '第一年',
2: '第二年',
3: '第三年',
4: '第四年',
5: '第五年',
}
const EvaluateStep5 = Form.create({})(React.createClass({
getInitialState() {
return {
loading: false,
initialData: {},
hasIncome: '1',
type: '1',
dataSource: []
};
},
componentWillMount() {
let initialData = this.props.data || {}, dataSource = initialData.forecastIncomes || [];
let step4 = this.props.record && this.props.record[3] || {};
let type = initialData.type || '1';
if (step4.hasIncome == 2) {
$.ajax({
url: globalConfig.context + '/api/user/evaluate/step5/' + this.props.id
}).done(function (res) {
if (res.error && res.error.length) {
message.error(res.error[0].message)
} else if (res.data && res.data.length === 3) {
for (let i = 0; i < 3; i++) {
dataSource[i] = Object.assign({
key: i,
income: 0,
unitPrice: 0,
saleCount: 0,
marketScale: 0,
marketRate: 0,
recommend: res.data[i] || 0
}, dataSource[i]);
}
this.setState({
loading: false,
dataSource: dataSource
})
}
}.bind(this)).fail(function () {
this.setState({
loading: false
})
}.bind(this));
} else {
for (let i = 0; i < 3; i++) {
dataSource[i] = Object.assign({
key: i,
income: 0,
unitPrice: 0,
saleCount: 0,
marketScale: 0,
marketRate: 0
}, dataSource[i] || {});
}
this.state.dataSource = dataSource;
}
this.state.initialData = initialData;
this.state.type = type;
this.state.hasIncome = String(step4.hasIncome) || '1'
},
next() {
if (this.state.loading) {
return;
}
this.props.form.validateFields((err, values) => {
if (!err) {
this.setState({
loading: true
})
let incomes = [];
for (let i = 0; i < 3; i++) {
incomes.push({
unitPrice: values['unitPrice' + i] || 0,
saleCount: values['saleCount' + i] || 0,
marketScale: values['marketScale' + i] || 0,
marketRate: values['marketRate' + i] || 0,
income: values['income' + i] || 0
})
}
$.ajax({
url: globalConfig.context + '/api/user/evaluate/step5',
method: 'post',
data: {
id: this.props.id,
type: values.type,
forecastIncomes: JSON.stringify(incomes)
}
}).done(function (res) {
if (res.error && res.error.length) {
message.error(res.error[0].message)
} else {
if (this.props.next) {
this.props.next({
type: values.type,
forecastIncomes: incomes
});
}
}
}.bind(this)).fail(function () {
this.setState({
loading: false
})
}.bind(this));
} else {
for (let field in err) {
if (err.hasOwnProperty(field)) {
message.error(err[field].errors[0].message)
break;
}
}
}
});
},
prev() {
if (this.props.prev) {
this.props.prev();
}
},
onRadioChange(e) {
this.props.form.resetFields();
this.setState({
type: e.target.value,
});
},
tableCols() {
const { getFieldDecorator, getFieldValue, setFieldsValue } = this.props.form;
const { type } = this.state;
let cols = [{
title: '年份',
dataIndex: 'key',
key: 'key',
render: (text, it, idx) => {
return
{NUMBERS[idx + 1]}
}
}];
switch (type) {
case "2":
function calc(rate, scale, key) {
let fv = {};
fv['income' + key] = (scale * rate / 100) | 0
setFieldsValue(fv);
}
cols.push({
title: '市场规模(元)',
dataIndex: 'marketScale',
key: 'marketScale',
render: (text, it, idx) => {
return getFieldDecorator('marketScale' + it.key, {
initialValue: text || 0,
rules: [{
validator: (rule, value, callback) => {
if (!Number(value)) {
callback('请输入' + NUMBERS[idx + 1] + '市场规模!');
} else {
callback();
}
},
}]
})( {
calc(Number(getFieldValue('marketRate' + it.key)) || 0, Number(value) || 0, it.key);
}} />);
}
});
cols.push({
title: '技术覆盖率/市场份额(%)',
dataIndex: 'marketRate',
key: 'marketRate',
render: (text, it, idx) => {
return getFieldDecorator('marketRate' + it.key, {
initialValue: text || 0,
rules: [{
validator: (rule, value, callback) => {
if (!Number(value)) {
callback('请输入' + NUMBERS[idx + 1] + '市场份额!');
} else {
callback();
}
},
}]
})( {
calc(Number(value) || 0, getFieldValue('marketScale' + it.key) || 0, it.key);
}} />);
}
});
cols.push({
title: '营业收入(元)',
dataIndex: 'income',
key: 'income',
render: (text, it, idx) => {
return getFieldDecorator('income' + it.key, {
initialValue: text || 0
})();
}
});
break;
case "3":
function calc(rate, scale, key) {
let fv = {};
fv['income' + key] = (scale * rate) | 0
setFieldsValue(fv);
}
cols.push({
title: '单价(元)',
dataIndex: 'unitPrice',
key: 'unitPrice',
render: (text, it, idx) => {
return getFieldDecorator('unitPrice' + it.key, {
initialValue: text || 0,
rules: [{
validator: (rule, value, callback) => {
if (!Number(value)) {
callback('请输入' + NUMBERS[idx + 1] + '单价!');
} else {
callback();
}
},
}]
})( {
calc(Number(getFieldValue('saleCount' + it.key)) || 0, Number(value) || 0, it.key);
}} />);
}
});
cols.push({
title: '销量',
dataIndex: 'saleCount',
key: 'saleCount',
render: (text, it, idx) => {
return getFieldDecorator('saleCount' + it.key, {
initialValue: text || 0,
rules: [{
validator: (rule, value, callback) => {
if (!Number(value)) {
callback('请输入' + NUMBERS[idx + 1] + '销量!');
} else {
callback();
}
},
}]
})( {
calc(Number(value) || 0, getFieldValue('unitPrice' + it.key) || 0, it.key);
}} />);
}
});
cols.push({
title: '营业收入(元)',
dataIndex: 'income',
key: 'income',
render: (text, it, idx) => {
return getFieldDecorator('income' + it.key, {
initialValue: text || 0
})();
}
});
break;
default:
cols.push({
title: '营业收入(元)',
dataIndex: 'income',
key: 'income',
render: (text, it, idx) => {
return getFieldDecorator('income' + it.key, {
initialValue: text || 0,
rules: [{
validator: (rule, value, callback) => {
if (!Number(value)) {
callback('请输入' + NUMBERS[idx + 1] + '预估营业收入!');
} else {
callback();
}
},
}]
})();
}
})
break;
}
if (this.state.hasIncome == '2') {
cols.push({
title: '参考值(元)',
dataIndex: 'recommend',
key: 'recommend',
render: (text) => {
return money(text)
}
})
}
return cols
},
stringify(val) {
return val && String(val)
},
render() {
let { loading, dataSource, type } = this.state;
const { getFieldDecorator, getFieldValue, setFieldsValue } = this.props.form;
return (
根据市场等,预测该技术应用于生产活动并产生收入情况。(选择以下三种方式中的一种预估方法)
)
},
}));
export default EvaluateStep5;