123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- import React from 'react';
- import { Spin, Form, Button, message, Table } from 'antd';
- import ajax from 'jquery/src/ajax/xhr.js'
- import $ from 'jquery/src/ajax';
- import dict from './dict.js';
- import money from '@/money.js';
- const FormItem = Form.Item;
- const formItemLayout = {
- labelCol: { span: 4 },
- wrapperCol: { span: 10 },
- };
- const NUMBERS = {
- 1: '第一年',
- 2: '第二年',
- 3: '第三年',
- 4: '第四年',
- 5: '第五年',
- }
- const getText = (map, key, field) => {
- if (field) {
- return map[key] ? (map[key][field || 'text'] || '') : key;
- }
- return map[key] ? map[key] : key;
- }
- const EvaluateStep8 = Form.create({})(React.createClass({
- getInitialState() {
- return {
- loading: true,
- record: {},
- industries: {},
- subIndustries: {},
- districts: {},
- value: 0,
- recommends: []
- };
- },
- componentWillMount() {
- let record = this.props.record || {}, dictMap = {};
- if (record[0] && record[0].industry) {
- this.loadData(record[0].industry);
- } else {
- this.state.loading = false;
- }
- this.state.record = record;
- this.state.value = this.props.value || 0;
- for (let key in dict) {
- if (dict.hasOwnProperty(key) && key != 'toMap') {
- dictMap[key] = dict.toMap(dict[key]);
- }
- }
- this.state.dictMap = dictMap;
- },
- loadData(pid) {
- $.when($.ajax({
- url: globalConfig.context + '/open/findIndustryCategory'
- }), $.ajax({
- url: globalConfig.context + '/open/findIndustryCategory',
- data: { id: pid }
- }), $.ajax({
- url: globalConfig.context + '/open/findDistrict'
- }), $.ajax({
- url: globalConfig.context + '/api/user/evaluate/step5/' + this.props.id
- })).done(function (industryRes, subIndustryRes, districtRes, recommendRes) {
- let i = {}, si = {}, d = { 0: "全国" }, r = [];
- if (industryRes[0] && industryRes[0].data) {
- industryRes[0].data.forEach(it => {
- i[String(it.id)] = it;
- })
- }
- if (subIndustryRes[0] && subIndustryRes[0].data) {
- subIndustryRes[0].data.forEach(it => {
- si[String(it.id)] = it;
- })
- }
- if (districtRes[0] && districtRes[0].data) {
- districtRes[0].data.forEach(it => {
- d[String(it.id)] = it.name;
- })
- }
- if (recommendRes[0] && recommendRes[0].data) {
- r = recommendRes[0].data;
- }
- this.setState({
- loading: false,
- industries: i,
- subIndustries: si,
- districts: d,
- recommends: r
- })
- }.bind(this)).fail(function () {
- this.setState({
- loading: false
- })
- }.bind(this));
- },
- next() {
- if (this.props.next) {
- this.props.next();
- }
- },
- prev() {
- if (this.props.prev) {
- this.props.prev();
- }
- },
- step1Col() {
- return [{ dataIndex: 'key', key: 'key', width: '40%', className: 'steps-cell-key' }, { dataIndex: 'text', key: 'text', width: '60%' }]
- },
- step4Col() {
- return [{
- title: '年份', dataIndex: 'year', key: 'year'
- }, {
- title: '营收', dataIndex: 'income', key: 'income', render: (text) => { return money(text || 0) + '元' }
- }, {
- title: '利润率', dataIndex: 'profit', key: 'profit', render: (text) => { return (text || 0) + '%' }
- }]
- },
- step5Col() {
- const step = this.state.record[4];
- let cols = [{
- title: '年份', dataIndex: 'key', key: 'key', render: (text) => { return NUMBERS[text + 1] }
- }]
- switch (step.type) {
- case "2":
- cols.push({ title: '市场规模', dataIndex: 'marketScale', key: 'marketScale', render: (text) => { return money(text || 0) + '元' } });
- cols.push({ title: '技术覆盖率/市场份额', dataIndex: 'marketRate', key: 'marketRate', render: (text) => { return (text || 0) + '%' } });
- break;
- case "3":
- cols.push({ title: '单价', dataIndex: 'unitPrice', key: 'unitPrice', render: (text) => { return money(text || 0) + '元' } });
- cols.push({ title: '销量', dataIndex: 'saleCount', key: 'saleCount' });
- break;
- }
- cols.push({ title: '营业收入', dataIndex: 'income', key: 'income', render: (text) => { return money(text || 0) + '元' } });
- if(this.state.record[3].hasIncome=='2') {
- cols.push({ title: '建议值', dataIndex: 'recommend', key: 'recommend', render: (text) => { return money(text || 0) + '元' } });
- }
- return cols;
- },
- step1Data() {
- const step = this.state.record[0], { industries, subIndustries, districts } = this.state;
- const { transferTypes, leftTimes } = this.state.dictMap;
- return step ? [{
- key: "技术名称",
- text: step.name
- }, {
- key: "所属主行业",
- text: getText(industries, String(step.industry), 'name')
- }, {
- key: "所属子行业",
- text: step.subIndustry.split(',').map(it => {
- return getText(subIndustries, it, 'name');
- }).join(',')
- }, {
- key: "转让方式",
- text: getText(transferTypes, String(step.transferType))
- }, {
- key: "预估技术剩余寿命",
- text: getText(leftTimes, String(step.timeLeft))
- }, {
- key: "转让区域",
- text: step.transferArea.split(',').map(it => {
- return districts[it] || it;
- }).join(',')
- }, {
- key: "评估基准日",
- text: step.benchmarkDate
- }, {
- key: "评估币种",
- text: step.currencyType
- }] : []
- },
- step2Data() {
- const step = this.state.record[1];
- const { accessMethods, legalStatus, maintenanceStatus, confidentialities, decidabilities, rightLimitations } = this.state.dictMap;
- return step ? [{
- key: "取得方式",
- text: getText(accessMethods, String(step.accessMethod))
- }, {
- key: "法律状态",
- text: getText(legalStatus, String(step.legalStatus))
- }, {
- key: "专利维护",
- text: getText(maintenanceStatus, String(step.patentMaintenance))
- }, {
- key: "保密性",
- text: getText(confidentialities, String(step.confidentiality))
- }, {
- key: "他人侵权的易判定性",
- text: getText(decidabilities, String(step.decidability))
- }, {
- key: "是否涉及质押、担保、诉讼等权利限制",
- text: getText(rightLimitations, String(step.hasRightLimitation))
- }] : []
- },
- step3Data() {
- const step = this.state.record[2];
- const { progressiveness, innovativeness, ripeness, alternatives,
- defensive, prospect, supplyAndDemand, rangeOfApplication, imitable, profitability } = this.state.dictMap;
- return step ? [{
- key: "先进性",
- text: getText(progressiveness, String(step.progressiveness))
- }, {
- key: "创新性",
- text: getText(innovativeness, String(step.innovativeness))
- }, {
- key: "成熟度",
- text: getText(ripeness, String(step.ripeness))
- }, {
- key: "替代性",
- text: getText(alternatives, String(step.alternatives))
- }, {
- key: "技术防御力",
- text: getText(defensive, String(step.defensive))
- }, {
- key: "技术领域发展前景",
- text: getText(prospect, String(step.prospect))
- }, {
- key: "供求关系",
- text: getText(supplyAndDemand, String(step.supplyAndDemand))
- }, {
- key: "产品应用范围",
- text: getText(rangeOfApplication, String(step.rangeOfApplication))
- }, {
- key: "遭他人模仿可能性",
- text: getText(imitable, String(step.imitable))
- }, {
- key: "独立获利能力",
- text: getText(profitability, String(step.profitability))
- }] : []
- },
- step4Data() {
- const step = this.state.record[3];
- return step.hasIncome == 2 && step.incomes || []
- },
- step5Data() {
- const step = this.state.record[4], { recommends } = this.state;
- let res = [];
- if (step.forecastIncomes) {
- step.forecastIncomes.forEach((it, idx) => {
- res.push(Object.assign({}, it, {
- key: idx,
- recommend: recommends[idx]
- }))
- })
- }
- return res
- },
- step6Data() {
- const step = this.state.record[5];
- return step ? [{
- key: "企业所得税率预估",
- text: step.taxRate + '%'
- }] : []
- },
- step7Data() {
- const step = this.state.record[6];
- const { political, technical, market, capital, management } = this.state.dictMap;
- return step ? [{
- key: "政策风险",
- text: getText(political, String(step.political))
- }, {
- key: "技术风险",
- text: getText(technical, String(step.technical))
- }, {
- key: "市场风险",
- text: getText(market, String(step.market))
- }, {
- key: "资金风险",
- text: getText(capital, String(step.capital))
- }, {
- key: "管理风险",
- text: getText(management, String(step.management))
- }] : []
- },
- step5Title() {
- const step = this.state.record[4];
- let title = "收入直接预估"
- switch (step.type) {
- case "2":
- title = "市场占比预估"
- break;
- case "3":
- title = "产品开发预估"
- break;
- }
- return title;
- },
- calc() {
- if(this.state.loading) {
- return;
- }
- this.setState({
- loading: true
- })
- $.ajax({
- url: globalConfig.context + '/api/user/evaluate/calc/' + this.props.id
- }).done(function (res) {
- let val = res && res.data || 0;
- this.setState({
- value: val,
- loading: false
- })
- if (this.props.next) {
- this.props.next(val)
- }
- }.bind(this)).fail(function () {
- this.setState({
- loading: false
- })
- }.bind(this));
- },
- render() {
- let { loading, record, value } = this.state;
- const tableProps = {
- showHeader: false,
- pagination: false,
- size: 'middle'
- }
- return (
- <Spin spinning={loading}>
- <div className="steps-result">
- <div className="steps-name">基本信息</div>
- <Table {...tableProps} columns={this.step1Col()} dataSource={this.step1Data()}></Table>
- <div className="steps-name">法律状况评估</div>
- <Table {...tableProps} columns={this.step1Col()} dataSource={this.step2Data()}></Table>
- <div className="steps-name">技术状况评估</div>
- <Table {...tableProps} columns={this.step1Col()} dataSource={this.step3Data()}></Table>
- <div className="steps-name">历史收入</div>
- <Table columns={this.step4Col()} dataSource={this.step4Data()} locale={{ emptyText: "无历史收入" }} rowKey="year" pagination={false} size="middle"></Table>
- <div className="steps-name">收入预估</div>
- <Table columns={this.step5Col()} dataSource={this.step5Data()} pagination={false} size="middle" showHeader={true} title={this.step5Title}></Table>
- <div className="steps-name">所得税预估</div>
- <Table {...tableProps} columns={this.step1Col()} dataSource={this.step6Data()}></Table>
- <div className="steps-name">风险预估</div>
- <Table {...tableProps} columns={this.step1Col()} dataSource={this.step7Data()}></Table>
- {
- value ? <div><div className="steps-name">价值评估结果:</div>
- <div className="steps-value">{money(value)}元</div></div> : <div />
- }
- </div>
- <div className="steps-action">
- {
- value ? <Button type="primary" onClick={() => window.open(globalConfig.context + '/user/account/evaluateInfo?id=' + this.props.id)}>查看评估报告</Button>
- : <Button type="primary" onClick={this.calc}>确认表单,开始估值</Button>
- }
- <Button style={{ marginLeft: 8 }} onClick={() => this.prev()}>上一步</Button>
- </div>
- </Spin>
- )
- },
- }));
- export default EvaluateStep8;
|