Просмотр исходного кода

Accept Merge Request #39 v1.0.34 merge : (test -> master)

Merge Request: v1.0.34 merge
Created By: @seirios
Accepted By: @seirios
URL: https://coding.net/t/aft/p/AFT-WEB/git/merge/39
seirios лет назад: 7
Родитель
Сommit
7a3995a971
75 измененных файлов с 1488 добавлено и 733 удалено
  1. BIN
      image/QR_ico.png
  2. BIN
      image/achievement_ico_1.png
  3. BIN
      image/achievement_ico_2.png
  4. BIN
      image/avatar1.png
  5. BIN
      image/avatar2.png
  6. BIN
      image/avatar3.png
  7. BIN
      image/avatar4.png
  8. BIN
      image/avatarImg.png
  9. BIN
      image/bg.jpg
  10. BIN
      image/demand_ico_1.png
  11. BIN
      image/demand_ico_2.png
  12. BIN
      image/demand_ico_3.png
  13. BIN
      image/demand_ico_4.png
  14. BIN
      image/demand_ico_5.png
  15. BIN
      image/footer_ico_1.png
  16. BIN
      image/footer_ico_2.png
  17. BIN
      image/idcard1.png
  18. BIN
      image/idcard2.png
  19. BIN
      image/index_more_ico.png
  20. BIN
      image/slide_img_1.png
  21. 8 2
      js/admin/login.js
  22. 2 1
      js/component/DicTechFieldList.js
  23. 1 1
      js/component/NewDicProvinceList.js
  24. 2 20
      js/component/account/achievement/techAchievementDesc.jsx
  25. 4 8
      js/component/account/demand/techDemandDesc.jsx
  26. 1 1
      js/component/account/index/normal.jsx
  27. 1 1
      js/component/account/services/content.jsx
  28. 22 7
      js/component/account/set/changeMobile.jsx
  29. 14 12
      js/component/account/set/edu.jsx
  30. 1 1
      js/component/account/set/tech.jsx
  31. 34 35
      js/component/certify/audit.jsx
  32. 9 8
      js/component/certify/bank.jsx
  33. 9 10
      js/component/certify/certify.less
  34. 5 4
      js/component/certify/content.jsx
  35. 3 1
      js/component/certify/personal.jsx
  36. 12 10
      js/component/certify/result.jsx
  37. 6 6
      js/component/dataDic.js
  38. 23 28
      js/component/groupCertify/audit.jsx
  39. 5 11
      js/component/groupCertify/bank.jsx
  40. 8 9
      js/component/groupCertify/certify.less
  41. 5 8
      js/component/groupCertify/confirm.jsx
  42. 5 4
      js/component/groupCertify/content.jsx
  43. 10 6
      js/component/groupCertify/personal.jsx
  44. 7 8
      js/component/groupCertify/result.jsx
  45. 9 6
      js/component/login/login.less
  46. 4 4
      js/component/manageCenter/achievement/achievementOrder.jsx
  47. 4 4
      js/component/manageCenter/achievement/techAchievement.jsx
  48. 33 12
      js/component/manageCenter/achievement/techAchievementDesc.jsx
  49. 4 4
      js/component/manageCenter/demand/demandOrder.jsx
  50. 3 3
      js/component/manageCenter/demand/techDemand.jsx
  51. 2 6
      js/component/manageCenter/demand/techDemandDesc.jsx
  52. 1 1
      js/component/manageCenter/servicesManage/contract/contractAdd.jsx
  53. 4 3
      js/component/manageCenter/servicesManage/highTech/highTechApply.jsx
  54. 6 6
      js/component/manageCenter/servicesManage/highTech/highTechInfo.jsx
  55. 7 4
      js/component/manageCenter/userManage/highTechSearch.jsx
  56. 2 5
      js/component/manageCenter/userManage/orgDesc.jsx
  57. 2 2
      js/component/manageCenter/userManage/orgList.jsx
  58. 2 2
      js/component/manageCenter/userManage/userDesc.jsx
  59. 11 0
      js/component/manageCenter/userManage/userList.less
  60. 50 3
      js/component/portal/footer.jsx
  61. 293 27
      js/component/portal/portal.less
  62. 106 88
      js/component/portal/search/achievement.jsx
  63. 3 3
      js/component/portal/search/achievementDesc.jsx
  64. 44 51
      js/component/portal/search/demand.jsx
  65. 1 1
      js/component/portal/search/demandDesc.jsx
  66. 140 155
      js/component/portal/search/subscriber.jsx
  67. 284 0
      js/component/portal/search/subscriberUser.jsx
  68. 115 13
      js/component/portal/top.jsx
  69. 124 119
      js/component/sign/groupAccount.jsx
  70. 1 1
      js/component/tools.js
  71. 1 1
      js/portal/search/subscriber.js
  72. 17 0
      js/portal/search/subscriberUser.js
  73. 1 1
      package.json
  74. 9 3
      webpack.config.js
  75. 8 3
      webpack/entry.config.js

BIN
image/QR_ico.png


BIN
image/achievement_ico_1.png


BIN
image/achievement_ico_2.png


BIN
image/avatar1.png


BIN
image/avatar2.png


BIN
image/avatar3.png


BIN
image/avatar4.png


BIN
image/avatarImg.png



BIN
image/demand_ico_1.png


BIN
image/demand_ico_2.png


BIN
image/demand_ico_3.png


BIN
image/demand_ico_4.png


BIN
image/demand_ico_5.png


BIN
image/footer_ico_1.png


BIN
image/footer_ico_2.png


BIN
image/idcard1.png


BIN
image/idcard2.png


BIN
image/index_more_ico.png


BIN
image/slide_img_1.png


+ 8 - 2
js/admin/login.js

@@ -1,10 +1,16 @@
 import React from 'react';
 import ReactDOM from 'react-dom';
-import Login from '../component/login/adminLogin.jsx';
+import '../../css/base.less';
+import '../../css/login.less';
+import LoginContent from '../component/login/adminLogin.jsx';
+import LoginTop from '../component/login/loginTop.jsx';
+import LoginFooter from '../component/login/loginFooter.jsx';
 
 ReactDOM.render(
     <div className="wrap clearfix">
-        <Login />
+        <LoginTop />
+        <LoginContent />
+        <LoginFooter />
     </div>,
     document.getElementById('root')
 )

+ 2 - 1
js/component/DicTechFieldList.js

@@ -999,7 +999,8 @@ const techFieldArr = [{
     }]
 }, {
     value: "9",
-    label: "其他领域"
+    label: "其他领域",
+    children:[]
 }]
 
 module.exports = {

+ 1 - 1
js/component/NewDicProvinceList.js

@@ -3351,7 +3351,7 @@ const addressList = [{
                     },
                     {
                         "id": 1107,
-                        "name": "口区"
+                        "name": "口区"
                     },
                     {
                         "id": 1108,

+ 2 - 20
js/component/account/achievement/techAchievementDesc.jsx

@@ -1214,20 +1214,6 @@ const AchievementDetail = React.createClass({
                     dataIndex: 'serialNumber',
                     key: 'serialNumber',
                 }, {
-                    title: '数据类型',
-                    dataIndex: 'dataCategory',
-                    key: 'dataCategory',
-                    render: text => {
-                        switch (text) {
-                            case "0":
-                                return <span>成果</span>;
-                            case "1":
-                                return <span>技术</span>;
-                            case "2":
-                                return <span>项目</span>;
-                        }
-                    }
-                }, {
                     title: '名称',
                     dataIndex: 'name',
                     key: 'name',
@@ -1301,11 +1287,7 @@ const AchievementDetail = React.createClass({
         }.bind(this));
     },
     tableRowClick(record, index) {
-        if (record.ownerType == "0") {
-            window.open(globalConfig.context + '/user/account/demand.html?rid=' + record.id + '#techDemandOrg');
-        } else if (record.ownerType == "1") {
-            window.open(globalConfig.context + '/user/account/demand.html?rid=' + record.id + '#techDemandUser')
-        };
+        window.open(globalConfig.context + '/portal/detail/demandDetail.html?id=' + record.id + '&type=' + record.dataCategory);
     },
     showModal() {
         this.setState({
@@ -1350,7 +1332,7 @@ const AchievementDetail = React.createClass({
                             }} >
                             <Tabs.TabPane tab="成果详情" key="1">
                                 {(() => {
-                                    if (this.props.data.auditStatus && this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4") {
+                                    if (this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4") {
                                         return <AchievementDetailShow
                                             data={this.props.data}
                                             closeDesc={this.handleCancel}

+ 4 - 8
js/component/account/demand/techDemandDesc.jsx

@@ -835,7 +835,7 @@ const DemandDetailForm = Form.create()(React.createClass({
                             {getFieldDecorator('peopleNumber', {
                                 initialValue: theData.peopleNumber
                             })(
-                                <InputNumber min={0} max={999999} step={1}/>
+                                <InputNumber min={0} max={999999} step={1} />
                                 )}
                             <span style={{ marginLeft: '20px' }}>人</span>
                         </FormItem>
@@ -857,7 +857,7 @@ const DemandDetailForm = Form.create()(React.createClass({
                             {getFieldDecorator('budgetCost', {
                                 initialValue: theData.budgetCost
                             })(
-                                <InputNumber min={0} max={999999} step={0.01}/>
+                                <InputNumber min={0} max={999999} step={0.01} />
                                 )}
                             <span style={{ marginLeft: '20px' }}>万元</span>
                         </FormItem>
@@ -1049,11 +1049,7 @@ const DemandDetail = React.createClass({
         }.bind(this));
     },
     tableRowClick(record, index) {
-        if (record.ownerType == "0") {
-            window.open(globalConfig.context + '/user/account/achievement.html?rid=' + record.id + '#orgTechAchievement');
-        } else if (record.ownerType == "1") {
-            window.open(globalConfig.context + '/user/account/achievement.html?rid=' + record.id + '#userTechAchievement')
-        };
+        window.open(globalConfig.context + '/portal/detail/achievementDetail.html?id=' + record.id + '&type=' + record.ownerType);
     },
     showModal() {
         this.setState({
@@ -1101,7 +1097,7 @@ const DemandDetail = React.createClass({
                             }} >
                             <Tabs.TabPane tab="需求详情" key="1">
                                 {(() => {
-                                    if (this.props.data.auditStatus && this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4") {
+                                    if (this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4") {
                                         return <DemandDetailShow
                                             data={this.props.data}
                                             demandTypeOption={this.props.demandTypeOption}

+ 1 - 1
js/component/account/index/normal.jsx

@@ -66,7 +66,7 @@ const Content = React.createClass({
             <Spin spinning={this.state.loading} className='spin-box'>
                 <div className="index-content">
                     <div className="index-userdata clearfix">
-                        <p className="acc-title">欢迎, No.<span>{this.state.number}</span>     </p>
+                        <p className="acc-title">欢迎, <span>{this.state.nickname || ('No.' + this.state.number)}</span>     </p>
                         <div className="userdata-img">
                             {this.state.personPortraitUrl || this.state.logoUrl ?
                                 <img src={globalConfig.avatarHost + "/upload" + (this.state.type == 0 ? this.state.personPortraitUrl : this.state.logoUrl)} alt="" />

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

@@ -7,7 +7,7 @@ const Content = React.createClass({
     getInitialState() {
         return {
             loading: false,
-            leftKey: 'contract',
+            leftKey: (window.userData.type == 1) ? 'contract' : 'evaluate',
             component: null,
             userType: '0',
             params: {}

+ 22 - 7
js/component/account/set/changeMobile.jsx

@@ -10,7 +10,8 @@ const ChangePw = React.createClass({
             visible: false,
             getCodeButton: false,
             checkMobile: false,
-            vsCodeSrc: globalConfig.context + '/open/getVCode'
+            vsCodeSrc: globalConfig.context + '/open/getVCode',
+            mCodeText: '获取验证码'
         };
     },
     showModal() {
@@ -36,20 +37,20 @@ const ChangePw = React.createClass({
                     this.setState({
                         visible: false,
                     });
-                    message.success('修改成功!马上跳转到登录页面,请重新登录!');
+                    message.success('修改成功!3秒后跳转到登录页面,请重新登录!');
                     setInterval(function () {
                         $.ajax({
                             method: "get",
                             dataType: "json",
-                            url: globalConfig.context + "./login",
+                            url: globalConfig.context + "/login",
                         }).done(function (data) {
-                            window.location.href = "../login.html"
+                            window.location.href = globalConfig.context + "/user/login.html"
                         });
                         clearInterval(interval);
                     }, 3000);
                 } else {
                     message.warning(data.error[0].message);
-                }
+                };
             }.bind(this));
         };
     },
@@ -100,7 +101,21 @@ const ChangePw = React.createClass({
                             });
                             clearInterval(interval);
                         }, 60000);
-                    }
+                    };
+                    let i = 59;
+                    let countDown = setInterval(function () {
+                        _me.setState({
+                            mCodeText: '剩余' + i + '秒'
+                        });
+                        i--;
+                        if (i == 0) {
+                            clearInterval(countDown);
+                            _me.setState({
+                                mCodeText: '获取验证码'
+                            });
+                        };
+                    }, 1000);
+                    this.reloadVCode();
                 }.bind(this),
             });
         }
@@ -126,7 +141,7 @@ const ChangePw = React.createClass({
                         </span>
                     </div>
                     <div><span>手机验证码:</span><Input className="mixwidth" onChange={this.mcodeChange} />
-                        <Button onClick={this.getMCode} disabled={this.state.getCodeButton}>获取验证码</Button></div>
+                        <Button style={{width:'92px'}} onClick={this.getMCode} disabled={this.state.getCodeButton}>{this.state.mCodeText}</Button></div>
                 </Modal>
             </div>
         );

+ 14 - 12
js/component/account/set/edu.jsx

@@ -41,7 +41,7 @@ class Avatar extends React.Component {
                 className="avatar-uploader"
                 name="avatar"
                 showUploadList={false}
-                action={globalConfig.context + "/api/user/avatar/uploadReplace"}
+                action={globalConfig.context + "/api/user/identity/upload"}
                 data={{ 'sign': this.props.name }}
                 beforeUpload={beforeUpload}
                 onChange={this.handleChange.bind(this)}
@@ -67,17 +67,19 @@ const EduFrom = Form.create()(React.createClass({
                 if (data.error && data.error.length) {
                     message.warning(data.error[0].message);
                 } else {
-                    this.setState({
-                        id: data.data.id,
-                        edulvl: data.data.education,
-                        eduPfs: data.data.majorCategory ? data.data.majorCategory.split(',') : [],
-                        schoolname: data.data.graduateSchool,
-                        graduationTimeYear: data.data.graduationTimeYear,
-                        edunum: data.data.diplomaCode,
-                        degreenum: data.data.degreeCode,
-                        xueliPicUrl: data.data.diplomaUrl,
-                        xueweiPicUrl: data.data.degreeDiplomaUrl
-                    });
+                    if (data.data) {
+                        this.setState({
+                            id: data.data.id,
+                            edulvl: data.data.education,
+                            eduPfs: data.data.majorCategory ? data.data.majorCategory.split(',') : [],
+                            schoolname: data.data.graduateSchool,
+                            graduationTimeYear: data.data.graduationTimeYear,
+                            edunum: data.data.diplomaCode,
+                            degreenum: data.data.degreeCode,
+                            xueliPicUrl: data.data.diplomaUrl,
+                            xueweiPicUrl: data.data.degreeDiplomaUrl
+                        });
+                    };
                 };
             }.bind(this),
         }).always(function () {

+ 1 - 1
js/component/account/set/tech.jsx

@@ -53,7 +53,7 @@ const TechFrom = Form.create()(React.createClass({
                     data: {
                         "id": this.state.id,
                         "technicalPeopleNum": values.techpeople,
-                        "searchAreaCategory": values.techField.join(','),
+                        "searchAreaCategory": values.techField ? values.techField.join(',') : '',
                         "specialty": specialty
                     }
                 }).done(function (data) {

+ 34 - 35
js/component/certify/audit.jsx

@@ -35,34 +35,34 @@ const Content = Form.create()(React.createClass({
             }
         }.bind(this));
     },
-    loadDate(){
-        this.setState({
-                loading:true
-            });
-        $.ajax({
-            method: "get",
-            dataType: "json",
-            url: globalConfig.context + "/api/user/userPro",
-            success: function (data) {
-                if (data.data) {
-                    this.setState({
-                        bankCardNumber: data.data.bankCardNumber,
-                        auditStatus: data.data.auditStatus
-                    });
-                };
-            }.bind(this),
-        }).done(function (data) {
-            if (data.error && data.error.length) {
-                message.warning(data.error[0].message);
-            };
-            this.setState({
-                loading:false
-            });
-        }.bind(this));
-    },
-    componentWillMount() {
-        this.loadDate();
-    },
+    // loadDate(){
+    //     this.setState({
+    //             loading:true
+    //         });
+    //     $.ajax({
+    //         method: "get",
+    //         dataType: "json",
+    //         url: globalConfig.context + "/api/user/userPro",
+    //         success: function (data) {
+    //             if (data.data) {
+    //                 this.setState({
+    //                     bankCardNumber: data.data.bankCardNumber,
+    //                     auditStatus: data.data.auditStatus
+    //                 });
+    //             };
+    //         }.bind(this),
+    //     }).done(function (data) {
+    //         if (data.error && data.error.length) {
+    //             message.warning(data.error[0].message);
+    //         };
+    //         this.setState({
+    //             loading:false
+    //         });
+    //     }.bind(this));
+    // },
+    // componentWillMount() {
+    //     this.loadDate();
+    // },
     render() {
         const FormItem = Form.Item;
         const { getFieldDecorator } = this.props.form;
@@ -79,18 +79,17 @@ const Content = Form.create()(React.createClass({
                     </FormItem>
                     <FormItem wrapperCol={{ span: 18, offset: 4 }}>
                         <span>
-                            认证系统将会在1-2个工作日内给您的银行卡{this.state.bankCardNumber}转入一笔1元以下的确认金额,
-                            然后在下方正确填写正确的金额数目。
-                            若打款成功,认证系统将会通过短信的方式通知您
+                            认证系统将会在1-2个工作日内审核您的认证信息,请您耐心等待!
                         </span>
                     </FormItem>
-                    <FormItem wrapperCol={{ span: 12, offset: 4 }}>
-                        <Button disabled={this.state.auditStatus == "3" ? false : true} className="set-submit" type="primary" htmlType="submit">输入打款金额</Button>
-                    </FormItem>
                 </Form >
             </Spin >
         );
     },
 }));
 
-export default Content;
+export default Content;
+
+// <FormItem wrapperCol={{ span: 12, offset: 4 }}>
+//                         <Button disabled={this.state.auditStatus == "3" ? false : true} className="set-submit" type="primary" htmlType="submit">输入打款金额</Button>
+//                     </FormItem>

+ 9 - 8
js/component/certify/bank.jsx

@@ -112,7 +112,7 @@ const Content = Form.create()(React.createClass({
                         {getFieldDecorator('username')(
                             <span>{this.state.username}</span>
                         )}
-                        <a style={{ 'color': '#ea0862' }} onClick={_me.changeStep}>修改</a>
+                        <a style={{ 'color': '#ea0862', marginLeft: '20px' }} onClick={_me.changeStep}>修改</a>
                     </FormItem>
                     <FormItem
                         {...formItemLayout}
@@ -129,12 +129,6 @@ const Content = Form.create()(React.createClass({
                     <FormItem
                         {...formItemLayout}
                         label="银行卡号"
-                        extra={
-                            <span style={{ 'color': '#ea0862' }}>
-                                <Icon type="exclamation-circle" />
-                                认证系统会给该银行卡打入一笔1元以下的确认金额,您需要通过银行柜台并在
-                                步骤4输入该银行卡收到的阿凡提打款金额数目
-                            </span>}
                     >
                         {getFieldDecorator('bankCardNumber', {
                             initialValue: this.state.bankCardNumber || null,
@@ -154,4 +148,11 @@ const Content = Form.create()(React.createClass({
     },
 }));
 
-export default Content;
+export default Content;
+
+//  extra={
+//                             <span style={{ 'color': '#ea0862' }}>
+//                                 <Icon type="exclamation-circle" />
+//                                 认证系统会给该银行卡打入一笔1元以下的确认金额,您需要通过银行柜台并在
+//                                 步骤4输入该银行卡收到的阿凡提打款金额数目
+//                             </span>}

+ 9 - 10
js/component/certify/certify.less

@@ -52,9 +52,10 @@
                 }
             }
             .certify-content {
-                min-height: 600px;
+                min-height: 300px;
+                margin-bottom: 100px;
                 .certify-step {
-                    width: 1030px;
+                    width: 880px;
                     height: 60px;
                     margin: 40px auto;
                     border-radius: 8px;
@@ -235,14 +236,10 @@
                             margin: 20px auto;
                             width: 400px;
                             i {
-                                width: 40px;
-                                height: 40px;
-                                border-radius: 50%;
-                                background: #58a3ff;
-                                color: #fff;
+                                color: #58a3ff;
                                 text-align: center;
                                 line-height: 40px;
-                                font-size: 33px;
+                                font-size: 32px;
                                 position: absolute;
                                 top: 6px;
                                 left: 0;
@@ -273,8 +270,7 @@
                             top: -1px;
                             left: -1px;
                             height: 150px;
-                        }
-                        //
+                        } //
                         float: left;
                         margin-right: 20px;
                     }
@@ -287,6 +283,9 @@
                 }
             }
             .footer {
+                position: fixed;
+                width: 100%;
+                bottom: 0;
                 padding: 10px 0;
                 text-align: center;
                 background: #f0f0f0;

+ 5 - 4
js/component/certify/content.jsx

@@ -75,7 +75,8 @@ const Content = React.createClass({
                     step1Class: 'step-off',
                     step2Class: 'step-off',
                     step3Class: 'step-off',
-                    step4Class: 'step-off',
+                    //step4Class: 'step-off',
+                    step4Class: 'step-done',
                     step5Class: 'step-done',
                     step6Class: 'step-doing'
                 });
@@ -130,11 +131,11 @@ const Content = React.createClass({
                     <div className={this.state.step4Class}>
                         {this.state.stepNum > 4 ? <Icon type="check" /> : <i>4</i>}<div>信息审核</div>
                     </div>
-                    <div className={this.state.step5Class}>
+                    <div className={this.state.step5Class} style={{display:'none'}}>
                         {this.state.stepNum > 5 ? <Icon type="check" /> : <i>5</i>}<div><p>填写打入</p><p>卡内金额</p></div>
                     </div>
                     <div className={this.state.step6Class}>
-                        {this.state.stepNum > 6 ? <Icon type="check" /> : <i>6</i>}<div>认证结果</div>
+                        {this.state.stepNum > 6 ? <Icon type="check" /> : <i>5</i>}<div>认证结果</div>
                     </div>
                 </div>
                 <div className="certify-form-box">
@@ -148,7 +149,7 @@ const Content = React.createClass({
                                 return <Confirm changeStep={this.changeStep} />;
                             case 4:
                                 return <Audit changeStep={this.changeStep} />;
-                            case 5:
+                            case 99:
                                 return <Money changeStep={this.changeStep} />;
                             case 6:
                                 return <Result changeStep={this.changeStep} />;

+ 3 - 1
js/component/certify/personal.jsx

@@ -290,7 +290,9 @@ const Content = Form.create()(React.createClass({
                     </FormItem>
                     <FormItem wrapperCol={{ span: 12, offset: 4 }}>
                         <Button className="set-submit" type="primary" htmlType="submit">下一步</Button>
-                        <Button className="exit" type="ghost">退出实名认证</Button>
+                        <Button className="exit" type="ghost" onClick={() => {
+                            window.location.href = globalConfig.context + '/user/account/index.html'
+                        }}>退出实名认证</Button>
                     </FormItem>
                 </Form >
             </Spin >

+ 12 - 10
js/component/certify/result.jsx

@@ -28,7 +28,10 @@ const Content = Form.create()(React.createClass({
                 this.props.changeStep(1);
             } else {
                 message.warning(data.error[0].message);
-            }
+            };
+            this.setState({
+                loading: false
+            });
         }.bind(this));
     },
     componentWillMount() {
@@ -48,7 +51,7 @@ const Content = Form.create()(React.createClass({
                 message.warning(data.error[0].message);
             };
             this.setState({
-                loading:false
+                loading: false
             });
         }.bind(this));
     },
@@ -58,28 +61,27 @@ const Content = Form.create()(React.createClass({
             <Spin spinning={this.state.loading} className="certify-spin">
                 {(() => {
                     switch (this.state.auditStatus) {
-                        case 5:
+                        case '5':
                             return <div className="certify-result-box">
                                 <p className="certify-title"
                                     style={{ 'textAlign': 'center' }}
-                                >输入的金额正确后,即时审核您填写的身份信息,请耐心等待2秒钟;如审核通过,认证申请成功</p>
+                                >审核通过,认证申请成功</p>
                                 <div className="certify-result-state">
-                                    <Icon type="check" />
+                                    <Icon type="check-circle-o" />
                                     <p>您已通过了实名认证</p>
                                 </div>
                             </div>;
-                        case 4:
+                        case '4':
                             return <div className="certify-result-box">
                                 <p className="certify-title"
                                     style={{ 'textAlign': 'center' }}
-                                >若输入金额错误,则实名认证不通过。可重新申请实名认证。</p>
+                                >实名认证未通过。您可以可重新申请实名认证。</p>
                                 <div className="certify-result-state">
-                                    <Icon type="exclamation-circle" />
+                                    <Icon type="close-circle-o" />
                                     <p>您未能通过实名认证审核</p>
                                     <p>可能的原因是:</p>
                                     <p>您提交的认证资料不符合要求,未能通过实名认证;</p>
-                                    <p>您输入的金额有误,未能通过实名认证;</p>
-                                    <p>您未及时在规定的5天期限内输入金额,未能通过实名认证;</p>
+                                    <p>您输入的银行账户信息有误,未能通过实名认证;</p>
                                     <Button className="set-submit" type="primary" onClick={this.handleSubmit}>重新申请实名认证</Button>
                                 </div>
                             </div>;

+ 6 - 6
js/component/dataDic.js

@@ -117,12 +117,12 @@ module.exports = {
         },{
             value: "1",
             key: "提交审核"
-        },{
-            value: "2",
-            key: "审核未打款"
-        },{
-            value: "3",
-            key: "审核已打款"
+        // },{
+        //     value: "2",
+        //     key: "审核未打款"
+        // },{
+        //     value: "3",
+        //     key: "审核已打款"
         },{
             value: "4",
             key: "认证未通过"

+ 23 - 28
js/component/groupCertify/audit.jsx

@@ -36,28 +36,28 @@ const Content = Form.create()(React.createClass({
             });
         }.bind(this));
     },
-    componentWillMount() {
-        $.ajax({
-            method: "get",
-            dataType: "json",
-            url: globalConfig.context + "/api/user/orgProcess",
-            success: function (data) {
-                if (data.data) {
-                    this.setState({
-                        bankCardNumber : data.data.bankCardNumber,
-                        auditStatus : data.data.auditStatus
-                    });
-                };
-            }.bind(this),
-        }).done(function (data) {
-            if (data.error.length) {
-                message.warning(data.error[0].message);
-            };
-            this.setState({
-                loading:false
-            });
-        }.bind(this));
-    },
+    // componentWillMount() {
+    //     $.ajax({
+    //         method: "get",
+    //         dataType: "json",
+    //         url: globalConfig.context + "/api/user/orgProcess",
+    //         success: function (data) {
+    //             if (data.data) {
+    //                 this.setState({
+    //                     bankCardNumber : data.data.bankCardNumber,
+    //                     auditStatus : data.data.auditStatus
+    //                 });
+    //             };
+    //         }.bind(this),
+    //     }).done(function (data) {
+    //         if (data.error.length) {
+    //             message.warning(data.error[0].message);
+    //         };
+    //         this.setState({
+    //             loading:false
+    //         });
+    //     }.bind(this));
+    // },
     render() {
         const FormItem = Form.Item;
         const { getFieldDecorator } = this.props.form;
@@ -74,14 +74,9 @@ const Content = Form.create()(React.createClass({
                     </FormItem>
                     <FormItem wrapperCol={{ span: 18, offset: 4 }}>
                         <span>
-                            认证系统将会在1-2个工作日内给您的银行卡{this.state.bankCardNumber}转入一笔1元以下的确认金额,
-                            然后在下方正确填写正确的金额数目。
-                            若打款成功,认证系统将会通过短信的方式通知您
+                            认证系统将会在1-2个工作日内审核您的认证信息,请您耐心等待!
                         </span>
                     </FormItem>
-                    <FormItem wrapperCol={{ span: 12, offset: 4 }}>
-                        <Button disabled={this.state.auditStatus == "3" ? false : true } className="set-submit" type="primary" htmlType="submit">输入打款金额</Button>
-                    </FormItem>
                 </Form >
             </Spin >
         );

+ 5 - 11
js/component/groupCertify/bank.jsx

@@ -18,7 +18,8 @@ const Content = Form.create()(React.createClass({
             success: function (data) {
                 if (data.data) {
                     this.setState({
-                        contactMobile: data.data.contactMobile,
+                        firstContacts: data.data.firstContacts,
+                        firstMobile: data.data.firstMobile,
                         bankAccount: data.data.bankAccount,
                         address: [data.data.locationProvince, data.data.locationCity, data.data.locationArea],
                         banks: data.data.banks,
@@ -108,7 +109,7 @@ const Content = Form.create()(React.createClass({
                     <FormItem
                         {...formItemLayout}
                         label="银行开户名"
-                        extra={<span><Icon type="exclamation-circle" /> 必须使用以名称为开户名的银行卡进行认证</span>}
+                        extra={<span><Icon type="exclamation-circle" /> 必须使用以名称为开户名的银行卡进行认证</span>}
                     >
                         {getFieldDecorator('bankAccount', {
                             initialValue: this.state.bankAccount || null,
@@ -153,14 +154,7 @@ const Content = Form.create()(React.createClass({
                     </FormItem>
                     <FormItem
                         {...formItemLayout}
-                        label="银行卡号"
-                        extra={
-                            <span style={{ 'color': '#ea0862' }}>
-                                <Icon type="exclamation-circle" />
-                                认证系统会给该银行卡打入一笔1元以下的确认金额,您需要通过银行柜台并在
-                                步骤4输入该银行卡收到的阿凡提打款金额数目
-                            </span>}
-                    >
+                        label="银行卡号" >
                         {getFieldDecorator('bankCardNumber', {
                             initialValue: this.state.bankCardNumber || null,
                             rules: [{
@@ -180,7 +174,7 @@ const Content = Form.create()(React.createClass({
                             </span>}
                     >
                         {getFieldDecorator('contactMobile')(
-                            <span>{this.state.contactMobile}</span>
+                            <span>{this.state.firstContacts + ' ' + this.state.firstMobile}</span>
                         )}
                     </FormItem>
                     <FormItem wrapperCol={{ span: 12, offset: 6 }}>

+ 8 - 9
js/component/groupCertify/certify.less

@@ -52,9 +52,10 @@
                 }
             }
             .certify-content {
-                min-height: 600px;
+                min-height: 300px;
+                margin-bottom: 100px;
                 .certify-step {
-                    width: 1030px;
+                    width: 880px;
                     height: 60px;
                     margin: 40px auto;
                     border-radius: 8px;
@@ -232,11 +233,7 @@
                             margin: 20px auto;
                             width: 400px;
                             i {
-                                width: 40px;
-                                height: 40px;
-                                border-radius: 50%;
-                                background: #58a3ff;
-                                color: #fff;
+                                color: #58a3ff;
                                 text-align: center;
                                 line-height: 40px;
                                 font-size: 33px;
@@ -270,8 +267,7 @@
                             top: -1px;
                             left: -1px;
                             height: 150px;
-                        }
-                        //
+                        } //
                         float: left;
                         margin-right: 20px;
                     }
@@ -284,6 +280,9 @@
                 }
             }
             .footer {
+                position: fixed;
+                width: 100%;
+                bottom: 0;
                 padding: 10px 0;
                 text-align: center;
                 background: #f0f0f0;

+ 5 - 8
js/component/groupCertify/confirm.jsx

@@ -1,6 +1,7 @@
 import React from 'react';
 import { Input, Button, Form, Icon, Spin, message, } from 'antd';
 import './certify.less';
+import { newDownloadFile } from '../tools';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
 
@@ -23,7 +24,8 @@ const Content = Form.create()(React.createClass({
                         orgCode: data.data.orgCode,
                         orgCodeUrl: data.data.orgCodeUrl,
                         lastYearTaxReportUrl: data.data.lastYearTaxReportUrl,
-                        contactMobile: data.data.contactMobile,
+                        firstContacts: data.data.firstContacts,
+                        firstMobile: data.data.firstMobile,
                         bankAccount: data.data.bankAccount,
                         banks: data.data.banks,
                         bankBranch: data.data.bankBranch,
@@ -139,12 +141,7 @@ const Content = Form.create()(React.createClass({
                         wrapperCol={{ span: 18 }}
                         label="上年度纳税报表"
                     >
-                        <div className="idcard-img clearfix">
-                            <div className="idcard-imgbox">
-                                <img src={globalConfig.context + '/open/writeImage?path=' + this.state.lastYearTaxReportUrl} alt="点击查看大图"
-                                    onClick={(e) => { window.open(e.target.src) }} />
-                            </div>
-                        </div>
+                        <a onClick={newDownloadFile.bind(null, this.state.lastYearTaxReportId, "last_year_ratepay", "/api/admin/patent/downloadRatepay")}>上年度纳税报表</a>
                     </FormItem>
                     <FormItem wrapperCol={{ span: 12, offset: 6 }}>
                         <p className="certify-title">请确认银行卡信息</p>
@@ -177,7 +174,7 @@ const Content = Form.create()(React.createClass({
                         {...formItemLayout}
                         label="联系方式"
                     >
-                        <span>{this.state.contactMobile}</span>
+                        <span>{this.state.firstContacts + ' ' + this.state.firstMobile}</span>
                     </FormItem>
                     <FormItem wrapperCol={{ span: 12, offset: 6 }}>
                         <p className="certify-title">请确认法人信息</p>

+ 5 - 4
js/component/groupCertify/content.jsx

@@ -75,7 +75,8 @@ const Content = React.createClass({
                     step1Class: 'step-off',
                     step2Class: 'step-off',
                     step3Class: 'step-off',
-                    step4Class: 'step-off',
+                    //step4Class: 'step-off',
+                    step4Class: 'step-done',
                     step5Class: 'step-done',
                     step6Class: 'step-doing'
                 });
@@ -130,11 +131,11 @@ const Content = React.createClass({
                     <div className={this.state.step4Class}>
                         {this.state.stepNum > 4 ? <Icon type="check" /> : <i>4</i>}<div>信息审核</div>
                     </div>
-                    <div className={this.state.step5Class}>
+                    <div className={this.state.step5Class} style={{display:'none'}}>
                         {this.state.stepNum > 5 ? <Icon type="check" /> : <i>5</i>}<div><p>填写打入</p><p>卡内金额</p></div>
                     </div>
                     <div className={this.state.step6Class}>
-                        {this.state.stepNum > 6 ? <Icon type="check" /> : <i>6</i>}<div>认证结果</div>
+                        {this.state.stepNum > 6 ? <Icon type="check" /> : <i>5</i>}<div>认证结果</div>
                     </div>
                 </div>
                 <div className="certify-form-box">
@@ -148,7 +149,7 @@ const Content = React.createClass({
                                 return <Confirm changeStep={this.changeStep} />;
                             case 4:
                                 return <Audit changeStep={this.changeStep} />;
-                            case 5:
+                            case 99:
                                 return <Money changeStep={this.changeStep} />;
                             case 6:
                                 return <Result changeStep={this.changeStep} />;

+ 10 - 6
js/component/groupCertify/personal.jsx

@@ -97,6 +97,7 @@ const Content = Form.create()(React.createClass({
         return {
             loading: false,
             field: [],
+            fileList: [],
             vsCodeSrc: globalConfig.context + '/open/getVCode'
         };
     },
@@ -117,15 +118,15 @@ const Content = Form.create()(React.createClass({
                 return;
             };
             if (!err) {
-                this.setState({
-                    loading: true
-                });
                 if (values.listed == 1) {
                     if (!values.listedDate || !values.listedType || !values.stockCode) {
                         message.warning("请输入上市资料!");
                         return;
                     };
                 };
+                this.setState({
+                    loading: true
+                });
                 $.ajax({
                     method: "POST",
                     dataType: "json",
@@ -435,7 +436,7 @@ const Content = Form.create()(React.createClass({
                                 action={globalConfig.context + "/api/user/cognizance/uploadLastYearRatepay"}
                                 data={{ 'sign': 'ratepay' }}
                                 beforeUpload={beforeUploadFile}
-                                showUploadList={false}
+                                fileList={this.state.fileList}
                                 onChange={(info) => {
                                     if (info.file.status !== 'uploading') {
                                         console.log(info.file, info.fileList);
@@ -450,7 +451,8 @@ const Content = Form.create()(React.createClass({
                                         this.state.lastYearTaxReportUrl = info.file.response.data;
                                     } else if (info.file.status === 'error') {
                                         message.error(`${info.file.name} 文件上传失败。`);
-                                    }
+                                    };
+                                    this.setState({ fileList: info.fileList.slice(-1) });
                                 }}
                             >
                                 <Button><Icon type="upload" /> 上传上年度纳税申报表 </Button>
@@ -479,7 +481,9 @@ const Content = Form.create()(React.createClass({
                     </FormItem>
                     <FormItem wrapperCol={{ span: 12, offset: 6 }}>
                         <Button className="set-submit" type="primary" htmlType="submit">下一步</Button>
-                        <Button className="exit" type="ghost">退出实名认证</Button>
+                        <Button className="exit" type="ghost" onClick={() => {
+                            window.location.href = globalConfig.context + '/user/account/index.html'
+                        }}>退出实名认证</Button>
                     </FormItem>
                 </Form >
             </Spin >

+ 7 - 8
js/component/groupCertify/result.jsx

@@ -62,28 +62,27 @@ const Content = Form.create()(React.createClass({
             <Spin spinning={this.state.loading} className="certify-spin">
                 {(() => {
                     switch (this.state.auditStatus) {
-                        case "5":
+                        case '5':
                             return <div className="certify-result-box">
                                 <p className="certify-title"
                                     style={{ 'textAlign': 'center' }}
-                                >输入的金额正确后,即时审核您填写的身份信息,请耐心等待2秒钟;如审核通过,认证申请成功</p>
+                                >审核通过,认证申请成功</p>
                                 <div className="certify-result-state">
-                                    <Icon type="check" />
+                                    <Icon type="check-circle-o" />
                                     <p>您已通过了实名认证</p>
                                 </div>
                             </div>;
-                        case "4":
+                        case '4':
                             return <div className="certify-result-box">
                                 <p className="certify-title"
                                     style={{ 'textAlign': 'center' }}
-                                >若输入金额错误,则实名认证不通过。可重新申请实名认证。</p>
+                                >实名认证未通过。您可以可重新申请实名认证。</p>
                                 <div className="certify-result-state">
-                                    <Icon type="exclamation-circle" />
+                                    <Icon type="close-circle-o" />
                                     <p>您未能通过实名认证审核</p>
                                     <p>可能的原因是:</p>
                                     <p>您提交的认证资料不符合要求,未能通过实名认证;</p>
-                                    <p>您输入的金额有误,未能通过实名认证;</p>
-                                    <p>您未及时在规定的5天期限内输入金额,未能通过实名认证;</p>
+                                    <p>您输入的银行账户信息有误,未能通过实名认证;</p>
                                     <Button className="set-submit" type="primary" onClick={this.handleSubmit}>重新申请实名认证</Button>
                                 </div>
                             </div>;

+ 9 - 6
js/component/login/login.less

@@ -8,7 +8,6 @@
     background-size: cover;
     .login-header {
         background: #fff;
-        box-shadow: 0 2px 6px 0px #ccc;
         .login-logo {
             padding: 20px;
             overflow: hidden;
@@ -48,9 +47,10 @@
         }
     }
     .content {
-        width: 960px;
+        width: 340px;
         margin: 0 auto;
-        margin-top: 5%;
+        margin-top: 212px;
+        box-shadow: 1px 4px 10px 2px rgba(0, 0, 0, 0.15);
         .login-left {
             display: none;
             float: left;
@@ -62,10 +62,8 @@
             }
         }
         .login-right {
-            float: right;
+            opacity: 0.7;
             width: 340px;
-            border: 1px solid #d8d8d8;
-            margin: 40px;
             .tabtwo {
                 margin-left: 40px;
             }
@@ -148,4 +146,9 @@
             margin: 10px 0;
         }
     }
+    .ant-tabs-nav {
+        .ant-tabs-ink-bar {
+            display: none!important
+        }
+    }
 }

+ 4 - 4
js/component/manageCenter/achievement/achievementOrder.jsx

@@ -312,9 +312,9 @@ const AchievementOrderList = React.createClass({
                             createTimeFormattedDate: thisdata.createTimeFormattedDate,	//接单时间
                         });
                     };
-                }
-                this.state.pagination.current = data.data.pageNo;
-                this.state.pagination.total = data.data.totalCount;
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
+                };
                 this.setState({
                     dataSource: theArr,
                     pagination: this.state.pagination
@@ -538,7 +538,7 @@ const AchievementOrderList = React.createClass({
                         style={{ width: 200 }}
                         value={this.state.searchName}
                         onSearch={this.state.therottleSearch}
-                        placeholder="输入成果所有人"
+                        placeholder="输入订单所有人"
                         onChange={(e) => {
                             this.setState({ searchName: e });
                         }} />

+ 4 - 4
js/component/manageCenter/achievement/techAchievement.jsx

@@ -48,7 +48,7 @@ const AchievementList = React.createClass({
                             dataCategory: thisdata.dataCategory,
                             name: thisdata.name,
                             keyword: thisdata.keyword,
-                            theName:thisdata.username || thisdata.ownerName,
+                            theName: thisdata.username || thisdata.ownerName,
                             category: thisdata.category,
                             ownerName: thisdata.username ? thisdata.username : thisdata.ownerName,
                             ownerType: thisdata.ownerType,
@@ -59,9 +59,9 @@ const AchievementList = React.createClass({
                             auditStatus: thisdata.auditStatus
                         });
                     };
-                }
-                this.state.pagination.current = data.data.pageNo;
-                this.state.pagination.total = data.data.totalCount;
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
+                };
                 this.setState({
                     dataSource: theArr,
                     pagination: this.state.pagination

+ 33 - 12
js/component/manageCenter/achievement/techAchievementDesc.jsx

@@ -487,7 +487,28 @@ const AchievementDetailShow = Form.create()(React.createClass({
                                     label="通讯地址" >
                                     <span>{theData.ownerPostalAddress}</span>
                                 </FormItem>
-                            </div> : <div></div>}
+                            </div> : <div className="clearfix" >
+                                <FormItem className="half-item"
+                                    {...formItemLayout}
+                                    label="联系电话" >
+                                    <span>{theData.iOwnerMobile}</span>
+                                </FormItem>
+                                <FormItem className="half-item"
+                                    {...formItemLayout}
+                                    label="证件号" >
+                                    <span>{theData.iOwnerIdNumber}</span>
+                                </FormItem>
+                                <FormItem className="half-item"
+                                    {...formItemLayout}
+                                    label="电子邮箱" >
+                                    <span>{theData.iOwnerEmail}</span>
+                                </FormItem>
+                                <FormItem className="half-item"
+                                    {...formItemLayout}
+                                    label="通讯地址" >
+                                    <span>{theData.iOwnerPostalAddress}</span>
+                                </FormItem>
+                            </div>}
                     </div>
                     <div className="clearfix">
                         <FormItem className="half-item"
@@ -521,11 +542,11 @@ const AchievementDetailShow = Form.create()(React.createClass({
                                 }
                             })()}
                         </FormItem>
-                        <FormItem className="half-item"
+                        {theData.bargainingMode == 0 ? <div></div> : <FormItem className="half-item"
                             {...formItemLayout}
                             label="转让价格" >
                             <span>{theData.transferPrice} 万元</span>
-                        </FormItem>
+                        </FormItem>}
                     </div>
                     <FormItem
                         labelCol={{ span: 4 }}
@@ -1229,13 +1250,17 @@ const AchievementDetailForm = Form.create()(React.createClass({
                             {getFieldDecorator('bargainingMode', {
                                 initialValue: theData.bargainingMode
                             })(
-                                <Radio.Group>
+                                <Radio.Group onChange={(e) => {
+                                    this.setState({
+                                        transferPriceDis: (e.target.value == 0 ? false : true)
+                                    })
+                                }}>
                                     <Radio value="0">面议</Radio>
                                     <Radio value="1">定价</Radio>
                                 </Radio.Group>
                                 )}
                         </FormItem>
-                        <FormItem className="half-item"
+                        {this.state.transferPriceDis ? <FormItem className="half-item"
                             {...formItemLayout}
                             label="转让价格" >
                             {getFieldDecorator('transferPrice', {
@@ -1244,7 +1269,7 @@ const AchievementDetailForm = Form.create()(React.createClass({
                                 <InputNumber min={0} max={999999} step={0.01} />
                                 )}
                             <span style={{ marginLeft: '20px' }}>万元</span>
-                        </FormItem>
+                        </FormItem> : <div></div>}
                     </div>
                     <FormItem
                         labelCol={{ span: 4 }}
@@ -1519,11 +1544,7 @@ const AchievementDetail = React.createClass({
         }.bind(this));
     },
     tableRowClick(record, index) {
-        if (record.dataCategory == "1") {
-            window.open(globalConfig.context + '/admin/demand.html?rid=' + record.id + '#orgTechDemand');
-        } else if (record.dataCategory == "0") {
-            window.open(globalConfig.context + '/admin/demand.html?rid=' + record.id + '#userTechDemand')
-        };
+        window.open(globalConfig.context + '/portal/detail/demandDetail.html?id=' + record.id + '&type=' + record.dataCategory);
     },
     handleCancel(e) {
         this.setState({
@@ -1565,7 +1586,7 @@ const AchievementDetail = React.createClass({
                                 }} >
                                 <Tabs.TabPane tab="成果详情" key="1">
                                     {(() => {
-                                        if (this.props.data.auditStatus && this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4") {
+                                        if (this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4") {
                                             return <AchievementDetailShow
                                                 data={this.props.data}
                                                 detailApiUrl={this.props.detailApiUrl}

+ 4 - 4
js/component/manageCenter/demand/demandOrder.jsx

@@ -322,9 +322,9 @@ const DemandOrderList = React.createClass({
                             createTimeFormattedDate: thisdata.createTimeFormattedDate,	//接单时间
                         });
                     };
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
                 }
-                this.state.pagination.current = data.data.pageNo;
-                this.state.pagination.total = data.data.totalCount;
                 this.setState({
                     dataSource: theArr,
                     pagination: this.state.pagination
@@ -586,9 +586,9 @@ const DemandOrderList = React.createClass({
                         value={this.state.searchName}
                         style={{ width: 200 }}
                         onSearch={this.state.therottleSearch}
-                        placeholder="输入雇主名称"
+                        placeholder="输入订单所有人名称"
                         onChange={(e) => {
-                            this.setState({searchName : e});
+                            this.setState({ searchName: e });
                         }} />
                     <Button type="primary" onClick={this.search}>搜索</Button>
                     <Button onClick={this.reset}>重置</Button>

+ 3 - 3
js/component/manageCenter/demand/techDemand.jsx

@@ -70,9 +70,9 @@ const DemandList = React.createClass({
                             auditStatus: thisdata.auditStatus
                         });
                     };
-                }
-                this.state.pagination.current = data.data.pageNo;
-                this.state.pagination.total = data.data.totalCount;
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
+                };
                 this.setState({
                     dataSource: theArr,
                     pagination: this.state.pagination

+ 2 - 6
js/component/manageCenter/demand/techDemandDesc.jsx

@@ -1344,11 +1344,7 @@ const DemandDetail = React.createClass({
         }.bind(this));
     },
     tableRowClick(record, index) {
-        if (record.ownerType == "0") {
-            window.open(globalConfig.context + '/admin/achievement.html?rid=' + record.id + '#orgTechAchievement');
-        } else if (record.ownerType == "1") {
-            window.open(globalConfig.context + '/admin/achievement.html?rid=' + record.id + '#userTechAchievement')
-        };
+        window.open(globalConfig.context + '/portal/detail/achievementDetail.html?id=' + record.id + '&type=' + record.ownerType);
     },
     handleCancel(e) {
         this.setState({
@@ -1390,7 +1386,7 @@ const DemandDetail = React.createClass({
                                 }} >
                                 <Tabs.TabPane tab="需求详情" key="1">
                                     {(() => {
-                                        if (this.props.data.auditStatus && this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4") {
+                                        if (this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4") {
                                             return <DemandDetailShow
                                                 data={this.props.data}
                                                 detailApiUrl={this.props.detailApiUrl}

+ 1 - 1
js/component/manageCenter/servicesManage/contract/contractAdd.jsx

@@ -116,7 +116,7 @@ const ContractAddFrom = Form.create()(React.createClass({
         e.preventDefault();
         this.props.form.validateFields((err, values) => {
             if (!err) {
-                if (!values.uid || !values.contacts) {
+                if (!(this.state.data.uid || values.uid) || !values.contacts) {
                     message.warning('请选择一个公司和联系人!');
                     return;
                 }

+ 4 - 3
js/component/manageCenter/servicesManage/highTech/highTechApply.jsx

@@ -116,7 +116,7 @@ const CognizanceDescFrom = Form.create()(React.createClass({
             });
         }.bind(this));
     },
-    getBusinessCount(uid) {
+    getBusinessCount(uid, year) {
         this.setState({
             loading: true
         });
@@ -126,7 +126,8 @@ const CognizanceDescFrom = Form.create()(React.createClass({
             crossDomain: false,
             url: globalConfig.context + "/api/admin/getBusinessCount",
             data: {
-                uid: uid || this.props.data.uid
+                uid: uid || this.props.data.uid,
+                year: year || this.props.data.year
             },
             success: function (data) {
                 if (!data.data) {
@@ -310,7 +311,7 @@ const CognizanceDescFrom = Form.create()(React.createClass({
     componentWillReceiveProps(nextProps) {
         if (!this.props.visible && nextProps.visible) {
             this.getStateData(nextProps.data.cid);
-            this.getBusinessCount(nextProps.data.uid);
+            this.getBusinessCount(nextProps.data.uid, nextProps.data.year);
             this.loadData(nextProps.data.uid, nextProps.data.cid, nextProps.data.year);
             this.getContactsList(nextProps.data.uid);
             this.props.form.resetFields();

+ 6 - 6
js/component/manageCenter/servicesManage/highTech/highTechInfo.jsx

@@ -1,11 +1,11 @@
 import React from 'react';
 import { Icon, Button, Spin, message, Table } from 'antd';
 import {
-    getSearchUrl, getScaleState, getCompanyType,
-    getTechField, getIndustryType, getCatagory, getIntellectualObtainWay,
+    getSearchUrl, getScaleState, getCompanyType, getIndustryType, getCatagory, getIntellectualObtainWay,
     getTechnicalSource
 } from '../../../tools.js';
 import { getProvince } from '../../../NewDicProvinceList';
+import { getTechField } from '../../../DicTechFieldList';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 import moment from 'moment';
@@ -274,7 +274,7 @@ const highTechInfo = React.createClass({
                     techTotal: thisdata.techTotal,
                     listedDateFormattedDate: thisdata.listedDateFormattedDate,
                     registrationTimeFormattedDate: thisdata.registrationTimeFormattedDate,
-                    address: getProvince(thisdata.province, thisdata.city, thisdata.area),
+                    address: getProvince(thisdata.licenceProvince, thisdata.licenceCity, thisdata.licenceArea),
                     field: thisdata.field ? thisdata.field.split(',') : [],
                     registerType: thisdata.registerType ? thisdata.registerType.split(',') : []
                 });
@@ -403,7 +403,7 @@ const highTechInfo = React.createClass({
             data: {
                 uid: uid,
                 cid: cid,
-                year: year
+                year: year + 1
             }
         }).done(function (data) {
             if (!data.data) {
@@ -1034,7 +1034,7 @@ const highTechInfo = React.createClass({
                         <div className="clearfix">
                             <div className="half-item">
                                 <span className="item-title">年份</span>
-                                <span>{theData.year + 1}</span>
+                                <span>{theData.year}</span>
                             </div>
                             <div className="half-item">
                                 <span className="item-title">公司名字</span>
@@ -1128,7 +1128,7 @@ const highTechInfo = React.createClass({
                         </div>
                         <div className="all-item">
                             <span className="item-title">技术领域</span>
-                            <span>{getTechField(Number(theData.field[0]), theData.field[1] ? Number(theData.field[1]) : null, theData.field[2] ? Number(theData.field[2]) : null)}</span>
+                            <span>{getTechField(theData.field[0], theData.field[1], theData.field[2])}</span>
                         </div>
                         <div className="clearfix">
                             <div className="half-item">

+ 7 - 4
js/component/manageCenter/userManage/highTechSearch.jsx

@@ -9,7 +9,7 @@ import { companySearch } from '../../tools';
 
 const HighTechSearch = React.createClass({
     loadData(pageNo) {
-        if (!this.state.searchUnitName && !this.state.province && !this.state.city && !this.state.searchYear) {
+        if (!this.state.searchName && !this.state.province && !this.state.city && !this.state.searchYear) {
             message.warning('请选择至少一个搜索条件!');
             return;
         };
@@ -22,8 +22,10 @@ const HighTechSearch = React.createClass({
             crossDomain: false,
             url: globalConfig.context + "/api/admin/cognizanceRecord/search",
             data: {
+                "pageNo": pageNo || 1,
+                "pageSize": this.state.pagination.pageSize,
                 "district": this.state.city || this.state.province,
-                "unitName": this.state.searchUnitName,
+                "unitName": this.state.searchName,
                 "year": this.state.searchYear
             },
             success: function (data) {
@@ -136,12 +138,13 @@ const HighTechSearch = React.createClass({
         this.loadData();
     },
     reset() {
+        this.state.pagination.total = 0;
         this.setState({
             city: undefined,
             province: undefined,
-            searchUnitName: undefined,
+            searchName: undefined,
             searchYear: undefined,
-            dataSource: []
+            dataSource: [],
         });
     },
     render() {

+ 2 - 5
js/component/manageCenter/userManage/orgDesc.jsx

@@ -5,7 +5,7 @@ import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 import moment from 'moment';
 import { eduLevelList, auditStatusList, certifyStepList } from '../../dataDic.js'
-import { beforeUploadFile, getAuditState } from '../../tools.js';
+import { beforeUploadFile, getAuditState, newDownloadFile } from '../../tools.js';
 import { areaSelect, getProvince } from '../../NewDicProvinceList';
 import { getTechField, techFieldList } from '../../DicTechFieldList';
 
@@ -367,10 +367,7 @@ const OrgShow = Form.create()(React.createClass({
                             label="上年度纳税报表" >
                             <div className="idcard-img clearfix">
                                 {this.state.lastYearTaxReportUrl ? <div>
-                                    <div className="idcard-imgbox">
-                                        <img src={globalConfig.context + '/open/writeImage?path=' + this.state.lastYearTaxReportUrl} alt="点击查看大图"
-                                            onClick={(e) => { window.open(e.target.src) }} />
-                                    </div>
+                                    <a onClick={newDownloadFile.bind(null, this.state.lastYearTaxReportId, "last_year_ratepay", "/api/admin/patent/downloadRatepay")}>上年度纳税报表</a>
                                 </div> : <div>
                                         <p><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传</p>
                                     </div>}

+ 2 - 2
js/component/manageCenter/userManage/orgList.jsx

@@ -186,7 +186,7 @@ const OrgList = React.createClass({
                     dataIndex: 'aftUsername',
                     key: 'aftUsername',
                 }, {
-                    title: '联系方式',
+                    title: '电子邮箱',
                     dataIndex: 'email',
                     key: 'email',
                 }, {
@@ -263,7 +263,7 @@ const OrgList = React.createClass({
                     </Select>
                     <Input placeholder="认证名称" value={this.state.searchUnitName}
                         onChange={(e) => { this.setState({ searchUnitName: e.target.value }); }} />
-                    <Input placeholder="联系方式" value={this.state.searchEmail}
+                    <Input placeholder="电子邮箱" value={this.state.searchEmail}
                         onChange={(e) => { this.setState({ searchEmail: e.target.value }); }} />
                     <Button type="primary" onClick={this.search}>搜索</Button>
                     <Button onClick={this.reset}>重置</Button>

+ 2 - 2
js/component/manageCenter/userManage/userDesc.jsx

@@ -267,14 +267,14 @@ const UserShow = Form.create()(React.createClass({
                     {...formItemLayout}
                     label="是否专家" >
                     {getFieldDecorator('expert')(
-                        <span>{this.state.expert ? "否" : "是"}</span>
+                        <span>{this.state.expert == 1 ? "是" : "否"}</span>
                     )}
                 </FormItem>
                 <FormItem
                     {...formItemLayout}
                     label="是否明星" >
                     {getFieldDecorator('celebrity')(
-                        <span>{this.state.celebrity ? "否" : "是"}</span>
+                        <span>{this.state.celebrity == 1 ? "是" : "否"}</span>
                     )}
                 </FormItem>
                 <FormItem

+ 11 - 0
js/component/manageCenter/userManage/userList.less

@@ -35,6 +35,17 @@
     .set-submit {
         margin-right: 20px;
     }
+    .idcard-imgbox {
+            height: 200px;
+            padding-top: 200px;
+            position: relative;
+        >img {
+            position: absolute;
+            top: 0;
+            left: 0;
+            height: 200px;
+        }
+    }
 }
 
 .admin-desc-content {

+ 50 - 3
js/component/portal/footer.jsx

@@ -4,9 +4,56 @@ import './portal.less';
 const Footer = React.createClass({
     render() {
         return (
-            <div className="footer">
-                <p>阿凡提2017  技术支持@湖南智明</p>
-            </div>
+            <footer>
+                <div className="container">
+                    <div className="friendship_link">
+                        <div className="friendship_link_tit">
+                            <h4>友情链接<span>显示全部</span></h4>
+                        </div>
+                        <div className="friendship_link_content">
+                            <a href="http://www.hnst.gov.cn/">湖南省科技厅</a>
+                            <a href="http://www.cssti.cn/">长沙市科技局</a>
+                            <a href="http://www.cast.org.cn/">中国科学技术协会</a>
+                            <a href="http://www.chinatorch.gov.cn/">科技部火炬中心</a>
+                            <a href="http://www.nosta.gov.cn/web/index.aspx">国家科技成果奖励办</a>
+                            <a href="http://www.nast.org.cn/portal.php">国家科技成果网</a>
+                            <a href="http://www.hnast.org.cn/portal/comm/index.action">湖南省科学技术协会</a>
+                            <a href="http://www.hncgw.gov.cn/">湖南省科技成果转化公共服务平台</a>
+                            <a href="http://www.hnjxw.gov.cn/">湖南省经济信息化委员会</a>
+                            <a href="http://kyy.hnu.cn/">湖南大学科学技术研究院</a>
+                        </div>
+                        <div className="friendship_link_content">
+                            <a href="http://www.gxst.gov.cn/">广西省科技厅</a>
+                            <a href="http://www.cssti.cn/">内蒙古自治区科技厅</a>
+                            <a href="http://www.cshtz.gov.cn/">长沙高新区管委会</a>
+                            <a href="http://www.jxas.ac.cn/">江西省科学院</a>
+                            <a href="http://www.cnic.cn/">中科院计算机网络信息中心</a>
+                            <a href="http://kxyjb.csu.edu.cn/">中南大学科学研究部</a>
+                            <a href="http://www.scei.org.cn/">中国科协创新创业服务中心</a>
+                            <a href="http://www.hbstd.gov.cn/">湖北省科技厅</a>
+                            <a href="http://www.gdstc.gov.cn/">广东省科技厅</a>
+                            <a href="http://www.hnkjt.gov.cn/">河南省科技厅</a>
+                        </div>
+                    </div>
+                    <div className="footer_contact">
+                        <div className="address">
+                            <p>湖南省长沙市营盘东路19号金山大厦八楼</p>
+                        </div>
+                        <div className="tel">
+                            <p>合作电话:0731-89907207 400-8800-962</p>
+                        </div>
+                        <div></div>
+                    </div>
+                </div>
+                <div className="company_link">
+                    <a href="http://www.kedexinxi.com/about/?49.html">关于公司</a>
+                    <a href="#">联系我们</a>
+                </div>
+                <div className="container support">
+                    <a href="#">Copyright © 2016-2017 阿凡提 版权所有</a>
+                    <a href="#">技术支持:湖南智明科技有限公司</a>
+                </div>
+            </footer >
         )
     }
 });

+ 293 - 27
js/component/portal/portal.less

@@ -1,17 +1,18 @@
+@headerNavDetaulHeight : 70px;
 .wrap {
     width: 100%;
     margin: 0 auto;
     background: #ffffff;
     .portal-header {
-        background: #f8f8f8;
-        width: 100%;
-        border-bottom: 1px solid #ececec;
         .portal-top {
-            width: 1280px;
-            line-height: 30px;
+            line-height: 35px;
             font-size: 12px;
-            margin: 0 auto;
             color: #999;
+            background: #F3F3F3;
+            >div {
+                width: 1000px;
+                margin: 0 auto;
+            }
             .top-welcomeText {
                 float: left;
             }
@@ -32,20 +33,222 @@
                 padding-left: 20px;
             }
         }
+        .header_nav_detail {
+            height: @headerNavDetaulHeight;
+            line-height: 68px;
+            position: relative;
+            border-bottom: 1px solid #4466bf;
+            .container {
+                width: 1000px;
+                margin: 0 auto;
+                padding-right: 0;
+                padding-left: 0;
+                .nav_content {
+                    position: relative;
+                    >li {
+                        float: left;
+                        width: 10%;
+                        font-size: 13px;
+                        height: @headerNavDetaulHeight;
+                        padding: 0;
+                        text-align: center;
+                        font-weight: bold;
+                        position: relative;
+                        &.active,
+                        &:hover {
+                            background: #58a3ff;
+                            >a {
+                                color: #fff;
+                                font-weight: bolder;
+                                font-size: 14px;
+                            }
+                            .secondary_navigation_nav {
+                                display: block;
+                            }
+                            &.hideSub .secondary_navigation_nav {
+                                display: none;
+                            }
+                        }
+                        >a {
+                            color: #333333;
+                            display: block;
+                            width: 100%;
+                            padding: 3px 1px; //border-right: 1px solid #ececec;
+                            line-height: 22px;
+                            margin-top: 25px;
+                            margin-bottom: 16px
+                        }
+                        .showSub .secondary_navigation_nav {
+                            display: block;
+                        }
+                    }
+                }
+                .secondary_navigation_nav {
+                    position: absolute;
+                    left: auto;
+                    top: @headerNavDetaulHeight;
+                    width: 450px;
+                    z-index: 100;
+                    display: none;
+                    li {
+                        float: left;
+                        width: 75px;
+                        line-height: 45px;
+                        text-align: center;
+                        a {
+                            margin: 15px 0;
+                            line-height: 1.25;
+                            border-right: 1px solid #ececec;
+                            color: #fff;
+                            font-size: 12px;
+                            font-weight: normal;
+                            width: 100%;
+                            display: block;
+                        }
+                        &.active,
+                        &:hover {
+                            a {
+                                font-size: 13px;
+                                font-weight: bolder;
+                            }
+                        }
+                        &:last-child a {
+                            border: none;
+                        }
+                    }
+                    &.show {
+                        display: block;
+                    }
+                }
+            }
+            .secondary_navigation {
+                position: absolute;
+                height: 45px;
+                line-height: 45px;
+                width: 100%;
+                background: #58a3ff;
+                z-index: 99;
+                display: block;
+            }
+            .logo {
+                height: @headerNavDetaulHeight;
+                line-height: 68px;
+                img {
+                    vertical-align: middle;
+                }
+            }
+            .search {
+                line-height: 68px
+            }
+        }
+        .glyphicon {
+            font-size: 12px;
+            font-weight: inherit;
+        }
+        .col-md-3 {
+            width: 25%;
+            float: left
+        }
+        .col-md-6 {
+            width: 50%;
+            float: left
+        }
+        .col-md-8 {
+            width: 66.66666667%;
+            float: left
+        }
+        .col-md-9 {
+            width: 75%;
+            float: left
+        }
     }
-    .footer {
-        width: 100%;
-        position: fixed;
-        bottom: 0;
-        left: 0;
-        z-index: 1;
-        text-align: center;
-        padding: 6px 0;
-        padding: 10px 0;
+    footer {
+        background: #3c3d43;
         text-align: center;
-        background: #f0f0f0;
-        p {
-            line-height: 24px;
+        padding-top: 20px;
+        .container {
+            width: 1280px;
+            margin: 0 auto;
+            padding-right: 0;
+            padding-left: 0;
+            .friendship_link {
+                margin-top: 20px;
+                font-size: 12px
+            }
+            .friendship_link h4 {
+                text-align: left;
+                color: #828389
+            }
+            .friendship_link h4 span {
+                display: none;
+                float: right;
+                font-size: 12px;
+                color: #e5e5e6;
+                padding: 2px 20px 2px 0;
+                background: url(../../../image/index_more_ico.png) no-repeat right;
+            }
+            .friendship_link_tit {
+                margin-bottom: 30px
+            }
+            .friendship_link_content {
+                text-align: left;
+                margin-bottom: 10px
+            }
+            .friendship_link_content a {
+                border-right: 1px solid #828389;
+                padding-right: 10px;
+                margin-right: 7px;
+                color: #828389
+            }
+            .friendship_link_content a:last-child {
+                margin-right: 0;
+                border: none;
+                padding: 0
+            }
+            .footer_contact {
+                height: 140px;
+                margin-top: 30px;
+                margin-bottom: 10px;
+            }
+            .footer_contact>div {
+                width: 33.3%;
+                height: 100%;
+                float: left;
+                color: #ffffff;
+                border-right: 1px solid #44454a
+            }
+            .footer_contact>div:last-child {
+                border: none
+            }
+            .footer_contact>div p {
+                margin-top: 95px
+            }
+            .footer_contact .address {
+                background: url(../../../image/footer_ico_1.png) no-repeat;
+                background-position: center 30px;
+            }
+            .footer_contact .tel {
+                background: url(../../../image/footer_ico_2.png) no-repeat;
+                background-position: center 30px;
+            }
+            .footer_contact>div:last-child {
+                background: url(../../../image/QR_ico.png) no-repeat center
+            }
+        }
+        .company_link {
+            font-size: 12px;
+            padding-top: 30px;
+            border-top: 1px solid #44454a
+        }
+        .company_link a:first-child {
+            border-right: 1px solid #727379;
+            padding-right: 10px;
+            margin-right: 7px
+        }
+        .support {
+            margin-top: 10px;
+            padding-bottom: 30px;
+            font-size: 12px
         }
     }
     .portal-nav {
@@ -97,11 +300,17 @@
                 }
             }
         }
+    }
+    .portal-content {
+        width: 1280px;
+        margin: 0 auto; //background: #e0e0e0;
+        padding-top: 56px;
+        margin-bottom: 120px;
         .nav-search {
             float: right;
             height: 28px;
             width: 250px;
-            margin-top: 20px;
+            margin-right: 50px;
             position: relative;
             >input {
                 position: absolute;
@@ -131,12 +340,6 @@
                 }
             }
         }
-    }
-    .portal-content {
-        width: 1280px;
-        margin: 0 auto; //background: #e0e0e0;
-        padding-top: 20px;
-        margin-bottom: 120px;
         .search-criteria {
             margin-bottom: 10px;
             border-bottom: 1px dotted #ccc;
@@ -162,6 +365,12 @@
         ul {
             box-sizing: border-box;
             margin-top: 20px;
+            margin-left: 10px;
+            >li {
+                &:hover {
+                    box-shadow: 0px 0px 12px 2px #58a3ff;
+                }
+            }
             .user-detail {
                 float: left;
                 height: auto;
@@ -198,7 +407,7 @@
                     text-align: center;
                     color: #333;
                 }
-                .address {
+                .text-address {
                     font-size: 18px;
                 }
                 .text-Number {
@@ -210,6 +419,58 @@
                     font-size: 18px;
                 }
             }
+            .org-detail {
+                float: left;
+                width: 24%;
+                height: 250px;
+                background: #fff;
+                border: 1px solid #d9d9d9;
+                padding: 14px;
+                margin-right: 12px;
+                margin-bottom: 20px;
+                .logo {
+                    float: left;
+                    height: 120px;
+                    width: 120px;
+                    position: relative;
+                    padding-top: 120px;
+                    margin: 40px 0;
+                    img {
+                        height: 120px;
+                        width: auto;
+                        position: absolute;
+                        top: 0;
+                        left: 0;
+                    }
+                }
+                .detail-right {
+                    float: right;
+                    font-size: 16px;
+                    line-height: 24px;
+                    width: 150px;
+                    height: 100%;
+                    overflow: hidden;
+                    vertical-align: middle;
+                    color: #999;
+                    position: relative;
+                    .detail-text {
+                        position: absolute;
+                        left: 0;
+                        bottom: 0;
+                    }
+                    .name {
+                        color: #333;
+                    }
+                    .text-Number {
+                        color: #ea0862;
+                        font-size: 18px;
+                    }
+                    .text-unit {
+                        color: #333;
+                        font-size: 18px;
+                    }
+                }
+            }
         }
     }
     .portal-carousel {
@@ -298,12 +559,17 @@
 
 .detail_interest_sub {
     list-style: none;
-    padding: 0 200px;
     margin-bottom: 20px;
     >li {
+        float: left;
+        margin-left: 20px;
+        width: 48%;
         margin-top: 20px;
         border: 1px solid #ececec;
         padding: 0 20px 20px;
+        &:hover {
+            box-shadow: 0px 0px 4px #58a3ff;
+        }
     }
     .interest_list_title {
         line-height: 40px;

+ 106 - 88
js/component/portal/search/achievement.jsx

@@ -22,6 +22,7 @@ import { getAchievementCategory, getTransferMode, getMaturity } from '../../tool
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
 
+
 const Content = React.createClass({
     loadData(pageNo) {
         this.setState({
@@ -182,7 +183,7 @@ const Content = React.createClass({
 
         if (window.location.search) {
             let theUrl = window.location.search
-            this.state.keyword =theUrl.substring(1, theUrl.length);
+            this.state.keyword = theUrl.substring(1, theUrl.length);
         };
 
         this.loadData();
@@ -223,22 +224,6 @@ const Content = React.createClass({
         const _me = this;
         return (
             <div className="portal-body">
-                <div className="portal-nav clearfix">
-                    <div className="nav-logoBox">
-                        <img onClick={() => { window.open(globalConfig.context + '/portal/index.html') }} src={logoImg} alt="" />
-                    </div>
-                    <ul className="nav-list clearfix">
-                        <li className={this.props.searchType == 'achievement' ? 'active' : ''}><a href={"/portal/search/achievement.html"}>科技成果</a></li>
-                        <li className={this.props.searchType == 'demand' ? 'active' : ''}><a href={"/portal/search/demand.html"}>科技需求</a></li>
-                        <li className={this.props.searchType == 'subscriber' ? 'active' : ''}><a href={"/portal/search/subscriber.html"}>伙伴/行家</a></li>
-                    </ul>
-                    <div className="nav-search">
-                        <Input onChange={(e) => { this.state.keyword = e.target.value; }} />
-                        <Button onClick={() => { this.loadData() }}>
-                            <img src={searchImg} alt="" />
-                        </Button>
-                    </div>
-                </div>
                 <div className="portal-content">
                     <Row className="search-criteria">
                         <Col className="search-title" span={2}>
@@ -262,60 +247,9 @@ const Content = React.createClass({
                     </Row> : <div></div>}
                     <Row className="search-criteria">
                         <Col className="search-title" span={2}>
-                            <span>交易价格</span>
-                        </Col>
-                        <Col className="search-select" span={13}>
-                            <Radio.Group value={this.state.transferPrice}
-                                onChange={(e) => {
-                                    this.setState({
-                                        transferPrice: e.target.value
-                                    });
-                                    this.state.transferPrice = e.target.value;
-                                    this.loadData();
-                                }}>
-                                <Radio.Button value={999}>不限</Radio.Button>
-                                <Radio.Button value={1}>1-10万元</Radio.Button>
-                                <Radio.Button value={2}>10-50万元</Radio.Button>
-                                <Radio.Button value={3}>50-100万元</Radio.Button>
-                                <Radio.Button value={4}>100-500万元</Radio.Button>
-                                <Radio.Button value={5}>500-1000万元</Radio.Button>
-                                <Radio.Button value={6}>面议</Radio.Button>
-                            </Radio.Group>
-                        </Col>
-                        <Col span={9}>
-                            <Checkbox checked={!this.state.transferPrice} onChange={(e) => { if (e.target.checked) { this.setState({ transferPrice: null }) } }}>自定义金额</Checkbox>
-                            <InputNumber style={{ width: 80 }}
-                                disabled={Boolean(this.state.transferPrice)}
-                                onChange={(e) => { this.state.transferPriceLower = e; }} />
-                            <span> 到 </span>
-                            <InputNumber style={{ width: 80 }}
-                                disabled={Boolean(this.state.transferPrice)}
-                                onChange={(e) => { this.state.transferPriceUpper = e; }} />
-                            <span> 万元</span>
-                            <Button style={{ marginLeft: '20px' }} disabled={Boolean(this.state.transferPrice)} onClick={() => { this.loadData() }}>确定</Button>
-                        </Col>
-                    </Row>
-                    <Row className="search-criteria">
-                        <Col className="search-title" span={2}>
-                            <span>技术类型</span>
-                        </Col>
-                        <Col className="search-select" span={22}>
-                            <Radio.Group defaultValue={999} onChange={(e) => {
-                                this.setState({
-                                    category: e.target.value
-                                });
-                                this.state.category = e.target.value;
-                                this.loadData();
-                            }}>
-                                {this.state.categoryRadio}
-                            </Radio.Group>
-                        </Col>
-                    </Row>
-                    <Row className="search-criteria">
-                        <Col className="search-title" span={2}>
                             <span>交易方式</span>
                         </Col>
-                        <Col className="search-select" span={22}>
+                        <Col className="search-select" span={12}>
                             <Radio.Group defaultValue={999} onChange={(e) => {
                                 this.setState({
                                     transferMode: e.target.value
@@ -326,28 +260,19 @@ const Content = React.createClass({
                                 {this.state.transferModeRadio}
                             </Radio.Group>
                         </Col>
-                    </Row>
-                    <Row className="search-criteria">
-                        <Col className="search-title" span={2}>
-                            <span>成熟度</span>
-                        </Col>
-                        <Col className="search-select" span={22}>
-                            <Radio.Group defaultValue={999} onChange={(e) => {
-                                this.setState({
-                                    maturity: e.target.value
-                                });
-                                this.state.maturity = e.target.value
-                                this.loadData();
-                            }}>
-                                {this.state.maturityRadio}
-                            </Radio.Group>
+                        <Col span={10}>
+                            <div className="nav-search">
+                                <Input onChange={(e) => { this.state.keyword = e.target.value; }} />
+                                <Button onClick={() => { this.loadData() }}>
+                                    <img src={searchImg} alt="" />
+                                </Button>
+                            </div>
                         </Col>
                     </Row>
                     <Spin spinning={this.state.loading} style={{ marginBottom: '40px' }}>
-                        <ul className='detail_interest_sub clearfix' style={{ padding: 0 }}>
+                        <ul className='detail_interest_sub clearfix' >
                             {this.state.dataSource.map((item) => {
-                                return <li key={item.id} onClick={() => { this.tableRowClick(item) }}
-                                    style={{ float: 'left', marginLeft: '20px', width: '48%' }}>
+                                return <li key={item.id} onClick={() => { this.tableRowClick(item) }}>
                                     <div className="interest_list_title" style={{ paddingLeft: '20px' }}>
                                         <span>{item.name}</span>
                                     </div>
@@ -420,4 +345,97 @@ const Content = React.createClass({
     }
 });
 
-export default Content;
+export default Content;
+
+
+// <Row className="search-criteria">
+//                         <Col className="search-title" span={2}>
+//                             <span>交易价格</span>
+//                         </Col>
+//                         <Col className="search-select" span={13}>
+//                             <Radio.Group value={this.state.transferPrice}
+//                                 onChange={(e) => {
+//                                     this.setState({
+//                                         transferPrice: e.target.value
+//                                     });
+//                                     this.state.transferPrice = e.target.value;
+//                                     this.loadData();
+//                                 }}>
+//                                 <Radio.Button value={999}>不限</Radio.Button>
+//                                 <Radio.Button value={1}>1-10万元</Radio.Button>
+//                                 <Radio.Button value={2}>10-50万元</Radio.Button>
+//                                 <Radio.Button value={3}>50-100万元</Radio.Button>
+//                                 <Radio.Button value={4}>100-500万元</Radio.Button>
+//                                 <Radio.Button value={5}>500-1000万元</Radio.Button>
+//                                 <Radio.Button value={6}>面议</Radio.Button>
+//                             </Radio.Group>
+//                         </Col>
+//                         <Col span={9}>
+//                             <Checkbox checked={!this.state.transferPrice} onChange={(e) => { if (e.target.checked) { this.setState({ transferPrice: null }) } }}>自定义金额</Checkbox>
+//                             <InputNumber style={{ width: 80 }}
+//                                 disabled={Boolean(this.state.transferPrice)}
+//                                 onChange={(e) => { this.state.transferPriceLower = e; }} />
+//                             <span> 到 </span>
+//                             <InputNumber style={{ width: 80 }}
+//                                 disabled={Boolean(this.state.transferPrice)}
+//                                 onChange={(e) => { this.state.transferPriceUpper = e; }} />
+//                             <span> 万元</span>
+//                             <Button style={{ marginLeft: '20px' }} disabled={Boolean(this.state.transferPrice)} onClick={() => { this.loadData() }}>确定</Button>
+//                         </Col>
+//                     </Row>
+//                     <Row className="search-criteria">
+//                         <Col className="search-title" span={2}>
+//                             <span>技术类型</span>
+//                         </Col>
+//                         <Col className="search-select" span={22}>
+//                             <Radio.Group defaultValue={999} onChange={(e) => {
+//                                 this.setState({
+//                                     category: e.target.value
+//                                 });
+//                                 this.state.category = e.target.value;
+//                                 this.loadData();
+//                             }}>
+//                                 {this.state.categoryRadio}
+//                             </Radio.Group>
+//                         </Col>
+//                     </Row>
+//                     <Row className="search-criteria">
+//                         <Col className="search-title" span={2}>
+//                             <span>交易方式</span>
+//                         </Col>
+//                         <Col className="search-select" span={22}>
+//                             <Radio.Group defaultValue={999} onChange={(e) => {
+//                                 this.setState({
+//                                     transferMode: e.target.value
+//                                 });
+//                                 this.state.transferMode = e.target.value
+//                                 this.loadData();
+//                             }}>
+//                                 {this.state.transferModeRadio}
+//                             </Radio.Group>
+//                         </Col>
+//                     </Row>
+//                     <Row className="search-criteria">
+//                         <Col className="search-title" span={2}>
+//                             <span>成熟度</span>
+//                         </Col>
+//                         <Col className="search-select" span={12}>
+//                             <Radio.Group defaultValue={999} onChange={(e) => {
+//                                 this.setState({
+//                                     maturity: e.target.value
+//                                 });
+//                                 this.state.maturity = e.target.value
+//                                 this.loadData();
+//                             }}>
+//                                 {this.state.maturityRadio}
+//                             </Radio.Group>
+//                         </Col>
+//                         <Col span={10}>
+//                             <div className="nav-search">
+//                                 <Input onChange={(e) => { this.state.keyword = e.target.value; }} />
+//                                 <Button onClick={() => { this.loadData() }}>
+//                                     <img src={searchImg} alt="" />
+//                                 </Button>
+//                             </div>
+//                         </Col>
+//                     </Row>

+ 3 - 3
js/component/portal/search/achievementDesc.jsx

@@ -340,7 +340,7 @@ const AchievementDetail = React.createClass({
                             <Col span={20}>
                                 {theData.maturityTextFileUrl ?
                                     <span className="download-file">
-                                        <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + this.props.data.id + '&sign=achievement_maturity_text_file') }}>成熟度证明材料(文本文件)</a>
+                                        <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + theData.id + '&sign=achievement_maturity_text_file') }}>成熟度证明材料(文本文件)</a>
                                     </span>
                                     : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}
                             </Col>
@@ -419,7 +419,7 @@ const AchievementDetail = React.createClass({
                             <Col span={20}>
                                 {theData.techPlanUrl ?
                                     <span className="download-file">
-                                        <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + this.props.data.id + '&sign=achievement_tech_plan') }}>技术方案</a>
+                                        <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + theData.id + '&sign=achievement_tech_plan') }}>技术方案</a>
                                     </span>
                                     : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}
                             </Col>
@@ -429,7 +429,7 @@ const AchievementDetail = React.createClass({
                             <Col span={20}>
                                 {theData.businessPlanUrl ?
                                     <span className="download-file">
-                                        <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + this.props.data.id + '&sign=achievement_business_plan') }}>商业计划书</a>
+                                        <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + theData.id + '&sign=achievement_business_plan') }}>商业计划书</a>
                                     </span>
                                     : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}
                             </Col>

+ 44 - 51
js/component/portal/search/demand.jsx

@@ -161,7 +161,7 @@ const Content = React.createClass({
         this.state.demandTypeRadio = demandArr;
         if (window.location.search) {
             let theUrl = window.location.search
-            this.state.keyword =theUrl.substring(1, theUrl.length);
+            this.state.keyword = theUrl.substring(1, theUrl.length);
         };
         this.loadData();
     },
@@ -201,22 +201,6 @@ const Content = React.createClass({
         const _me = this;
         return (
             <div className="portal-body">
-                <div className="portal-nav clearfix">
-                    <div className="nav-logoBox">
-                        <img onClick={() => { window.open(globalConfig.context + '/portal/index.html') }} src={logoImg} alt="" />
-                    </div>
-                    <ul className="nav-list clearfix">
-                        <li className={this.props.searchType == 'achievement' ? 'active' : ''}><a href={"/portal/search/achievement.html"}>科技成果</a></li>
-                        <li className={this.props.searchType == 'demand' ? 'active' : ''}><a href={"/portal/search/demand.html"}>科技需求</a></li>
-                        <li className={this.props.searchType == 'subscriber' ? 'active' : ''}><a href={"/portal/search/subscriber.html"}>伙伴/行家</a></li>
-                    </ul>
-                    <div className="nav-search">
-                        <Input onChange={(e) => { this.state.keyword = e.target.value; }} />
-                        <Button onClick={() => { this.loadData() }}>
-                            <img src={searchImg} alt="" />
-                        </Button>
-                    </div>
-                </div>
                 <div className="portal-content">
                     <Row className="search-criteria">
                         <Col className="search-title" span={2}>
@@ -240,40 +224,9 @@ const Content = React.createClass({
                     </Row> : <div></div>}
                     <Row className="search-criteria">
                         <Col className="search-title" span={2}>
-                            <span>预算价格</span>
-                        </Col>
-                        <Col className="search-select" span={14}>
-                            <Radio.Group value={this.state.budgetCost}
-                                onChange={(e) => {
-                                    this.setState({
-                                        budgetCost: e.target.value
-                                    });
-                                    this.state.budgetCost = e.target.value;
-                                    this.loadData();
-                                }}>
-                                <Radio.Button value={999}>不限</Radio.Button>
-                                <Radio.Button value={1}>1-10万元</Radio.Button>
-                                <Radio.Button value={2}>10-50万元</Radio.Button>
-                                <Radio.Button value={3}>50-100万元</Radio.Button>
-                                <Radio.Button value={4}>100-500万元</Radio.Button>
-                                <Radio.Button value={5}>500-1000万元</Radio.Button>
-                                <Radio.Button value={6}>面议</Radio.Button>
-                            </Radio.Group>
-                        </Col>
-                        <Col span={8}>
-                            <Checkbox checked={!this.state.budgetCost} onChange={(e) => { if (e.target.checked) { this.setState({ budgetCost: null }) } }}>自定义金额</Checkbox>
-                            <InputNumber style={{ width: 80 }} disabled={Boolean(this.state.budgetCost)} onChange={(e) => { this.state.budgetCostLower = e; }} />
-                            <span> 到 </span>
-                            <InputNumber style={{ width: 80 }} disabled={Boolean(this.state.budgetCost)} onChange={(e) => { this.state.budgetCostUpper = e; }} />
-                            <span> 万元</span>
-                            <Button style={{ marginLeft: '20px' }} disabled={Boolean(this.state.budgetCost)} onClick={() => { this.loadData() }}>确定</Button>
-                        </Col>
-                    </Row>
-                    <Row className="search-criteria">
-                        <Col className="search-title" span={2}>
                             <span>技术类型</span>
                         </Col>
-                        <Col className="search-select" span={22}>
+                        <Col className="search-select" span={16}>
                             <Radio.Group defaultValue={999} onChange={(e) => {
                                 this.setState({
                                     demandType: e.target.value
@@ -284,9 +237,17 @@ const Content = React.createClass({
                                 {this.state.demandTypeRadio}
                             </Radio.Group>
                         </Col>
+                        <Col span={6}>
+                            <div className="nav-search">
+                                <Input onChange={(e) => { this.state.keyword = e.target.value; }} />
+                                <Button onClick={() => { this.loadData() }}>
+                                    <img src={searchImg} alt="" />
+                                </Button>
+                            </div>
+                        </Col>
                     </Row>
                     <Spin spinning={this.state.loading} style={{ marginBottom: '40px' }}>
-                        <ul className='detail_interest_sub'>
+                        <ul className='detail_interest_sub clearfix'>
                             {this.state.dataSource.map((item) => {
                                 return <li key={item.id} onClick={() => { this.tableRowClick(item) }}>
                                     <div className="interest_list_title">
@@ -344,4 +305,36 @@ const Content = React.createClass({
     }
 });
 
-export default Content;
+export default Content;
+
+                    // <Row className="search-criteria">
+                    //     <Col className="search-title" span={2}>
+                    //         <span>预算价格</span>
+                    //     </Col>
+                    //     <Col className="search-select" span={14}>
+                    //         <Radio.Group value={this.state.budgetCost}
+                    //             onChange={(e) => {
+                    //                 this.setState({
+                    //                     budgetCost: e.target.value
+                    //                 });
+                    //                 this.state.budgetCost = e.target.value;
+                    //                 this.loadData();
+                    //             }}>
+                    //             <Radio.Button value={999}>不限</Radio.Button>
+                    //             <Radio.Button value={1}>1-10万元</Radio.Button>
+                    //             <Radio.Button value={2}>10-50万元</Radio.Button>
+                    //             <Radio.Button value={3}>50-100万元</Radio.Button>
+                    //             <Radio.Button value={4}>100-500万元</Radio.Button>
+                    //             <Radio.Button value={5}>500-1000万元</Radio.Button>
+                    //             <Radio.Button value={6}>面议</Radio.Button>
+                    //         </Radio.Group>
+                    //     </Col>
+                    //     <Col span={8}>
+                    //         <Checkbox checked={!this.state.budgetCost} onChange={(e) => { if (e.target.checked) { this.setState({ budgetCost: null }) } }}>自定义金额</Checkbox>
+                    //         <InputNumber style={{ width: 80 }} disabled={Boolean(this.state.budgetCost)} onChange={(e) => { this.state.budgetCostLower = e; }} />
+                    //         <span> 到 </span>
+                    //         <InputNumber style={{ width: 80 }} disabled={Boolean(this.state.budgetCost)} onChange={(e) => { this.state.budgetCostUpper = e; }} />
+                    //         <span> 万元</span>
+                    //         <Button style={{ marginLeft: '20px' }} disabled={Boolean(this.state.budgetCost)} onClick={() => { this.loadData() }}>确定</Button>
+                    //     </Col>
+                    // </Row>

+ 1 - 1
js/component/portal/search/demandDesc.jsx

@@ -314,7 +314,7 @@ const DemandDetail = React.createClass({
                             <Col span={20}>
                                 {theData.textFileUrl ?
                                     <span className="download-file">
-                                        <a onClick={() => { window.open(globalConfig.context + '/api/user/demand/download?id=' + this.props.data.id + '&sign=demand_maturity_text_file') }}>需求文件(文本文件)</a>
+                                        <a onClick={() => { window.open(globalConfig.context + '/api/user/demand/download?id=' + theData.id + '&sign=demand_maturity_text_file') }}>需求文件(文本文件)</a>
                                     </span>
                                     : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}
                             </Col>

+ 140 - 155
js/component/portal/search/subscriber.jsx

@@ -77,7 +77,10 @@ const SubContent = React.createClass({
     getInitialState() {
         return {
             loading: false,
-            type: 0,
+            type: 1,
+            fieldFirstOption: [],
+            fieldSecondOption: [],
+            fieldThirdOption: [],
             pagination: {
                 pageNo: 1,
                 pageSize: 12,
@@ -88,9 +91,12 @@ const SubContent = React.createClass({
     },
     componentWillMount() {
         let theFieldArr = [], theProvinceArr = [];
+        theFieldArr.push(
+            <Radio.Button key={999} value={999}>不限</Radio.Button>
+        );
         techFieldList.map((item) => {
             theFieldArr.push(
-                <Select.Option key={item.value}>{item.label}</Select.Option>
+                <Radio.Button value={item.value} key={item.value}>{item.label}</Radio.Button>
             )
         });
         provinceList.map((item) => {
@@ -110,47 +116,57 @@ const SubContent = React.createClass({
     },
     fieldFirstChange(e) {
         let theArr = [];
-        techFieldList.map((item) => {
-            if (item.value == e) {
-                item.children.map((children) => {
-                    theArr.push(
-                        <Select.Option key={children.value}>{children.label}</Select.Option>
-                    )
-                });
-            }
-        });
-        this.state.firstField = e;
-        this.state.secondField = undefined;
-        this.state.thirdField = undefined;
+        if (e.target.value !== 999) {
+            theArr.push(
+                <Radio.Button key={999} value={999}>不限</Radio.Button>
+            );
+            techFieldList.map((item) => {
+                if (item.value == e.target.value) {
+                    item.children.map((children) => {
+                        theArr.push(
+                            <Radio.Button value={children.value} key={children.value}>{children.label}</Radio.Button>
+                        )
+                    });
+                }
+            });
+            this.state.firstField = e.target.value;
+        } else {
+            this.state.firstField = null;
+        };
+        this.state.secondField = null;
+        this.state.thirdField = null;
         this.setState({
             fieldSecondOption: theArr,
-            firstField: e,
-            secondField: undefined,
-            thirdField: undefined
+            fieldThirdOption: []
         });
         this.loadData();
     },
     fieldSecondChange(e) {
         let theArr = [], _me = this;
-        techFieldList.map((item) => {
-            if (item.value == _me.state.firstField) {
-                item.children.map((children) => {
-                    if (children.value == e) {
-                        children.children.map((third) => {
-                            theArr.push(
-                                <Select.Option key={third.value}>{third.label}</Select.Option>
-                            )
-                        })
-                    }
-                });
-            }
-        });
-        this.state.secondField = e;
-        this.state.thirdField = undefined;
+        if (e.target.value !== 999) {
+            theArr.push(
+                <Radio.Button key={999} value={999}>不限</Radio.Button>
+            );
+            techFieldList.map((item) => {
+                if (item.value == _me.state.firstField) {
+                    item.children.map((children) => {
+                        if (children.value == e.target.value) {
+                            children.children.map((third) => {
+                                theArr.push(
+                                    <Radio.Button value={third.value} key={third.value}>{third.label}</Radio.Button>
+                                )
+                            })
+                        }
+                    });
+                }
+            });
+            this.state.secondField = e.target.value;
+        } else {
+            this.state.secondField = null;
+            this.state.thirdField = null;
+        };
         this.setState({
-            fieldThirdOption: theArr,
-            secondField: e,
-            thirdField: undefined
+            fieldThirdOption: theArr
         });
         this.loadData();
     },
@@ -208,156 +224,73 @@ const SubContent = React.createClass({
         const _me = this;
         return (
             <div className="portal-body">
-                <div className="portal-nav clearfix">
-                    <div className="nav-logoBox">
-                        <img onClick={() => { window.open(globalConfig.context + '/portal/index.html') }} src={logoImg} alt="" />
-                    </div>
-                    <ul className="nav-list clearfix">
-                        <li className={this.props.searchType == 'achievement' ? 'active' : ''}><a href={"/portal/search/achievement.html"}>科技成果</a></li>
-                        <li className={this.props.searchType == 'demand' ? 'active' : ''}><a href={"/portal/search/demand.html"}>科技需求</a></li>
-                        <li className={this.props.searchType == 'subscriber' ? 'active' : ''}><a href={"/portal/search/subscriber.html"}>伙伴/行家</a></li>
-                    </ul>
-                    <div className="nav-search">
-                        <Input onChange={(e) => { this.state.searchName = e.target.value; }} />
-                        <Button onClick={() => { this.loadData() }}>
-                            <img src={searchImg} alt="" />
-                        </Button>
-                    </div>
-                </div>
                 <div className="portal-content clearfix" >
                     <Row className="search-criteria">
                         <Col className="search-title" span={2}>
                             <span>行业分类</span>
                         </Col>
                         <Col className="search-select" span={22}>
-                            <Select style={{ width: 160, marginRight: '10px', marginBottom: '10px' }}
-                                value={this.state.firstField}
-                                placeholder="请选择行业一级分类"
-                                notFoundContent="未获取到行业分类"
-                                showSearch
-                                filterOption={companySearch}
-                                onChange={this.fieldFirstChange}>
+                            <Radio.Group defaultValue={999} onChange={this.fieldFirstChange}>
                                 {this.state.fieldFirstOption}
-                            </Select>
-                            <Select style={{ width: 200, marginRight: '10px', marginBottom: '10px' }}
-                                value={this.state.secondField}
-                                placeholder="请选择行业二级分类"
-                                notFoundContent="未获取到行业分类"
-                                showSearch
-                                filterOption={companySearch}
-                                onChange={this.fieldSecondChange}>
-                                {this.state.fieldSecondOption}
-                            </Select>
-                            <Select style={{ width: 240, marginRight: '10px', marginBottom: '10px' }}
-                                value={this.state.thirdField}
-                                placeholder="请选择行业三级分类"
-                                notFoundContent="未获取到行业分类"
-                                showSearch
-                                filterOption={companySearch}
-                                onChange={(e) => {
-                                    this.state.thirdField = e;
-                                    this.setState({ thirdField: e });
-                                    this.loadData();
-                                }}>
-                                {this.state.fieldThirdOption}
-                            </Select>
-                            <Button type="ghost" style={{ marginLeft: '20px' }}
-                                onClick={() => {
-                                    this.setState({
-                                        firstField: undefined,
-                                        secondField: undefined,
-                                        thirdField: undefined
-                                    });
-                                    this.state.firstField = undefined;
-                                    this.state.secondField = undefined;
-                                    this.state.thirdField = undefined;
-                                    this.loadData();
-                                }}>不限</Button>
+                            </Radio.Group>
                         </Col>
                     </Row>
-                    <Row className="search-criteria">
+                    {this.state.fieldSecondOption.length > 1 ? <Row className="search-criteria">
                         <Col className="search-title" span={2}>
-                            <span>地区</span>
+                            <span>行业二级分类</span>
                         </Col>
                         <Col className="search-select" span={22}>
-                            <Select style={{ width: 100, marginRight: '10px', marginBottom: '10px' }}
-                                value={this.state.province}
-                                placeholder="请选择省份"
-                                notFoundContent="未获取到省份列表"
-                                showSearch
-                                filterOption={companySearch}
-                                onChange={this.provinceChange}>
-                                {this.state.provinceOption}
-                            </Select>
-                            <Select style={{ width: 160, marginRight: '10px', marginBottom: '10px' }}
-                                value={this.state.city}
-                                placeholder="请选择城市"
-                                notFoundContent="未获取到城市列表"
-                                showSearch
-                                filterOption={companySearch}
-                                onChange={this.cityChange}>
-                                {this.state.cityOption}
-                            </Select>
-                            <Select style={{ width: 160, marginRight: '10px', marginBottom: '10px' }}
-                                value={this.state.area}
-                                placeholder="请选择行政区"
-                                notFoundContent="未获取到行政区列表"
-                                showSearch
-                                filterOption={companySearch}
-                                onChange={(e) => {
-                                    this.state.area = e;
-                                    this.setState({ area: e });
-                                    this.loadData();
-                                }}>
-                                {this.state.areaOption}
-                            </Select>
-                            <Button type="ghost" style={{ marginLeft: '20px' }}
-                                onClick={() => {
-                                    this.setState({
-                                        province: undefined,
-                                        city: undefined,
-                                        area: undefined
-                                    });
-                                    this.state.province = undefined;
-                                    this.state.city = undefined;
-                                    this.state.area = undefined;
-                                    this.loadData();
-                                }}>不限</Button>
+                            <Radio.Group defaultValue={999} onChange={this.fieldSecondChange}>
+                                {this.state.fieldSecondOption}
+                            </Radio.Group>
                         </Col>
-                    </Row>
-                    <Row className="search-criteria">
+                    </Row> : <div></div>}
+                    {this.state.fieldThirdOption.length > 1 ? <Row className="search-criteria">
                         <Col className="search-title" span={2}>
-                            <span>用户类型</span>
+                            <span>行业三级分类</span>
                         </Col>
-                        <Col className="search-select" span={6}>
-                            <Radio.Group defaultValue={0} onChange={(e) => {
-                                this.setState({
-                                    type: e.target.value
-                                });
-                                this.state.type = e.target.value;
-                                this.loadData();
+                        <Col className="search-select" span={22}>
+                            <Radio.Group defaultValue={999} onChange={(e) => {
+                                if (e.target.value !== 999) {
+                                    this.state.thirdField = e.target.value;
+                                } else {
+                                    this.state.thirdField = null;
+                                }
+                                this.loadData()
                             }}>
-                                <Radio.Button value={0}>个人</Radio.Button>
-                                <Radio.Button value={1}>组织</Radio.Button>
+                                {this.state.fieldThirdOption}
                             </Radio.Group>
                         </Col>
+                    </Row> : <div></div>}
+                    <Row className="search-criteria">
+                        <Col className="search-title" span={2}>
+                            <span>行家名称</span>
+                        </Col>
+                        <Col span={6}>
+                            <div className="nav-search" style={{ float: 'none', marginBottom: '10px' }}>
+                                <Input onChange={(e) => { this.state.searchName = e.target.value; }} />
+                                <Button onClick={() => { this.loadData() }}>
+                                    <img src={searchImg} alt="" />
+                                </Button>
+                            </div>
+                        </Col>
                     </Row>
                     <Spin spinning={this.state.loading}>
                         <ul className="clearfix">
                             {this.state.dataSource.map((item, i) => {
                                 return <li key={i} className="user-detail" onClick={() => { _me.tableRowClick(item); }}>
                                     <div className="logo">
-                                        <img src={(item.personPortraitUrl || item.logoUrl) ?
-                                            (globalConfig.avatarHost + "/upload" + (_me.state.type == 0 ? item.personPortraitUrl : item.logoUrl))
+                                        <img src={item.personPortraitUrl ?
+                                            (globalConfig.avatarHost + "/upload" + item.personPortraitUrl)
                                             : avatarImg} alt="头像" />
                                     </div>
                                     <div className="name">
-                                        {_me.state.type == 0 ? item.username : item.unitName}
+                                        {item.username}
                                     </div>
                                     <div className="province">
                                         <span style={{ letterSpacing: '32px' }}>地</span>
                                         <span>区: </span>
-                                        <span className="address"> {getProvince(item.province)}</span>
+                                        <span className="text-address"> {getProvince(item.province)}</span>
                                     </div>
                                     <div className="text">
                                         <span style={{ letterSpacing: '32px' }}>需</span>
@@ -386,4 +319,56 @@ const SubContent = React.createClass({
     }
 });
 
-export default SubContent;
+export default SubContent;
+
+
+                    // <Row className="search-criteria">
+                    //     <Col className="search-title" span={2}>
+                    //         <span>地区</span>
+                    //     </Col>
+                    //     <Col className="search-select" span={22}>
+                    //         <Select style={{ width: 100, marginRight: '10px', marginBottom: '10px' }}
+                    //             value={this.state.province}
+                    //             placeholder="请选择省份"
+                    //             notFoundContent="未获取到省份列表"
+                    //             showSearch
+                    //             filterOption={companySearch}
+                    //             onChange={this.provinceChange}>
+                    //             {this.state.provinceOption}
+                    //         </Select>
+                    //         <Select style={{ width: 160, marginRight: '10px', marginBottom: '10px' }}
+                    //             value={this.state.city}
+                    //             placeholder="请选择城市"
+                    //             notFoundContent="未获取到城市列表"
+                    //             showSearch
+                    //             filterOption={companySearch}
+                    //             onChange={this.cityChange}>
+                    //             {this.state.cityOption}
+                    //         </Select>
+                    //         <Select style={{ width: 160, marginRight: '10px', marginBottom: '10px' }}
+                    //             value={this.state.area}
+                    //             placeholder="请选择行政区"
+                    //             notFoundContent="未获取到行政区列表"
+                    //             showSearch
+                    //             filterOption={companySearch}
+                    //             onChange={(e) => {
+                    //                 this.state.area = e;
+                    //                 this.setState({ area: e });
+                    //                 this.loadData();
+                    //             }}>
+                    //             {this.state.areaOption}
+                    //         </Select>
+                    //         <Button type="ghost" style={{ marginLeft: '20px' }}
+                    //             onClick={() => {
+                    //                 this.setState({
+                    //                     province: undefined,
+                    //                     city: undefined,
+                    //                     area: undefined
+                    //                 });
+                    //                 this.state.province = undefined;
+                    //                 this.state.city = undefined;
+                    //                 this.state.area = undefined;
+                    //                 this.loadData();
+                    //             }}>不限</Button>
+                    //     </Col>
+                    // </Row>

+ 284 - 0
js/component/portal/search/subscriberUser.jsx

@@ -0,0 +1,284 @@
+import React from 'react';
+import { Icon, message, Row, Col, Radio, Input, Button, Table, Spin, Pagination } from 'antd';
+import '../portal.less';
+
+import logoImg from '../../../../image/logo.png';
+import searchImg from '../../../../image/search.png';
+
+import { techFieldList, getTechField } from '../../DicTechFieldList';
+import { getProvince } from '../../NewDicProvinceList';
+import { companySearch } from '../../tools';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+
+import avatarImg from '../../../../image/avatarImg.png';
+
+const SubContent = React.createClass({
+    loadData(pageNo) {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            url: globalConfig.context + "/portal/search/subscriberList",
+            data: {
+                "level": this.state.level, //认证状态 (0--未认证,1--认证)
+                "type": this.state.type, //用户类型 (0--个人用户,1--组织用户)
+                "field": this.state.firstField ? ((this.state.firstField || '') + (this.state.secondField ? (',' + this.state.secondField) : '') + (this.state.thirdField ? (',' + this.state.thirdField) : '')) : null,
+                "province": this.state.province,
+                "city": this.state.city,
+                "area": this.state.area,
+                "name": this.state.searchName,
+                "pageNo": pageNo || 1,
+                "pageSize": this.state.pagination.pageSize
+            },
+            success: function (data) {
+                let theArr = [];
+                if (!data.data || !data.data.list) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    for (let i = 0; i < data.data.list.length; i++) {
+                        let thisdata = data.data.list[i];
+                        theArr.push({
+                            key: i,
+                            uid: thisdata.uid, //用户ID
+                            identityId: thisdata.identityId,  //认证ID (详情接口传入ID)
+                            username: thisdata.username,// 用户名称
+                            unitName: thisdata.unitName,
+                            type: this.state.type,
+                            personPortraitUrl: thisdata.personPortraitUrl,//用户头像URL
+                            logoUrl: thisdata.logoUrl,
+                            achievementNum: thisdata.achievementNum,	//科技成果数量
+                            demandNum: thisdata.demandNum, //科技需求数量
+                            province: thisdata.province,
+                            engagedField: thisdata.engagedField ? thisdata.engagedField.split(',') : [],
+                            workUnit: thisdata.workUnit,
+                            position: thisdata.position
+                        });
+                    };
+                };
+                this.state.pagination.pageNo = data.data.pageNo;
+                this.state.pagination.total = data.data.totalCount;
+                this.setState({
+                    dataSource: theArr,
+                    pagination: this.state.pagination
+                });
+            }.bind(this),
+        }).done(function (data) {
+            if (data.error && data.error.length) {
+                message.warning(data.error[0].message);
+            };
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            loading: false,
+            type: 0,
+            fieldFirstOption: [],
+            fieldSecondOption: [],
+            fieldThirdOption: [],
+            pagination: {
+                pageNo: 1,
+                pageSize: 12,
+                total: 0
+            },
+            dataSource: []
+        };
+    },
+    componentWillMount() {
+        let theFieldArr = [];
+        theFieldArr.push(
+            <Radio.Button key={999} value={999}>不限</Radio.Button>
+        );
+        techFieldList.map((item) => {
+            theFieldArr.push(
+                <Radio.Button value={item.value} key={item.value}>{item.label}</Radio.Button>
+            )
+        });
+        this.state.fieldFirstOption = theFieldArr;
+
+        if (window.location.search) {
+            let theUrl = window.location.search
+            this.state.keyword = theUrl.substring(1, theUrl.length);
+        };
+
+        this.loadData();
+    },
+    fieldFirstChange(e) {
+        let theArr = [];
+        if (e.target.value !== 999) {
+            theArr.push(
+                <Radio.Button key={999} value={999}>不限</Radio.Button>
+            );
+            techFieldList.map((item) => {
+                if (item.value == e.target.value) {
+                    item.children.map((children) => {
+                        theArr.push(
+                            <Radio.Button value={children.value} key={children.value}>{children.label}</Radio.Button>
+                        )
+                    });
+                }
+            });
+            this.state.firstField = e.target.value;
+        } else {
+            this.state.firstField = null;
+        };
+        this.state.secondField = null;
+        this.state.thirdField = null;
+        this.setState({
+            fieldSecondOption: theArr,
+            fieldThirdOption: []
+        });
+        this.loadData();
+    },
+    fieldSecondChange(e) {
+        let theArr = [], _me = this;
+        if (e.target.value !== 999) {
+            theArr.push(
+                <Radio.Button key={999} value={999}>不限</Radio.Button>
+            );
+            techFieldList.map((item) => {
+                if (item.value == _me.state.firstField) {
+                    item.children.map((children) => {
+                        if (children.value == e.target.value) {
+                            children.children.map((third) => {
+                                theArr.push(
+                                    <Radio.Button value={third.value} key={third.value}>{third.label}</Radio.Button>
+                                )
+                            })
+                        }
+                    });
+                }
+            });
+            this.state.secondField = e.target.value;
+        } else {
+            this.state.secondField = null;
+            this.state.thirdField = null;
+        };
+        this.setState({
+            fieldThirdOption: theArr
+        });
+        this.loadData();
+    },
+    tableRowClick(record, index) {
+        window.open(globalConfig.context + '/user/subscriberDetail.html?rid=' + record.uid + '&type=' + record.type);
+    },
+    render() {
+        const { pageNo, pageSize, total } = this.state.pagination;
+        const _me = this;
+        return (
+            <div className="portal-body">
+                <div className="portal-content clearfix" >
+                    <Row className="search-criteria">
+                        <Col className="search-title" span={2}>
+                            <span>行业分类</span>
+                        </Col>
+                        <Col className="search-select" span={22}>
+                            <Radio.Group defaultValue={999} onChange={this.fieldFirstChange}>
+                                {this.state.fieldFirstOption}
+                            </Radio.Group>
+                        </Col>
+                    </Row>
+                    {this.state.fieldSecondOption.length > 1 ? <Row className="search-criteria">
+                        <Col className="search-title" span={2}>
+                            <span>行业二级分类</span>
+                        </Col>
+                        <Col className="search-select" span={22}>
+                            <Radio.Group defaultValue={999} onChange={this.fieldSecondChange}>
+                                {this.state.fieldSecondOption}
+                            </Radio.Group>
+                        </Col>
+                    </Row> : <div></div>}
+                    {this.state.fieldThirdOption.length > 1 ? <Row className="search-criteria">
+                        <Col className="search-title" span={2}>
+                            <span>行业三级分类</span>
+                        </Col>
+                        <Col className="search-select" span={22}>
+                            <Radio.Group defaultValue={999} onChange={(e) => {
+                                if (e.target.value !== 999) {
+                                    this.state.thirdField = e.target.value;
+                                } else {
+                                    this.state.thirdField = null;
+                                }
+                                this.loadData()
+                            }}>
+                                {this.state.fieldThirdOption}
+                            </Radio.Group>
+                        </Col>
+                    </Row> : <div></div>}
+                    <Row className="search-criteria">
+                        <Col className="search-title" span={2}>
+                            <span>伙伴名称</span>
+                        </Col>
+                        <Col span={6}>
+                            <div className="nav-search" style={{ float: 'none', marginBottom: '10px' }}>
+                                <Input onChange={(e) => { this.state.searchName = e.target.value; }} />
+                                <Button onClick={() => { this.loadData() }}>
+                                    <img src={searchImg} alt="" />
+                                </Button>
+                            </div>
+                        </Col>
+                    </Row>
+                    <Spin spinning={this.state.loading}>
+                        <ul className="clearfix">
+                            {this.state.dataSource.map((item, i) => {
+                                return <li key={i} className="org-detail clearfix" onClick={() => { _me.tableRowClick(item); }}>
+                                    <div className="logo">
+                                        <img src={(item.personPortraitUrl || item.logoUrl) ?
+                                            (globalConfig.avatarHost + "/upload" + (item.logoUrl))
+                                            : avatarImg} alt="头像" />
+                                    </div>
+                                    <div className="detail-right">
+                                        <div className="name">
+                                            {item.unitName || 'UserName'}
+                                        </div> 
+                                        <div className="text" style={{fontSize:'14px'}}>
+                                            {(item.workUnit || '单位') + ' ' + (item.position || '职位')}
+                                        </div>
+                                        <div className="text" style={{fontSize:'12px'}}>
+                                            {getTechField(item.engagedField[0],item.engagedField[1],item.engagedField[2])}
+                                        </div>
+                                        <div className="detail-text">
+                                            <div className="text">
+                                                <span style={{ letterSpacing: '32px' }}>需</span>
+                                                <span>求: </span>
+                                                <span className="text-Number"> {item.demandNum || 0} </span>
+                                                <span className="text-unit"> 条</span>
+                                            </div>
+                                            <div className="text">
+                                                <span>技术成果: </span>
+                                                <span className="text-Number"> {item.achievementNum || 0} </span>
+                                                <span className="text-unit"> 条</span>
+                                            </div>
+                                            <div className="text">
+                                                <span style={{ letterSpacing: '32px' }}>粉</span>
+                                                <span>丝: </span>
+                                                <span className="text-address"> {Math.round(Math.random() * 1000)}</span>
+                                                <span className="text-unit"> 位</span>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </li>
+                            })}
+                        </ul>
+                        <Pagination style={{ float: 'right' }}
+                            onChange={(e) => { this.loadData(e); }}
+                            total={total}
+                            showTotal={() => { return '共' + total + '条数据' }}
+                            current={pageNo}
+                            pageSize={pageSize} />
+                    </Spin>
+                </div>
+            </div>
+        )
+    }
+});
+
+export default SubContent;

+ 115 - 13
js/component/portal/top.jsx

@@ -1,7 +1,17 @@
 import React from 'react';
 import './portal.less';
-import ajax from 'jquery/src/ajax/xhr.js';
-import $ from 'jquery/src/ajax';
+// import ajax from 'jquery/src/ajax/xhr.js';
+// import $ from 'jquery/src/ajax';
+import $ from 'jquery';
+import logoImg from '../../../image/logo-2.png';
+
+function navHover() {
+    $('.header_nav_detail .nav_content>li').hover(function () {
+        $(this).siblings('.active').addClass('hideSub');
+    }, function () {
+        $(this).siblings('.active').removeClass('hideSub');
+    })
+}
 
 const LoginTop = React.createClass({
     logOut() {
@@ -13,21 +23,113 @@ const LoginTop = React.createClass({
             window.location.href = globalConfig.context + "/user/login.html"
         });
     },
+    componentDidMount() {
+        navHover();
+    },
     render() {
         return (
             <div className="portal-header">
-                <div className="portal-top clearfix">
-                    <div className="top-welcomeText">欢迎您来到科技认知计算交易平台!</div>
-                    <div className="top-alink">
-                        <a href={globalConfig.context + "/portal/index.html"}>返回首页</a>
-                        {window.userData.number ?
-                            <span>
-                                <a href={globalConfig.context + "/user/account/index"}>尊敬的{userData.nickname || userData.number}</a>
-                                <a onClick={this.logOut}>退出</a>
-                            </span>
-                            : <a href={globalConfig.context + "/user/login/index"}>请登录</a>}
-                        <a href="./index.html">帮助中心</a>
+                <div className="portal-top">
+                    <div className="clearfix">
+                        <div className="top-welcomeText">欢迎您来到科技认知计算交易平台-公测版</div>
+                        <div className="top-alink">
+                            <a href={globalConfig.context + "/portal/index.html"}>返回首页</a>
+                            {window.userData.number ?
+                                <span>
+                                    <a href={globalConfig.context + "/user/account/index"}>尊敬的{userData.nickname || userData.number}</a>
+                                    <a onClick={this.logOut}>退出</a>
+                                </span>
+                                : <span>
+                                    <a href={globalConfig.context + "/user/login.html"}>登录</a>
+                                    <a href={globalConfig.context + "/user/signIn.html"}>注册</a>
+                                </span>}
+                            <a href="./index.html">帮助中心</a>
+                        </div>
+                    </div>
+                </div>
+                <div className="header_nav_detail">
+                    <div className="container clearfix">
+                        <div className="col-md-3 logo">
+                            <a href={globalConfig.context + '/portal/index.html'}>
+                                <img src={logoImg} alt="" />
+                            </a>
+                        </div>
+                        <div className="col-md-9">
+                            <ul className="nav_content">
+                                <li className="home"><a href={globalConfig.context + "/portal/index.html"}>首页</a> </li>
+                                <li className="active">
+                                    <a href={globalConfig.context + '/portal/search/achievement.html'}>技术交易</a>
+                                    <ul className="secondary_navigation_nav" >
+                                        <li><a href={globalConfig.context + '/portal/search/demand.html'}>需求谷</a></li>
+                                        <li><a href={globalConfig.context + '/portal/search/achievement.html'}>技术海</a></li>
+                                        <li><a href={globalConfig.context + '/portal/search/subscriberOrg.html'}>伙伴</a></li>
+                                        <li><a href={globalConfig.context + '/portal/search/subscriberUser.html'}>行家</a></li>
+                                        <li><a href={globalConfig.context + '/portal/international/internationalIndex.html'}>国际业务</a></li>
+                                    </ul>
+                                </li>
+                                <li>
+                                    <a href={globalConfig.context + '/portal/scienceTechnology/bigShot.html'}>大咖说</a>
+                                    <ul className="secondary_navigation_nav">
+                                        <li><a href={globalConfig.context + '/portal/scienceTechnology/star.html'}>科技明星</a></li>
+                                        <li><a href={globalConfig.context + '/portal/scienceTechnology/lecture.html'}>科技讲堂</a></li>
+                                    </ul>
+                                </li>
+                                <li>
+                                    <a href={globalConfig.context + '/portal/activity/activityIndex.html'}>活动圈</a>
+                                    <ul className="secondary_navigation_nav">
+                                        <li><a href={globalConfig.context + '/portal/activity/details.html'}>活动详情</a></li>
+                                    </ul>
+                                </li >
+                                <li>
+                                    <a href={globalConfig.context + '/portal/websiteBuild/websiteBuildIndex.html'}>建设兵团</a>
+                                    <ul className="secondary_navigation_nav">
+                                        <li><a href={globalConfig.context + '/portal/websiteBuild/websiteBuildIndex.html#customized'}>平台定制</a></li>
+                                        <li><a href={globalConfig.context + '/portal/websiteBuild/websiteBuildIndex.html#operates'}>平台运营</a></li>
+                                        <li><a href={globalConfig.context + '/portal/websiteBuild/websiteBuildIndex.html#event_planning'}>活动筹划</a></li>
+                                    </ul>
+                                </li>
+                                <li>
+                                    <a href={globalConfig.context + '/portal/international/internationalIndex.html'}>国际业务</a>
+                                    <ul className="secondary_navigation_nav" >
+                                        <li><a href={globalConfig.context + '/portal/international/internationalIndex.html#internationalTechnology'}>国际技术</a></li>
+                                        <li><a href={globalConfig.context + '/portal/international/internationalIndex.html#internationalPartner'}>国际伙伴</a></li>
+                                        <li><a href={globalConfig.context + '/portal/international/internationalIndex.html#internationalExpert'}>国际专家</a></li>
+                                    </ul>
+                                </li>
+                                <li>
+                                    <a href={globalConfig.context + '/portal/service/serviceIndex.html'}>服务汇</a>
+                                    <ul className="secondary_navigation_nav">
+                                        <li ><a href={globalConfig.context + '/portal/highTech/authentication.html'}>高企培育</a></li>
+                                        <li ><a href={globalConfig.context + '/portal/ipr/service.html'}>知识产权</a></li >
+                                        <li ><a href={globalConfig.context + '/portal/evaluation/index.html'}>技术评估</a></li>
+                                    </ul>
+                                </li>
+                                <li>
+                                    <a href={globalConfig.context + '/portal/news/newsIndex.html'}>策源地</a>
+                                    <ul className="secondary_navigation_nav">
+                                        <li><a href={globalConfig.context + '/portal/news/newsIndex.html'}>新闻快讯</a></li>
+                                        <li><a href={globalConfig.context + '/portal/news/newsIndex.html'}>科技政策</a></li>
+                                        <li><a href={globalConfig.context + '/portal/news/newsIndex.html'}>政策解读</a></li>
+                                    </ul>
+                                </li>
+                                <li>
+                                    <a href={globalConfig.context + '/portal/entrepreneurship/entrepreneurshipIndex.html'}>创意圈</a>
+                                    <ul className="secondary_navigation_nav">
+                                        <li><a href={globalConfig.context + '/portal/entrepreneurship/entrepreneurshipIndex.html'}>项目圈</a></li>
+                                        <li><a href={globalConfig.context + '/portal/entrepreneurship/entrepreneurshipIndex.html#chuangke'}>创客圈</a></li>
+                                        <li><a href={globalConfig.context + '/portal/entrepreneurship/entrepreneurshipIndex.html#jieyi'}>结义园</a></li>
+                                    </ul>
+                                </li>
+                                <li>
+                                    <a href={globalConfig.context + '/portal/financial/financialIndex.html'}>金融圈</a>
+                                    <ul className="secondary_navigation_nav">
+                                        <li ><a href={globalConfig.context + '/portal/financial/financialIndex.html'}>金融街</a></li>
+                                    </ul>
+                                </li>
+                            </ul>
+                        </div>
                     </div>
+                    <div className="secondary_navigation"></div>
                 </div>
             </div>
         )

+ 124 - 119
js/component/sign/groupAccount.jsx

@@ -61,6 +61,9 @@ const Group = Form.create()(React.createClass({
     getMCode() {
         const _me = this;
         const form = this.props.form;
+        this.setState({
+            loading: true
+        });
         $.ajax({
             method: "get",
             dataType: "json",
@@ -162,125 +165,127 @@ const Group = Form.create()(React.createClass({
         };
         return (
             <div className="group clearfix">
-                <Form className="account-left" horizontal onSubmit={this.handleSubmit}>
-                    <FormItem
-                        {...formItemLayout}
-                        label="密码"
-                        extra={<span><Icon type="exclamation-circle" /> 建议字母、数字和符号两种以上组合,6-20个字符</span>}
-                        hasFeedback >
-                        {getFieldDecorator('password', {
-                            rules: [{
-                                required: true, message: '请输入密码!',
-                            }, {
-                                validator: this.checkConfirm,
-                            }],
-                        })(
-                            <Input type="password" onBlur={this.handlePasswordBlur} />
-                            )}
-                    </FormItem>
-                    <FormItem
-                        {...formItemLayout}
-                        label="确认密码"
-                        extra={<span><Icon type="exclamation-circle" /> 请再次输入密码</span>}
-                        hasFeedback
-                    >
-                        {getFieldDecorator('confirm', {
-                            rules: [{
-                                required: true, message: '请再次输入密码!',
-                            }, {
-                                validator: this.checkPassowrd,
-                            }],
-                        })(
-                            <Input type="password" />
-                            )}
-                    </FormItem>
-                    <FormItem
-                        {...formItemLayout}
-                        label="手机号码"
-                        hasFeedback
-                        extra={<span><Icon type="exclamation-circle" /> 请输入正确的手机号码</span>}
-                    >
-                        {getFieldDecorator('phone', {
-                            rules: [{ required: true, message: '请输入手机号码!' }, {
-                                validator: this.checkPhone,
-                            }],
-                        })(
-                            <Input size="large" />
-                            )}
-                    </FormItem>
-                    <FormItem
-                        {...formItemLayout}
-                        label="验证码"
-                        extra={<span className="redFont"><Icon type="exclamation-circle" /> 看不清?点击图片更换验证码</span>}
-                    >
-                        <Row gutter={8}>
-                            <Col span={16}>
-                                {getFieldDecorator('captcha', {
-                                    rules: [{ required: true, message: '请输入图片中的验证码' }],
-                                })(
-                                    <Input size="large" />
-                                    )}
-                            </Col>
-                            <Col span={8}>
-                                <div className="acc-getVcode">
-                                    <img id="VCode" src={this.state.vCodeUrl} alt="点击刷新验证码" onClick={this.reloadVCode} />
-                                </div>
-                            </Col>
-                        </Row>
-                    </FormItem>
-                    <FormItem
-                        {...formItemLayout}
-                        label="手机验证码"
-                        extra={<span><Icon type="exclamation-circle" /> 点击获取后我们将发送验证码到上面手机号</span>}
-                    >
-                        <Row gutter={8}>
-                            <Col span={16}>
-                                {getFieldDecorator('phonecaptcha', {
-                                    rules: [{ required: true, message: '请输入手机获取到的验证码' }],
-                                })(
-                                    <Input size="large" />
-                                    )}
-                            </Col>
-                            <Col span={8}>
-                                <Button size="large" onClick={this.getMCode} disabled={this.state.getCodeButton}>{this.state.mCodeText}</Button>
-                            </Col>
-                        </Row>
-                    </FormItem>
-                    <FormItem
-                        {...formItemLayout}
-                        label="单位名称"
-                        hasFeedback
-                        extra={<span><Icon type="exclamation-circle" /> 请填写工商局注册的全称</span>}
-                    >
-                        {getFieldDecorator('company', {
-                            rules: [{ required: true, message: '请填写公司全称!' }],
-                        })(
-                            <Input size="large" />
-                            )}
-                    </FormItem>
-                    <FormItem
-                        {...formItemLayout}
-                        label="联系人"
-                        hasFeedback
-                    >
-                        {getFieldDecorator('user', {
-                            rules: [{ required: true, message: '请输入联系人姓名!' }],
-                        })(
-                            <Input size="large" />
-                            )}
-                    </FormItem>
-                    <FormItem {...tailFormItemLayout} style={{ marginBottom: 8 }}>
-                        {getFieldDecorator('agreement', {
-                            valuePropName: 'checked',
-                        })(
-                            <Checkbox>同意 <a onClick={() => { this.setState({ showDesc: true }); }}> 阿凡提会员服务协议条款</a></Checkbox>
-                            )}
-                    </FormItem>
-                    <FormItem {...tailFormItemLayout}>
-                        <Button type="primary" htmlType="submit" size="large">提 交</Button>
-                    </FormItem>
-                </Form>
-                <Modal showDesc={this.state.showDesc} closeModal={this.closeModal} />
+                <Spin spinning={this.state.loading} >
+                    <Form className="account-left" horizontal onSubmit={this.handleSubmit}>
+                        <FormItem
+                            {...formItemLayout}
+                            label="密码"
+                            extra={<span><Icon type="exclamation-circle" /> 建议字母、数字和符号两种以上组合,6-20个字符</span>}
+                            hasFeedback >
+                            {getFieldDecorator('password', {
+                                rules: [{
+                                    required: true, message: '请输入密码!',
+                                }, {
+                                    validator: this.checkConfirm,
+                                }],
+                            })(
+                                <Input type="password" onBlur={this.handlePasswordBlur} />
+                                )}
+                        </FormItem>
+                        <FormItem
+                            {...formItemLayout}
+                            label="确认密码"
+                            extra={<span><Icon type="exclamation-circle" /> 请再次输入密码</span>}
+                            hasFeedback
+                        >
+                            {getFieldDecorator('confirm', {
+                                rules: [{
+                                    required: true, message: '请再次输入密码!',
+                                }, {
+                                    validator: this.checkPassowrd,
+                                }],
+                            })(
+                                <Input type="password" />
+                                )}
+                        </FormItem>
+                        <FormItem
+                            {...formItemLayout}
+                            label="手机号码"
+                            hasFeedback
+                            extra={<span><Icon type="exclamation-circle" /> 请输入正确的手机号码</span>}
+                        >
+                            {getFieldDecorator('phone', {
+                                rules: [{ required: true, message: '请输入手机号码!' }, {
+                                    validator: this.checkPhone,
+                                }],
+                            })(
+                                <Input size="large" />
+                                )}
+                        </FormItem>
+                        <FormItem
+                            {...formItemLayout}
+                            label="验证码"
+                            extra={<span className="redFont"><Icon type="exclamation-circle" /> 看不清?点击图片更换验证码</span>}
+                        >
+                            <Row gutter={8}>
+                                <Col span={16}>
+                                    {getFieldDecorator('captcha', {
+                                        rules: [{ required: true, message: '请输入图片中的验证码' }],
+                                    })(
+                                        <Input size="large" />
+                                        )}
+                                </Col>
+                                <Col span={8}>
+                                    <div className="acc-getVcode">
+                                        <img id="VCode" src={this.state.vCodeUrl} alt="点击刷新验证码" onClick={this.reloadVCode} />
+                                    </div>
+                                </Col>
+                            </Row>
+                        </FormItem>
+                        <FormItem
+                            {...formItemLayout}
+                            label="手机验证码"
+                            extra={<span><Icon type="exclamation-circle" /> 点击获取后我们将发送验证码到上面手机号</span>}
+                        >
+                            <Row gutter={8}>
+                                <Col span={16}>
+                                    {getFieldDecorator('phonecaptcha', {
+                                        rules: [{ required: true, message: '请输入手机获取到的验证码' }],
+                                    })(
+                                        <Input size="large" />
+                                        )}
+                                </Col>
+                                <Col span={8}>
+                                    <Button size="large" onClick={this.getMCode} disabled={this.state.getCodeButton}>{this.state.mCodeText}</Button>
+                                </Col>
+                            </Row>
+                        </FormItem>
+                        <FormItem
+                            {...formItemLayout}
+                            label="单位名称"
+                            hasFeedback
+                            extra={<span><Icon type="exclamation-circle" /> 请填写工商局注册的全称</span>}
+                        >
+                            {getFieldDecorator('company', {
+                                rules: [{ required: true, message: '请填写公司全称!' }],
+                            })(
+                                <Input size="large" />
+                                )}
+                        </FormItem>
+                        <FormItem
+                            {...formItemLayout}
+                            label="联系人"
+                            hasFeedback
+                        >
+                            {getFieldDecorator('user', {
+                                rules: [{ required: true, message: '请输入联系人姓名!' }],
+                            })(
+                                <Input size="large" />
+                                )}
+                        </FormItem>
+                        <FormItem {...tailFormItemLayout} style={{ marginBottom: 8 }}>
+                            {getFieldDecorator('agreement', {
+                                valuePropName: 'checked',
+                            })(
+                                <Checkbox>同意 <a onClick={() => { this.setState({ showDesc: true }); }}> 阿凡提会员服务协议条款</a></Checkbox>
+                                )}
+                        </FormItem>
+                        <FormItem {...tailFormItemLayout}>
+                            <Button type="primary" htmlType="submit" size="large">提 交</Button>
+                        </FormItem>
+                    </Form>
+                    <Modal showDesc={this.state.showDesc} closeModal={this.closeModal} />
+                </Spin>
             </div>
         );
     },

+ 1 - 1
js/component/tools.js

@@ -551,7 +551,7 @@ module.exports = {
     getIndustryType(e) {
         if (e) {
             let theType = '';
-            companyType.map(function (item) {
+            industryList.map(function (item) {
                 if (item.value == e) {
                     theType = item.key;
                 };

+ 1 - 1
js/portal/search/subscriber.js

@@ -4,7 +4,7 @@ import '../../../css/base.less';
 import '../../../css/login.less';
 
 import Top from '../../component/portal/top.jsx';
-import Content from '../../component/portal/search/subscriber.jsx';
+import Content from '../../component/portal/search/subscriberOrg.jsx';
 import Footer from '../../component/portal/footer.jsx';
 
 ReactDOM.render(

+ 17 - 0
js/portal/search/subscriberUser.js

@@ -0,0 +1,17 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import '../../../css/base.less';
+import '../../../css/login.less';
+
+import Top from '../../component/portal/top.jsx';
+import Content from '../../component/portal/search/subscriberUser.jsx';
+import Footer from '../../component/portal/footer.jsx';
+
+ReactDOM.render(
+    <div className="wrap">
+        <Top />
+        <Content searchType={"subscriber"}/>
+        <Footer />
+    </div>,
+    document.getElementById('root')
+)

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "afanti",
-  "version": "1.0.33",
+  "version": "1.0.34",
   "description": "",
   "main": "index.js",
   "scripts": {

+ 9 - 3
webpack.config.js

@@ -197,10 +197,16 @@ module.exports = (function () {
             chunks: ['portal/search/achievement', 'vendors']
         }),
         new HtmlWebpackPlugin({
-            title: '主页-科技成果搜索',
-            filename: 'portal/search/subscriber.html',
+            title: '主页-行家搜索',
+            filename: 'portal/search/subscriberUser.html',
+            template: './template/template.html',
+            chunks: ['portal/search/subscriberUser', 'vendors']
+        }),
+        new HtmlWebpackPlugin({
+            title: '主页-伙伴搜索',
+            filename: 'portal/search/subscriberOrg.html',
             template: './template/template.html',
-            chunks: ['portal/search/subscriber', 'vendors']
+            chunks: ['portal/search/subscriberOrg', 'vendors']
         })
     ];
     if (!isDev) {

+ 8 - 3
webpack/entry.config.js

@@ -32,7 +32,8 @@ module.exports = {
     //portal  门户
     'portal/search/demand': './js/portal/search/demand.js',
     'portal/search/achievement': './js/portal/search/achievement.js',
-    'portal/search/subscriber': './js/portal/search/subscriber.js'
+    'portal/search/subscriberUser': './js/portal/search/subscriberUser.js',
+    'portal/search/subscriberOrg': './js/portal/search/subscriberOrg.js'
   },
   watch: {
     'user/index': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
@@ -143,9 +144,13 @@ module.exports = {
       'webpack/hot/only-dev-server',
       './js/portal/search/achievement.js'
     ],
-    'portal/search/subscriber': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
+    'portal/search/subscriberUser': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
-      './js/portal/search/subscriber.js'
+      './js/portal/search/subscriberUser.js'
+    ],
+    'portal/search/subscriberOrg': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
+      'webpack/hot/only-dev-server',
+      './js/portal/search/subscriberOrg.js'
     ]
   }
 }