| 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;
 |