Selaa lähdekoodia

高企申请开始

yee 8 vuotta sitten
vanhempi
commit
73d0be4298
38 muutettua tiedostoa jossa 2862 lisäystä ja 421 poistoa
  1. 10 30
      js/component/account/services/activity.jsx
  2. 2 4
      js/component/account/services/activity.less
  3. 3 2
      js/component/account/services/activityCostList.jsx
  4. 680 0
      js/component/account/services/annualReport.jsx
  5. 42 0
      js/component/account/services/annualReport.less
  6. 541 0
      js/component/account/services/cognizance.jsx
  7. 7 1
      js/component/account/services/content.jsx
  8. 20 16
      js/component/account/services/finance.jsx
  9. 6 5
      js/component/account/services/honorList.jsx
  10. 7 1
      js/component/account/services/leftTab.jsx
  11. 40 14
      js/component/account/services/orgTechCenter.jsx
  12. 32 2
      js/component/account/services/ratepay.jsx
  13. 3 2
      js/component/account/services/techProduct.jsx
  14. 327 102
      js/component/account/set/hrSituation.jsx
  15. 15 0
      js/component/dataDic.js
  16. 68 8
      js/component/groupCertify/personal.jsx
  17. 7 3
      js/component/manageCenter/servicesManage/highTech/fosterDesc/achievement.jsx
  18. 0 1
      js/component/manageCenter/servicesManage/highTech/fosterDesc/activity.jsx
  19. 0 51
      js/component/manageCenter/servicesManage/highTech/fosterDesc/activity.less
  20. 3 2
      js/component/manageCenter/servicesManage/highTech/fosterDesc/activityCostList.jsx
  21. 685 0
      js/component/manageCenter/servicesManage/highTech/fosterDesc/annualReport.jsx
  22. 42 0
      js/component/manageCenter/servicesManage/highTech/fosterDesc/annualReport.less
  23. 41 13
      js/component/manageCenter/servicesManage/highTech/fosterDesc/content.jsx
  24. 76 0
      js/component/manageCenter/servicesManage/highTech/fosterDesc/content.less
  25. 27 17
      js/component/manageCenter/servicesManage/highTech/fosterDesc/finance.jsx
  26. 18 11
      js/component/manageCenter/servicesManage/highTech/fosterDesc/honorList.jsx
  27. 38 5
      js/component/manageCenter/servicesManage/highTech/fosterDesc/hrSituation.jsx
  28. 13 7
      js/component/manageCenter/servicesManage/highTech/fosterDesc/innovationAbility.jsx
  29. 0 1
      js/component/manageCenter/servicesManage/highTech/fosterDesc/intellectual.jsx
  30. 0 57
      js/component/manageCenter/servicesManage/highTech/fosterDesc/intellectual.less
  31. 46 17
      js/component/manageCenter/servicesManage/highTech/fosterDesc/orgTechCenter.jsx
  32. 32 2
      js/component/manageCenter/servicesManage/highTech/fosterDesc/ratepay.jsx
  33. 0 1
      js/component/manageCenter/servicesManage/highTech/fosterDesc/standard.jsx
  34. 0 32
      js/component/manageCenter/servicesManage/highTech/fosterDesc/standard.less
  35. 12 11
      js/component/manageCenter/servicesManage/highTech/fosterDesc/techProduct.jsx
  36. 1 0
      js/component/manageCenter/servicesManage/highTech/fosterDesc/techProduct.less
  37. 1 0
      js/component/manageCenter/servicesManage/highTech/highTechFoster.jsx
  38. 17 3
      js/component/tools.js

+ 10 - 30
js/component/account/services/activity.jsx

@@ -44,31 +44,9 @@ const ActivityDesc = React.createClass({
                 technologyInnovation: this.state.technologyInnovation,
                 achievement: this.state.achievement,
                 participant: this.state.participant,
-                proofUrl: this.state.proofUrl
-            },
-            success: function (data) {
-                if (data.data) {
-                    this.setState({
-                        id: this.props.data.id,
-                        activityName: this.state.activityName,
-                        activityNumber: this.state.activityNumber,
-                        startDateFormattedDate: this.state.startDateFormattedDate,
-                        endDateFormattedDate: this.state.endDateFormattedDate,
-                        techField: this.state.techField,
-                        technicalSource: this.state.technicalSource,
-                        intellectualPropertyNumber: this.state.targetKeys,
-                        budget: this.state.budget,
-                        firstYearExpenditure: this.state.firstYearExpenditure,
-                        secondYearExpenditure: this.state.secondYearExpenditure,
-                        thirdYearExpenditure: this.state.thirdYearExpenditure,
-                        implement: this.state.implement,
-                        technologyInnovation: this.state.technologyInnovation,
-                        achievement: this.state.achievement
-                    });
-                } else if (data.error.length && data.error[0].message) {
-                    message.warning(data.error[0].message);
-                }
-            }.bind(this),
+                proofUrl: this.state.proofUrl,
+                projectMode: this.state.projectMode
+            }
         }).done(function (data) {
             if (!data.error.length) {
                 message.success('保存成功!');
@@ -109,6 +87,7 @@ const ActivityDesc = React.createClass({
             this.state.technologyInnovation = nextProps.data.technologyInnovation;
             this.state.achievement = nextProps.data.achievement;
             this.state.mockData = nextProps.data.mockData;
+            this.state.projectMode = String(nextProps.data.projectMode);
         };
     },
     intellectualChange(nextTargetKeys, direction, moveKeys) {
@@ -177,7 +156,7 @@ const ActivityDesc = React.createClass({
                         <div className="half-div">
                             <p>参与人员:</p>
                             <InputNumber value={this.state.participant}
-                                onChange={(e) => { this.setState({ participant: e.target.value }); }} />
+                                onChange={(e) => { this.setState({ participant: e }); }} />
                         </div>
                         <div style={{ marginTop: '10px' }}>
                             <p>知识产权编号:</p>
@@ -260,9 +239,9 @@ const ActivityDesc = React.createClass({
                             </div>
                         </div>
                         <Select style={{ width: 120 }}
-                        placeholder='请选择立项类型'
-                        value={this.state.lixiang}
-                        onChange={(e)=>{this.setState({lixiang:e});}}>
+                            placeholder='请选择立项类型'
+                            value={this.state.projectMode}
+                            onChange={(e) => { this.setState({ projectMode: e }); }}>
                             <Select.Option value='0'>内部立项</Select.Option>
                             <Select.Option value='1'>外部立项</Select.Option>
                         </Select>
@@ -383,7 +362,8 @@ const Activity = React.createClass({
                     signDate: thisdata.signDate,
                     sortNumber: thisdata.sortNumber,
                     startDateFormattedDate: thisdata.startDateFormattedDate,
-                    endDateFormattedDate: thisdata.endDateFormattedDate
+                    endDateFormattedDate: thisdata.endDateFormattedDate,
+                    projectMode:thisdata.projectMode
                 });
             };
             this.state.pagination.current = data.data.pageNo;

+ 2 - 4
js/component/account/services/activity.less

@@ -25,8 +25,7 @@
 .admin-desc-content {
     .ant-modal-body {
         >div {
-            margin-top: 0px;
-            margin-bottom: 10px;
+            margin-top: 10px;
             p {
                 margin: 6px 0;
             }
@@ -35,8 +34,7 @@
     .half-div {
         width: 50%;
         float: left;
-        margin-top: 0px;
-        margin-bottom: 10px;
+        margin-top: 10px;
         >span {
             display: inline-block;
             width: 100px;

+ 3 - 2
js/component/account/services/activityCostList.jsx

@@ -67,7 +67,8 @@ const ActivityDescFrom = Form.create()(React.createClass({
                         externalAbroadCost: values.externalAbroadCost,
                         enterpriseFiller: values.enterpriseFiller,
                         signDateFormattedDate: values.signDate.format('YYYY-MM-DD'),
-                        sortNumber: values.sortNumber
+                        sortNumber: values.sortNumber,
+                        accountUrl:this.state.accountUrl
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
@@ -275,7 +276,7 @@ const ActivityDescFrom = Form.create()(React.createClass({
                             }
                             if (info.file.status === 'done') {
                                 message.success(`${info.file.name} 文件上传成功!`);
-                                this.state.proofUrl = info.file.response.data;
+                                this.state.accountUrl = info.file.response.data;
                             } else if (info.file.status === 'error') {
                                 message.error(`${info.file.name} 文件上传失败。`);
                             }

+ 680 - 0
js/component/account/services/annualReport.jsx

@@ -0,0 +1,680 @@
+import React from 'react';
+import { Icon, Form, Button, Input, Spin, Table, message, Select, Modal, InputNumber } from 'antd';
+import './annualReport.less';
+import { annualReportStateList } from '../../dataDic.js';
+import { beforeUploadFile, getAnnualReportState } from '../../tools.js';
+import moment from 'moment';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+const AnnualReportDescFrom = Form.create()(React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            yearOption: []
+        };
+    },
+    componentWillMount() {
+        let d = new Date();
+        let _me = this;
+        d = d.getFullYear();
+        for (let i = d; i > d - 20; i--) {
+            _me.state.yearOption.push(
+                <Select.Option value={i.toString()} key={i}>{i}</Select.Option>
+            )
+        };
+    },
+    handleSubmit(e) {
+        e.preventDefault();
+        if (!this.state.year && !this.props.data.year) {
+            message.warning("请选择一个年份!")
+            return;
+        };
+        this.props.form.validateFields((err, values) => {
+            if (!err) {
+                this.props.spinState(true);
+                $.ajax({
+                    method: "POST",
+                    dataType: "json",
+                    crossDomain: false,
+                    url: globalConfig.context + "/techservice/cognizance/disposeAnnualReport",
+                    data: {
+                        id: this.props.data.id,
+                        year: this.state.year || this.props.data.year,
+                        totalTax: values.totalTax,
+                        incomeTaxRelief: values.incomeTaxRelief,
+                        totalExportVolume: values.totalExportVolume,
+                        basicResearchCost: values.basicResearchCost,
+                        state: 0,
+                    }
+                }).done(function (data) {
+                    if (!data.error.length) {
+                        message.success('保存成功!');
+                        this.props.closeModal();
+                        this.props.spinState(false);
+                        this.props.form.resetFields();
+                    } else {
+                        message.warning(data.error[0].message);
+                        this.props.spinState(false);
+                    }
+                }.bind(this));
+            }
+        });
+    },
+    render() {
+        const FormItem = Form.Item;
+        const { getFieldDecorator } = this.props.form;
+        //const theData = this.props.detailData;
+        const theData = {
+            id: "thisdata.id",
+            uid: "thisdata.uid",
+            unitName: "thisdata.unitName",
+            orgCode: "thisdata.orgCode",
+            locationProvince: "thisdata.locationProvince",
+            locationCity: "thisdata.locationCity",
+            locationArea: "thisdata.locationArea",
+            certificateNumber: "thisdata.certificateNumber",
+            issuingDate: "thisdata.issuingDate",
+            issuingDateFormattedDate: "thisdata.issuingDateFormattedDate",
+            listed: "thisdata.listed",
+            listedDate: "thisdata.listedDate",
+            listedDateFormattedDate: "thisdata.listedDateFormattedDate",
+            listedType: "thisdata.listedType",
+            stockCode: "thisdata.stockCode",
+            contacts: "thisdata.contacts",
+
+            inventionPatent: "thisdata.inventionPatent",
+            defensePatent: "thisdata.defensePatent",
+            nationalCrop: "thisdata.nationalCrop",
+            newPlantCariety: "thisdata.newPlantCariety",
+            nationalDrug: "thisdata.nationalDrug",
+            chineseMedicine: "thisdata.chineseMedicine",
+            utilityPatent: "thisdata.utilityPatent",
+            circuitDesign: "thisdata.circuitDesign",
+            exteriorPatent: "thisdata.exteriorPatent",
+            softwareWorks: "thisdata.softwareWorks",
+            firmTotal: "thisdata.firmTotal",
+            techTotal: "thisdata.techTotal",
+            newEmployment: "thisdata.newEmployment",
+            graduateNumber: "thisdata.graduateNumber",
+
+            totalRevenue: 123,
+            salesRevenue: 223,
+            netAsset: 333,
+            lastYearRevenue: 224,
+            grossProfit: 334,
+            researchCost: 134,
+            territory: 67,
+            basicResearchCost: 234,
+            totalTax: 234,
+            incomeTaxRelief: 21,
+            totalExportVolume: 56
+        }
+        const formItemLayout = {
+            labelCol: { span: 0 },
+            wrapperCol: { span: 20 },
+        };
+        const _me = this;
+        return (
+            <Form onSubmit={this.handleSubmit} className="annualReport-form">
+                <div className="activityCost-title"><span>年份: </span>
+                    {
+                        this.props.data.year ? <span>{this.props.data.year}</span> :
+                            <Select placeholder="请选择年份" style={{ width: 200 }}
+                                onSelect={(e, n) => { this.state.year = e }}>
+                                {this.state.yearOption}
+                            </Select>
+                    }
+                </div>
+                <div className="clearfix" style={{ padding: '0 10px' }}>
+                    <div className="half-item" style={{ marginRight: "50%" }}>
+                        <p className="item-title">企业名称: </p>
+                        <p>{theData.unitName}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">组织机构代码或统一社会信用代码: </p>
+                        <p>{theData.orgCode}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">所属地区: </p>
+                        <p>{theData.location || " "}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">高新技术企业认定证书编号: </p>
+                        <p>{theData.certificateNumber}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">高新技术企业认定时间: </p>
+                        <p>{theData.issuingDateFormattedDate}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">企业是否上市: </p>
+                        <p>{theData.listed == 0 ? "否" : "是"}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">上市时间: </p>
+                        <p>{theData.listedDateFormattedDate}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">上市类型: </p>
+                        <p>
+                            {(() => {
+                                switch (theData.listedType) {
+                                    case 0:
+                                        return "股票型上市公司";
+                                    case 1:
+                                        return "债券型上市公司";
+                                    default:
+                                        return "";
+                                }
+                            })()}
+                        </p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">股票代码: </p>
+                        <p>{theData.stockCode}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">企业联系人: </p>
+                        <p>{theData.contacts}</p>
+                    </div>
+                </div>
+                <div className="activityCost-title"><span>本年度获得的知识产权数: </span></div>
+                <div className="clearfix annualReport-box">
+                    <div className="four-item">
+                        <p className="item-title">发明专利数: </p>
+                        <p>{theData.inventionPatent}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">国防专利数: </p>
+                        <p>{theData.defensePatent}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">国家级农作物品种数: </p>
+                        <p>{theData.nationalCrop}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">植物新品种数: </p>
+                        <p>{theData.newPlantCariety}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">国家新药数: </p>
+                        <p>{theData.nationalDrug}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">国家一级中药保护品种数: </p>
+                        <p>{theData.chineseMedicine}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">实用新型专利数: </p>
+                        <p>{theData.utilityPatent}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">集成电路布图设计专有权数: </p>
+                        <p>{theData.circuitDesign}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">外观设计专利数: </p>
+                        <p>{theData.exteriorPatent}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">软件著作权数: </p>
+                        <p>{theData.softwareWorks}</p>
+                    </div>
+                </div>
+                <div className="activityCost-title"><span>本年度人员情况(人): </span></div>
+                <div className="clearfix annualReport-box">
+                    <div className="four-item">
+                        <p className="item-title">职工总人数: </p>
+                        <p>{theData.firmTotal}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">科技人员数: </p>
+                        <p>{theData.techTotal}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">新增就业人数: </p>
+                        <p>{theData.newEmployment}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">高校应届毕业生人数: </p>
+                        <p>{theData.graduateNumber}</p>
+                    </div>
+                </div>
+                <div className="activityCost-title"><span>企业本年度财务状况(万元): </span></div>
+                <div className="clearfix annualReport-box">
+                    <div className="four-item">
+                        <p className="item-title">企业总收入: </p>
+                        <p>{theData.totalRevenue}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">销售收入: </p>
+                        <p>{theData.salesRevenue}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">所有者权益(净资产)合计: </p>
+                        <p>{theData.netAsset}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">高新技术产品(服务)收入:
+                        </p>
+                        <p>
+                            <span>{theData.lastYearRevenue} </span>
+                            {(() => {
+                                let s = (theData.lastYearRevenue / theData.totalRevenue * 100).toFixed(2);
+                                if (s < 50) {
+                                    return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
+                                } else {
+                                    return <span> 占比总收入的{s}%</span>
+                                };
+                            })()}
+                        </p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">利润总额: </p>
+                        <p>{theData.grossProfit}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">研发费用总额:
+                        </p>
+                        <p>
+                            <span>{theData.researchCost} </span>
+                            {(() => {
+                                let s = (theData.researchCost / theData.salesRevenue * 100).toFixed(2);
+                                if (theData.salesRevenue < 5000) {
+                                    if (s < 5) {
+                                        return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
+                                    } else {
+                                        return <span> 占比总收入的{s}%</span>
+                                    };
+                                } else if (5000 < theData.salesRevenue < 20000) {
+                                    if (s < 4) {
+                                        return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
+                                    } else {
+                                        return <span> 占比总收入的{s}%</span>
+                                    };
+                                } else if (theData.salesRevenue >= 20000) {
+                                    if (s < 3) {
+                                        return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
+                                    } else {
+                                        return <span> 占比总收入的{s}%</span>
+                                    };
+                                }
+                            })()}
+                        </p>
+                    </div>
+                    <div className="four-item" style={{ marginRight: '25%' }}>
+                        <p className="item-title">在中国境内研发费用: </p>
+                        <p>{theData.territory}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">纳税总额: </p>
+                        <FormItem
+                            {...formItemLayout}
+                        >
+                            {getFieldDecorator('totalTax', {
+                                rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                                initialValue: theData.totalTax
+                            })(
+                                <InputNumber />
+                                )}
+                        </FormItem>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">高企所得税减免额: </p>
+                        <FormItem
+                            {...formItemLayout}
+                        >
+                            {getFieldDecorator('incomeTaxRelief', {
+                                rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                                initialValue: theData.incomeTaxRelief
+                            })(
+                                <InputNumber />
+                                )}
+                        </FormItem>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">出口创汇总额(人民币): </p>
+                        <FormItem
+                            {...formItemLayout}
+                        >
+                            {getFieldDecorator('totalExportVolume', {
+                                rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                                initialValue: theData.totalExportVolume
+                            })(
+                                <InputNumber />
+                                )}
+                        </FormItem>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">基础研究投入费用: </p>
+                        <FormItem
+                            {...formItemLayout}
+                        >
+                            {getFieldDecorator('basicResearchCost', {
+                                rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                                initialValue: theData.basicResearchCost
+                            })(
+                                <InputNumber />
+                                )}
+                        </FormItem>
+                    </div>
+                </div>
+                <FormItem style={{ marginTop: '20px' }}>
+                    <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
+                    <Button type="ghost" style={{ marginLeft: '20px' }} onClick={this.props.closeModal}>取消</Button>
+                </FormItem>
+            </Form >
+        );
+    },
+}));
+
+const AnnualReportDesc = React.createClass({
+    loadData(v) {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/annualReportDetail",
+            data: {
+                year: this.props.data ? this.props.data.year : (new Date().getFullYear() - 1)
+            }
+        }).done((data) => {
+            if (data.error.length || !data.data || !data.data.list) {
+                message.warning(data.error[0].message);
+                return;
+            };
+            this.state.detailData = {
+                id: thisdata.id,
+                uid: thisdata.uid,
+                unitName: thisdata.unitName,
+                orgCode: thisdata.orgCode,
+                locationProvince: thisdata.locationProvince,
+                locationCity: thisdata.locationCity,
+                locationArea: thisdata.locationArea,
+                location: thisdata.locationProvince + " / " + thisdata.locationCity + " / " + thisdata.locationArea,
+                certificateNumber: thisdata.certificateNumber,
+                issuingDate: thisdata.issuingDate,
+                issuingDateFormattedDate: thisdata.issuingDateFormattedDate,
+                listed: thisdata.listed,
+                listedDate: thisdata.listedDate,
+                listedDateFormattedDate: thisdata.listedDateFormattedDate,
+                listedType: thisdata.listedType,
+                stockCode: thisdata.stockCode,
+                contacts: thisdata.contacts,
+                inventionPatent: thisdata.inventionPatent,
+                defensePatent: thisdata.defensePatent,
+                nationalCrop: thisdata.nationalCrop,
+                newPlantCariety: thisdata.newPlantCariety,
+                nationalDrug: thisdata.nationalDrug,
+                chineseMedicine: thisdata.chineseMedicine,
+                utilityPatent: thisdata.utilityPatent,
+                circuitDesign: thisdata.circuitDesign,
+                exteriorPatent: thisdata.exteriorPatent,
+                softwareWorks: thisdata.softwareWorks,
+                firmTotal: thisdata.firmTotal,
+                techTotal: thisdata.techTotal,
+                newEmployment: thisdata.newEmployment,
+                graduateNumber: thisdata.graduateNumber,
+                totalRevenue: thisdata.totalRevenue,
+                salesRevenue: thisdata.salesRevenue,
+                netAsset: thisdata.netAsset,
+                lastYearRevenue: thisdata.lastYearRevenue,
+                grossProfit: thisdata.grossProfit,
+                researchCost: thisdata.researchCost,
+                territory: thisdata.territory,
+                basicResearchCost: thisdata.basicResearchCost,
+                totalTax: thisdata.totalTax,
+                incomeTaxRelief: thisdata.incomeTaxRelief,
+                totalExportVolume: thisdata.totalExportVolume
+            };
+        }).always(function () {
+            this.setState({
+                loading: false,
+                visible: v
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false
+        };
+    },
+    componentWillReceiveProps(nextProps) {
+        if (nextProps.showDesc) {
+            this.loadData(nextProps.showDesc);
+        };
+    },
+    showModal() {
+        this.setState({
+            visible: true,
+        });
+    },
+    handleOk() {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    spinChange(e) {
+        this.setState({
+            loading: e
+        });
+    },
+    render() {
+        return (
+            <div className="patent-addNew">
+                <Spin spinning={this.state.loading} className='spin-box'>
+                    <Modal title="财务报表信息" visible={this.state.visible}
+                        onOk={this.handleOk} onCancel={this.handleCancel}
+                        width='1000px'
+                        footer=''
+                    >
+                        <AnnualReportDescFrom
+                            data={this.props.data}
+                            detailData={this.state.detailData}
+                            spinState={this.spinChange} closeModal={this.handleCancel} />
+                    </Modal>
+                </Spin>
+            </div>
+        );
+    },
+});
+
+const AnnualReport = React.createClass({
+    loadData(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/annualReport",
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+            }
+        }).done((data) => {
+            if (!data.data || !data.data.list) {
+                if (data.error.length) {
+                    message.warning(data.error[0].message);
+                };
+                return;
+            };
+            for (let i = 0; i < data.data.list.length; i++) {
+                let thisdata = data.data.list[i];
+                this.state.data.push({
+                    key: i,
+                    id: thisdata.id,
+                    uid: thisdata.uid,
+                    createTime: thisdata.createTime,
+                    lastUpdateTime: thisdata.lastUpdateTime,
+                    totalTax: thisdata.totalTax,
+                    incomeTaxRelief: thisdata.incomeTaxRelief,
+                    totalExportVolume: thisdata.totalExportVolume,
+                    year: thisdata.year,
+                    state: thisdata.state,
+                    createTimeFormattedDate: thisdata.createTimeFormattedDate,
+                    lastUpdateTimeFormattedDate: thisdata.lastUpdateTimeFormattedDate
+                });
+            };
+            this.state.pagination.current = data.data.pageNo;
+            this.state.pagination.total = data.data.totalCount;
+            this.setState({
+                dataSource: this.state.data,
+                pagination: this.state.pagination
+            });
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '年份',
+                    dataIndex: 'year',
+                    key: 'year'
+                }, {
+                    title: '创建时间',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate'
+                }, {
+                    title: '最近更新时间',
+                    dataIndex: 'lastUpdateTimeFormattedDate',
+                    key: 'lastUpdateTimeFormattedDate'
+                }, {
+                    title: '年报状态',
+                    dataIndex: 'state',
+                    key: 'state',
+                    render: (text) => {
+                        return getAnnualReportState(text)
+                    }
+                }
+            ],
+            dataSource: []
+        };
+    },
+    componentWillMount() {
+        this.loadData();
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        this.setState({
+            showDesc: true
+        });
+    },
+    delectRow() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            }
+        }
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/deleteAnnualReport",
+            data: {
+                ids: deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData();
+        }.bind(this));
+    },
+    closeDesc(e) {
+        this.state.showDesc = e;
+        this.loadData();
+    },
+    search() {
+        this.loadData();
+    },
+    reset() {
+        this.loadData();
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows,
+                    selectedRowKeys: selectedRowKeys
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    <span>企业年报</span>
+                </div>
+                <div className="user-search">
+                    <p>
+                        <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
+                            onClick={this.tableRowClick}>添加<Icon type="plus" /></Button>
+                        <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                            disabled={!hasSelected}
+                            onClick={this.delectRow}>删除<Icon type="minus" /></Button>
+                    </p>
+                </div>
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}
+                            pagination={this.state.pagination}
+                            rowSelection={rowSelection}
+                            onRowClick={this.tableRowClick} />
+                    </Spin>
+                </div>
+                <AnnualReportDesc
+                    data={this.state.RowData}
+                    showDesc={this.state.showDesc} closeDesc={this.closeDesc} />
+            </div >
+        );
+    }
+});
+
+export default AnnualReport;

+ 42 - 0
js/component/account/services/annualReport.less

@@ -0,0 +1,42 @@
+.annualReport-form {
+    .half-item {
+        >p {
+            line-height: 32px;
+            min-height: 32px;
+            color: #000;
+        }
+        >.item-title {
+            color: #999;
+            font-size: 14px;
+        }
+    }
+    .annualReport-box {
+        background: #eee;
+        padding: 10px;
+        .four-item {
+            float: left;
+            width: 25%;
+            >p {
+                line-height: 32px;
+                min-height: 32px;
+                color: #000;
+            }
+            >.item-title {
+                color: #999;
+                font-size: 14px;
+            }
+        }
+    }
+}
+
+.ant-form {
+    .ant-form-item {
+        .ant-form-item-label {
+            text-align: left;
+            label {
+                font-size: 14px;
+                color: #999;
+            }
+        }
+    }
+}

+ 541 - 0
js/component/account/services/cognizance.jsx

@@ -0,0 +1,541 @@
+import React from 'react';
+import { Icon, Upload, Form, Button, Radio, Input, Spin, Table, message, Select, Modal, DatePicker, Cascader, Transfer, InputNumber } from 'antd';
+import { techFieldList, technicalSourceList } from '../../dataDic.js';
+import { getTechField, getTechnicalSource, beforeUploadFile } from '../../tools.js';
+import './techProduct.less';
+import moment from 'moment';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+const TechProductDescFrom = Form.create()(React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            targetKeys: [],
+            selectedKeys: [],
+            technicalSourceOption: [],
+        };
+    },
+    componentWillMount() {
+        let _me = this;
+        technicalSourceList.map(function (item) {
+            _me.state.technicalSourceOption.push(
+                <Select.Option value={item.value} key={10000 + item.value}>{item.key}</Select.Option>
+            )
+        });
+        this.state.targetKeys = this.props.data.intellectualPropertyNumber;
+    },
+    componentWillReceiveProps(nextProps) {
+        if (nextProps.data) {
+            this.state.targetKeys = nextProps.data.intellectualPropertyNumber;
+        };
+    },
+    handleSubmit(e) {
+        e.preventDefault();
+        this.props.form.validateFields((err, values) => {
+            if (!err) {
+                this.props.spinState(true);
+                $.ajax({
+                    method: "POST",
+                    dataType: "json",
+                    crossDomain: false,
+                    url: globalConfig.context + "/techservice/cognizance/techProduct",
+                    data: {
+                        id: this.props.data.id,
+                        serialNumber: values.serialNumber,
+                        productName: values.productName,
+                        technicalField1: values.techField[0],
+                        technicalField2: values.techField[1],
+                        technicalField3: values.techField[2],
+                        technicalSource: values.technicalSource,
+                        lastYearRevenue: values.lastYearRevenue,
+                        mainProduct: values.mainProduct,
+                        intellectualPropertyNumber: this.state.targetKeys.join(","),
+                        keyTechnology: values.keyTechnology,
+                        competitiveEdge: values.competitiveEdge,
+                        conditionEffect: values.conditionEffect,
+                        accountUrl:this.state.accountUrl
+                    }
+                }).done(function (data) {
+                    if (!data.error.length) {
+                        message.success('保存成功!');
+                        this.props.closeModal();
+                        this.props.form.resetFields();
+                        this.state.targetKeys = [];
+                        this.state.selectedKeys = [];
+                        this.props.spinState(false);
+                    } else {
+                        message.warning(data.error[0].message);
+                        this.props.spinState(false);
+                    }
+                }.bind(this));
+            }
+        });
+    },
+    intellectualChange(nextTargetKeys, direction, moveKeys) {
+        this.setState({ targetKeys: nextTargetKeys });
+    },
+    intellectualSelectChange(sourceSelectedKeys, targetSelectedKeys) {
+        this.setState({ selectedKeys: [...sourceSelectedKeys, ...targetSelectedKeys] });
+    },
+    render() {
+        const FormItem = Form.Item;
+        const { getFieldDecorator } = this.props.form;
+        const theData = this.props.data;
+        const formItemLayout = {
+            labelCol: { span: 10 },
+            wrapperCol: { span: 12 },
+        };
+        const _me = this;
+        return (
+            <Form onSubmit={this.handleSubmit} className="activityCost-form">
+                <div className="clearfix">
+                    <FormItem className="half-item"
+                        {...formItemLayout}
+                        label="编号:ps"
+                    >
+                        {getFieldDecorator('serialNumber', {
+                            rules: [{ required: true, message: '此项为必填项!' }],
+                            initialValue: theData.serialNumber
+                        })(
+                            <Input />
+                            )}
+                    </FormItem>
+                    <FormItem className="half-item"
+                        {...formItemLayout}
+                        label="产品(服务)名称"
+                    >
+                        {getFieldDecorator('productName', {
+                            rules: [{ required: true, message: '此项为必填项!' }],
+                            initialValue: theData.productName
+                        })(
+                            <Input />
+                            )}
+                    </FormItem>
+                </div>
+                <div className="clearfix">
+                    <FormItem className="half-item"
+                        {...formItemLayout}
+                        label="技术来源"
+                    >
+                        {getFieldDecorator('technicalSource', {
+                            rules: [{ required: true, message: '此项为必填项!' }],
+                            initialValue: theData.technicalSource
+                        })(
+                            <Select placeholder="选择技术来源"
+                                onChange={(e) => { this.setState({ technicalSource: e }) }}>
+                                {this.state.technicalSourceOption}
+                            </Select>
+                            )}
+                    </FormItem>
+                    <FormItem className="half-item"
+                        labelCol={{ span: 10 }}
+                        label="上年度销售收入(万元)"
+                    >
+                        {getFieldDecorator('lastYearRevenue', {
+                            rules: [{ type: "number", required: true, message: '此项为必填项!' }],
+                            initialValue: theData.lastYearRevenue ? Number(theData.lastYearRevenue) : 0
+                        })(
+                            <InputNumber />
+                            )}
+                    </FormItem>
+                </div>
+                <FormItem
+                    labelCol={{ span: 5 }}
+                    wrapperCol={{ span: 16 }}
+                    label="技术领域"
+                >
+                    {getFieldDecorator('techField', {
+                        rules: [{ type: "array", required: true, message: '此项为必填项!' }],
+                        initialValue: theData.techField
+                    })(
+                        <Cascader
+                            options={techFieldList}
+                            onChange={(value, selectedOptions) => { this.setState({ techField: value }); console.log(value) }}
+                            placeholder="请选择"
+                            showSearch
+                        />
+                        )}
+                </FormItem>
+                <div className="clearfix">
+                    <FormItem className="half-item"
+                        {...formItemLayout}
+                        label="是否主要产品(服务)"
+                    >
+                        {getFieldDecorator('mainProduct', {
+                            rules: [{ type: "number", required: true, message: '此项为必填项!' }],
+                            initialValue: theData.mainProduct
+                        })(
+                            <Radio.Group>
+                                <Radio value={1}>是</Radio>
+                                <Radio value={0}>否</Radio>
+                            </Radio.Group>
+                            )}
+                    </FormItem>
+                </div>
+                <p>知识产权编号:</p>
+                <Transfer
+                    dataSource={this.props.mockData}
+                    listStyle={{
+                        width: 200,
+                        height: 200,
+                    }}
+                    titles={['未选择', '已选择']}
+                    targetKeys={this.state.targetKeys}
+                    selectedKeys={this.state.selectedKeys}
+                    onChange={this.intellectualChange}
+                    onSelectChange={this.intellectualSelectChange}
+                    render={item => `${item.name}-${item.key}`}
+                />
+                <div className="clearfix">
+                    <FormItem className="half-item"
+                        labelCol={{ span: 0 }}
+                        wrapperCol={{ span: 22 }}
+                    >
+                        <p>关键技术及主要技术指标(限400字)</p>
+                        {getFieldDecorator('keyTechnology', {
+                            rules: [{ required: true, message: '此项为必填项!' }],
+                            initialValue: theData.keyTechnology
+                        })(
+                            <Input type='textarea' rows={6} onChange={(e) => { if (e.target.value.length > 400) { return; } }} />
+                            )}
+                    </FormItem>
+                    <FormItem className="half-item"
+                        labelCol={{ span: 0 }}
+                        wrapperCol={{ span: 22 }}
+                    >
+                        <p>与同类产品(服务)的竞争优势(限400字)</p>
+                        {getFieldDecorator('competitiveEdge', {
+                            rules: [{ required: true, message: '此项为必填项!' }],
+                            initialValue: theData.competitiveEdge
+                        })(
+                            <Input type='textarea' rows={6} onChange={(e) => { if (e.target.value.length > 400) { return; } }} />
+                            )}
+                    </FormItem>
+                    <p style={{ lineHeight: "32px" }}>知识产权获得情况及其对产品(服务)在技术上发挥的支持作用(限400字)*</p>
+                    <FormItem className="half-item"
+                        labelCol={{ span: 0 }}
+                        wrapperCol={{ span: 22 }}
+                    >
+                        {getFieldDecorator('conditionEffect', {
+                            rules: [{ required: true, message: '此项为必填项!' }],
+                            initialValue: theData.conditionEffect
+                        })(
+                            <Input type='textarea' rows={6} onChange={(e) => { if (e.target.value.length > 400) { return; } }} />
+                            )}
+                    </FormItem>
+                </div>
+                <div style={{ width: '50%' }}>
+                    <Upload
+                        name="ratepay"
+                        action={globalConfig.context + "/techservice/cognizance/upload"}
+                        data={{ 'sign': this.props.year + 'proof' }}
+                        beforeUpload={beforeUploadFile}
+                        onChange={(info) => {
+                            if (info.file.status !== 'uploading') {
+                                console.log(info.file, info.fileList);
+                            }
+                            if (info.file.status === 'done') {
+                                message.success(`${info.file.name} 文件上传成功!`);
+                                this.state.accountUrl = info.file.response.data;
+                            } else if (info.file.status === 'error') {
+                                message.error(`${info.file.name} 文件上传失败。`);
+                            }
+                        }}
+                    >
+                        <Button><Icon type="upload" /> 上传台账 </Button>
+                    </Upload>
+                </div>
+                <FormItem style={{ marginTop: '20px' }}>
+                    <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
+                    <Button type="ghost" style={{ marginLeft: '20px' }} onClick={this.props.closeModal}>取消</Button>
+                </FormItem>
+            </Form >
+        );
+    },
+}));
+
+const TechProductDesc = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false
+        };
+    },
+    componentWillReceiveProps(nextProps) {
+        this.state.visible = nextProps.showDesc
+    },
+    showModal() {
+        this.setState({
+            visible: true,
+        });
+    },
+    handleOk() {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    spinChange(e) {
+        this.setState({
+            loading: e
+        });
+    },
+    render() {
+        return (
+            <div className="patent-addNew">
+                <Spin spinning={this.state.loading} className='spin-box'>
+                    <Modal title="上年度高新技术产品(服务)情况表" visible={this.state.visible}
+                        onOk={this.handleOk} onCancel={this.handleCancel}
+                        width='800px'
+                        footer=''
+                    >
+                        <TechProductDescFrom data={this.props.data} mockData={this.props.mockData}
+                            spinState={this.spinChange} closeModal={this.handleCancel} />
+                    </Modal>
+                </Spin>
+            </div>
+        );
+    },
+});
+
+const TechProduct = React.createClass({
+    loadData(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true
+        });
+        $.when($.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/techProductList",
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize
+            }
+        }), $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/intellectualList",
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: 99,
+            }
+        })).done((data1, data2) => {
+            let data = data1[0];
+            let intellectualList = data2[0];
+            if (data.error.length || !data.data || !data.data.list) {
+                message.warning(data.error[0].message);
+                return;
+            };
+            if (intellectualList.error.length || !intellectualList.data || !intellectualList.data.list) {
+                message.warning(intellectualList.error[0].message);
+                return;
+            };
+            let theArr = [];
+            for (let i = 0; i < intellectualList.data.list.length; i++) {
+                theArr.push({
+                    key: intellectualList.data.list[i].intellectualPropertyNumber,
+                    name: intellectualList.data.list[i].intellectualPropertyName
+                });
+            };
+            this.state.mockData = theArr;
+            for (let i = 0; i < data.data.list.length; i++) {
+                let thisdata = data.data.list[i];
+                this.state.data.push({
+                    key: i,
+                    id: thisdata.id,
+                    uid: thisdata.uid,
+
+                    mockData: this.state.mockData,
+
+                    serialNumber: thisdata.serialNumber,
+                    productName: thisdata.productName,
+
+                    techField: [Number(thisdata.technicalField1), Number(thisdata.technicalField2), Number(thisdata.technicalField3)],
+                    technicalField: getTechField(thisdata.technicalField1, thisdata.technicalField2, thisdata.technicalField3),
+                    technicalField1: thisdata.technicalField1,
+                    technicalField2: thisdata.technicalField2,
+                    technicalField3: thisdata.technicalField3,
+
+                    technicalSource: String(thisdata.technicalSource),
+                    lastYearRevenue: thisdata.lastYearRevenue,
+                    mainProduct: thisdata.mainProduct,
+
+                    PropertyNumber: thisdata.intellectualPropertyNumber,
+                    intellectualPropertyNumber: thisdata.intellectualPropertyNumber ? thisdata.intellectualPropertyNumber.split(",") : [],
+
+                    keyTechnology: thisdata.keyTechnology,
+                    competitiveEdge: thisdata.competitiveEdge,
+                    conditionEffect: thisdata.conditionEffect,
+                    year: thisdata.year,
+                    createTime: thisdata.createTime,
+                });
+            };
+            this.state.pagination.current = data.data.pageNo;
+            this.state.pagination.total = data.data.totalCount;
+            this.setState({
+                dataSource: this.state.data,
+                pagination: this.state.pagination
+            });
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '产品编号',
+                    dataIndex: 'serialNumber',
+                    key: 'serialNumber'
+                }, {
+                    title: '产品(服务)名称',
+                    dataIndex: 'productName',
+                    key: 'productName'
+                }, {
+                    title: '技术领域',
+                    dataIndex: 'technicalField',
+                    key: 'technicalField'
+                }, {
+                    title: '技术来源',
+                    dataIndex: 'technicalSource',
+                    key: 'technicalSource',
+                    render: (text) => { return getTechnicalSource(text) }
+                }, {
+                    title: '上年度销售收入(万元)',
+                    dataIndex: 'lastYearRevenue',
+                    key: 'lastYearRevenue'
+                }, {
+                    title: '是否主要产品(服务)',
+                    dataIndex: 'mainProduct',
+                    key: 'mainProduct',
+                    render: (text) => { if (text == "1") { return '是' } else { return '否' } }
+                }, {
+                    title: '知识产权编号',
+                    dataIndex: 'PropertyNumber',
+                    key: 'PropertyNumber'
+                }
+            ],
+            dataSource: []
+        };
+    },
+    componentWillMount() {
+        this.loadData();
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        this.setState({
+            showDesc: true
+        });
+    },
+    delectRow() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            }
+        }
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/deleteTechProduct",
+            data: {
+                ids: deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData();
+        }.bind(this));
+    },
+    closeDesc(e) {
+        this.state.showDesc = e;
+        this.loadData();
+    },
+    search() {
+        this.loadData();
+    },
+    reset() {
+        this.loadData();
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows,
+                    selectedRowKeys: selectedRowKeys
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    <span>上年度高新技术产品(服务)情况表</span>
+                </div>
+                <div className="user-search">
+                    <p>
+                        <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
+                            onClick={this.tableRowClick}>添加<Icon type="plus" /></Button>
+                        <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                            disabled={!hasSelected}
+                            onClick={this.delectRow}>删除<Icon type="minus" /></Button>
+                    </p>
+                </div>
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}
+                            pagination={this.state.pagination}
+                            rowSelection={rowSelection}
+                            onRowClick={this.tableRowClick} />
+                    </Spin>
+                </div>
+                <TechProductDesc data={this.state.RowData}
+                    mockData={this.state.mockData}
+                    showDesc={this.state.showDesc} closeDesc={this.closeDesc} />
+            </div >
+        );
+    }
+});
+
+export default TechProduct;

+ 7 - 1
js/component/account/services/content.jsx

@@ -13,6 +13,8 @@ import Finance from './finance';
 import Achievement from './achievement';
 import HonorList from './honorList';
 import OrgTechCenter from './orgTechCenter';
+import AnnualReport from './annualReport';
+import Cognizance from './cognizance';
 
 const Content = React.createClass({
     getInitialState() {
@@ -61,7 +63,11 @@ const Content = React.createClass({
                             case 'honorList':
                                 return <HonorList />;
                             case 'orgTechCenter':
-                                return <OrgTechCenter />
+                                return <OrgTechCenter />;
+                            case 'annualReport':
+                                return <AnnualReport />
+                            case 'cognizance':
+                                return <Cognizance />
                         };
                     })()}
                 </div>

+ 20 - 16
js/component/account/services/finance.jsx

@@ -10,8 +10,6 @@ const FinanceDescFrom = Form.create()(React.createClass({
     getInitialState() {
         return {
             loading: false,
-            targetKeys: [],
-            selectedKeys: [],
             yearOption: [],
         };
     },
@@ -27,6 +25,10 @@ const FinanceDescFrom = Form.create()(React.createClass({
     },
     handleSubmit(e) {
         e.preventDefault();
+        if (!this.state.year && !this.props.data.year) {
+            message.warning("请选择一个年份!")
+            return;
+        };
         this.props.form.validateFields((err, values) => {
             if (!err) {
                 this.props.spinState(true);
@@ -38,17 +40,17 @@ const FinanceDescFrom = Form.create()(React.createClass({
                     data: {
                         id: this.props.data.id,
                         mainBusinessIncome: values.mainBusinessIncome,
-                        managementCost:values.managementCost,
-                        operatingProfit:values.operatingProfit,
-                        variousTax:values.variousTax,
-                        currentAsset:values.currentAsset,
-                        netFixedAsset:values.netFixedAsset,
-                        totalAsset:values.totalAsset,
-                        netAsset:values.netAsset,
-                        grossProfit:values.grossProfit,
-                        netProfit:values.netProfit,
-                        salesRevenue:values.salesRevenue,
-                        year:this.state.year,
+                        managementCost: values.managementCost,
+                        operatingProfit: values.operatingProfit,
+                        variousTax: values.variousTax,
+                        currentAsset: values.currentAsset,
+                        netFixedAsset: values.netFixedAsset,
+                        totalAsset: values.totalAsset,
+                        netAsset: values.netAsset,
+                        grossProfit: values.grossProfit,
+                        netProfit: values.netProfit,
+                        salesRevenue: values.salesRevenue,
+                        year: this.state.year || this.props.data.year,
                         financeUrl: this.state.financeUrl
                     }
                 }).done(function (data) {
@@ -276,7 +278,8 @@ const FinanceDesc = React.createClass({
                         width='800px'
                         footer=''
                     >
-                        <FinanceDescFrom data={this.props.data}
+                        <FinanceDescFrom
+                            data={this.props.data}
                             spinState={this.spinChange} closeModal={this.handleCancel} />
                     </Modal>
                 </Spin>
@@ -298,7 +301,7 @@ const Finance = React.createClass({
             url: globalConfig.context + "/techservice/cognizance/finance",
             data: {
                 pageNo: pageNo || 1,
-                pageSize: this.state.pagination.pageSize
+                pageSize: this.state.pagination.pageSize,
             }
         }).done((data) => {
             if (data.error.length || !data.data || !data.data.list) {
@@ -483,7 +486,8 @@ const Finance = React.createClass({
                             onRowClick={this.tableRowClick} />
                     </Spin>
                 </div>
-                <FinanceDesc data={this.state.RowData}
+                <FinanceDesc
+                    data={this.state.RowData}
                     showDesc={this.state.showDesc} closeDesc={this.closeDesc} />
             </div >
         );

+ 6 - 5
js/component/account/services/honorList.jsx

@@ -25,6 +25,7 @@ const HonorListDescFrom = Form.create()(React.createClass({
                     data: {
                         id: this.props.data.id,
                         name: values.name,
+                        issuingMechanism: values.issuingMechanism,
                         issuingTimeFormattedDate: values.issuingTimeFormattedDate.format("YYYY-MM-DD"),
                         enclosureUrl: this.state.enclosureUrl
                     }
@@ -80,9 +81,9 @@ const HonorListDescFrom = Form.create()(React.createClass({
                         {...formItemLayout}
                         label="发证机构"
                     >
-                        {getFieldDecorator('fazhengjigou', {
+                        {getFieldDecorator('issuingMechanism', {
                             rules: [{ required: true, message: '此项为必填项!' }],
-                            initialValue: theData.fazhengjigou
+                            initialValue: theData.issuingMechanism
                         })(
                             <Input />
                             )}
@@ -198,7 +199,7 @@ const HonorList = React.createClass({
                     issuingTime: thisdata.issuingTime,
                     enclosureUrl: thisdata.enclosureUrl,
                     issuingTimeFormattedDate: thisdata.issuingTimeFormattedDate,
-                    fazhengjigou: thisdata.fazhengjigou
+                    issuingMechanism: thisdata.issuingMechanism
                 });
             };
             this.state.pagination.current = data.data.pageNo;
@@ -241,8 +242,8 @@ const HonorList = React.createClass({
                     key: 'issuingTimeFormattedDate'
                 }, {
                     title: '发证机构',
-                    dataIndex: 'fazhengjigou',
-                    key: 'fazhengjigou'
+                    dataIndex: 'issuingMechanism',
+                    key: 'issuingMechanism'
                 }, {
                     title: '相关附件',
                     dataIndex: 'enclosureUrl',

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

@@ -12,7 +12,7 @@ const LeftTab = React.createClass({
             subKey: 'sub1',
             keyList: [
                 { key: 'sub1', value: ['patent', 'software', 'intellectual'] },
-                { key: 'sub2', value: ['standard', 'activity', 'activityCostList', 'orgTechCenter', 'techProduct', 'ratepay', 'finance', 'achievement', 'honorList'] },
+                { key: 'sub2', value: ['standard', 'activity', 'activityCostList', 'orgTechCenter', 'techProduct', 'ratepay', 'finance', 'achievement', 'honorList','annualReport'] },
                 { key: 'sub3', value: [] }
             ]
         };
@@ -58,6 +58,9 @@ const LeftTab = React.createClass({
                     </Menu.Item>
                 </SubMenu>
                 <SubMenu key="sub2" title={<span>高企认定</span>}>
+                    <Menu.Item key="cognizance">
+                        高企申请管理
+                    </Menu.Item>
                     <Menu.Item key="standard">
                         标准制定情况
                     </Menu.Item>
@@ -85,6 +88,9 @@ const LeftTab = React.createClass({
                     <Menu.Item key="honorList">
                         企业荣誉及其他证明材料
                     </Menu.Item>
+                    <Menu.Item key="annualReport">
+                        企业年报
+                    </Menu.Item>
                 </SubMenu>
                 <SubMenu key="sub3" title={<span>科技项目申报</span>}>
                 </SubMenu>

+ 40 - 14
js/component/account/services/orgTechCenter.jsx

@@ -21,7 +21,7 @@ const CenterListDescFrom = Form.create()(React.createClass({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/techservice/cognizance/disposeHonor",
+                    url: globalConfig.context + "/techservice/cognizance/disposeCenterDetail",
                     data: {
                         id: this.props.data.id,
                         projectName: values.projectName,
@@ -199,12 +199,12 @@ const CenterList = React.createClass({
                 return;
             };
             this.state.cid = data.data.id;
-            this.state.foundingTime = data.data.foundingTime;
+            this.state.foundingTime = data.data.foundingTimeFormattedDate;
             this.state.principal = data.data.principal;
             this.state.systemCatalog = data.data.systemCatalog;
             this.state.systemUrl = data.data.systemUrl;
             this.state.centerName = data.data.centerName;
-            this.state.beizhu = data.data.beizhu;
+            this.state.comment = data.data.comment;
             this.loadData();
         }).always(function () {
             this.setState({
@@ -330,7 +330,7 @@ const CenterList = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteHonor",
+            url: globalConfig.context + "/techservice/cognizance/deleteOrgTechCenterDetail",
             data: {
                 ids: deletedIds
             }
@@ -350,11 +350,35 @@ const CenterList = React.createClass({
         this.state.showDesc = e;
         this.loadData();
     },
-    search() {
-        this.loadData();
-    },
-    reset() {
-        this.loadData();
+    saveCenterDetail() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/disposeCenter",
+            data: {
+                id:this.state.cid,
+                principal: this.state.principal,
+                systemUrl: this.state.systemUrl,
+                systemCatalog: this.state.systemCatalog,
+                foundingTimeFormattedDate: this.state.foundingTime,
+                comment: this.state.comment,
+                centerName: this.state.centerName
+            }
+        }).done((data) => {
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.loadOrgTechCenterDetail();
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+        });
     },
     render() {
         const rowSelection = {
@@ -370,11 +394,11 @@ const CenterList = React.createClass({
         return (
             <div className="user-content" >
                 <div className="content-title">
-                    <span>技术中心</span>
+                    <span>研发部门</span>
                 </div>
                 <div className="clearfix">
                     <div className="orgTech-item">
-                        <span>中心名称: </span>
+                        <span>研发部门名称: </span>
                         <Input
                             value={this.state.centerName}
                             onChange={(e) => { this.setState({ centerName: e.target.value }); }}
@@ -382,7 +406,8 @@ const CenterList = React.createClass({
                         <span>成立时间: </span>
                         <DatePicker
                             value={moment(this.state.foundingTime)}
-                            onChange={(date, dateString) => { this.setState({ foundingTime: dateString }); }}
+                            allowClear={false}
+                            onChange={(date, dateString) => {this.setState({ foundingTime: dateString }); }}
                         />
                         <span>负责人: </span>
                         <Input
@@ -400,8 +425,8 @@ const CenterList = React.createClass({
                     <div className="orgTech-item">
                         <span>备注: </span>
                         <Input type='textarea' rows={3}
-                            value={this.state.beizhu}
-                            onChange={(e) => { this.setState({ beizhu: e.target.value }); }}
+                            value={this.state.comment}
+                            onChange={(e) => { this.setState({ comment: e.target.value }); }}
                         />
                     </div>
                 </div>
@@ -427,6 +452,7 @@ const CenterList = React.createClass({
                         <Button><Icon type="upload" /> 上传文件 </Button>
                     </Upload>
                 </div>
+                <Button type='primary' onClick={this.saveCenterDetail}>保存</Button>
                 <div className="content-title">
                     <span>产学研情况</span>
                 </div>

+ 32 - 2
js/component/account/services/ratepay.jsx

@@ -24,6 +24,10 @@ const RatepayDescFrom = Form.create()(React.createClass({
     },
     handleSubmit(e) {
         e.preventDefault();
+        if (!this.state.year && !this.props.data.year) {
+            message.warning("请选择一个年份!")
+            return;
+        };
         this.props.form.validateFields((err, values) => {
             if (!err) {
                 this.props.spinState(true);
@@ -41,8 +45,10 @@ const RatepayDescFrom = Form.create()(React.createClass({
                         nonTaxableIncome: values.nonTaxableIncome,
                         taxExemptIncome: values.taxExemptIncome,
                         subsidyIncome: values.subsidyIncome,
-                        year: this.state.year,
+                        year: this.state.year || this.props.data.year,
                         taxReturnUrl: this.state.ratepayUrl,
+                        grossProfit: values.grossProfit,
+                        researchCost: values.researchCost
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
@@ -156,6 +162,28 @@ const RatepayDescFrom = Form.create()(React.createClass({
                             <InputNumber />
                             )}
                     </FormItem>
+                    <FormItem className="half-item"
+                        {...formItemLayout}
+                        label="利润总额(万元)"
+                    >
+                        {getFieldDecorator('grossProfit', {
+                            rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                            initialValue: theData.grossProfit
+                        })(
+                            <InputNumber />
+                            )}
+                    </FormItem>
+                    <FormItem className="half-item"
+                        {...formItemLayout}
+                        label="研发费用(万元)"
+                    >
+                        {getFieldDecorator('researchCost', {
+                            rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                            initialValue: theData.researchCost
+                        })(
+                            <InputNumber />
+                            )}
+                    </FormItem>
                 </div>
                 <div className="hrSituation-roster">
                     <Upload
@@ -270,6 +298,8 @@ const Ratepay = React.createClass({
                     nonTaxableIncome: thisdata.nonTaxableIncome,
                     taxExemptIncome: thisdata.taxExemptIncome,
                     subsidyIncome: thisdata.subsidyIncome,
+                    grossProfit: thisdata.grossProfit,
+                    researchCost: thisdata.researchCost,
                     year: thisdata.year,
                     taxReturnUrl: thisdata.taxReturnUrl
                 });
@@ -329,7 +359,7 @@ const Ratepay = React.createClass({
                     dataIndex: 'taxReturnUrl',
                     key: 'taxReturnUrl',
                     render: (text) => {
-                        <a href="" onClick={()=>{
+                        <a href="" onClick={() => {
                             window.open(globalConfig.context + "/techservice/patent/downloadFile?path=" + text + "&sign=" + "type")
                         }}></a>
                     }

+ 3 - 2
js/component/account/services/techProduct.jsx

@@ -53,7 +53,8 @@ const TechProductDescFrom = Form.create()(React.createClass({
                         intellectualPropertyNumber: this.state.targetKeys.join(","),
                         keyTechnology: values.keyTechnology,
                         competitiveEdge: values.competitiveEdge,
-                        conditionEffect: values.conditionEffect
+                        conditionEffect: values.conditionEffect,
+                        accountUrl:this.state.accountUrl
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
@@ -236,7 +237,7 @@ const TechProductDescFrom = Form.create()(React.createClass({
                             }
                             if (info.file.status === 'done') {
                                 message.success(`${info.file.name} 文件上传成功!`);
-                                this.state.proofUrl = info.file.response.data;
+                                this.state.accountUrl = info.file.response.data;
                             } else if (info.file.status === 'error') {
                                 message.error(`${info.file.name} 文件上传失败。`);
                             }

+ 327 - 102
js/component/account/set/hrSituation.jsx

@@ -1,58 +1,12 @@
 import React from 'react';
-import { Input, InputNumber, Button, Form, Icon, Spin, message, Tabs, Upload } from 'antd';
+import { Input, InputNumber, Button, Form, Icon, Spin, message, Table, Modal, Upload } from 'antd';
 import { beforeUpload } from '../../tools.js';
-import './person.less';
 import './hrSituation.less'
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
 
 
-const PersonFrom = Form.create()(React.createClass({
-    getData() {
-        this.props.spinState(true);
-        $.ajax({
-            method: "get",
-            dataType: "json",
-            url: globalConfig.context + "/api/user/humanResource",
-            data: {
-                year: this.props.year
-            },
-            success: function (data) {
-                if (data.data) {
-                    this.setState({
-                        aboveFifty: data.data.aboveFifty,
-                        belowThirty: data.data.belowThirty,
-                        college: data.data.college,
-                        doctor: data.data.doctor,
-                        firmAbroad: data.data.firmAbroad,
-                        firmCore: data.data.firmCore,
-                        firmForeign: data.data.firmForeign,
-                        firmInService: data.data.firmInService,
-                        firmPartTime: data.data.firmPartTime,
-                        firmTemporary: data.data.firmTemporary,
-                        firmTotal: data.data.firmTotal,
-                        fortyoneToFifty: data.data.fortyoneToFifty,
-                        intermediateTitle: data.data.intermediateTitle,
-                        juniorTitle: data.data.juniorTitle,
-                        master: data.data.master,
-                        seniorMechanic: data.data.seniorMechanic,
-                        seniorTitle: data.data.seniorTitle,
-                        techAbroad: data.data.techAbroad,
-                        techCore: data.data.techCore,
-                        techForeign: data.data.techForeign,
-                        techInService: data.data.techInService,
-                        techPartTime: data.data.techPartTime,
-                        techTemporary: data.data.techTemporary,
-                        techTotal: data.data.techTotal,
-                        thirtyoneToThirtyfour: data.data.thirtyoneToThirtyfour,
-                        undergraduate: data.data.undergraduate
-                    });
-                }
-            }.bind(this),
-        }).always(function () {
-            this.props.spinState(false);
-        }.bind(this));
-    },
+const HrSituationDescFrom = Form.create()(React.createClass({
     getInitialState() {
         return {
             loading: false
@@ -82,15 +36,20 @@ const PersonFrom = Form.create()(React.createClass({
                 message.warning("全体人员结构中年龄一栏人数总和小于等于职工人数!");
                 return;
             };
+            if (values.year) {
+                message.warning("请输入年份!");
+                return;
+            }
             if (!err) {
                 this.props.spinState(true);
                 $.ajax({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/api/user/SaveHumanResource",
+                    url: globalConfig.context + "/techservice/cognizance/updateOrgHumanResource",
                     data: {
-                        year: this.props.year,
+                        id: this.props.data.id,
+                        year: values.data.year,
                         aboveFifty: values.aboveFifty,
                         belowThirty: values.belowThirty,
                         college: values.college,
@@ -118,23 +77,24 @@ const PersonFrom = Form.create()(React.createClass({
                         thirtyoneToThirtyfour: values.thirtyoneToThirtyfour,
                         undergraduate: values.undergraduate,
                         rosterUrl: this.state.rosterUrl,
-                        socialSecurityUrl: this.state.socialSecurityUrl
+                        socialSecurityUrl: this.state.socialSecurityUrl,
+                        neweEmployment: values.neweEmployment,
+                        graduateNumber: values.graduateNumber
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
                         message.success('保存成功!');
+                        this.props.closeModal();
+                        this.props.spinState(false);
+                        this.props.form.resetFields();
                     } else {
                         message.warning(data.error[0].message);
+                        this.props.spinState(false);
                     }
-                }.bind(this)).always(function () {
-                    this.props.spinState(false);
                 }.bind(this));
             }
         });
     },
-    componentWillMount() {
-        this.getData();
-    },
     render() {
         const { getFieldDecorator } = this.props.form;
         const formItemLayout = {
@@ -144,6 +104,18 @@ const PersonFrom = Form.create()(React.createClass({
         const FormItem = Form.Item;
         return (
             <Form onSubmit={this.handleSubmit} className="hrSituation-form">
+                <div className="clearfix">
+                    <FormItem className="half-item"
+                        {...formItemLayout}
+                        label="年份"
+                    >
+                        {getFieldDecorator('year', {
+                            initialValue: this.props.data.year || null
+                        })(
+                            <InputNumber />
+                            )}
+                    </FormItem>
+                </div>
                 <p className="hrSituation-title">总体情况</p>
                 <div className="clearfix">
                     <span className="hrSituation-span">总数(人)</span>
@@ -152,7 +124,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="企业职工"
                     >
                         {getFieldDecorator('firmTotal', {
-                            initialValue: this.state.firmTotal || null
+                            initialValue: this.props.data.firmTotal || null
                         })(
                             <InputNumber />
                             )}
@@ -162,7 +134,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="科技人员"
                     >
                         {getFieldDecorator('techTotal', {
-                            initialValue: this.state.techTotal || null
+                            initialValue: this.props.data.techTotal || null
                         })(
                             <InputNumber />
                             )}
@@ -183,7 +155,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="企业职工"
                     >
                         {getFieldDecorator('firmInService', {
-                            initialValue: this.state.firmInService || null
+                            initialValue: this.props.data.firmInService || null
                         })(
                             <InputNumber />
                             )}
@@ -193,7 +165,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="科技人员"
                     >
                         {getFieldDecorator('techInService', {
-                            initialValue: this.state.techInService || null
+                            initialValue: this.props.data.techInService || null
                         })(
                             <InputNumber />
                             )}
@@ -204,7 +176,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="企业职工"
                     >
                         {getFieldDecorator('firmPartTime', {
-                            initialValue: this.state.firmPartTime || null
+                            initialValue: this.props.data.firmPartTime || null
                         })(
                             <InputNumber />
                             )}
@@ -214,7 +186,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="科技人员"
                     >
                         {getFieldDecorator('techPartTime', {
-                            initialValue: this.state.techPartTime || null
+                            initialValue: this.props.data.techPartTime || null
                         })(
                             <InputNumber />
                             )}
@@ -225,7 +197,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="企业职工"
                     >
                         {getFieldDecorator('firmTemporary', {
-                            initialValue: this.state.firmTemporary || null
+                            initialValue: this.props.data.firmTemporary || null
                         })(
                             <InputNumber />
                             )}
@@ -235,7 +207,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="科技人员"
                     >
                         {getFieldDecorator('techTemporary', {
-                            initialValue: this.state.techTemporary || null
+                            initialValue: this.props.data.techTemporary || null
                         })(
                             <InputNumber />
                             )}
@@ -246,7 +218,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="企业职工"
                     >
                         {getFieldDecorator('firmForeign', {
-                            initialValue: this.state.firmForeign || null
+                            initialValue: this.props.data.firmForeign || null
                         })(
                             <InputNumber />
                             )}
@@ -256,7 +228,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="科技人员"
                     >
                         {getFieldDecorator('techForeign', {
-                            initialValue: this.state.techForeign || null
+                            initialValue: this.props.data.techForeign || null
                         })(
                             <InputNumber />
                             )}
@@ -267,7 +239,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="企业职工"
                     >
                         {getFieldDecorator('firmAbroad', {
-                            initialValue: this.state.firmAbroad || null
+                            initialValue: this.props.data.firmAbroad || null
                         })(
                             <InputNumber />
                             )}
@@ -277,7 +249,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="科技人员"
                     >
                         {getFieldDecorator('techAbroad', {
-                            initialValue: this.state.techAbroad || null
+                            initialValue: this.props.data.techAbroad || null
                         })(
                             <InputNumber />
                             )}
@@ -288,7 +260,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="企业职工"
                     >
                         {getFieldDecorator('firmCore', {
-                            initialValue: this.state.firmCore || null
+                            initialValue: this.props.data.firmCore || null
                         })(
                             <InputNumber />
                             )}
@@ -298,7 +270,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="科技人员"
                     >
                         {getFieldDecorator('techCore', {
-                            initialValue: this.state.techCore || null
+                            initialValue: this.props.data.techCore || null
                         })(
                             <InputNumber />
                             )}
@@ -312,7 +284,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="博士"
                     >
                         {getFieldDecorator('doctor', {
-                            initialValue: this.state.doctor || null
+                            initialValue: this.props.data.doctor || null
                         })(
                             <InputNumber />
                             )}
@@ -322,7 +294,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="硕士"
                     >
                         {getFieldDecorator('master', {
-                            initialValue: this.state.master || null
+                            initialValue: this.props.data.master || null
                         })(
                             <InputNumber />
                             )}
@@ -332,7 +304,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="本科"
                     >
                         {getFieldDecorator('undergraduate', {
-                            initialValue: this.state.undergraduate || null
+                            initialValue: this.props.data.undergraduate || null
                         })(
                             <InputNumber />
                             )}
@@ -342,7 +314,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="大专及以下"
                     >
                         {getFieldDecorator('college', {
-                            initialValue: this.state.college || null
+                            initialValue: this.props.data.college || null
                         })(
                             <InputNumber />
                             )}
@@ -355,7 +327,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="高级职称"
                     >
                         {getFieldDecorator('seniorTitle', {
-                            initialValue: this.state.seniorTitle || null
+                            initialValue: this.props.data.seniorTitle || null
                         })(
                             <InputNumber />
                             )}
@@ -365,7 +337,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="中级职称"
                     >
                         {getFieldDecorator('intermediateTitle', {
-                            initialValue: this.state.intermediateTitle || null
+                            initialValue: this.props.data.intermediateTitle || null
                         })(
                             <InputNumber />
                             )}
@@ -375,7 +347,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="初级职称"
                     >
                         {getFieldDecorator('juniorTitle', {
-                            initialValue: this.state.juniorTitle || null
+                            initialValue: this.props.data.juniorTitle || null
                         })(
                             <InputNumber />
                             )}
@@ -385,7 +357,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="高级技工"
                     >
                         {getFieldDecorator('seniorMechanic', {
-                            initialValue: this.state.seniorMechanic || null
+                            initialValue: this.props.data.seniorMechanic || null
                         })(
                             <InputNumber />
                             )}
@@ -398,7 +370,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="30及以下"
                     >
                         {getFieldDecorator('belowThirty', {
-                            initialValue: this.state.belowThirty || null
+                            initialValue: this.props.data.belowThirty || null
                         })(
                             <InputNumber />
                             )}
@@ -408,7 +380,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="31-34"
                     >
                         {getFieldDecorator('thirtyoneToThirtyfour', {
-                            initialValue: this.state.thirtyoneToThirtyfour || null
+                            initialValue: this.props.data.thirtyoneToThirtyfour || null
                         })(
                             <InputNumber />
                             )}
@@ -418,7 +390,7 @@ const PersonFrom = Form.create()(React.createClass({
                         label="41-50"
                     >
                         {getFieldDecorator('fortyoneToFifty', {
-                            initialValue: this.state.fortyoneToFifty || null
+                            initialValue: this.props.data.fortyoneToFifty || null
                         })(
                             <InputNumber />
                             )}
@@ -428,7 +400,32 @@ const PersonFrom = Form.create()(React.createClass({
                         label="50以上"
                     >
                         {getFieldDecorator('aboveFifty', {
-                            initialValue: this.state.aboveFifty || null
+                            initialValue: this.props.data.aboveFifty || null
+                        })(
+                            <InputNumber />
+                            )}
+                    </FormItem>
+                </div>
+                <p className="hrSituation-title">每年新增员工数</p>
+                <div className="clearfix">
+                    <FormItem
+                        labelCol={{ span: 16 }}
+                        wrapperCol={{ span: 8 }}
+                        label="新增就业人数"
+                    >
+                        {getFieldDecorator('neweEmployment', {
+                            initialValue: this.props.data.neweEmployment || null
+                        })(
+                            <InputNumber />
+                            )}
+                    </FormItem>
+                    <FormItem
+                        labelCol={{ span: 16 }}
+                        wrapperCol={{ span: 8 }}
+                        label="高校应届毕业生人数"
+                    >
+                        {getFieldDecorator('graduateNumber', {
+                            initialValue: this.props.data.graduateNumber || null
                         })(
                             <InputNumber />
                             )}
@@ -490,39 +487,267 @@ const PersonFrom = Form.create()(React.createClass({
     },
 }));
 
-const Person = React.createClass({
+const HrSituationDesc = React.createClass({
     getInitialState() {
         return {
+            visible: false,
             loading: false
         };
     },
+    componentWillReceiveProps(nextProps) {
+        this.state.visible = nextProps.showDesc
+    },
+    showModal() {
+        this.setState({
+            visible: true,
+        });
+    },
+    handleOk() {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
     spinChange(e) {
         this.setState({
             loading: e
         });
     },
     render() {
-        const theYear = (new Date()).getFullYear() - 1;
         return (
-            <Spin spinning={this.state.loading} className='spin-box'>
-                <div className="set-person">
-                    <div className="acc-detail">
-                        <Tabs defaultActiveKey={String(theYear)} >
-                            <Tabs.TabPane tab={theYear} key={theYear}>
-                                <PersonFrom year={theYear} spinState={this.spinChange} urlData={this.urlData} />
-                            </Tabs.TabPane>
-                            <Tabs.TabPane tab={theYear - 1} key={theYear - 1}>
-                                <PersonFrom year={theYear - 1} spinState={this.spinChange} urlData={this.urlData} />
-                            </Tabs.TabPane>
-                            <Tabs.TabPane tab={theYear - 2} key={theYear - 2}>
-                                <PersonFrom year={theYear - 2} spinState={this.spinChange} urlData={this.urlData} />
-                            </Tabs.TabPane>
-                        </Tabs>
-                    </div>
+            <div className="patent-addNew">
+                <Spin spinning={this.state.loading} className='spin-box'>
+                    <Modal title="人力资源状况" visible={this.state.visible}
+                        onOk={this.handleOk} onCancel={this.handleCancel}
+                        width='1200px'
+                        footer=''
+                    >
+                        <HrSituationDescFrom data={this.props.data}
+                            spinState={this.spinChange} closeModal={this.handleCancel} />
+                    </Modal>
+                </Spin>
+            </div>
+        );
+    },
+});
+
+const HrSituation = React.createClass({
+    loadData(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/orgHumanResource",
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                uid: this.props.data.uid
+            }
+        }).done((data) => {
+            if (data.error.length || !data.data || !data.data.list) {
+                message.warning(data.error[0].message);
+                return;
+            };
+            for (let i = 0; i < data.data.list.length; i++) {
+                let thisdata = data.data.list[i];
+                this.state.data.push({
+                    key: i,
+                    id: thisdata.id,
+                    uid: thisdata.uid,
+                    year: thisdata.year,
+                    aboveFifty: thisdata.aboveFifty,
+                    belowThirty: thisdata.belowThirty,
+                    college: thisdata.college,
+                    doctor: thisdata.doctor,
+                    firmAbroad: thisdata.firmAbroad,
+                    firmCore: thisdata.firmCore,
+                    firmForeign: thisdata.firmForeign,
+                    firmInService: thisdata.firmInService,
+                    firmPartTime: thisdata.firmPartTime,
+                    firmTemporary: thisdata.firmTemporary,
+                    firmTotal: thisdata.firmTotal,
+                    fortyoneToFifty: thisdata.fortyoneToFifty,
+                    intermediateTitle: thisdata.intermediateTitle,
+                    juniorTitle: thisdata.juniorTitle,
+                    master: thisdata.master,
+                    seniorMechanic: thisdata.seniorMechanic,
+                    seniorTitle: thisdata.seniorTitle,
+                    techAbroad: thisdata.techAbroad,
+                    techCore: thisdata.techCore,
+                    techForeign: thisdata.techForeign,
+                    techInService: thisdata.techInService,
+                    techPartTime: thisdata.techPartTime,
+                    techTemporary: thisdata.techTemporary,
+                    techTotal: thisdata.techTotal,
+                    thirtyoneToThirtyfour: thisdata.thirtyoneToThirtyfour,
+                    undergraduate: thisdata.undergraduate,
+                    attachment: [thisdata.rosterDownloadFileName, thisdata.socialSecurityDownloadFileName],
+                    neweEmployment: thisdata.neweEmployment,
+                    graduateNumber: this.graduateNumber
+                });
+            };
+            this.state.pagination.current = data.data.pageNo;
+            this.state.pagination.total = data.data.totalCount;
+            this.setState({
+                dataSource: this.state.data,
+                pagination: this.state.pagination
+            });
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '年份',
+                    dataIndex: 'year',
+                    key: 'year'
+                }, {
+                    title: '总人数',
+                    dataIndex: 'firmTotal',
+                    key: 'firmTotal'
+                }, {
+                    title: '科技人员',
+                    dataIndex: 'techTotal',
+                    key: 'techTotal'
+                }, {
+                    title: '博士人数',
+                    dataIndex: 'doctor',
+                    key: 'doctor',
+                }, {
+                    title: '高级职称人数',
+                    dataIndex: 'seniorTitle',
+                    key: 'seniorTitle',
+                }, {
+                    title: '30岁以下人数',
+                    dataIndex: 'belowThirty',
+                    key: 'belowThirty',
+                }, {
+                    title: '相关附件',
+                    dataIndex: 'attachment',
+                    key: 'attachment',
+                    render: (text) => {
+                        <a href="" onClick={() => {
+                            window.open(globalConfig.context + "/techservice/patent/downloadFile?path=" + text + "&sign=" + "type")
+                        }}></a>
+                    }
+                }
+            ],
+            dataSource: []
+        };
+    },
+    componentWillMount() {
+        this.loadData();
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        this.setState({
+            showDesc: true
+        });
+    },
+    delectRow() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            }
+        }
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/deleteFinance",
+            data: {
+                ids: deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData();
+        }.bind(this));
+    },
+    closeDesc(e) {
+        this.state.showDesc = e;
+        this.loadData();
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows,
+                    selectedRowKeys: selectedRowKeys
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    <span>人力资源状况</span>
+                </div>
+                <div className="user-search">
+                    <p>
+                        <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
+                            onClick={this.tableRowClick}>添加<Icon type="plus" /></Button>
+                        <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                            disabled={!hasSelected}
+                            onClick={this.delectRow}>删除<Icon type="minus" /></Button>
+                    </p>
                 </div>
-            </Spin>
-        )
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}
+                            pagination={this.state.pagination}
+                            rowSelection={rowSelection}
+                            onRowClick={this.tableRowClick} />
+                    </Spin>
+                </div>
+                <HrSituationDesc data={this.state.RowData}
+                    showDesc={this.state.showDesc} closeDesc={this.closeDesc} />
+            </div >
+        );
     }
 });
 
-export default Person;
+export default HrSituation;

+ 15 - 0
js/component/dataDic.js

@@ -4145,5 +4145,20 @@ module.exports = {
             value: "5",
             key: "其他方式"
         }
+    ],
+    annualReportStateList:[
+        {
+            value: "0",
+            key: "提交"
+        },{
+            value: "1",
+            key: "审核"
+        },{
+            value: "2",
+            key: "填写国家系统"
+        },{
+            value: "3",
+            key: "国家系统通过"
+        }
     ]
 };

+ 68 - 8
js/component/groupCertify/personal.jsx

@@ -1,9 +1,10 @@
 import React from 'react';
-import { Input, Button, Form, Upload, Icon, Spin, message, Row, Col } from 'antd';
+import { Input, Button, Form, Upload, Icon, Spin, message, Row, Col, DatePicker, Select, Radio } from 'antd';
 import './certify.less';
 import { addressInit, getBase64, beforeUpload, beforeUploadFile } from '../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
+import moment from 'moment';
 
 import card1 from '../../../image/idcard1.jpg';
 import card2 from '../../../image/idcard2.jpg';
@@ -83,7 +84,7 @@ const Content = Form.create()(React.createClass({
                     addressInit('cmbProvince', 'cmbCity', 'cmbArea',
                         data.data.licenceProvince, data.data.licenceCity, data.data.licenceArea);
                     this.setState({
-                        contacts:data.data.contacts,
+                        contacts: data.data.contacts,
                         contactMobile: data.data.contactMobile,
                         aftUsername: data.data.aftUsername,
                         unitName: data.data.unitName,
@@ -94,7 +95,12 @@ const Content = Form.create()(React.createClass({
                         legalPersonIdCard: data.data.legalPersonIdCard,
                         licenceScanningUrl: data.data.licenceScanningUrl,
                         orgCodeUrl: data.data.orgCodeUrl,
-                        lastYearTaxReportUrl: data.data.lastYearTaxReportUrl
+                        lastYearTaxReportUrl: data.data.lastYearTaxReportUrl,
+                        listed: data.data.listed,
+                        listedDate: data.data.listedDateFormattedDate,
+                        listedType: data.data.listedType,
+                        stockCode: data.data.stockCode,
+                        auditStatus:data.data.auditStatus
                     });
                 };
             }.bind(this),
@@ -111,7 +117,7 @@ const Content = Form.create()(React.createClass({
     getInitialState() {
         return {
             loading: false,
-            vsCodeSrc : globalConfig.context + '/open/getVCode'
+            vsCodeSrc: globalConfig.context + '/open/getVCode'
         };
     },
     handleSubmit(e) {
@@ -141,6 +147,12 @@ const Content = Form.create()(React.createClass({
                 this.setState({
                     loading: true
                 });
+                if ( values.listed == 1 ) {
+                    if ( !values.listedDate || !values.listedType || !values.stockCode ) {
+                        message.warning("请输入上市资料!");
+                        return;
+                    };
+                };
                 $.ajax({
                     method: "POST",
                     dataType: "json",
@@ -163,6 +175,11 @@ const Content = Form.create()(React.createClass({
                         legalPerson: values.legalPerson,
                         legalPersonIdCard: values.legalPersonIdCard,
                         verificationCode: values.captcha,
+                        listed: values.listed,
+                        listedDateFormattedDate: values.listedDate.format("YYYY-MM-DD"),
+                        listedType: values.listedType,
+                        stockCode: values.stockCode,
+                        auditStatus:this.state.auditStatus,
                         process: 1
                     }
                 }).done(function (data) {
@@ -224,7 +241,7 @@ const Content = Form.create()(React.createClass({
     },
     reloadVCode() {
         this.setState({
-            vsCodeSrc:globalConfig.context + '/open/getVCode?t=' + Math.random()
+            vsCodeSrc: globalConfig.context + '/open/getVCode?t=' + Math.random()
         });
     },
     render() {
@@ -265,11 +282,54 @@ const Content = Form.create()(React.createClass({
                         {...formItemLayout}
                         label="注册资金"
                     >   {getFieldDecorator('registeredCapital', {
-                            initialValue: this.state.registeredCapital || null
+                        initialValue: this.state.registeredCapital || null
+                    })(
+                        <Input />
+                        )}
+                        <span className="fromItem-postfix">万元</span>
+                    </FormItem>
+                    <FormItem
+                        {...formItemLayout}
+                        label="是否上市"
+                    >   {getFieldDecorator('listed', {
+                        initialValue: this.state.listed || "0"
+                    })(
+                        <Radio.Group>
+                            <Radio value="0">否</Radio>
+                            <Radio value="1">是</Radio>
+                        </Radio.Group>
+                        )}
+                    </FormItem>
+                    <FormItem style={{ display: this.props.form.getFieldValue('listed') == 0 ? 'none' : 'block' }}
+                        {...formItemLayout}
+                        label="上市时间"
+                    >
+                        {getFieldDecorator('listedDate', {
+                            initialValue: this.state.listedDate ? moment(this.state.listedDate) : null
                         })(
-                            <Input />
+                            <DatePicker />
                             )}
-                        <span className="fromItem-postfix">万元</span>
+                    </FormItem>
+                    <FormItem style={{ display: this.props.form.getFieldValue('listed') == 0 ? 'none' : 'block' }}
+                        {...formItemLayout}
+                        label="上市类型"
+                    >   {getFieldDecorator('listedType', {
+                        initialValue: this.state.listedType
+                    })(
+                        <Select placeholder="请选择上市类型">
+                            <Select.Option value='0'>股票型上市公司</Select.Option>
+                            <Select.Option value='1'>债券型上市公司</Select.Option>
+                        </Select>
+                        )}
+                    </FormItem>
+                    <FormItem style={{ display: this.props.form.getFieldValue('listed') == 0 ? 'none' : 'block' }}
+                        {...formItemLayout}
+                        label="股票代码"
+                    >   {getFieldDecorator('stockCode', {
+                        initialValue: this.state.stockCode
+                    })(
+                        <Input />
+                        )}
                     </FormItem>
                     <FormItem
                         {...formItemLayout}

+ 7 - 3
js/component/manageCenter/servicesManage/highTech/fosterDesc/achievement.jsx

@@ -47,6 +47,10 @@ const AchievementDescFrom = Form.create()(React.createClass({
     },
     handleSubmit(e) {
         e.preventDefault();
+        if (!this.state.year) {
+            message.warning("请选择一个年份!");
+            return;
+        };
         this.props.form.validateFields((err, values) => {
             if (!err) {
                 this.props.spinState(true);
@@ -246,15 +250,15 @@ const Achievement = React.createClass({
             data: {
                 pageNo: pageNo || 1,
                 pageSize: this.state.pagination.pageSize,
-                uid:this.props.data.uid
+                uid: this.props.data.uid
             }
         }), $.ajax({
             method: "post",
             dataType: "json",
             crossDomain: false,
             url: globalConfig.context + "/api/admin/activityNumber",
-            data:{
-                uid:this.props.data.uid
+            data: {
+                uid: this.props.data.uid
             }
         })).done((data1, data2) => {
             let data = data1[0];

+ 0 - 1
js/component/manageCenter/servicesManage/highTech/fosterDesc/activity.jsx

@@ -2,7 +2,6 @@ import React from 'react';
 import { Icon, Button, Upload, Input, Spin, Table, message, Select, Modal, DatePicker, Cascader, Transfer, InputNumber } from 'antd';
 import { techFieldList, technicalSourceList } from '../../../../dataDic.js';
 import { getTechField, getTechnicalSource, beforeUploadFile } from '../../../../tools.js';
-import './activity.less';
 import moment from 'moment';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';

+ 0 - 51
js/component/manageCenter/servicesManage/highTech/fosterDesc/activity.less

@@ -1,51 +0,0 @@
-.user-content {
-    background: #fff;
-    padding: 20px;
-    .content-title {
-        font-size: 16px;
-        color: #333;
-    }
-    .user-search {
-        margin: 20px 0;
-        input {
-            width: 200px;
-        }
-        >* {
-            margin-right: 20px;
-        }
-        p {
-            margin-top: 20px;
-            button {
-                margin-right: 20px;
-            }
-        }
-    }
-}
-
-.admin-desc-content {
-    .ant-modal-body {
-        >div {
-            margin-top: 0px;
-            margin-bottom: 10px;
-            p {
-                margin: 6px 0;
-            }
-        }
-    }
-    .half-div {
-        width: 50%;
-        float: left;
-        margin-top: 0px;
-        margin-bottom: 10px;
-        >span {
-            display: inline-block;
-            width: 100px;
-        }
-        >input {
-            width: 60%;
-        }
-        >textarea {
-            width: 94%;
-        }
-    }
-}

+ 3 - 2
js/component/manageCenter/servicesManage/highTech/fosterDesc/activityCostList.jsx

@@ -68,7 +68,8 @@ const ActivityDescFrom = Form.create()(React.createClass({
                         externalAbroadCost: values.externalAbroadCost,
                         enterpriseFiller: values.enterpriseFiller,
                         signDateFormattedDate: values.signDate.format('YYYY-MM-DD'),
-                        sortNumber: values.sortNumber
+                        sortNumber: values.sortNumber,
+                        accountUrl:this.state.accountUrl
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
@@ -276,7 +277,7 @@ const ActivityDescFrom = Form.create()(React.createClass({
                             }
                             if (info.file.status === 'done') {
                                 message.success(`${info.file.name} 文件上传成功!`);
-                                this.state.proofUrl = info.file.response.data;
+                                this.state.accountUrl = info.file.response.data;
                             } else if (info.file.status === 'error') {
                                 message.error(`${info.file.name} 文件上传失败。`);
                             }

+ 685 - 0
js/component/manageCenter/servicesManage/highTech/fosterDesc/annualReport.jsx

@@ -0,0 +1,685 @@
+import React from 'react';
+import { Icon, Form, Button, Input, Spin, Table, message, Select, Modal, InputNumber } from 'antd';
+import './annualReport.less';
+import { annualReportStateList } from '../../../../dataDic.js';
+import { beforeUploadFile, getAnnualReportState } from '../../../../tools.js';
+import moment from 'moment';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+const AnnualReportDescFrom = Form.create()(React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            yearOption: [],
+        };
+    },
+    componentWillMount() {
+        let d = new Date();
+        let _me = this;
+        d = d.getFullYear();
+        for (let i = d; i > d - 20; i--) {
+            _me.state.yearOption.push(
+                <Select.Option value={i.toString()} key={i}>{i}</Select.Option>
+            )
+        };
+    },
+    handleSubmit(e) {
+        e.preventDefault();
+        if (!this.state.year && !this.props.data.year) {
+            message.warning("请选择一个年份!")
+            return;
+        };
+        this.props.form.validateFields((err, values) => {
+            if (!err) {
+                this.props.spinState(true);
+                $.ajax({
+                    method: "POST",
+                    dataType: "json",
+                    crossDomain: false,
+                    url: globalConfig.context + "/techservice/cognizance/disposeAnnualReport",
+                    data: {
+                        id: this.props.data.id,
+                        uid: this.props.uid,
+                        year: this.state.year || this.props.data.year,
+                        totalTax: values.totalTax,
+                        incomeTaxRelief: values.incomeTaxRelief,
+                        totalExportVolume: values.totalExportVolume,
+                        basicResearchCost: values.basicResearchCost,
+                        state: 0,
+                    }
+                }).done(function (data) {
+                    if (!data.error.length) {
+                        message.success('保存成功!');
+                        this.props.closeModal();
+                        this.props.spinState(false);
+                        this.props.form.resetFields();
+                    } else {
+                        message.warning(data.error[0].message);
+                        this.props.spinState(false);
+                    }
+                }.bind(this));
+            }
+        });
+    },
+    render() {
+        const FormItem = Form.Item;
+        const { getFieldDecorator } = this.props.form;
+        //const theData = this.props.detailData;
+        const theData = {
+            id: "thisdata.id",
+            uid: "thisdata.uid",
+            unitName: "thisdata.unitName",
+            orgCode: "thisdata.orgCode",
+            locationProvince: "thisdata.locationProvince",
+            locationCity: "thisdata.locationCity",
+            locationArea: "thisdata.locationArea",
+            certificateNumber: "thisdata.certificateNumber",
+            issuingDate: "thisdata.issuingDate",
+            issuingDateFormattedDate: "thisdata.issuingDateFormattedDate",
+            listed: "thisdata.listed",
+            listedDate: "thisdata.listedDate",
+            listedDateFormattedDate: "thisdata.listedDateFormattedDate",
+            listedType: "thisdata.listedType",
+            stockCode: "thisdata.stockCode",
+            contacts: "thisdata.contacts",
+
+            inventionPatent: "thisdata.inventionPatent",
+            defensePatent: "thisdata.defensePatent",
+            nationalCrop: "thisdata.nationalCrop",
+            newPlantCariety: "thisdata.newPlantCariety",
+            nationalDrug: "thisdata.nationalDrug",
+            chineseMedicine: "thisdata.chineseMedicine",
+            utilityPatent: "thisdata.utilityPatent",
+            circuitDesign: "thisdata.circuitDesign",
+            exteriorPatent: "thisdata.exteriorPatent",
+            softwareWorks: "thisdata.softwareWorks",
+            firmTotal: "thisdata.firmTotal",
+            techTotal: "thisdata.techTotal",
+            newEmployment: "thisdata.newEmployment",
+            graduateNumber: "thisdata.graduateNumber",
+
+            totalRevenue: 123,
+            salesRevenue: 223,
+            netAsset: 333,
+            lastYearRevenue: 224,
+            grossProfit: 334,
+            researchCost: 134,
+            territory: 67,
+            basicResearchCost: 234,
+            totalTax: 234,
+            incomeTaxRelief: 21,
+            totalExportVolume: 56
+        }
+        const formItemLayout = {
+            labelCol: { span: 0 },
+            wrapperCol: { span: 20 },
+        };
+        const _me = this;
+        return (
+            <Form onSubmit={this.handleSubmit} className="annualReport-form">
+                <div className="activityCost-title"><span>年份: </span>
+                    {
+                        this.props.data.year ? <span>{this.props.data.year}</span> :
+                            <Select placeholder="请选择年份" style={{ width: 200 }}
+                                onSelect={(e, n) => { this.state.year = e }}>
+                                {this.state.yearOption}
+                            </Select>
+                    }
+                </div>
+                <div className="clearfix" style={{ padding: '0 10px' }}>
+                    <div className="half-item" style={{ marginRight: "50%" }}>
+                        <p className="item-title">企业名称: </p>
+                        <p>{theData.unitName}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">组织机构代码或统一社会信用代码: </p>
+                        <p>{theData.orgCode}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">所属地区: </p>
+                        <p>{theData.location || " "}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">高新技术企业认定证书编号: </p>
+                        <p>{theData.certificateNumber}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">高新技术企业认定时间: </p>
+                        <p>{theData.issuingDateFormattedDate}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">企业是否上市: </p>
+                        <p>{theData.listed == 0 ? "否" : "是"}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">上市时间: </p>
+                        <p>{theData.listedDateFormattedDate}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">上市类型: </p>
+                        <p>
+                            {(() => {
+                                switch (theData.listedType) {
+                                    case 0:
+                                        return "股票型上市公司";
+                                    case 1:
+                                        return "债券型上市公司";
+                                    default:
+                                        return "";
+                                }
+                            })()}
+                        </p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">股票代码: </p>
+                        <p>{theData.stockCode}</p>
+                    </div>
+                    <div className="half-item">
+                        <p className="item-title">企业联系人: </p>
+                        <p>{theData.contacts}</p>
+                    </div>
+                </div>
+                <div className="activityCost-title"><span>本年度获得的知识产权数: </span></div>
+                <div className="clearfix annualReport-box">
+                    <div className="four-item">
+                        <p className="item-title">发明专利数: </p>
+                        <p>{theData.inventionPatent}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">国防专利数: </p>
+                        <p>{theData.defensePatent}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">国家级农作物品种数: </p>
+                        <p>{theData.nationalCrop}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">植物新品种数: </p>
+                        <p>{theData.newPlantCariety}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">国家新药数: </p>
+                        <p>{theData.nationalDrug}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">国家一级中药保护品种数: </p>
+                        <p>{theData.chineseMedicine}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">实用新型专利数: </p>
+                        <p>{theData.utilityPatent}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">集成电路布图设计专有权数: </p>
+                        <p>{theData.circuitDesign}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">外观设计专利数: </p>
+                        <p>{theData.exteriorPatent}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">软件著作权数: </p>
+                        <p>{theData.softwareWorks}</p>
+                    </div>
+                </div>
+                <div className="activityCost-title"><span>本年度人员情况(人): </span></div>
+                <div className="clearfix annualReport-box">
+                    <div className="four-item">
+                        <p className="item-title">职工总人数: </p>
+                        <p>{theData.firmTotal}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">科技人员数: </p>
+                        <p>{theData.techTotal}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">新增就业人数: </p>
+                        <p>{theData.newEmployment}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">高校应届毕业生人数: </p>
+                        <p>{theData.graduateNumber}</p>
+                    </div>
+                </div>
+                <div className="activityCost-title"><span>企业本年度财务状况(万元): </span></div>
+                <div className="clearfix annualReport-box">
+                    <div className="four-item">
+                        <p className="item-title">企业总收入: </p>
+                        <p>{theData.totalRevenue}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">销售收入: </p>
+                        <p>{theData.salesRevenue}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">所有者权益(净资产)合计: </p>
+                        <p>{theData.netAsset}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">高新技术产品(服务)收入:
+                        </p>
+                        <p>
+                            <span>{theData.lastYearRevenue} </span>
+                            {(() => {
+                                let s = (theData.lastYearRevenue / theData.totalRevenue * 100).toFixed(2);
+                                if (s < 50) {
+                                    return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
+                                } else {
+                                    return <span> 占比总收入的{s}%</span>
+                                };
+                            })()}
+                        </p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">利润总额: </p>
+                        <p>{theData.grossProfit}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">研发费用总额:
+                        </p>
+                        <p>
+                            <span>{theData.researchCost} </span>
+                            {(() => {
+                                let s = (theData.researchCost / theData.salesRevenue * 100).toFixed(2);
+                                if (theData.salesRevenue < 5000) {
+                                    if (s < 5) {
+                                        return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
+                                    } else {
+                                        return <span> 占比总收入的{s}%</span>
+                                    };
+                                } else if (5000 < theData.salesRevenue < 20000) {
+                                    if (s < 4) {
+                                        return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
+                                    } else {
+                                        return <span> 占比总收入的{s}%</span>
+                                    };
+                                } else if (theData.salesRevenue >= 20000) {
+                                    if (s < 3) {
+                                        return <span style={{ color: '#ea0862' }}> 占比总收入的{s}%,小于60%</span>
+                                    } else {
+                                        return <span> 占比总收入的{s}%</span>
+                                    };
+                                }
+                            })()}
+                        </p>
+                    </div>
+                    <div className="four-item" style={{ marginRight: '25%' }}>
+                        <p className="item-title">在中国境内研发费用: </p>
+                        <p>{theData.territory}</p>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">纳税总额: </p>
+                        <FormItem
+                            {...formItemLayout}
+                        >
+                            {getFieldDecorator('totalTax', {
+                                rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                                initialValue: theData.totalTax
+                            })(
+                                <InputNumber />
+                                )}
+                        </FormItem>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">高企所得税减免额: </p>
+                        <FormItem
+                            {...formItemLayout}
+                        >
+                            {getFieldDecorator('incomeTaxRelief', {
+                                rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                                initialValue: theData.incomeTaxRelief
+                            })(
+                                <InputNumber />
+                                )}
+                        </FormItem>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">出口创汇总额(人民币): </p>
+                        <FormItem
+                            {...formItemLayout}
+                        >
+                            {getFieldDecorator('totalExportVolume', {
+                                rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                                initialValue: theData.totalExportVolume
+                            })(
+                                <InputNumber />
+                                )}
+                        </FormItem>
+                    </div>
+                    <div className="four-item">
+                        <p className="item-title">基础研究投入费用: </p>
+                        <FormItem
+                            {...formItemLayout}
+                        >
+                            {getFieldDecorator('basicResearchCost', {
+                                rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                                initialValue: theData.basicResearchCost
+                            })(
+                                <InputNumber />
+                                )}
+                        </FormItem>
+                    </div>
+                </div>
+                <FormItem style={{ marginTop: '20px' }}>
+                    <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
+                    <Button type="ghost" style={{ marginLeft: '20px' }} onClick={this.props.closeModal}>取消</Button>
+                </FormItem>
+            </Form >
+        );
+    },
+}));
+
+const AnnualReportDesc = React.createClass({
+    loadData(v) {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/annualReportDetail",
+            data: {
+                year: this.props.data ? this.props.data.year : (new Date().getFullYear() - 1),
+                uid: this.props.uid
+            }
+        }).done((data) => {
+            if (data.error.length || !data.data || !data.data.list) {
+                message.warning(data.error[0].message);
+                return;
+            };
+            this.state.detailData = {
+                id: thisdata.id,
+                uid: thisdata.uid,
+                unitName: thisdata.unitName,
+                orgCode: thisdata.orgCode,
+                locationProvince: thisdata.locationProvince,
+                locationCity: thisdata.locationCity,
+                locationArea: thisdata.locationArea,
+                location: thisdata.locationProvince + " / " + thisdata.locationCity + " / " + thisdata.locationArea,
+                certificateNumber: thisdata.certificateNumber,
+                issuingDate: thisdata.issuingDate,
+                issuingDateFormattedDate: thisdata.issuingDateFormattedDate,
+                listed: thisdata.listed,
+                listedDate: thisdata.listedDate,
+                listedDateFormattedDate: thisdata.listedDateFormattedDate,
+                listedType: thisdata.listedType,
+                stockCode: thisdata.stockCode,
+                contacts: thisdata.contacts,
+                inventionPatent: thisdata.inventionPatent,
+                defensePatent: thisdata.defensePatent,
+                nationalCrop: thisdata.nationalCrop,
+                newPlantCariety: thisdata.newPlantCariety,
+                nationalDrug: thisdata.nationalDrug,
+                chineseMedicine: thisdata.chineseMedicine,
+                utilityPatent: thisdata.utilityPatent,
+                circuitDesign: thisdata.circuitDesign,
+                exteriorPatent: thisdata.exteriorPatent,
+                softwareWorks: thisdata.softwareWorks,
+                firmTotal: thisdata.firmTotal,
+                techTotal: thisdata.techTotal,
+                newEmployment: thisdata.newEmployment,
+                graduateNumber: thisdata.graduateNumber,
+                totalRevenue: thisdata.totalRevenue,
+                salesRevenue: thisdata.salesRevenue,
+                netAsset: thisdata.netAsset,
+                lastYearRevenue: thisdata.lastYearRevenue,
+                grossProfit: thisdata.grossProfit,
+                researchCost: thisdata.researchCost,
+                territory: thisdata.territory,
+                basicResearchCost: thisdata.basicResearchCost,
+                totalTax: thisdata.totalTax,
+                incomeTaxRelief: thisdata.incomeTaxRelief,
+                totalExportVolume: thisdata.totalExportVolume
+            };
+        }).always(function () {
+            this.setState({
+                loading: false,
+                visible: v
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false
+        };
+    },
+    componentWillReceiveProps(nextProps) {
+        if (nextProps.showDesc) {
+            this.loadData(nextProps.showDesc);
+        };
+    },
+    showModal() {
+        this.setState({
+            visible: true,
+        });
+    },
+    handleOk() {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    spinChange(e) {
+        this.setState({
+            loading: e
+        });
+    },
+    render() {
+        return (
+            <div className="patent-addNew">
+                <Spin spinning={this.state.loading} className='spin-box'>
+                    <Modal title="财务报表信息" visible={this.state.visible}
+                        onOk={this.handleOk} onCancel={this.handleCancel}
+                        width='1000px'
+                        footer=''
+                    >
+                        <AnnualReportDescFrom
+                            uid={this.props.uid}
+                            data={this.props.data}
+                            detailData={this.state.detailData}
+                            spinState={this.spinChange} closeModal={this.handleCancel} />
+                    </Modal>
+                </Spin>
+            </div>
+        );
+    },
+});
+
+const AnnualReport = React.createClass({
+    loadData(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/annualReport",
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                uid: this.props.data.uid
+            }
+        }).done((data) => {
+            if (!data.data || !data.data.list) {
+                if (data.error.length) {
+                    message.warning(data.error[0].message);
+                };
+                return;
+            };
+            for (let i = 0; i < data.data.list.length; i++) {
+                let thisdata = data.data.list[i];
+                this.state.data.push({
+                    key: i,
+                    id: thisdata.id,
+                    uid: thisdata.uid,
+                    createTime: thisdata.createTime,
+                    lastUpdateTime: thisdata.lastUpdateTime,
+                    totalTax: thisdata.totalTax,
+                    incomeTaxRelief: thisdata.incomeTaxRelief,
+                    totalExportVolume: thisdata.totalExportVolume,
+                    year: thisdata.year,
+                    state: thisdata.state,
+                    createTimeFormattedDate: thisdata.createTimeFormattedDate,
+                    lastUpdateTimeFormattedDate: thisdata.lastUpdateTimeFormattedDate
+                });
+            };
+            this.state.pagination.current = data.data.pageNo;
+            this.state.pagination.total = data.data.totalCount;
+            this.setState({
+                dataSource: this.state.data,
+                pagination: this.state.pagination
+            });
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '年份',
+                    dataIndex: 'year',
+                    key: 'year'
+                }, {
+                    title: '创建时间',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate'
+                }, {
+                    title: '最近更新时间',
+                    dataIndex: 'lastUpdateTimeFormattedDate',
+                    key: 'lastUpdateTimeFormattedDate'
+                }, {
+                    title: '年报状态',
+                    dataIndex: 'state',
+                    key: 'state',
+                    render: (text) => {
+                        return getAnnualReportState(text)
+                    }
+                }
+            ],
+            dataSource: []
+        };
+    },
+    componentWillMount() {
+        this.loadData();
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        this.setState({
+            showDesc: true
+        });
+    },
+    delectRow() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            }
+        }
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/deleteAnnualReport",
+            data: {
+                ids: deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData();
+        }.bind(this));
+    },
+    closeDesc(e) {
+        this.state.showDesc = e;
+        this.loadData();
+    },
+    search() {
+        this.loadData();
+    },
+    reset() {
+        this.loadData();
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows,
+                    selectedRowKeys: selectedRowKeys
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    <span>企业年报</span>
+                </div>
+                <div className="user-search">
+                    <p>
+                        <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
+                            onClick={this.tableRowClick}>添加<Icon type="plus" /></Button>
+                        <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                            disabled={!hasSelected}
+                            onClick={this.delectRow}>删除<Icon type="minus" /></Button>
+                    </p>
+                </div>
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}
+                            pagination={this.state.pagination}
+                            rowSelection={rowSelection}
+                            onRowClick={this.tableRowClick} />
+                    </Spin>
+                </div>
+                <AnnualReportDesc
+                    uid={this.props.data.uid}
+                    data={this.state.RowData}
+                    showDesc={this.state.showDesc} closeDesc={this.closeDesc} />
+            </div >
+        );
+    }
+});
+
+export default AnnualReport;

+ 42 - 0
js/component/manageCenter/servicesManage/highTech/fosterDesc/annualReport.less

@@ -0,0 +1,42 @@
+.annualReport-form {
+    .half-item {
+        >p {
+            line-height: 32px;
+            min-height: 32px;
+            color: #000;
+        }
+        >.item-title {
+            color: #999;
+            font-size: 14px;
+        }
+    }
+    .annualReport-box {
+        background: #eee;
+        padding: 10px;
+        .four-item {
+            float: left;
+            width: 25%;
+            >p {
+                line-height: 32px;
+                min-height: 32px;
+                color: #000;
+            }
+            >.item-title {
+                color: #999;
+                font-size: 14px;
+            }
+        }
+    }
+}
+
+.ant-form {
+    .ant-form-item {
+        .ant-form-item-label {
+            text-align: left;
+            label {
+                font-size: 14px;
+                color: #999;
+            }
+        }
+    }
+}

+ 41 - 13
js/component/manageCenter/servicesManage/highTech/fosterDesc/content.jsx

@@ -20,14 +20,16 @@ const Content = React.createClass({
         switch (e.target.value) {
             case 'orgTechCenter':
                 this.setState({
-                    component: OrgTechCenter
+                    component: OrgTechCenter,
+                    radioValue: 'orgTechCenter'
                 });
                 break;
             case 'activity':
                 require.ensure([], () => {
                     const Activity = require('./activity').default;
                     this.setState({
-                        component: Activity
+                        component: Activity,
+                        radioValue: 'activity'
                     });
                 });
                 break;
@@ -35,7 +37,8 @@ const Content = React.createClass({
                 require.ensure([], () => {
                     const ActivityCostList = require('./activityCostList').default;
                     this.setState({
-                        component: ActivityCostList
+                        component: ActivityCostList,
+                        radioValue: 'activityCostList'
                     });
                 });
                 break;
@@ -43,7 +46,8 @@ const Content = React.createClass({
                 require.ensure([], () => {
                     const TechProduct = require('./techProduct').default;
                     this.setState({
-                        component: TechProduct
+                        component: TechProduct,
+                        radioValue: 'techProduct'
                     });
                 });
                 break;
@@ -51,7 +55,8 @@ const Content = React.createClass({
                 require.ensure([], () => {
                     const Intellectual = require('./intellectual').default;
                     this.setState({
-                        component: Intellectual
+                        component: Intellectual,
+                        radioValue: 'intellectual'
                     });
                 });
                 break;
@@ -59,7 +64,8 @@ const Content = React.createClass({
                 require.ensure([], () => {
                     const Achievement = require('./achievement').default;
                     this.setState({
-                        component: Achievement
+                        component: Achievement,
+                        radioValue: 'achievement'
                     });
                 });
                 break;
@@ -67,7 +73,8 @@ const Content = React.createClass({
                 require.ensure([], () => {
                     const Ratepay = require('./ratepay').default;
                     this.setState({
-                        component: Ratepay
+                        component: Ratepay,
+                        radioValue: 'ratepay'
                     });
                 });
                 break;
@@ -75,7 +82,8 @@ const Content = React.createClass({
                 require.ensure([], () => {
                     const Finance = require('./finance').default;
                     this.setState({
-                        component: Finance
+                        component: Finance,
+                        radioValue: 'finance'
                     });
                 });
                 break;
@@ -83,7 +91,8 @@ const Content = React.createClass({
                 require.ensure([], () => {
                     const HrSituation = require('./hrSituation').default;
                     this.setState({
-                        component: HrSituation
+                        component: HrSituation,
+                        radioValue: 'hrSituation'
                     });
                 });
                 break;
@@ -91,7 +100,8 @@ const Content = React.createClass({
                 require.ensure([], () => {
                     const HonorList = require('./honorList').default;
                     this.setState({
-                        component: HonorList
+                        component: HonorList,
+                        radioValue: 'honorList'
                     });
                 });
                 break;
@@ -99,7 +109,8 @@ const Content = React.createClass({
                 require.ensure([], () => {
                     const Standard = require('./standard').default;
                     this.setState({
-                        component: Standard
+                        component: Standard,
+                        radioValue: 'standard'
                     });
                 });
                 break;
@@ -107,10 +118,26 @@ const Content = React.createClass({
                 require.ensure([], () => {
                     const InnovationAbility = require('./innovationAbility').default;
                     this.setState({
-                        component: InnovationAbility
+                        component: InnovationAbility,
+                        radioValue: 'innovationAbility'
                     });
                 });
                 break;
+            case 'annualReport':
+                require.ensure([], () => {
+                    const AnnualReport = require('./annualReport').default;
+                    this.setState({
+                        component: AnnualReport,
+                        radioValue: 'annualReport'
+                    });
+                });
+                break;
+        };
+    },
+    componentWillReceiveProps(nextProps) {
+        if (nextProps.style === "block") {
+            let e = { target: { value: "orgTechCenter" } }
+            this.onChange(e);
         };
     },
     render() {
@@ -127,7 +154,7 @@ const Content = React.createClass({
                             <Button className="foster-return" type="primary" onClick={this.returnFoster}>返回高企培育列表</Button>
                         </div>
                         <div className="clearfix foster-component">
-                            <Radio.Group onChange={this.onChange} defaultValue="orgTechCenter">
+                            <Radio.Group onChange={this.onChange} value={this.state.radioValue}>
                                 <Radio.Button value="orgTechCenter">技术中心</Radio.Button>
                                 <Radio.Button value="activity">研发活动</Radio.Button>
                                 <Radio.Button value="activityCostList">研发活动费用详情</Radio.Button>
@@ -140,6 +167,7 @@ const Content = React.createClass({
                                 <Radio.Button value="honorList">企业荣誉及其他证明材料</Radio.Button>
                                 <Radio.Button value="standard">标准制定情况</Radio.Button>
                                 <Radio.Button value="innovationAbility">企业创新能力</Radio.Button>
+                                <Radio.Button value="annualReport">年报</Radio.Button>
                             </Radio.Group>
                         </div>
                     </div>

+ 76 - 0
js/component/manageCenter/servicesManage/highTech/fosterDesc/content.less

@@ -50,4 +50,80 @@
         margin-top: 20px;
         padding: 20px;
     }
+}
+
+.user-content {
+    background: #fff;
+    .content-title {
+        font-size: 16px;
+        color: #333;
+    }
+    .user-search {
+        margin: 20px 0;
+        input {
+            width: 200px;
+        }
+        >* {
+            margin-right: 20px;
+        }
+        p {
+            margin-top: 20px;
+            button {
+                margin-right: 20px;
+            }
+        }
+    }
+    .clearfix {
+        >.orgTech-item {
+            width: 60%;
+            display: inline-block;
+            >span {
+                margin-right: 10px;
+            }
+            >input {
+                width: 200px;
+                margin-right: 10px;
+            }
+            >textarea {
+                margin-top: 6px;
+            }
+        }
+        >div {
+            margin-bottom: 10px;
+        }
+    }
+}
+
+.admin-desc-content {
+    .ant-modal-body {
+        >div {
+            margin-top: 0px;
+            margin-bottom: 10px;
+            p {
+                margin: 6px 0;
+            }
+        }
+    }
+    .half-div {
+        width: 50%;
+        float: left;
+        margin-top: 0px;
+        margin-bottom: 10px;
+        >span {
+            display: inline-block;
+            width: 100px;
+        }
+        >input {
+            width: 60%;
+        }
+        >textarea {
+            width: 94%;
+        }
+    }
+}
+
+.upload-box {
+    display: inline-block;
+    margin-top: 10px;
+    margin-bottom: 20px;
 }

+ 27 - 17
js/component/manageCenter/servicesManage/highTech/fosterDesc/finance.jsx

@@ -27,6 +27,10 @@ const FinanceDescFrom = Form.create()(React.createClass({
     },
     handleSubmit(e) {
         e.preventDefault();
+        if (!this.state.year && !this.props.data.year) {
+            message.warning("请选择一个年份!")
+            return;
+        };
         this.props.form.validateFields((err, values) => {
             if (!err) {
                 this.props.spinState(true);
@@ -34,21 +38,22 @@ const FinanceDescFrom = Form.create()(React.createClass({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/techservice/cognizance/disposeFinance",
+                    url: globalConfig.context + "/api/admin/disposeFinance",
                     data: {
                         id: this.props.data.id,
+                        uid: this.props.uid,
                         mainBusinessIncome: values.mainBusinessIncome,
-                        managementCost:values.managementCost,
-                        operatingProfit:values.operatingProfit,
-                        variousTax:values.variousTax,
-                        currentAsset:values.currentAsset,
-                        netFixedAsset:values.netFixedAsset,
-                        totalAsset:values.totalAsset,
-                        netAsset:values.netAsset,
-                        grossProfit:values.grossProfit,
-                        netProfit:values.netProfit,
-                        salesRevenue:values.salesRevenue,
-                        year:this.state.year,
+                        managementCost: values.managementCost,
+                        operatingProfit: values.operatingProfit,
+                        variousTax: values.variousTax,
+                        currentAsset: values.currentAsset,
+                        netFixedAsset: values.netFixedAsset,
+                        totalAsset: values.totalAsset,
+                        netAsset: values.netAsset,
+                        grossProfit: values.grossProfit,
+                        netProfit: values.netProfit,
+                        salesRevenue: values.salesRevenue,
+                        year: this.state.year || this.props.data.year,
                         financeUrl: this.state.financeUrl
                     }
                 }).done(function (data) {
@@ -276,7 +281,9 @@ const FinanceDesc = React.createClass({
                         width='800px'
                         footer=''
                     >
-                        <FinanceDescFrom data={this.props.data}
+                        <FinanceDescFrom
+                            uid={this.props.uid}
+                            data={this.props.data}
                             spinState={this.spinChange} closeModal={this.handleCancel} />
                     </Modal>
                 </Spin>
@@ -292,13 +299,14 @@ const Finance = React.createClass({
             loading: true
         });
         $.ajax({
-            method: "get",
+            method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/finance",
+            url: globalConfig.context + "/api/admin/finance",
             data: {
                 pageNo: pageNo || 1,
-                pageSize: this.state.pagination.pageSize
+                pageSize: this.state.pagination.pageSize,
+                uid: this.props.data.uid
             }
         }).done((data) => {
             if (data.error.length || !data.data || !data.data.list) {
@@ -483,7 +491,9 @@ const Finance = React.createClass({
                             onRowClick={this.tableRowClick} />
                     </Spin>
                 </div>
-                <FinanceDesc data={this.state.RowData}
+                <FinanceDesc
+                    uid={this.props.data.uid}
+                    data={this.state.RowData}
                     showDesc={this.state.showDesc} closeDesc={this.closeDesc} />
             </div >
         );

+ 18 - 11
js/component/manageCenter/servicesManage/highTech/fosterDesc/honorList.jsx

@@ -21,10 +21,12 @@ const HonorListDescFrom = Form.create()(React.createClass({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/techservice/cognizance/disposeHonor",
+                    url: globalConfig.context + "/api/admin/disposeHonor",
                     data: {
                         id: this.props.data.id,
+                        uid: this.props.uid,
                         name: values.name,
+                        issuingMechanism: values.issuingMechanism,
                         issuingTimeFormattedDate: values.issuingTimeFormattedDate.format("YYYY-MM-DD"),
                         enclosureUrl: this.state.enclosureUrl
                     }
@@ -80,9 +82,9 @@ const HonorListDescFrom = Form.create()(React.createClass({
                         {...formItemLayout}
                         label="发证机构"
                     >
-                        {getFieldDecorator('fazhengjigou', {
+                        {getFieldDecorator('issuingMechanism', {
                             rules: [{ required: true, message: '此项为必填项!' }],
-                            initialValue: theData.fazhengjigou
+                            initialValue: theData.issuingMechanism
                         })(
                             <Input />
                             )}
@@ -159,7 +161,9 @@ const HonorListDesc = React.createClass({
                         width='800px'
                         footer=''
                     >
-                        <HonorListDescFrom data={this.props.data}
+                        <HonorListDescFrom
+                            uid={this.props.uid}
+                            data={this.props.data}
                             spinState={this.spinChange} closeModal={this.handleCancel} />
                     </Modal>
                 </Spin>
@@ -175,13 +179,14 @@ const HonorList = React.createClass({
             loading: true
         });
         $.ajax({
-            method: "get",
+            method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/honorList",
+            url: globalConfig.context + "/api/admin/honorList",
             data: {
                 pageNo: pageNo || 1,
-                pageSize: this.state.pagination.pageSize
+                pageSize: this.state.pagination.pageSize,
+                uid: this.props.data.uid
             }
         }).done((data) => {
             if (data.error.length || !data.data || !data.data.list) {
@@ -198,7 +203,7 @@ const HonorList = React.createClass({
                     issuingTime: thisdata.issuingTime,
                     enclosureUrl: thisdata.enclosureUrl,
                     issuingTimeFormattedDate: thisdata.issuingTimeFormattedDate,
-                    fazhengjigou: thisdata.fazhengjigou
+                    issuingMechanism: thisdata.issuingMechanism
                 });
             };
             this.state.pagination.current = data.data.pageNo;
@@ -241,8 +246,8 @@ const HonorList = React.createClass({
                     key: 'issuingTimeFormattedDate'
                 }, {
                     title: '发证机构',
-                    dataIndex: 'fazhengjigou',
-                    key: 'fazhengjigou'
+                    dataIndex: 'issuingMechanism',
+                    key: 'issuingMechanism'
                 }, {
                     title: '相关附件',
                     dataIndex: 'enclosureUrl',
@@ -342,7 +347,9 @@ const HonorList = React.createClass({
                             onRowClick={this.tableRowClick} />
                     </Spin>
                 </div>
-                <HonorListDesc data={this.state.RowData}
+                <HonorListDesc
+                    uid={this.props.data.uid}
+                    data={this.state.RowData}
                     showDesc={this.state.showDesc} closeDesc={this.closeDesc} />
             </div >
         );

+ 38 - 5
js/component/manageCenter/servicesManage/highTech/fosterDesc/hrSituation.jsx

@@ -49,7 +49,7 @@ const HrSituationDescFrom = Form.create()(React.createClass({
                     url: globalConfig.context + "/api/admin/updateOrgHumanResource",
                     data: {
                         id: this.props.data.id,
-                        uid: this.props.data.uid,
+                        uid: this.props.uid,
                         year: values.data.year,
                         aboveFifty: values.aboveFifty,
                         belowThirty: values.belowThirty,
@@ -78,7 +78,9 @@ const HrSituationDescFrom = Form.create()(React.createClass({
                         thirtyoneToThirtyfour: values.thirtyoneToThirtyfour,
                         undergraduate: values.undergraduate,
                         rosterUrl: this.state.rosterUrl,
-                        socialSecurityUrl: this.state.socialSecurityUrl
+                        socialSecurityUrl: this.state.socialSecurityUrl,
+                        neweEmployment: values.neweEmployment,
+                        graduateNumber: values.graduateNumber
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
@@ -405,6 +407,31 @@ const HrSituationDescFrom = Form.create()(React.createClass({
                             )}
                     </FormItem>
                 </div>
+                <p className="hrSituation-title">每年新增员工数</p>
+                <div className="clearfix">
+                    <FormItem
+                        labelCol={{ span: 16 }}
+                        wrapperCol={{ span: 8 }}
+                        label="新增就业人数"
+                    >
+                        {getFieldDecorator('neweEmployment', {
+                            initialValue: this.props.data.neweEmployment || null
+                        })(
+                            <InputNumber />
+                            )}
+                    </FormItem>
+                    <FormItem
+                        labelCol={{ span: 16 }}
+                        wrapperCol={{ span: 8 }}
+                        label="高校应届毕业生人数"
+                    >
+                        {getFieldDecorator('graduateNumber', {
+                            initialValue: this.props.data.graduateNumber || null
+                        })(
+                            <InputNumber />
+                            )}
+                    </FormItem>
+                </div>
                 <div className="hrSituation-roster">
                     <Upload
                         name="socialSecurity"
@@ -502,7 +529,9 @@ const HrSituationDesc = React.createClass({
                         width='1200px'
                         footer=''
                     >
-                        <HrSituationDescFrom data={this.props.data}
+                        <HrSituationDescFrom
+                            uid={this.props.uid}
+                            data={this.props.data}
                             spinState={this.spinChange} closeModal={this.handleCancel} />
                     </Modal>
                 </Spin>
@@ -565,7 +594,9 @@ const HrSituation = React.createClass({
                     techTotal: thisdata.techTotal,
                     thirtyoneToThirtyfour: thisdata.thirtyoneToThirtyfour,
                     undergraduate: thisdata.undergraduate,
-                    attachment: [thisdata.rosterDownloadFileName, thisdata.socialSecurityDownloadFileName]
+                    attachment: [thisdata.rosterDownloadFileName, thisdata.socialSecurityDownloadFileName],
+                    neweEmployment: thisdata.neweEmployment,
+                    graduateNumber: this.graduateNumber
                 });
             };
             this.state.pagination.current = data.data.pageNo;
@@ -715,7 +746,9 @@ const HrSituation = React.createClass({
                             onRowClick={this.tableRowClick} />
                     </Spin>
                 </div>
-                <HrSituationDesc data={this.state.RowData}
+                <HrSituationDesc
+                    uid={this.props.data.uid}
+                    data={this.state.RowData}
                     showDesc={this.state.showDesc} closeDesc={this.closeDesc} />
             </div >
         );

+ 13 - 7
js/component/manageCenter/servicesManage/highTech/fosterDesc/innovationAbility.jsx

@@ -16,9 +16,12 @@ const Base = React.createClass({
             loading: true
         });
         $.ajax({
-            method: "get",
+            method: "post",
             dataType: "json",
-            url: globalConfig.context + "/api/user/ability",
+            url: globalConfig.context + "/api/admin/able",
+            data: {
+                uid: this.props.data.uid
+            },
             success: function (data) {
                 if (data.data) {
                     this.setState({
@@ -27,6 +30,8 @@ const Base = React.createClass({
                         researchInnovation: data.data.researchInnovation,
                         personnel: data.data.personnel
                     });
+                } else if (data.error && data.error.length) {
+                    message.warning(data.error[0].message);
                 };
             }.bind(this),
         }).always(function () {
@@ -44,12 +49,13 @@ const Base = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/user/userAbility",
+            url: globalConfig.context + "/api/admin/disposeAble",
             data: {
-                "intellectRight": this.state.intellectRight,
-                "scienceAchievement": this.state.scienceAchievement,
-                "researchInnovation": this.state.researchInnovation,
-                "personnel": this.state.personnel
+                uid:this.props.data.uid,
+                intellectRight: this.state.intellectRight,
+                scienceAchievement: this.state.scienceAchievement,
+                researchInnovation: this.state.researchInnovation,
+                personnel: this.state.personnel
 
             }
         }).done(function (data) {

+ 0 - 1
js/component/manageCenter/servicesManage/highTech/fosterDesc/intellectual.jsx

@@ -2,7 +2,6 @@ import React from 'react';
 import { Icon, Button, Input, Spin, Table, message, Select, Modal, DatePicker } from 'antd';
 import { techFieldList, technicalSourceList } from '../../../../dataDic.js';
 import { getCatagory, getIntellectualObtainWay } from '../../../../tools.js';
-import './intellectual.less';
 import moment from 'moment';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';

+ 0 - 57
js/component/manageCenter/servicesManage/highTech/fosterDesc/intellectual.less

@@ -1,57 +0,0 @@
-.user-content {
-    background: #fff;
-    padding: 20px;
-    .content-title {
-        font-size: 16px;
-        color: #333;
-    }
-    .user-search {
-        margin: 20px 0;
-        input {
-            width: 200px;
-        }
-        >* {
-            margin-right: 20px;
-        }
-        p {
-            margin-top: 20px;
-            button {
-                margin-right: 20px;
-            }
-        }
-    }
-}
-
-.admin-desc-content {
-    .ant-modal-body {
-        >div {
-            margin-top: 10px;
-            p {
-                margin: 6px 0;
-            }
-        }
-    }
-    .half-div {
-        width: 50%;
-        float: left;
-        margin-top: 10px;
-        >span {
-            display: inline-block;
-            width: 100px;
-        }
-        >input {
-            width: 60%;
-        }
-        >textarea {
-            width: 94%;
-        }
-    }
-}
-
-.ant-form {
-    .ant-form-item {
-        .ant-form-item-label {
-            text-align: right;
-        }
-    }
-}

+ 46 - 17
js/component/manageCenter/servicesManage/highTech/fosterDesc/orgTechCenter.jsx

@@ -21,9 +21,10 @@ const CenterListDescFrom = Form.create()(React.createClass({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/techservice/cognizance/disposeHonor",
+                    url: globalConfig.context + "/techservice/cognizance/disposeCenterDetail",
                     data: {
                         id: this.props.data.id,
+                        uid: this.props.uid,
                         projectName: values.projectName,
                         projectTime: values.projectTime.format("YYYY-MM-DD"),
                         institution: values.institution,
@@ -187,15 +188,18 @@ const CenterList = React.createClass({
             loading: true
         });
         $.ajax({
-            method: "get",
+            method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/center",
+            url: globalConfig.context + "/api/admin/center",
             data: {
+                uid: this.props.data.uid
             }
         }).done((data) => {
-            if (data.error.length || !data.data) {
-                message.warning(data.error[0].message);
+            if (!data.data) {
+                if (data.error.length) {
+                    message.warning(data.error[0].message);
+                };
                 return;
             };
             this.state.cid = data.data.id;
@@ -204,7 +208,7 @@ const CenterList = React.createClass({
             this.state.systemCatalog = data.data.systemCatalog;
             this.state.systemUrl = data.data.systemUrl;
             this.state.centerName = data.data.centerName;
-            this.state.beizhu = data.data.beizhu;
+            this.state.comment = data.data.comment;
             this.loadData();
         }).always(function () {
             this.setState({
@@ -225,7 +229,7 @@ const CenterList = React.createClass({
             data: {
                 pageNo: pageNo || 1,
                 pageSize: this.state.pagination.pageSize,
-                cid: this.state.cid
+                cid: this.state.cid,
             }
         }).done((data) => {
             if (data.error.length || !data.data || !data.data.list) {
@@ -330,7 +334,7 @@ const CenterList = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteHonor",
+            url: globalConfig.context + "/techservice/cognizance/deleteOrgTechCenterDetail",
             data: {
                 ids: deletedIds
             }
@@ -350,11 +354,35 @@ const CenterList = React.createClass({
         this.state.showDesc = e;
         this.loadData();
     },
-    search() {
-        this.loadData();
-    },
-    reset() {
-        this.loadData();
+    saveCenterDetail() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/disposeCenter",
+            data: {
+                uid: this.props.data.uid,
+                principal: this.state.principal,
+                systemUrl: this.state.systemUrl,
+                systemCatalog: this.state.systemCatalog,
+                foundingTimeFormattedDate: this.state.foundingTime,
+                comment: this.state.comment,
+                centerName: this.state.centerName
+            }
+        }).done((data) => {
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.loadOrgTechCenterDetail();
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+        });
     },
     render() {
         const rowSelection = {
@@ -370,11 +398,11 @@ const CenterList = React.createClass({
         return (
             <div className="user-content" >
                 <div className="content-title">
-                    <span>技术中心</span>
+                    <span>研发部门</span>
                 </div>
                 <div className="clearfix">
                     <div className="orgTech-item">
-                        <span>中心名称: </span>
+                        <span>研发部门名称: </span>
                         <Input
                             value={this.state.centerName}
                             onChange={(e) => { this.setState({ centerName: e.target.value }); }}
@@ -400,8 +428,8 @@ const CenterList = React.createClass({
                     <div className="orgTech-item">
                         <span>备注: </span>
                         <Input type='textarea' rows={3}
-                            value={this.state.beizhu}
-                            onChange={(e) => { this.setState({ beizhu: e.target.value }); }}
+                            value={this.state.comment}
+                            onChange={(e) => { this.setState({ comment: e.target.value }); }}
                         />
                     </div>
                 </div>
@@ -427,6 +455,7 @@ const CenterList = React.createClass({
                         <Button><Icon type="upload" /> 上传文件 </Button>
                     </Upload>
                 </div>
+                <Button type='primary' onClick={this.saveCenterDetail} style={{ marginBottom: '10px' }}>保存</Button>
                 <div className="content-title">
                     <span>产学研情况</span>
                 </div>

+ 32 - 2
js/component/manageCenter/servicesManage/highTech/fosterDesc/ratepay.jsx

@@ -24,6 +24,10 @@ const RatepayDescFrom = Form.create()(React.createClass({
     },
     handleSubmit(e) {
         e.preventDefault();
+        if (!this.state.year && !this.props.data.year) {
+            message.warning("请选择一个年份!")
+            return;
+        };
         this.props.form.validateFields((err, values) => {
             if (!err) {
                 this.props.spinState(true);
@@ -42,8 +46,10 @@ const RatepayDescFrom = Form.create()(React.createClass({
                         nonTaxableIncome: values.nonTaxableIncome,
                         taxExemptIncome: values.taxExemptIncome,
                         subsidyIncome: values.subsidyIncome,
-                        year: this.state.year,
-                        taxReturnUrl: this.state.ratepayUrl,
+                        grossProfit: values.grossProfit,
+                        researchCost: values.researchCost,
+                        year: this.state.year || this.props.data.year,
+                        taxReturnUrl: this.state.ratepayUrl
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
@@ -157,6 +163,28 @@ const RatepayDescFrom = Form.create()(React.createClass({
                             <InputNumber />
                             )}
                     </FormItem>
+                    <FormItem className="half-item"
+                        {...formItemLayout}
+                        label="利润总额(万元)"
+                    >
+                        {getFieldDecorator('grossProfit', {
+                            rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                            initialValue: theData.grossProfit
+                        })(
+                            <InputNumber />
+                            )}
+                    </FormItem>
+                    <FormItem className="half-item"
+                        {...formItemLayout}
+                        label="研发费用(万元)"
+                    >
+                        {getFieldDecorator('researchCost', {
+                            rules: [{ type: 'number', required: true, message: '此项为必填项!' }],
+                            initialValue: theData.researchCost
+                        })(
+                            <InputNumber />
+                            )}
+                    </FormItem>
                 </div>
                 <div className="hrSituation-roster">
                     <Upload
@@ -274,6 +302,8 @@ const Ratepay = React.createClass({
                     nonTaxableIncome: thisdata.nonTaxableIncome,
                     taxExemptIncome: thisdata.taxExemptIncome,
                     subsidyIncome: thisdata.subsidyIncome,
+                    researchCost: thisdata.researchCost,
+                    grossProfit: thisdata.grossProfit,
                     year: thisdata.year,
                     taxReturnUrl: thisdata.taxReturnUrl
                 });

+ 0 - 1
js/component/manageCenter/servicesManage/highTech/fosterDesc/standard.jsx

@@ -1,6 +1,5 @@
 import React from 'react';
 import { Icon, Button, Input, Spin, Table, message, Radio, Select, Modal } from 'antd';
-import './standard.less';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 

+ 0 - 32
js/component/manageCenter/servicesManage/highTech/fosterDesc/standard.less

@@ -1,32 +0,0 @@
-.user-content {
-    background: #fff;
-    padding: 20px;
-    .content-title {
-        font-size: 16px;
-        color: #333;
-    }
-    .user-search {
-        margin: 20px 0 ;
-        input {
-            width: 200px;
-        }
-        >* {
-            margin-right: 20px;
-        }
-        p {
-            margin-top:20px; 
-            button {
-                margin-right: 20px;
-            }
-        }
-    }
-}
-.admin-desc-content {
-    .ant-modal-body {
-        >div {
-            p {
-                margin: 6px 0;
-            }
-        }
-    }
-}

+ 12 - 11
js/component/manageCenter/servicesManage/highTech/fosterDesc/techProduct.jsx

@@ -2,7 +2,6 @@ import React from 'react';
 import { Icon, Upload, Form, Button, Radio, Input, Spin, Table, message, Select, Modal, DatePicker, Cascader, Transfer, InputNumber } from 'antd';
 import { techFieldList, technicalSourceList } from '../../../../dataDic.js';
 import { getTechField, getTechnicalSource, beforeUploadFile } from '../../../../tools.js';
-import './techProduct.less';
 import moment from 'moment';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
@@ -26,13 +25,10 @@ const TechProductDescFrom = Form.create()(React.createClass({
         this.state.targetKeys = this.props.data.intellectualPropertyNumber || [];
     },
     componentWillReceiveProps(nextProps) {
-        if (nextProps.data.intellectualPropertyNumber) {
-            this.state.targetKeys = nextProps.data.intellectualPropertyNumber;
-        };
-        // if ( !nextProps.data.id) {
-        //     this.state.targetKeys = [];
-        //     this.props.form.resetFields();
-        // }
+        if (this.props.resetForm) {
+            this.state.targetKeys = nextProps.data.intellectualPropertyNumber || [];
+            this.props.form.resetFields();
+        }
     },
     handleSubmit(e) {
         e.preventDefault();
@@ -58,7 +54,8 @@ const TechProductDescFrom = Form.create()(React.createClass({
                         intellectualPropertyNumber: this.state.targetKeys ? this.state.targetKeys.join(",") : '',
                         keyTechnology: values.keyTechnology,
                         competitiveEdge: values.competitiveEdge,
-                        conditionEffect: values.conditionEffect
+                        conditionEffect: values.conditionEffect,
+                        accountUrl: this.state.accountUrl
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
@@ -231,7 +228,7 @@ const TechProductDescFrom = Form.create()(React.createClass({
                 </div>
                 <div style={{ width: '50%' }}>
                     <Upload
-                        name="ratepay"
+                        name="account"
                         action={globalConfig.context + "/techservice/cognizance/upload"}
                         data={{ 'sign': this.props.year + 'proof' }}
                         beforeUpload={beforeUploadFile}
@@ -241,7 +238,7 @@ const TechProductDescFrom = Form.create()(React.createClass({
                             }
                             if (info.file.status === 'done') {
                                 message.success(`${info.file.name} 文件上传成功!`);
-                                this.state.proofUrl = info.file.response.data;
+                                this.state.accountUrl = info.file.response.data;
                             } else if (info.file.status === 'error') {
                                 message.error(`${info.file.name} 文件上传失败。`);
                             }
@@ -272,17 +269,20 @@ const TechProductDesc = React.createClass({
     showModal() {
         this.setState({
             visible: true,
+            resetForm: false
         });
     },
     handleOk() {
         this.setState({
             visible: false,
+            resetForm: true
         });
         this.props.closeDesc(false);
     },
     handleCancel(e) {
         this.setState({
             visible: false,
+            resetForm: true
         });
         this.props.closeDesc(false);
     },
@@ -303,6 +303,7 @@ const TechProductDesc = React.createClass({
                         <TechProductDescFrom
                             data={this.props.data}
                             uid={this.props.uid}
+                            resetForm={this.state.resetForm}
                             mockData={this.props.mockData}
                             spinState={this.spinChange} closeModal={this.handleCancel} />
                     </Modal>

+ 1 - 0
js/component/manageCenter/servicesManage/highTech/fosterDesc/techProduct.less

@@ -1,4 +1,5 @@
 .user-content {
+    padding: 0px;
     .clearfix {
         >.orgTech-item {
             width: 60%;

+ 1 - 0
js/component/manageCenter/servicesManage/highTech/highTechFoster.jsx

@@ -208,6 +208,7 @@ const Patent = React.createClass({
             fosterDisplay: 'block',
             fosterDescDisplay: 'none'
         });
+        this.loadData();
     },
     render() {
         return (

+ 17 - 3
js/component/tools.js

@@ -9,7 +9,8 @@ import {
     technicalSourceList,
     catagoryList,
     intellectualGetList,
-    conversionFormList
+    conversionFormList,
+    annualReportStateList
 } from './dataDic.js';
 
 module.exports = {
@@ -187,8 +188,10 @@ module.exports = {
                 };
             }
         };
-        fieldList.sort(function (a, b) { return a.value - b.value });
-        let fieldKey= "";
+        fieldList.sort(function (a, b) {
+            return a.value - b.value
+        });
+        let fieldKey = "";
         fieldList.map(function (item) {
             if (field1 == item.value) {
                 fieldKey = item.label;
@@ -234,5 +237,16 @@ module.exports = {
             });
             return theType;
         }
+    },
+    getAnnualReportState: function (e) {
+        if (e) {
+            let theType = '';
+            annualReportStateList.map(function (item) {
+                if (item.value == e) {
+                    theType = item.key;
+                };
+            });
+            return theType;
+        }
     }
 }