albertshaw 7 vuotta sitten
vanhempi
commit
ecb7cf90c6
25 muutettua tiedostoa jossa 1541 lisäystä ja 14 poistoa
  1. 28 3
      js/component/account/content.less
  2. 54 10
      js/component/account/services/content.jsx
  3. 112 0
      js/component/account/services/evaluate/create.jsx
  4. 17 0
      js/component/account/services/evaluate/create.less
  5. 170 0
      js/component/account/services/evaluate/index.jsx
  6. 0 0
      js/component/account/services/evaluate/index.less
  7. 99 0
      js/component/account/services/evaluate/steps.jsx
  8. 23 0
      js/component/account/services/evaluate/steps.less
  9. 302 0
      js/component/account/services/evaluate/steps/step1.jsx
  10. 0 0
      js/component/account/services/evaluate/steps/step1.less
  11. 154 0
      js/component/account/services/evaluate/steps/step2.jsx
  12. 0 0
      js/component/account/services/evaluate/steps/step2.less
  13. 218 0
      js/component/account/services/evaluate/steps/step3.jsx
  14. 0 0
      js/component/account/services/evaluate/steps/step3.less
  15. 178 0
      js/component/account/services/evaluate/steps/step4.jsx
  16. 3 0
      js/component/account/services/evaluate/steps/step4.less
  17. 43 0
      js/component/account/services/evaluate/steps/step5.jsx
  18. 0 0
      js/component/account/services/evaluate/steps/step5.less
  19. 43 0
      js/component/account/services/evaluate/steps/step6.jsx
  20. 0 0
      js/component/account/services/evaluate/steps/step6.less
  21. 43 0
      js/component/account/services/evaluate/steps/step7.jsx
  22. 0 0
      js/component/account/services/evaluate/steps/step7.less
  23. 43 0
      js/component/account/services/evaluate/steps/step8.jsx
  24. 0 0
      js/component/account/services/evaluate/steps/step8.less
  25. 11 1
      js/component/account/services/leftTab.jsx

+ 28 - 3
js/component/account/content.less

@@ -7,14 +7,39 @@
     .content-right {
         width: 84%;
         height: 100%;
-        float:left;
-        overflow-y:auto;
+        float: left;
+        overflow-y: auto;
         padding: 20px;
         .ant-spin-nested-loading {
             height: 100%;
-            .ant-spin-container{
+            .ant-spin-container {
                 height: 100%;
             }
         }
     }
+    .loading-container {
+        text-align: center;
+        margin-bottom: 20px;
+        padding: 30px 50px;
+        margin: 20px 0;
+    }
+    .content-container {
+        background: #FFF;
+        padding: 20px;
+    }
+    .content-title {
+        color: #333;
+        font-size: 16px;
+        padding: 0 0 10px 0;
+    }
+    .content-body {
+        min-height: 400px;
+    }
+    .content-search {
+        margin-bottom: 6px;
+    }
+    .content-actions {
+        float: right;
+        margin-right: 20px;
+    }
 }

+ 54 - 10
js/component/account/services/content.jsx

@@ -1,24 +1,40 @@
 import React from 'react';
 import '../content.less';
+import { Spin } from 'antd';
 import LeftTab from './leftTab.jsx';
 
-import Contract from './contract/contract';
-
 const Content = React.createClass({
     getInitialState() {
         return {
             loading: false,
             leftKey: 'contract',
-            component: Contract,
-            userType: '0'
+            component: null,
+            userType: '0',
+            params: {}
         };
     },
     handlekey(key) {
-        switch (key) {
+        let paramsStr = key.split('?');
+        if (paramsStr[1]) {
+            let params = {};
+            paramsStr[1].split('&').forEach((it) => {
+                let arr = it.split('=');
+                if (arr[0]) {
+                    params[arr[0]] = arr[1] || '';
+                }
+            });
+            this.state.params = params;
+        } else {
+            this.state.params = {};
+        }
+        switch (paramsStr[0]) {
             case 'contract':
-                this.setState({
-                    component: Contract,
-                    leftKey: 'contract'
+                require.ensure([], () => {
+                    const Contract = require('./contract/contract').default;
+                    this.setState({
+                        component: Contract,
+                        leftKey: 'contract'
+                    });
                 });
                 break;
             case 'patent':
@@ -166,20 +182,48 @@ const Content = React.createClass({
                     });
                 });
                 break;
+            case 'evaluate':
+                require.ensure([], () => {
+                    const Evaluate = require('./evaluate').default;
+                    this.setState({
+                        component: Evaluate,
+                        leftKey: 'evaluate'
+                    });
+                });
+                break;
+            case 'createEvaluate':
+                require.ensure([], () => {
+                    const CreateEvaluate = require('./evaluate/create').default;
+                    this.setState({
+                        component: CreateEvaluate,
+                        leftKey: 'evaluate'
+                    });
+                });
+                break;
         };
         window.location.hash = key;
     },
     componentWillMount() {
         if (window.location.hash) {
             this.handlekey(window.location.hash.substr(1));
-        };
+        } else {
+            this.handlekey(this.state.leftKey);
+        }
     },
     render() {
+        let component;
+        if (this.state.component) {
+            component = <this.state.component handlekey={this.handlekey} {...this.state.params} />;
+        } else {
+            component = <div className="loading-container">
+                <Spin />
+            </div>
+        }
         return (
             <div className="acc-content">
                 <LeftTab handlekey={this.handlekey} />
                 <div className="content-right">
-                    <this.state.component />
+                    {component}
                 </div>
             </div>
         )

+ 112 - 0
js/component/account/services/evaluate/create.jsx

@@ -0,0 +1,112 @@
+import React from 'react';
+import { Icon, message, Button, Spin, Checkbox } from 'antd';
+import './create.less';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+import Steps from './steps';
+
+const CreateEvaluate = React.createClass({
+  getInitialState() {
+    return {
+      title: '',
+      id: '',
+      checked: false,
+      loading: false,
+      announce: ''
+    };
+  },
+  componentWillMount() {
+    if (this.props.id) {
+      this.state.id = this.props.id;
+      this.state.title = this.props.name;
+    } else {
+      this.setState({
+        loading: true
+      })
+      $.ajax({
+        url: globalConfig.context + '/open/html/get/evaluation_announcement'
+      }).done(function (res) {
+        if (res && res.data) {
+          this.setState({
+            loading: true,
+            announce: res.data.content
+          })
+        }
+      }.bind(this)).always(function () {
+        this.setState({
+          loading: false
+        })
+      }.bind(this));
+    }
+  },
+  returnList() {
+    if (this.props.handlekey) {
+      this.props.handlekey('evaluate');
+    }
+  },
+  announce() {
+    return {
+      __html: this.state.announce
+    }
+  },
+  agree() {
+    $.ajax({
+      url: globalConfig.context + '/api/user/evaluate/create'
+    }).done(function (res) {
+      if (res && res.data) {
+        this.setState({
+          loading: true,
+          id: res.data
+        })
+      }
+    }.bind(this)).always(function () {
+      this.setState({
+        loading: false
+      })
+    }.bind(this));
+  },
+  onChanged(e) {
+    this.setState({
+      checked: e.target.checked
+    });
+  },
+  titleChanged(title) {
+    this.setState({
+      title: title
+    });
+  },
+  renderBody() {
+    if (this.state.id) {
+      return <Steps id={this.state.id} step={Number(this.props.step)} title={this.titleChanged} />
+    } else {
+      return <div>
+        <div className="announce-head">
+          本系统使用说明
+          <p>使用本系统之前,请您务必仔细阅读并透彻理解本声明。当您使用本系统,将视为您认可本声明内容。</p>
+        </div>
+        <div className="announce-body" dangerouslySetInnerHTML={this.announce()} />
+        <div className="announce-foot">
+          <Checkbox checked={this.state.checked} onChange={this.onChanged}>我同意以上声明</Checkbox>
+          <Button type="primary" onClick={this.agree} disabled={!this.state.checked}>继续</Button>
+        </div>
+      </div>
+    }
+  },
+  render() {
+    return (
+      <Spin spinning={this.state.loading}>
+        <div className="content-container">
+          <div className="content-title">
+            科技评估 {this.state.title ? '- ' + this.state.title : ''}
+            <div className="content-actions"><Button type="primary" onClick={this.returnList}>返回列表</Button></div>
+          </div>
+          <div className="content-body">
+            {this.renderBody()}
+          </div>
+        </div>
+      </Spin>
+    )
+  },
+});
+
+export default CreateEvaluate;

+ 17 - 0
js/component/account/services/evaluate/create.less

@@ -0,0 +1,17 @@
+.announce-head {
+  font-size: 14px;
+  font-weight: bold;
+  p {
+    font-weight: lighter;
+  }
+}
+.announce-body {
+  margin: 10px 0 15px;
+  p {
+    margin: 6px 0;
+  }
+}
+.announce-foot { 
+  border-top: 1px solid #80b9ff;
+  padding: 10px 0;
+}

+ 170 - 0
js/component/account/services/evaluate/index.jsx

@@ -0,0 +1,170 @@
+import React from 'react';
+import { Icon, message, Button, Spin, Table } from 'antd';
+import Moment from 'moment';
+import './index.less';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+
+const Evaluate = React.createClass({
+  getInitialState() {
+    return {
+      loading: false,
+      dataSource: [],
+      pagination: {
+        defaultCurrent: 1,
+        current: 1,
+        defaultPageSize: 10,
+        showQuickJumper: true,
+        pageSize: 10,
+        onChange: function (page) {
+          this.loadData(page);
+        }.bind(this),
+        showTotal: function (total) {
+          return '共' + (total || 0) + '条数据';
+        }
+      },
+      selectedRowKeys: []
+    };
+  },
+  componentWillMount() {
+    this.loadData(1);
+  },
+  showCreate() {
+    if (this.props.handlekey) {
+      this.props.handlekey('createEvaluate');
+    }
+  },
+  loadData(pageNo) {
+    if (this.state.loading) {
+      return;
+    }
+    this.setState({
+      loading: true
+    });
+    let { pagination } = this.state;
+    $.ajax({
+      url: globalConfig.context + '/api/user/evaluate/list',
+      data: {
+        pageNo: pageNo || 1,
+        pageSize: pagination.pageSize,
+      },
+      success: function (data) {
+        if (!data.data || !data.data.list) {
+          return;
+        }
+        pagination.current = data.data.pageNo;
+        pagination.total = data.data.totalCount;
+        this.setState({
+          dataSource: data.data.list,
+          pagination: pagination
+        });
+      }.bind(this),
+    }).always(function () {
+      this.setState({
+        loading: false
+      });
+    }.bind(this));
+  },
+  tableRowClick(it) {
+    if (this.props.handlekey) {
+      this.props.handlekey('createEvaluate?id=' + it.id + '&name=' + (it.name || '') + '&step=' + it.step);
+    }
+  },
+  remove() {
+    if (this.state.loading || !this.state.selectedRowKeys.length) {
+      return;
+    }
+    this.setState({
+      loading: true
+    });
+    $.ajax({
+      url: globalConfig.context + '/api/user/evaluate/remove',
+      data: {
+        ids: this.state.selectedRowKeys.join(',')
+      },
+      method: 'post',
+      success: function (res) {
+        if (res.error && res.error.length) {
+          message.error(res.error[0].message);
+        } else {
+          message.info("删除" + (res.data || 0) + '条记录。', 2, () => {
+            this.loadData(this.state.pagination.current);
+          })
+        }
+      }.bind(this),
+    }).always(function () {
+      this.setState({
+        loading: false
+      });
+    }.bind(this));
+  },
+  preview(e, it) {
+    e.stopPropagation();
+    e.preventDefault();
+    alert(it.id);
+  },
+  render() {
+    const rowSelection = {
+      onChange: (selectedRowKeys, selectedRows) => {
+        this.setState({
+          selectedRowKeys
+        });
+      },
+      getCheckboxProps: record => ({
+        disabled: record.step === 7
+      })
+    }, columns = [
+      {
+        title: '编号',
+        dataIndex: 'id',
+        key: 'id',
+      }, {
+        title: '技术名称',
+        dataIndex: 'name',
+        key: 'name',
+      }, {
+        title: '价值',
+        dataIndex: 'value',
+        key: 'value',
+        render: (text, it) => { return it.value || ''; }
+      }, {
+        title: '预览',
+        dataIndex: 'preview',
+        key: 'preview',
+        render: (text, record) => {
+          return record.step == 7 ?
+            <Icon type="eye-o" style={{ fontSize: 18 }} onClick={(e) => {
+              this.preview(e, record)
+            }}></Icon> : <div />
+        }
+      }, {
+        title: '日期',
+        dataIndex: 'createTime',
+        key: 'createTime',
+        render: (text, it) => { return Moment(it.createTime).format('YYYY/MM/DD') }
+      }
+    ];
+    return (
+      <Spin spinning={this.state.loading}>
+        <div className="content-container">
+          <div className="content-title">
+            科技评估管理列表
+              <div className="content-actions"><Button type="primary" onClick={this.showCreate}>开始新评估<Icon type="plus" /></Button></div>
+          </div>
+          <div className="content-search">
+            <Button type="danger" onClick={this.remove} disabled={!this.state.selectedRowKeys.length}>删除</Button>
+          </div>
+          <div className="content-body">
+            <Table rowKey="id" columns={columns}
+              dataSource={this.state.dataSource}
+              pagination={this.state.pagination}
+              onRowClick={this.tableRowClick}
+              rowSelection={rowSelection} />
+          </div>
+        </div>
+      </Spin>
+    )
+  },
+});
+
+export default Evaluate;

+ 0 - 0
js/component/account/services/evaluate/index.less


+ 99 - 0
js/component/account/services/evaluate/steps.jsx

@@ -0,0 +1,99 @@
+import React from 'react';
+import { Steps, Spin } from 'antd';
+import './steps.less';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+import Step1 from './steps/step1';
+import Step2 from './steps/step2';
+import Step3 from './steps/step3';
+import Step4 from './steps/step4';
+import Step5 from './steps/step5';
+import Step6 from './steps/step6';
+import Step7 from './steps/step7';
+import Step8 from './steps/step8';
+
+const Step = Steps.Step;
+const steps = [{
+  title: '基本信息',
+  content: Step1
+}, {
+  title: '法律状况评估',
+  content: Step2
+}, {
+  title: '技术状况评估',
+  content: Step3
+}, {
+  title: '历史收入',
+  content: Step4
+}, {
+  title: '收入预估',
+  content: Step5
+}, {
+  title: '所得税预估',
+  content: Step6
+}, {
+  title: '风险预估',
+  content: Step7
+}, {
+  title: '评估值',
+  content: Step8
+}];
+
+const EvaluateSteps = React.createClass({
+  getInitialState() {
+    return {
+      current: 0,
+      loading: true,
+      steps: {}
+    };
+  },
+  next(values) {
+    const current = this.state.current + 1;
+    this.state.steps[this.state.current] = values;
+    if (this.state.current === 0 && this.props.title) {
+      this.props.title(values.name);
+    }
+    this.setState({
+      current: current,
+      steps: this.state.steps
+    });
+  },
+  prev() {
+    const current = this.state.current - 1;
+    this.setState({ current });
+  },
+  componentWillMount() {
+    $.ajax({
+      url: globalConfig.context + '/api/user/evaluate/info/' + this.props.id
+    }).done(function (res) {
+      this.setState({
+        steps: res || {},
+        loading: false
+      })
+    }.bind(this)).fail(function () {
+      this.setState({
+        loading: false
+      })
+    }.bind(this));
+    this.setState({
+      current: this.props.step || 0
+    })
+  },
+  render() {
+    this.state.StepContent = steps[this.state.current].content;
+    return (
+      <Spin spinning={this.state.loading}>
+        <div style={{ marginTop: 10 }}>
+          <Steps current={this.state.current} progressDot>
+            {steps.map(item => <Step key={item.title} title={item.title} />)}
+          </Steps>
+          <div className="steps-content">{
+            <this.state.StepContent next={this.next} prev={this.prev} id={this.props.id} data={this.state.steps[this.state.current]} record={this.state.steps}/>
+          }</div>
+        </div>
+      </Spin>
+    )
+  },
+});
+
+export default EvaluateSteps;

+ 23 - 0
js/component/account/services/evaluate/steps.less

@@ -0,0 +1,23 @@
+.steps-content {
+  margin-top: 16px;
+  min-height: 360px;
+  text-align: left;
+  padding: 6px 24px;
+}
+
+.steps-action {
+  padding: 6px 0;
+}
+
+.steps-form {
+    min-height: 300px;
+    .ant-form-item {
+      border-radius: 3px;
+      background: #fafafa;
+      padding: 10px 24px;
+      margin-bottom: 12px;
+      .ant-form-item-label {
+        text-align: left;
+      }
+    }
+}

+ 302 - 0
js/component/account/services/evaluate/steps/step1.jsx

@@ -0,0 +1,302 @@
+import React from 'react';
+import { Form, Select, Input, Cascader, Spin, message, Button, DatePicker } from 'antd';
+import './step1.less';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+
+const FormItem = Form.Item;
+const Option = Select.Option;
+const MonthPicker = DatePicker.MonthPicker;
+
+const formItemLayout = {
+  labelCol: { span: 4 },
+  wrapperCol: { span: 10 },
+};
+const currency = ['人民币 (RMB)', '美金 (USD)', '台币(TWD)', '港币 (HKD)', '澳门元(MOP)', '欧元 (EUR)', '英镑 (GBP)', '日元 (JPY)', '澳大利亚元 (AUD)', '巴西里亚尔(BRL)', '加拿大元 (CAD)', '瑞士法郎 (CHF)', '丹麦克朗(DKK)', '印尼卢比 (IDR)', '韩国元 (KRW)', '林吉特(MYR)', '新西兰元 (NZD)', '菲律宾比索 (PHP)', '瑞典克朗 (SEK)', '新加坡元 (SGD)', '泰国铢 (THB)', '越南盾 (VND)', '南非兰特 (ZAR)']
+
+const EvaluateStep1 = Form.create({})(React.createClass({
+  getInitialState() {
+    return {
+      loading: true,
+      industry: [],
+      district: [],
+      subIndustries: {},
+      subIndustry: [],
+      initialData: {}
+    };
+  },
+  componentWillMount() {
+    this.loadData();
+    this.state.initialData = this.props.data || {};
+  },
+  loadData() {
+    $.when($.ajax({
+      url: globalConfig.context + '/open/findIndustryCategory'
+    }), $.ajax({
+      url: globalConfig.context + '/open/findDistrict'
+    })).done(function (industryRes, districtRes) {
+      let i = [], d = [{
+        id: 0, level: 0, pid: 0, name: '全国'
+      }];
+      if (industryRes[0] && industryRes[0].data) {
+        i = industryRes[0].data;
+      }
+      if (districtRes[0] && districtRes[0].data) {
+        d = d.concat(districtRes[0].data);
+      }
+      this.setState({
+        loading: false,
+        industry: i,
+        district: d
+      });
+      if (this.state.initialData) {
+        this.changeFormField({
+          'industry': this.stringify(this.state.initialData.industry),
+          'transferArea': this.state.initialData.transferArea && this.state.initialData.transferArea.split(',')
+        });
+        this.loadSubIndustry(this.state.initialData.industry, this.state.initialData.subIndustry)
+      }
+    }.bind(this)).fail(function () {
+      this.setState({
+        loading: false
+      })
+    }.bind(this));
+  },
+  loadIndustry(pid, initValue) {
+    if (this.industryLoader) {
+      this.industryLoader.abort();
+    }
+    this.setState({
+      loading: true
+    })
+    this.industryLoader = $.ajax({
+      url: globalConfig.context + '/open/findIndustryCategory',
+      method: 'get',
+      data: {
+        id: pid || 0
+      }
+    }).done(function (res) {
+      if (res.data && res.data.length) {
+        this.state.subIndustries[pid] = res.data;
+        this.setState({
+          loading: false,
+          subIndustry: res.data
+        })
+        if (initValue) {
+          this.changeFormField({
+            'subIndustry': initValue.split(',')
+          });
+        }
+      }
+    }.bind(this)).always(function () {
+      this.setState({
+        loading: false
+      })
+    }.bind(this));
+  },
+  loadSubIndustry(pid, initValue) {
+    let { subIndustries } = this.state;
+    pid = Number(pid);
+    this.changeFormField({
+      'subIndustry': []
+    });
+    if (subIndustries[pid]) {
+      this.setState({
+        subIndustry: subIndustries[pid]
+      })
+    } else {
+      this.loadIndustry(pid, initValue)
+    }
+  },
+  subIndustryChanged(values) {
+    let warn = false
+    while (values.length > 3) {
+      values.pop();
+      warn = true;
+    }
+    if (warn) {
+      message.warn("子行业最多选择三个!")
+      this.changeFormField({
+        'subIndustry': values
+      });
+    }
+  },
+  districtChanged(values) {
+    let warn = false
+    values.forEach((val) => {
+      if (val === '0') {
+        warn = true;
+      }
+    });
+    if (warn) {
+      this.changeFormField({
+        'transferArea': ['0']
+      });
+    }
+  },
+  changeFormField(data) {
+    setTimeout(function () {
+      this.props.form.setFieldsValue(data);
+    }.bind(this), 10);
+  },
+  next() {
+    if (this.state.loading) {
+      return;
+    }
+    this.props.form.validateFields((err, values) => {
+      if (!err) {
+        this.setState({
+          loading: true
+        })
+        values.id = this.props.id;
+        values.subIndustry = values.subIndustry.join(',');
+        values.transferArea = values.transferArea.join(',');
+        values.benchmarkDate = values.benchmarkDate.format('YYYY-MM-DD')
+        $.ajax({
+          url: globalConfig.context + '/api/user/evaluate/step1',
+          method: 'post',
+          data: values
+        }).done(function (res) {
+          if (res.error && res.error.length) {
+            message.error(res.error[0].message)
+          } else {
+            if (this.props.next) {
+              this.props.next(values);
+            }
+          }
+        }.bind(this)).fail(function () {
+          this.setState({
+            loading: false
+          })
+        }.bind(this));
+      }
+    });
+  },
+  onDateChange(date) {
+    date && date.date(1)
+    this.changeFormField({
+      'benchmarkDate': date
+    });
+  },
+  stringify(val) {
+    return val && String(val)
+  },
+  render() {
+    const { getFieldDecorator } = this.props.form;
+    let { subIndustry, industry, district, loading, initialData } = this.state;
+    return (
+      <Spin spinning={loading}>
+        <Form className="steps-form">
+          <FormItem label="技术名称" {...formItemLayout}>
+            {getFieldDecorator('name', {
+              rules: [{ required: true, message: '请输入技术名称!' }],
+              initialValue: initialData.name
+            })(
+              <Input placeholder="请输入技术名称" />
+              )}
+          </FormItem>
+          <FormItem label="所属主行业" {...formItemLayout}>
+            {getFieldDecorator('industry', {
+              rules: [{ required: true, message: '请选择技术所属主行业!' }]
+            })(
+              <Select placeholder="请选择技术所属主行业" onChange={this.loadSubIndustry}>
+                {industry.map((it) => {
+                  return <Option key={it.id} value={String(it.id)}>{it.name}</Option>
+                })}
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="所属子行业" {...formItemLayout}>
+            {getFieldDecorator('subIndustry', {
+              rules: [{ required: true, message: '请选择技术所属子行业!' }]
+            })(
+              <Select placeholder="请选择技术所属子行业" allowClear={true} multiple={true} onChange={this.subIndustryChanged}>
+                {
+                  subIndustry.length ? subIndustry.map((it) => {
+                    return <Option key={it.id} value={String(it.id)}>{it.name}</Option>
+                  }) : []
+                }
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="转让方式" {...formItemLayout}>
+            {getFieldDecorator('transferType', {
+              rules: [{ required: true, message: '请选择技术转让方式!' }],
+              initialValue: this.stringify(initialData.transferType)
+            })(
+              <Select placeholder="请选择技术转让方式">
+                <Option value="1">所有权转让</Option>
+                <Option value="2">普通许可</Option>
+                <Option value="3">普通许可</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="预估技术剩余寿命" {...formItemLayout}>
+            {getFieldDecorator('timeLeft', {
+              rules: [{ required: true, message: '请选择技术剩余寿命!' }],
+              initialValue: this.stringify(initialData.timeLeft)
+            })(
+              <Select placeholder="请选择技术剩余寿命">
+                <Option value="3">3年</Option>
+                <Option value="4">4年</Option>
+                <Option value="5">5年</Option>
+                <Option value="6">6年</Option>
+                <Option value="7">7年</Option>
+                <Option value="8">8年</Option>
+                <Option value="9">9年</Option>
+                <Option value="10">10年</Option>
+                <Option value="11">11年</Option>
+                <Option value="12">12年</Option>
+                <Option value="13">13年</Option>
+                <Option value="14">14年</Option>
+                <Option value="15">15年</Option>
+                <Option value="16">16年</Option>
+                <Option value="17">17年</Option>
+                <Option value="18">18年</Option>
+                <Option value="19">19年</Option>
+                <Option value="20">20年以上</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="转让区域" {...formItemLayout}>
+            {getFieldDecorator('transferArea', {
+              rules: [{ required: true, message: '请选择技术转让区域!' }]
+            })(
+              <Select placeholder="请选择技术转让区域" allowClear={true} multiple={true} onChange={this.districtChanged}>
+                {district.map((it) => {
+                  return <Option key={it.id} value={String(it.id)}>{it.name}</Option>
+                })}
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="评估基准日" {...formItemLayout}>
+            {getFieldDecorator('benchmarkDate', {
+              rules: [{ required: true, message: '请输入评估基准日!' }],
+              initialValue: initialData.benchmarkDate ? moment(initialData.benchmarkDate, 'YYYY-MM-DD') : null
+            })(
+              <MonthPicker allowClear={false} onChange={this.onDateChange} placeholder="请输入评估基准日" format="YYYY-MM-DD" />
+              )}
+          </FormItem>
+          <FormItem label="评估币种" {...formItemLayout}>
+            {getFieldDecorator('currencyType', {
+              rules: [{ required: true, message: '请选择评估币种!' }],
+              initialValue: initialData.currencyType || '人民币 (RMB)'
+            })(
+              <Select placeholder="请选择评估币种">
+                {currency.map((it, idx) => {
+                  return <Option key={idx} value={it}>{it}</Option>
+                })}
+              </Select>
+              )}
+          </FormItem>
+        </Form>
+        <div className="steps-action">
+          <Button type="primary" onClick={this.next}>保存,下一步</Button>
+        </div>
+      </Spin>
+    )
+  },
+}));
+
+export default EvaluateStep1;

+ 0 - 0
js/component/account/services/evaluate/steps/step1.less


+ 154 - 0
js/component/account/services/evaluate/steps/step2.jsx

@@ -0,0 +1,154 @@
+import React from 'react';
+import { Spin, Form, Button, Select, message } from 'antd';
+import './step2.less';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+
+const FormItem = Form.Item;
+const Option = Select.Option;
+
+const formItemLayout = {
+  labelCol: { span: 6 },
+  wrapperCol: { span: 10 }
+};
+
+const EvaluateStep2 = Form.create({})(React.createClass({
+  getInitialState() {
+    return {
+      loading: false,
+      initialData: {}
+    };
+  },
+  componentWillMount() {
+    this.state.initialData = this.props.data || {};
+  },
+  next() {
+    if (this.state.loading) {
+      return;
+    }
+    this.props.form.validateFields((err, values) => {
+      if (!err) {
+        this.setState({
+          loading: true
+        })
+        values.id = this.props.id;
+        $.ajax({
+          url: globalConfig.context + '/api/user/evaluate/step2',
+          method: 'post',
+          data: values
+        }).done(function (res) {
+          if (res.error && res.error.length) {
+            message.error(res.error[0].message)
+          } else {
+            if (this.props.next) {
+              this.props.next(values);
+            }
+          }
+        }.bind(this)).fail(function () {
+          this.setState({
+            loading: false
+          })
+        }.bind(this));
+      }
+    });
+  },
+  prev() {
+    if (this.props.prev) {
+      this.props.prev();
+    }
+  },
+  stringify(val) {
+    return val && String(val)
+  },
+  render() {
+    let { loading, initialData } = this.state;
+    const { getFieldDecorator } = this.props.form;
+    return (
+      <Spin spinning={loading}>
+        <Form className="steps-form">
+          <FormItem label="取得方式" {...formItemLayout}>
+            {getFieldDecorator('accessMethod', {
+              rules: [{ required: true, message: '请选择技术取得的方式!' }],
+              initialValue: this.stringify(initialData.accessMethod)
+            })(
+              <Select placeholder="请选择技术取得的方式">
+                <Option value="1">自主研发</Option>
+                <Option value="2">外购取得</Option>
+                <Option value="3">许可取得</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="法律状态" {...formItemLayout}>
+            {getFieldDecorator('legalStatus', {
+              rules: [{ required: true, message: '请选择法律保护状态!' }],
+              initialValue: this.stringify(initialData.legalStatus)
+            })(
+              <Select placeholder="请选择法律保护状态">
+                <Option value="1">已获专利证书-发明专利,受法律保护</Option>
+                <Option value="2">已获专利证书-实用新型专利,受法律保护</Option>
+                <Option value="3">已获专利证书-外观技术专利,受法律保护</Option>
+                <Option value="4">已申请尚未获得证书,一定程度上受法律保护</Option>
+                <Option value="5">专有技术,未申请法律保护</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="专利维护" {...formItemLayout}>
+            {getFieldDecorator('patentMaintenance', {
+              rules: [{ required: true, message: '请选择专利维护状态!' }],
+              initialValue: this.stringify(initialData.patentMaintenance)
+            })(
+              <Select placeholder="请选择专利维护状态">
+                <Option value="1">专利按时缴纳年费</Option>
+                <Option value="2">专利已过期或未按时缴纳年费</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="保密性" {...formItemLayout}>
+            {getFieldDecorator('confidentiality', {
+              rules: [{ required: true, message: '请选择保密性!' }],
+              initialValue: this.stringify(initialData.confidentiality)
+            })(
+              <Select placeholder="请选择保密性">
+                <Option value="1">他人无法获知,保密性强</Option>
+                <Option value="2">他人较少可能获知,保密性较强</Option>
+                <Option value="3">他人可能获知,保密性一般</Option>
+                <Option value="4">他人很有可能获知,保密性较差</Option>
+                <Option value="5">无法保密</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="他人侵权的易判定性" {...formItemLayout}>
+            {getFieldDecorator('decidability', {
+              rules: [{ required: true, message: '请选择他人侵权的易判定性!' }],
+              initialValue: this.stringify(initialData.decidability)
+            })(
+              <Select placeholder="请选择他人侵权的易判定性">
+                <Option value="1">易发现且易判定</Option>
+                <Option value="2">易发现但不易判定</Option>
+                <Option value="3">难以发现他人是否侵权</Option>
+                <Option value="4">非专利技术,无法判定他人侵权</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="是否涉及质押、担保、诉讼等权利限制" {...formItemLayout}>
+            {getFieldDecorator('hasRightLimitation', {
+              rules: [{ required: true, message: '请选择是否涉及质押、担保、诉讼等权利限制!' }],
+              initialValue: this.stringify(initialData.hasRightLimitation)
+            })(
+              <Select placeholder="请选择是否涉及质押、担保、诉讼等权利限制">
+                <Option value="1">否</Option>
+                <Option value="2">是</Option>
+              </Select>
+              )}
+          </FormItem>
+        </Form>
+        <div className="steps-action">
+          <Button type="primary" onClick={this.next}>保存,下一步</Button>
+          <Button style={{ marginLeft: 8 }} onClick={this.prev}>上一步</Button>
+        </div>
+      </Spin>
+    )
+  },
+}));
+
+export default EvaluateStep2;

+ 0 - 0
js/component/account/services/evaluate/steps/step2.less


+ 218 - 0
js/component/account/services/evaluate/steps/step3.jsx

@@ -0,0 +1,218 @@
+import React from 'react';
+import { Spin, Form, Button, Select, message } from 'antd';
+import './step3.less';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+
+const FormItem = Form.Item;
+const Option = Select.Option;
+
+const formItemLayout = {
+  labelCol: { span: 4 },
+  wrapperCol: { span: 10 },
+};
+
+const EvaluateStep3 = Form.create({})(React.createClass({
+  getInitialState() {
+    return {
+      loading: false,
+      initialData: {}
+    };
+  },
+  componentWillMount() {
+    this.state.initialData = this.props.data || {};
+  },
+  next() {
+    if (this.state.loading) {
+      return;
+    }
+    this.props.form.validateFields((err, values) => {
+      if (!err) {
+        this.setState({
+          loading: true
+        })
+        values.id = this.props.id;
+        $.ajax({
+          url: globalConfig.context + '/api/user/evaluate/step3',
+          method: 'post',
+          data: values
+        }).done(function (res) {
+          if (res.error && res.error.length) {
+            message.error(res.error[0].message)
+          } else {
+            if (this.props.next) {
+              this.props.next(values);
+            }
+          }
+        }.bind(this)).fail(function () {
+          this.setState({
+            loading: false
+          })
+        }.bind(this));
+      }
+    });
+  },
+  prev() {
+    if (this.props.prev) {
+      this.props.prev();
+    }
+  },
+  stringify(val) {
+    return val && String(val)
+  },
+  render() {
+    let { loading, initialData } = this.state;
+    const { getFieldDecorator } = this.props.form;
+    return (
+      <Spin spinning={loading}>
+        <Form className="steps-form">
+          <FormItem label="先进性" {...formItemLayout}>
+            {getFieldDecorator('progressiveness', {
+              rules: [{ required: true, message: '请选择技术的先进性!' }],
+              initialValue: this.stringify(initialData.progressiveness)
+            })(
+              <Select placeholder="请选择技术的先进性">
+                <Option value="1">填补了世界空白</Option>
+                <Option value="2">填补了国内空白</Option>
+                <Option value="3">国家级领先技术</Option>
+                <Option value="4">省域级领先技术</Option>
+                <Option value="5">市域级领先技术</Option>
+                <Option value="6">先进性方面与类似技术相差不大</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="创新性" {...formItemLayout}>
+            {getFieldDecorator('innovativeness', {
+              rules: [{ required: true, message: '请选择技术的创新性!' }],
+              initialValue: this.stringify(initialData.innovativeness)
+            })(
+              <Select placeholder="请选择技术的创新性">
+                <Option value="1">具有突破性创新</Option>
+                <Option value="2">非突破性创新,但功效有显著提升</Option>
+                <Option value="3">非突破性创新,但功效有一定提升</Option>
+                <Option value="4">有类似技术且功效差不多</Option>
+                <Option value="5">功效差于现行类似技术</Option>
+                <Option value="6">功效无法判定</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="成熟度" {...formItemLayout}>
+            {getFieldDecorator('ripeness', {
+              rules: [{ required: true, message: '请选择技术的成熟度!' }],
+              initialValue: this.stringify(initialData.ripeness)
+            })(
+              <Select placeholder="请选择技术的成熟度">
+                <Option value="1">技术成熟并已产业化多年</Option>
+                <Option value="2">技术成熟,已产业化一年以下</Option>
+                <Option value="3">技术成熟,已成功进行试生产,即将产业化</Option>
+                <Option value="4">技术已研发完成,尚未投入生产</Option>
+                <Option value="5">技术处于中试阶段</Option>
+                <Option value="6">仅为概念或早期阶段、小试阶段</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="替代性" {...formItemLayout}>
+            {getFieldDecorator('alternatives', {
+              rules: [{ required: true, message: '请选择技术的替代性!' }],
+              initialValue: this.stringify(initialData.alternatives)
+            })(
+              <Select placeholder="请选择技术的替代性">
+                <Option value="1">具有不可替代性</Option>
+                <Option value="2">与其他类似技术相比具有优势,较难被替代</Option>
+                <Option value="3">有其他相同的替代技术</Option>
+                <Option value="4">有其他更好的替代技术</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="技术防御力" {...formItemLayout}>
+            {getFieldDecorator('defensive', {
+              rules: [{ required: true, message: '请选择技术的防御力!' }],
+              initialValue: this.stringify(initialData.defensive)
+            })(
+              <Select placeholder="请选择技术的防御力">
+                <Option value="1">技术复杂程度高,所需资金量大</Option>
+                <Option value="2">技术复杂程度较高,所需资金量较大</Option>
+                <Option value="3">技术复杂程度较高,但所需资金量不大</Option>
+                <Option value="4">技术复杂程度不高,所需资金量较大</Option>
+                <Option value="5">技术复杂程度不高,所需资金量不大</Option>
+                <Option value="6">技术简单,所需资金量小</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="技术领域发展前景" {...formItemLayout}>
+            {getFieldDecorator('prospect', {
+              rules: [{ required: true, message: '请选择技术领域发展前景!' }],
+              initialValue: this.stringify(initialData.prospect)
+            })(
+              <Select placeholder="请选择技术领域发展前景">
+                <Option value="1">技术产品所属领域发展前景好</Option>
+                <Option value="2">技术产品所属领域发展前景较好</Option>
+                <Option value="3">技术产品所属领域发展前景一般</Option>
+                <Option value="4">技术产品所属领域发展前景较差</Option>
+                <Option value="5">技术产品所属领域发展前景差</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="供求关系" {...formItemLayout}>
+            {getFieldDecorator('supplyAndDemand', {
+              rules: [{ required: true, message: '请选择技术的供求关系!' }],
+              initialValue: this.stringify(initialData.supplyAndDemand)
+            })(
+              <Select placeholder="请选择技术的供求关系">
+                <Option value="1">解决了行业的必需技术问题,为广大厂商所需要,具有一定垄断性</Option>
+                <Option value="2">解决了行业的重要技术问题,供不应求</Option>
+                <Option value="3">解决了行业一般技术问题,形成一定需求</Option>
+                <Option value="4">解决了行业非重要技术问题,形成少量需求</Option>
+                <Option value="5">解决了生产中某一附加技术问题或改进了某一技术环节,对于整体生产环节的改进有一定作用,形成一定潜在需求</Option>
+                <Option value="6">解决了生产中某一附加技术问题或改进了某一技术环节,对于整体生产环节的改进并未产生作用</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="产品应用范围" {...formItemLayout}>
+            {getFieldDecorator('rangeOfApplication', {
+              rules: [{ required: true, message: '请选择技术的应用范围!' }],
+              initialValue: this.stringify(initialData.rangeOfApplication)
+            })(
+              <Select placeholder="请选择技术的应用范围">
+                <Option value="1">技术产品应用于全国</Option>
+                <Option value="2">技术产品应用于省域或省级区域</Option>
+                <Option value="3">技术产品应用范围较小</Option>
+                <Option value="4">技术产品应用范围非常小</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="遭他人模仿可能性" {...formItemLayout}>
+            {getFieldDecorator('imitable', {
+              rules: [{ required: true, message: '请选择技术的模仿可能性!' }],
+              initialValue: this.stringify(initialData.imitable)
+            })(
+              <Select placeholder="请选择技术的模仿可能性">
+                <Option value="1">较低</Option>
+                <Option value="2">中等</Option>
+                <Option value="3">高</Option>
+              </Select>
+              )}
+          </FormItem>
+          <FormItem label="独立获利能力" {...formItemLayout}>
+            {getFieldDecorator('profitability', {
+              rules: [{ required: true, message: '请选择技术的独立获利能力!' }],
+              initialValue: this.stringify(initialData.profitability)
+            })(
+              <Select placeholder="请选择技术的独立获利能力">
+                <Option value="1">可以单独应用于产品,发挥技术作用</Option>
+                <Option value="2">需要与其他相关技术或专利一起应用于产品,共同发挥作用,且占主要作用</Option>
+                <Option value="3">需要与其他相关技术或专利一起应用于产品,共同发挥作用,只起次要作用</Option>
+              </Select>
+              )}
+          </FormItem>
+        </Form>
+        <div className="steps-action">
+          <Button type="primary" onClick={() => this.next()}>保存,下一步</Button>
+          <Button style={{ marginLeft: 8 }} onClick={() => this.prev()}>上一步</Button>
+        </div>
+      </Spin>
+    )
+  },
+}));
+
+export default EvaluateStep3;

+ 0 - 0
js/component/account/services/evaluate/steps/step3.less


+ 178 - 0
js/component/account/services/evaluate/steps/step4.jsx

@@ -0,0 +1,178 @@
+import React from 'react';
+import { Spin, Form, Button, message, Radio, Table, InputNumber } from 'antd';
+import './step4.less';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+
+const RadioButton = Radio.Button;
+const RadioGroup = Radio.Group;
+const FormItem = Form.Item;
+
+const formItemLayout = {
+  labelCol: { span: 4 },
+  wrapperCol: { span: 10 },
+};
+
+const now = new Date();
+
+const EvaluateStep4 = Form.create({})(React.createClass({
+  getInitialState() {
+    return {
+      loading: false,
+      initialData: {},
+      hasIncome: '1',
+      dataSource: []
+    };
+  },
+  componentWillMount() {
+    let initialData = this.props.data || {}, dataSource = [];
+    if (initialData.incomes) {
+      dataSource = initialData.incomes;
+    } else {
+      let step1 = this.props.record && this.props.record[0];
+      let year = Number(step1.benchmarkDate.split('-')[0]) || now.getFullYear();
+      for (let i = 1; i < 4; i++) {
+        dataSource.push({
+          year: year - i,
+          income: '',
+          profit: ''
+        })
+      }
+    }
+    this.state.dataSource = dataSource;
+    this.state.initialData = initialData;
+    this.state.hasIncome = initialData.hasIncome || '1'
+  },
+  next() {
+    if (this.state.loading) {
+      return;
+    }
+    this.props.form.validateFields((err, values) => {
+      if (!err) {
+        this.setState({
+          loading: true
+        })
+        let data = {
+          id: this.props.id,
+          hasIncome: values.hasIncome
+        }
+        if (data.hasIncome == 2) {
+          let incomes = [], year = 0;
+          for (let i = 0; i < 3; i++) {
+            year = this.state.dataSource[i].year;
+            incomes.push({
+              year: year,
+              income: values['income' + year],
+              profit: values['profit' + year]
+            })
+          }
+          data.incomes = JSON.stringify(incomes);
+        }
+        $.ajax({
+          url: globalConfig.context + '/api/user/evaluate/step4',
+          method: 'post',
+          data: data
+        }).done(function (res) {
+          if (res.error && res.error.length) {
+            message.error(res.error[0].message)
+          } else {
+            if (this.props.next) {
+              this.props.next(values);
+            }
+          }
+        }.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.setState({
+      hasIncome: e.target.value,
+    });
+  },
+  tableCols() {
+    const { getFieldDecorator } = this.props.form;
+    return [
+      {
+        title: '年份',
+        dataIndex: 'year',
+        key: 'year',
+        render: (text, it) => {
+          return <div>{text}</div>
+        }
+      },
+      {
+        title: '营收(元)',
+        dataIndex: 'income',
+        key: 'income',
+        render: (text, it) => {
+          return getFieldDecorator('income' + it.year, {
+            initialValue: text,
+            rules: [{ required: true, message: '请输入' + it.year + '营收情况!' }]
+          })(<InputNumber placeholder="请输入营收情况" />);
+        }
+      },
+      {
+        title: '利润率(%)',
+        dataIndex: 'profit',
+        key: 'profit',
+        render: (text, it) => {
+          return getFieldDecorator('profit' + it.year, {
+            initialValue: text,
+            rules: [{ required: true, message: '请输入' + it.year + '利润率!' }]
+          })(<InputNumber placeholder="请输入利润率" />);
+        }
+      },
+    ]
+  },
+  stringify(val) {
+    return val && String(val)
+  },
+  render() {
+    let { loading, initialData } = this.state;
+    const { getFieldDecorator } = this.props.form;
+    return (
+      <Spin spinning={loading}>
+        <div style={{ marginBottom: 10 }}>若该技术曾被应用于生产活动并产生收益,可选择【有历史收入】,若否,请选择【无历史收入】。</div>
+        <Form className="steps-form">
+          <FormItem label="是否有历史收入" {...formItemLayout}>
+            {getFieldDecorator('hasIncome', {
+              initialValue: this.stringify(initialData.hasIncome) || '1'
+            })(
+              <RadioGroup size="large" onChange={this.onRadioChange}>
+                <RadioButton value="1">无历史收入</RadioButton>
+                <RadioButton value="2">有历史收入</RadioButton>
+              </RadioGroup>
+              )}
+          </FormItem>
+          {
+            this.state.hasIncome == 1 ?
+              <div style={{ marginTop: 10 }}>无历史收入, 请直接进入下一步</div> :
+              <Table pagination={false} rowKey="year" columns={this.tableCols()} dataSource={this.state.dataSource} />
+          }
+        </Form>
+        <div className="steps-action">
+          <Button type="primary" onClick={() => this.next()}>保存,下一步</Button>
+          <Button style={{ marginLeft: 8 }} onClick={() => this.prev()}>上一步</Button>
+        </div>
+      </Spin>
+    )
+  },
+}));
+
+export default EvaluateStep4;

+ 3 - 0
js/component/account/services/evaluate/steps/step4.less

@@ -0,0 +1,3 @@
+.ant-input-number {
+  width: 160px;
+}

+ 43 - 0
js/component/account/services/evaluate/steps/step5.jsx

@@ -0,0 +1,43 @@
+import React from 'react';
+import { Spin, Form, Button } from 'antd';
+import './step5.less';
+const FormItem = Form.Item;
+
+const formItemLayout = {
+  labelCol: { span: 4 },
+  wrapperCol: { span: 10 },
+};
+
+const EvaluateStep5 = Form.create({})(React.createClass({
+  getInitialState() {
+    return {
+      loading: false
+    };
+  },
+  componentWillMount() {
+  },
+  next() {
+    if (this.props.next) {
+      this.props.next();
+    }
+  },
+  prev() {
+    if (this.props.prev) {
+      this.props.prev();
+    }
+  },
+  render() {
+    let {loading} = this.state;
+    return (
+      <Spin spinning={loading}>
+        <div>Step 5</div>
+        <div className="steps-action">
+          <Button type="primary" onClick={() => this.next()}>保存,下一步</Button>
+          <Button style={{ marginLeft: 8 }} onClick={() => this.prev()}>上一步</Button>
+        </div>
+      </Spin>
+    )
+  },
+}));
+
+export default EvaluateStep5;

+ 0 - 0
js/component/account/services/evaluate/steps/step5.less


+ 43 - 0
js/component/account/services/evaluate/steps/step6.jsx

@@ -0,0 +1,43 @@
+import React from 'react';
+import { Spin, Form, Button } from 'antd';
+import './step6.less';
+const FormItem = Form.Item;
+
+const formItemLayout = {
+  labelCol: { span: 4 },
+  wrapperCol: { span: 10 },
+};
+
+const EvaluateStep6 = Form.create({})(React.createClass({
+  getInitialState() {
+    return {
+      loading: false
+    };
+  },
+  componentWillMount() {
+  },
+  next() {
+    if (this.props.next) {
+      this.props.next();
+    }
+  },
+  prev() {
+    if (this.props.prev) {
+      this.props.prev();
+    }
+  },
+  render() {
+    let {loading} = this.state;
+    return (
+      <Spin spinning={loading}>
+        <div>Step 6</div>
+        <div className="steps-action">
+          <Button type="primary" onClick={() => this.next()}>保存,下一步</Button>
+          <Button style={{ marginLeft: 8 }} onClick={() => this.prev()}>上一步</Button>
+        </div>
+      </Spin>
+    )
+  },
+}));
+
+export default EvaluateStep6;

+ 0 - 0
js/component/account/services/evaluate/steps/step6.less


+ 43 - 0
js/component/account/services/evaluate/steps/step7.jsx

@@ -0,0 +1,43 @@
+import React from 'react';
+import { Spin, Form, Button } from 'antd';
+import './step7.less';
+const FormItem = Form.Item;
+
+const formItemLayout = {
+  labelCol: { span: 4 },
+  wrapperCol: { span: 10 },
+};
+
+const EvaluateStep7 = Form.create({})(React.createClass({
+  getInitialState() {
+    return {
+      loading: false
+    };
+  },
+  componentWillMount() {
+  },
+  next() {
+    if (this.props.next) {
+      this.props.next();
+    }
+  },
+  prev() {
+    if (this.props.prev) {
+      this.props.prev();
+    }
+  },
+  render() {
+    let {loading} = this.state;
+    return (
+      <Spin spinning={loading}>
+        <div>Step 7</div>
+        <div className="steps-action">
+          <Button type="primary" onClick={() => this.next()}>保存,下一步</Button>
+          <Button style={{ marginLeft: 8 }} onClick={() => this.prev()}>上一步</Button>
+        </div>
+      </Spin>
+    )
+  },
+}));
+
+export default EvaluateStep7;

+ 0 - 0
js/component/account/services/evaluate/steps/step7.less


+ 43 - 0
js/component/account/services/evaluate/steps/step8.jsx

@@ -0,0 +1,43 @@
+import React from 'react';
+import { Spin, Form, Button, message } from 'antd';
+import './step8.less';
+const FormItem = Form.Item;
+
+const formItemLayout = {
+  labelCol: { span: 4 },
+  wrapperCol: { span: 10 },
+};
+
+const EvaluateStep8 = Form.create({})(React.createClass({
+  getInitialState() {
+    return {
+      loading: false
+    };
+  },
+  componentWillMount() {
+  },
+  next() {
+    if (this.props.next) {
+      this.props.next();
+    }
+  },
+  prev() {
+    if (this.props.prev) {
+      this.props.prev();
+    }
+  },
+  render() {
+    let {loading} = this.state;
+    return (
+      <Spin spinning={loading}>
+        <div>Step 8</div>
+        <div className="steps-action">
+          <Button type="primary" onClick={() => message.success('评估完成!')}>查看评估报告</Button>
+          <Button style={{ marginLeft: 8 }} onClick={() => this.prev()}>上一步</Button>
+        </div>
+      </Spin>
+    )
+  },
+}));
+
+export default EvaluateStep8;

+ 0 - 0
js/component/account/services/evaluate/steps/step8.less


+ 11 - 1
js/component/account/services/leftTab.jsx

@@ -13,7 +13,8 @@ const LeftTab = React.createClass({
             keyList: [
                 { key: 'sub1', value: ['contract', 'patent', 'copyright', 'intellectual'] },
                 { key: 'sub2', value: ['standard', 'activity', 'activityCostList', 'orgTechCenter', 'techProduct', 'ratepay', 'finance', 'achievement', 'honorList', 'annualReport', 'cognizance', 'companyDetail'] },
-                { key: 'sub3', value: ['technology'] }
+                { key: 'sub3', value: ['technology'] },
+                { key: 'sub4', value: ['evaluate'] }
             ]
         };
     },
@@ -35,6 +36,10 @@ const LeftTab = React.createClass({
                 });
             });
             this.state.current = theKey;
+            if(theKey=='createEvaluate') {
+                this.state.subKey = 'sub4'
+                this.state.current = 'evaluate';
+            }
         };
     },
     render() {
@@ -103,6 +108,11 @@ const LeftTab = React.createClass({
                         申报管理
                     </Menu.Item>
                 </SubMenu>
+                <SubMenu key="sub4" title={<span>科技评估</span>}>
+                    <Menu.Item key="evaluate">
+                        科技评估管理
+                    </Menu.Item>
+                </SubMenu>
             </Menu>
         );
     }