Browse Source

update v1.0.34

yee 7 years ago
parent
commit
32e7ff6d40
41 changed files with 880 additions and 371 deletions
  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. 2 20
      js/component/account/achievement/techAchievementDesc.jsx
  24. 4 8
      js/component/account/demand/techDemandDesc.jsx
  25. 9 6
      js/component/login/login.less
  26. 33 12
      js/component/manageCenter/achievement/techAchievementDesc.jsx
  27. 2 6
      js/component/manageCenter/demand/techDemandDesc.jsx
  28. 2 2
      js/component/manageCenter/servicesManage/highTech/highTechInfo.jsx
  29. 1 1
      js/component/manageCenter/userManage/orgList.jsx
  30. 45 2
      js/component/portal/footer.jsx
  31. 153 18
      js/component/portal/portal.less
  32. 97 72
      js/component/portal/search/achievement.jsx
  33. 44 51
      js/component/portal/search/demand.jsx
  34. 140 155
      js/component/portal/search/subscriber.jsx
  35. 284 0
      js/component/portal/search/subscriberUser.jsx
  36. 18 7
      js/component/portal/top.jsx
  37. 1 1
      js/portal/search/subscriber.js
  38. 17 0
      js/portal/search/subscriberUser.js
  39. 1 1
      package.json
  40. 9 3
      webpack.config.js
  41. 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/bg.jpg


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 = {

+ 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}

+ 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
+        }
+    }
 }

+ 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}

+ 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}

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

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

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

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

+ 45 - 2
js/component/portal/footer.jsx

@@ -4,13 +4,56 @@ import './portal.less';
 const Footer = React.createClass({
     render() {
         return (
-            <div className="footer">
+            <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>
-            </div>
+            </footer >
         )
     }
 });

+ 153 - 18
js/component/portal/portal.less

@@ -56,8 +56,9 @@
                         position: relative;
                         &.active,
                         &:hover {
+                            background: #58a3ff;
                             >a {
-                                color: #58a3ff;
+                                color: #fff;
                                 font-weight: bolder;
                                 font-size: 14px;
                             }
@@ -106,11 +107,9 @@
                         }
                         &.active,
                         &:hover {
-                            background: rgba(0, 0, 0, 0.1);
                             a {
                                 font-size: 13px;
                                 font-weight: bolder;
-                                border: none;
                             }
                         }
                         &:last-child a {
@@ -128,7 +127,6 @@
                 line-height: 45px;
                 width: 100%;
                 background: #58a3ff;
-                opacity: 0.2;
                 z-index: 99;
                 display: block;
             }
@@ -164,19 +162,93 @@
             float: left
         }
     }
-    .footer {
-        width: 100%;
-        position: fixed;
-        bottom: 0;
-        left: 0;
-        z-index: 1;
+    footer {
+        background: #3c3d43;
         text-align: center;
-        padding: 6px 0;
-        padding: 10px 0;
-        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 {
@@ -293,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;
@@ -329,7 +407,7 @@
                     text-align: center;
                     color: #333;
                 }
-                .address {
+                .text-address {
                     font-size: 18px;
                 }
                 .text-Number {
@@ -341,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 {
@@ -429,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;

+ 97 - 72
js/component/portal/search/achievement.jsx

@@ -247,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
@@ -311,22 +260,6 @@ 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={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; }} />
@@ -337,10 +270,9 @@ const Content = React.createClass({
                         </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>
@@ -413,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>

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

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

+ 18 - 7
js/component/portal/top.jsx

@@ -1,9 +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() {
@@ -15,6 +23,9 @@ const LoginTop = React.createClass({
             window.location.href = globalConfig.context + "/user/login.html"
         });
     },
+    componentDidMount() {
+        navHover();
+    },
     render() {
         return (
             <div className="portal-header">
@@ -29,8 +40,8 @@ const LoginTop = React.createClass({
                                     <a onClick={this.logOut}>退出</a>
                                 </span>
                                 : <span>
-                                    <a href={globalConfig.context + "/user/login/index"}>登录</a>
-                                    <a href={globalConfig.context + "/user/login/index"}>注册</a>
+                                    <a href={globalConfig.context + "/user/login.html"}>登录</a>
+                                    <a href={globalConfig.context + "/user/signIn.html"}>注册</a>
                                 </span>}
                             <a href="./index.html">帮助中心</a>
                         </div>
@@ -46,13 +57,13 @@ const LoginTop = React.createClass({
                         <div className="col-md-9">
                             <ul className="nav_content">
                                 <li className="home"><a href={globalConfig.context + "/portal/index.html"}>首页</a> </li>
-                                <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/subscriber.html'}>伙伴</a></li>
-                                        <li><a href={globalConfig.context + '/portal/search/subscriber.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>

+ 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'
     ]
   }
 }