yee 7 yıl önce
ebeveyn
işleme
4d555a2c63

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/demand_ico_6.png


BIN
image/demand_ico_6_atv.png


BIN
image/demand_sup.png


BIN
image/logo.jpg


BIN
image/logo.png


BIN
image/search.png


BIN
image/slide_img_1.png


+ 2 - 3
js/component/certify/certify.less

@@ -10,7 +10,7 @@
                     margin: 0 auto;
                     padding: 10px 0;
                     .logo {
-                        width: 120px;
+                        width: 180px;
                         padding-top: 60px;
                         float: left;
                         margin-left: 4%;
@@ -21,11 +21,10 @@
                             top: 0;
                             right: 0;
                             height: 60px;
-                            width: 60px;
                         }
                     }
                     .certify-text {
-                        width: 84%;
+                        width: 80%;
                         float: left;
                         line-height: 60px;
                         font-size: 24px;

+ 1 - 1
js/component/certify/top.jsx

@@ -1,6 +1,6 @@
 import React from 'react';
 import './certify.less';
-import logo from '../../../image/logo.jpg';
+import logo from '../../../image/logo.png';
 
 const LoginTop = React.createClass({
     render() {

+ 2 - 3
js/component/groupCertify/certify.less

@@ -10,7 +10,7 @@
                     margin: 0 auto;
                     padding: 10px 0;
                     .logo {
-                        width: 120px;
+                        width: 180px;
                         padding-top: 60px;
                         float: left;
                         margin-left: 4%;
@@ -21,11 +21,10 @@
                             top: 0;
                             right: 0;
                             height: 60px;
-                            width: 60px;
                         }
                     }
                     .certify-text {
-                        width: 84%;
+                        width: 80%;
                         float: left;
                         line-height: 60px;
                         font-size: 24px;

+ 1 - 1
js/component/groupCertify/top.jsx

@@ -1,6 +1,6 @@
 import React from 'react';
 import './certify.less';
-import logo from '../../../image/logo.jpg';
+import logo from '../../../image/logo.png';
 
 const LoginTop = React.createClass({
     render() {

+ 2 - 4
js/component/login/login.less

@@ -15,7 +15,7 @@
             width: 960px;
             margin: 0 auto;
             .logo {
-                width: 80px;
+                width: 200px;
                 padding-top: 60px;
                 float: left;
                 border-right: 1px solid #eee;
@@ -26,11 +26,10 @@
                     top: 0;
                     left: 0;
                     height: 60px;
-                    width: 60px;
                 }
             }
             .logo-text {
-                width: 835px;
+                width: 700px;
                 float: left;
                 line-height: 60px;
                 font-size: 24px;
@@ -50,7 +49,6 @@
     }
     .content {
         width: 960px;
-        height: 100%;
         margin: 0 auto;
         margin-top: 5%;
         .login-left {

+ 1 - 1
js/component/login/loginTop.jsx

@@ -1,6 +1,6 @@
 import React from 'react';
 import './login.less';
-import logo from '../../../image/logo.jpg';
+import logo from '../../../image/logo.png';
 
 const LoginTop = React.createClass({
     render() {

+ 182 - 39
js/component/portal/portal.less

@@ -5,49 +5,32 @@
     .portal-header {
         background: #f8f8f8;
         width: 100%;
-        .portal-logo {
-            width: 100%;
+        border-bottom: 1px solid #ececec;
+        .portal-top {
+            width: 1280px;
+            line-height: 30px;
+            font-size: 14px;
             margin: 0 auto;
-            padding: 10px 0;
-            .logo {
-                width: 120px;
-                padding-top: 60px;
+            color: #999;
+            .top-welcomeText {
                 float: left;
-                margin-left: 4%;
-                position: relative;
-                overflow: hidden;
-                img {
-                    position: absolute;
-                    top: 0;
-                    right: 0;
-                    height: 60px;
-                    width: 60px;
-                }
             }
-            .portal-text {
-                width: 1280px;
-                line-height: 30px;
-                font-size: 24px;
-                margin: 0 auto;
-                .alink {
-                    float: right;
-                    font-size: 14px;
-                    line-height: 30px;
-                    a {
-                        color: #333;
-                        padding: 0 8px;
-                        border-left: 1px solid #999999;
-                    }
-                    >a {
-                        &:first-child {
-                            border: none;
-                        }
-                    }
+            .top-alink {
+                float: right;
+                a {
+                    color: #999;
+                    padding: 0 8px;
+                    border-left: 1px solid #999;
                 }
-                >span {
-                    padding-left: 20px;
+                >a {
+                    &:first-child {
+                        border: none;
+                    }
                 }
             }
+            >span {
+                padding-left: 20px;
+            }
         }
     }
     .footer {
@@ -65,6 +48,84 @@
             line-height: 24px;
         }
     }
+    .portal-nav {
+        width: 1280px;
+        height: 70px;
+        margin: 0 auto;
+        border-bottom: 1px solid #ececec;
+        .nav-logoBox {
+            float: left;
+            width: 154px;
+            height: 53px;
+            padding-top: 53px;
+            margin-top: 8px;
+            position: relative;
+            img {
+                width: 154px;
+                height: 53px;
+                position: absolute;
+                top: 0;
+                left: 0;
+            }
+        }
+        .nav-list {
+            float: left;
+            margin-left: 100px;
+            li {
+                float: left;
+                width: 200px;
+                height: 70px;
+                line-height: 70px;
+                text-align: center;
+                a {
+                    font-size: 18px;
+                    color: #333;
+                }
+                &:hover {
+                    background: #58a3ff;
+                    a {
+                        color: #fff;
+                    }
+                }
+            }
+            .active {
+                border-bottom: 2px solid #58a3ff;
+                a {
+                    color: #58a3ff
+                }
+            }
+        }
+        .nav-search {
+            float: right;
+            height: 28px;
+            width: 250px;
+            margin-top: 20px;
+            position: relative;
+            >input {
+                position: absolute;
+                top: 0;
+                left: 0;
+                border-right: none;
+                padding-left: 10px;
+                width: 200px;
+                border-top-left-radius: 14px;
+                border-bottom-left-radius: 14px;
+                border-top-right-radius: 0;
+                border-bottom-right-radius: 0;
+            }
+            >button {
+                position: absolute;
+                right: 0;
+                border-top-left-radius: 0;
+                border-bottom-left-radius: 0;
+                border-top-right-radius: 14px;
+                border-bottom-right-radius: 14px;
+                border: none;
+                height: 28px;
+                background: #58a3ff;
+            }
+        }
+    }
     .portal-content {
         width: 1280px;
         margin: 0 auto; //background: #e0e0e0;
@@ -107,13 +168,13 @@
                     margin: 0 auto;
                     img {
                         height: 120px;
-                        width:auto;
+                        width: auto;
                         position: absolute;
                         top: 0;
                         left: 0;
                     }
                 }
-                >div:not(:first-child)  {
+                >div:not(:first-child) {
                     font-size: 16px;
                     margin-left: 20px;
                     height: 24px;
@@ -131,6 +192,14 @@
             }
         }
     }
+    .portal-carousel {
+        margin: 20px 0;
+        .slide-box {
+            img {
+                width: 100%;
+            }
+        }
+    }
 }
 
 .portal-desc-content {
@@ -148,4 +217,78 @@
             }
         }
     }
+}
+
+.detial_sub {
+    line-height: 32px;
+    .detial_sub_icon {
+        vertical-align: middle;
+        display: inline-block;
+        height: 20px;
+        width: 20px;
+        padding-top: 20px;
+        position: relative;
+        img {
+            position: absolute;
+            top: 0;
+            left: 0;
+            height: 20px;
+        }
+    }
+    .detial_sub_title {
+        color: #666;
+        margin-left: 6px;
+        margin-right: 6px;
+    }
+    .detial_sub_text {
+        color: #333;
+        i {
+            background: #ccc;
+            border-radius: 2px;
+            padding: 0 6px;
+            margin-right: 6px;
+        }
+    }
+    .money_text {
+        color: #58a3ff;
+    }
+}
+
+.detail_interest_sub {
+    list-style: none;
+    padding: 0 200px;
+    margin-bottom: 20px;
+    li {
+        margin-top: 20px;
+        border: 1px solid #ececec;
+        padding: 0 20px 20px;
+    }
+    .interest_list_title {
+        position: relative;
+        line-height: 60px;
+        padding-left: 60px;
+        >img {
+            width: 30px;
+            position: absolute;
+            left: -12px;
+            top: -1px;
+        }
+        >span {
+            font-size: 20px;
+            color: #58a3ff;
+        }
+        .interest_list_confirm {
+            position: absolute;
+            right: 10px;
+            top: 0;
+            span {
+                margin-right: 10px;
+            }
+            img {
+                height: 22px;
+                width: 22px;
+                vertical-align: middle;
+            }
+        }
+    }
 }

+ 142 - 126
js/component/portal/search/achievement.jsx

@@ -1,6 +1,11 @@
 import React from 'react';
-import { Icon, message, Row, Col, Radio, Checkbox, Input, InputNumber, Button, Table, Spin } from 'antd';
+import { Icon, message, Row, Col, Radio, Checkbox, Input, InputNumber, Button, Table, Spin, Carousel } from 'antd';
 import '../portal.less';
+
+import logoImg from '../../../../image/logo.png';
+import searchImg from '../../../../image/search.png';
+import slideImg from '../../../../image/slide_img_1.png';
+
 import { IndustryObject, getIndustryCategory } from '../../DicIndustryList';
 import { achievementCategoryList, transferModeList, maturityList } from '../../dataDic';
 import { getAchievementCategory } from '../../tools';
@@ -109,7 +114,7 @@ const Content = React.createClass({
     getInitialState() {
         return {
             loading: false,
-            showDesc:false,
+            showDesc: false,
             industryRadioB: [],
             transferPrice: 999,
             pagination: {
@@ -254,10 +259,7 @@ const Content = React.createClass({
         this.setState({ industryRadioB: theArr });
     },
     tableRowClick(record, index) {
-        this.state.RowData = record;
-        this.setState({
-            showDesc: true
-        });
+        window.open(globalConfig.context + '/portal/detail/achievementDetail.html?id=' + record.id + '&type=' + record.ownerType);
     },
     closeDesc(e) {
         this.setState({
@@ -266,130 +268,144 @@ const Content = React.createClass({
     },
     render() {
         return (
-            <div className="portal-content">
-                <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.industryChange}>
-                            {this.state.industryRadioA}
-                        </Radio.Group>
-                    </Col>
-                </Row>
-                {this.state.industryRadioB.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) => { this.state.fieldB = e.target.value; this.loadData() }}>
-                            {this.state.industryRadioB}
-                        </Radio.Group>
-                    </Col>
-                </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) => {
+            <div className="portal-body">
+                <div className="portal-nav clearfix">
+                    <div className="nav-logoBox">
+                        <img 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>
+                    </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>
+                <Carousel autoplay className="portal-carousel">
+                    <div className="slide-box"><img src={slideImg} alt="" /></div>
+                    <div className="slide-box"><img src={slideImg} alt="" /></div>
+                    <div className="slide-box"><img src={slideImg} alt="" /></div>
+                    <div className="slide-box"><img src={slideImg} alt="" /></div>
+                </Carousel>
+                <div className="portal-content">
+                    <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.industryChange}>
+                                {this.state.industryRadioA}
+                            </Radio.Group>
+                        </Col>
+                    </Row>
+                    {this.state.industryRadioB.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) => { this.state.fieldB = e.target.value; this.loadData() }}>
+                                {this.state.industryRadioB}
+                            </Radio.Group>
+                        </Col>
+                    </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}>
+                            <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={22}>
+                            <Radio.Group defaultValue={999} onChange={(e) => {
                                 this.setState({
-                                    transferPrice: e.target.value
+                                    maturity: e.target.value
                                 });
-                                this.state.transferPrice = e.target.value;
+                                this.state.maturity = 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={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>
-                </Row>
-                <Row className="search-criteria" style={{ paddingBottom: '10px' }}>
-                    <Col className="search-title" span={2}>
-                        <span>关键字</span>
-                    </Col>
-                    <Col className="search-select" span={22}>
-                        <Input style={{ width: 120 }} onChange={(e) => { this.state.keyword = e.target.value; }} />
-                        <Button style={{ marginLeft: '20px' }} onClick={() => { this.loadData() }}>确定</Button>
-                    </Col>
-                </Row>
-                <Spin spinning={this.state.loading}>
-                    <Table columns={this.state.columns}
-                        dataSource={this.state.dataSource}
-                        pagination={this.state.pagination}
-                        onRowClick={this.tableRowClick} />
-                </Spin>
-                <AchievementDesc
-                    data={this.state.RowData}
-                    showDesc={this.state.showDesc}
-                    closeDesc={this.closeDesc} />
-            </div >
+                                {this.state.maturityRadio}
+                            </Radio.Group>
+                        </Col>
+                    </Row>
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}
+                            pagination={this.state.pagination}
+                            onRowClick={this.tableRowClick} />
+                    </Spin>
+                    <AchievementDesc
+                        data={this.state.RowData}
+                        showDesc={this.state.showDesc}
+                        closeDesc={this.closeDesc} />
+                </div >
+            </div>
         )
     }
 });

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

@@ -4,7 +4,7 @@ import '../portal.less';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 import { getIndustryCategory } from '../../DicIndustryList.js';
-import { getAchievementCategory, getMaturity, getInnovation, getOrderStatus, beforeUploadFile } from '../../tools.js';
+import { splitUrl, getAchievementCategory, getMaturity, getInnovation, getOrderStatus, beforeUploadFile } from '../../tools.js';
 
 
 const AchievementDetail = React.createClass({
@@ -13,7 +13,7 @@ const AchievementDetail = React.createClass({
             visible: false,
             loading: false,
             buttonLoading: false,
-            dataSourse: [],
+            dataSource: [],
             orderVisible: false,
             tags: [],
             technicalPictureUrl: [],
@@ -102,7 +102,7 @@ const AchievementDetail = React.createClass({
                     });
                 };
                 this.setState({
-                    dataSourse: theArr
+                    dataSource: theArr
                 });
             }.bind(this),
         }).always(function () {

+ 159 - 154
js/component/portal/search/demand.jsx

@@ -1,12 +1,24 @@
 import React from 'react';
-import { Icon, message, Row, Col, Radio, Checkbox, Input, InputNumber, Button, Table, Spin } from 'antd';
+import { Carousel, Pagination, Icon, message, Row, Col, Radio, Checkbox, Input, InputNumber, Button, Table, Spin } from 'antd';
 import '../portal.less';
+
+import logoImg from '../../../../image/logo.png';
+import searchImg from '../../../../image/search.png';
+
+import demand_sup from '../../../../image/demand_sup.png';
+import demand_ico_5 from '../../../../image/demand_ico_5.png';
+import demand_ico_3 from '../../../../image/demand_ico_3.png';
+import demand_ico_2 from '../../../../image/demand_ico_2.png';
+import demand_ico_1 from '../../../../image/demand_ico_1.png';
+import uncertify from '../../../../image/demand_ico_6.png';
+import certify from '../../../../image/demand_ico_6_atv.png';
+
+
 import { IndustryObject, getIndustryCategory } from '../../DicIndustryList';
 import { demandTypeList } from '../../dataDic';
 import { getDemandType } from '../../tools';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
-import DemandDesc from './demandDesc';
 
 const Content = React.createClass({
     loadData(pageNo) {
@@ -69,6 +81,7 @@ const Content = React.createClass({
                             keyword: thisdata.keyword,
                             dataCategory: thisdata.dataCategory,
                             name: thisdata.name,
+                            level: thisdata.level,
                             industryCategory: [thisdata.industryCategoryA, thisdata.industryCategoryB],
                             industryCategoryA: thisdata.industryCategoryA,
                             industryCategoryB: thisdata.industryCategoryB,
@@ -100,75 +113,14 @@ const Content = React.createClass({
     getInitialState() {
         return {
             loading: false,
-            showDesc:false,
+            showDesc: false,
             industryRadioB: [],
             budgetCost: 999,
             pagination: {
-                defaultCurrent: 1,
-                defaultPageSize: 10,
-                showQuickJumper: true,
-                pageSize: 10,
-                onChange: function (page) {
-                    this.loadData(page);
-                }.bind(this),
-                showTotal: function (total) {
-                    return '共' + total + '条数据';
-                }
+                pageNo: 1,
+                pageSize: 15,
+                total: 0
             },
-            columns: [
-                {
-                    title: '编号',
-                    dataIndex: 'serialNumber',
-                    key: 'serialNumber',
-                }, {
-                    title: '名称',
-                    dataIndex: 'name',
-                    key: 'name',
-                }, {
-                    title: '关键字',
-                    dataIndex: 'keyword',
-                    key: 'keyword',
-                }, {
-                    title: '数据类别',
-                    dataIndex: 'dataCategory',
-                    key: 'dataCategory',
-                    render: text => {
-                        switch (text) {
-                            case "0":
-                                return <span>个人需求</span>;
-                            case "1":
-                                return <span>单位需求</span>;
-                        }
-                    }
-                }, {
-                    title: '需求类型',
-                    dataIndex: 'demandType',
-                    key: 'demandType',
-                    render: text => { return getDemandType(text); }
-                }, {
-                    title: '行业分类',
-                    dataIndex: 'industryCategory',
-                    key: 'industryCategory',
-                    render: text => { return getIndustryCategory(text[0], text[1]); }
-                }, {
-                    title: '雇主名称',
-                    dataIndex: 'employerName',
-                    key: 'employerName',
-                }, {
-                    title: '预算价格',
-                    dataIndex: 'budgetCost',
-                    key: 'budgetCost',
-                }, {
-                    title: '问题说明',
-                    dataIndex: 'problemDes',
-                    key: 'problemDes',
-                    width: 400
-                }, {
-                    title: '发布时间',
-                    dataIndex: 'releaseDateFormattedDate',
-                    key: 'releaseDateFormattedDate',
-                }
-            ],
             dataSource: []
         };
     },
@@ -220,10 +172,7 @@ const Content = React.createClass({
         this.setState({ industryRadioB: theArr });
     },
     tableRowClick(record, index) {
-        this.state.RowData = record;
-        this.setState({
-            showDesc: true
-        });
+        window.open(globalConfig.context + '/portal/detail/demandDetail.html?id=' + record.id + '&type=' + record.dataCategory);
     },
     closeDesc(e) {
         this.setState({
@@ -231,94 +180,150 @@ const Content = React.createClass({
         });
     },
     render() {
+        const { pageNo, pageSize, total } = this.state.pagination;
+        const _me = this;
         return (
-            <div className="portal-content">
-                <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.industryChange}>
-                            {this.state.industryRadioA}
-                        </Radio.Group>
-                    </Col>
-                </Row>
-                {this.state.industryRadioB.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) => { this.state.fieldB = e.target.value; this.loadData() }}>
-                            {this.state.industryRadioB}
-                        </Radio.Group>
-                    </Col>
-                </Row> : <div></div>}
-                <Row className="search-criteria">
-                    <Col className="search-title" span={2}>
-                        <span>预算价格</span>
-                    </Col>
-                    <Col className="search-select" span={12}>
-                        <Radio.Group value={this.state.budgetCost}
-                            onChange={(e) => {
+            <div className="portal-body">
+                <div className="portal-nav clearfix">
+                    <div className="nav-logoBox">
+                        <img 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>
+                    </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>
+                <Carousel autoplay className="portal-carousel">
+                    <div className="slide-box"><img src={slideImg} alt="" /></div>
+                    <div className="slide-box"><img src={slideImg} alt="" /></div>
+                    <div className="slide-box"><img src={slideImg} alt="" /></div>
+                    <div className="slide-box"><img src={slideImg} alt="" /></div>
+                </Carousel>
+                <div className="portal-content">
+                    <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.industryChange}>
+                                {this.state.industryRadioA}
+                            </Radio.Group>
+                        </Col>
+                    </Row>
+                    {this.state.industryRadioB.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) => { this.state.fieldB = e.target.value; this.loadData() }}>
+                                {this.state.industryRadioB}
+                            </Radio.Group>
+                        </Col>
+                    </Row> : <div></div>}
+                    <Row className="search-criteria">
+                        <Col className="search-title" span={2}>
+                            <span>预算价格</span>
+                        </Col>
+                        <Col className="search-select" span={12}>
+                            <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.Group>
+                        </Col>
+                        <Col span={10}>
+                            <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.target.value; }} />
+                            <span> 到 </span>
+                            <InputNumber style={{ width: 80 }} disabled={Boolean(this.state.budgetCost)} onChange={(e) => { this.state.budgetCostUpper = e.target.value; }} />
+                            <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}>
+                            <Radio.Group defaultValue={999} onChange={(e) => {
                                 this.setState({
-                                    budgetCost: e.target.value
+                                    demandType: e.target.value
                                 });
-                                this.state.budgetCost = e.target.value;
+                                this.state.demandType = 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.Group>
-                    </Col>
-                    <Col span={10}>
-                        <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.target.value; }} />
-                        <span> 到 </span>
-                        <InputNumber style={{ width: 80 }} disabled={Boolean(this.state.budgetCost)} onChange={(e) => { this.state.budgetCostUpper = e.target.value; }} />
-                        <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}>
-                        <Radio.Group defaultValue={999} onChange={(e) => {
-                            this.setState({
-                                demandType: e.target.value
-                            });
-                            this.state.demandType = e.target.value;
-                            this.loadData();
-                        }}>
-                            {this.state.demandTypeRadio}
-                        </Radio.Group>
-                    </Col>
-                </Row>
-                <Row className="search-criteria" style={{ paddingBottom: '10px' }}>
-                    <Col className="search-title" span={2}>
-                        <span>关键字</span>
-                    </Col>
-                    <Col className="search-select" span={22}>
-                        <Input style={{ width: 120 }} onChange={(e) => { this.state.keyword = e.target.value; }} />
-                        <Button style={{ marginLeft: '20px' }} onClick={() => { this.loadData() }}>确定</Button>
-                    </Col>
-                </Row>
-                <Spin spinning={this.state.loading}>
-                    <Table columns={this.state.columns}
-                        dataSource={this.state.dataSource}
-                        pagination={this.state.pagination}
-                        onRowClick={this.tableRowClick} />
-                </Spin>
-                <DemandDesc
-                    data={this.state.RowData}
-                    showDesc={this.state.showDesc}
-                    closeDesc={this.closeDesc} />
-            </div >
+                                {this.state.demandTypeRadio}
+                            </Radio.Group>
+                        </Col>
+                    </Row>
+                    <Spin spinning={this.state.loading} style={{ marginBottom: '40px' }}>
+                        <div className='detail_interest_sub'>
+                            {this.state.dataSource.map((item) => {
+                                return <li key={item.id}>
+                                    <div className="interest_list_title">
+                                        <img src={demand_sup} alt="" />
+                                        <span>{item.name}</span>
+                                        <div className="interest_list_confirm">
+                                            <span>{item.level ? '身份已验证' : '身份未验证'}</span>
+                                            <img src={item.level ? certify : uncertify} alt="" />
+                                        </div>
+                                    </div>
+                                    <div className="detial_sub">
+                                        <span className="detial_sub_icon">
+                                            <img src={demand_ico_5} alt="需求" />
+                                        </span>
+                                        <span className="detial_sub_title">需求: </span>
+                                        <span className="detial_sub_text">{item.problemDes}</span>
+                                    </div>
+                                    <div className="detial_sub">
+                                        <span className="detial_sub_icon">
+                                            <img src={demand_ico_3} alt="预算" />
+                                        </span>
+                                        <span className="detial_sub_title">预算: </span>
+                                        <span className="money_text">{item.budgetCost ? item.budgetCost + ' 元' : '价格面议'}</span>
+                                    </div>
+                                    <div className="detial_sub">
+                                        <span className="detial_sub_icon">
+                                            <img src={demand_ico_2} alt="类型" />
+                                        </span>
+                                        <span className="detial_sub_title">类型: </span>
+                                        <span className="detial_sub_text">{getDemandType(item.demandType)}</span>
+                                    </div>
+                                    <div className="detial_sub">
+                                        <span className="detial_sub_icon">
+                                            <img src={demand_ico_1} alt="行业" />
+                                        </span>
+                                        <span className="detial_sub_title">行业: </span>
+                                        <span className="detial_sub_text">{getIndustryCategory(item.industryCategoryA, item.industryCategoryB)}</span>
+                                    </div>
+                                </li>
+                            })}
+                        </div>
+                        <Pagination style={{ float: 'right' }}
+                            onChange={(e) => { this.loadData(e); }}
+                            total={total}
+                            showTotal={() => { return '共' + total + '条数据' }}
+                            current={pageNo}
+                            pageSize={pageSize} />
+                    </Spin>
+                </div >
+            </div>
         )
     }
 });

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

@@ -4,7 +4,7 @@ import '../portal.less';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 import { getIndustryCategory } from '../../DicIndustryList.js';
-import { getDemandType, beforeUploadFile, getOrderStatus } from '../../tools.js';
+import { splitUrl, getDemandType, beforeUploadFile, getOrderStatus } from '../../tools.js';
 
 
 const DemandDetail = React.createClass({
@@ -13,7 +13,7 @@ const DemandDetail = React.createClass({
             visible: false,
             loading: false,
             buttonLoading: false,
-            dataSourse: [],
+            dataSource: [],
             orderVisible: false,
             fileList: false,
             tags: [],
@@ -101,7 +101,7 @@ const DemandDetail = React.createClass({
                     });
                 };
                 this.setState({
-                    dataSourse: theArr
+                    dataSource: theArr
                 });
             }.bind(this),
         }).always(function () {

+ 6 - 4
js/component/portal/search/subscriber.jsx

@@ -45,6 +45,7 @@ const Content = React.createClass({
                             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,	//科技成果数量
@@ -345,15 +346,16 @@ const Content = React.createClass({
                 <Spin spinning={this.state.loading}>
                     <ul className="clearfix">
                         {this.state.dataSource.map((item) => {
-                            return <li className="user-detail">
+                            return <li className="user-detail" onClick={() => {
+                                window.open(globalConfig.context + '/user/subscriberDetail.html?rid=' + item.uid + '&type=' + item.type);
+                            }}>
                                 <div className="logo">
                                     <img src={(item.personPortraitUrl || item.logoUrl) ?
                                         (globalConfig.avatarHost + "/upload" + (_me.state.type == 0 ? item.personPortraitUrl : item.logoUrl))
-                                        : avatarImg } alt="头像" />
+                                        : avatarImg} alt="头像" />
                                 </div>
-                                <div className="name" style={{display:'none'}}>
+                                <div className="name">
                                     {_me.state.type == 0 ? item.username : item.unitName}
-                                    <a onClick={_me.interest.bind(_me, item.uid)} className="follow"><Icon type="heart-o" />感兴趣</a>
                                 </div>
                                 <div className="province">{getProvince(item.province)}</div>
                                 <div className="text">{'需求:' + item.demandNum + '条'}</div>

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

@@ -1,6 +1,5 @@
 import React from 'react';
 import './portal.less';
-import logo from '../../../image/logo.jpg';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 
@@ -17,21 +16,19 @@ const LoginTop = React.createClass({
     render() {
         return (
             <div className="portal-header">
-                <div className="portal-logo clearfix">
-                    <div className="portal-text">
-                        <span className="text">科技{this.props.searchType}搜索</span>
-                        <span className="alink">
-                            <a href={globalConfig.context + "/user/account/index.html"}>返回首页</a>
-                            {window.userData.number ?
-                                <span>
-                                    <a href={globalConfig.context + "/user/account/index"}>尊敬的{userData.nickname || userData.number}</a>
-                                    <a href="./index.html">交易管理中心</a>
-                                    <a href="./index.html">消息</a>
-                                </span>
-                                : <a href={globalConfig.context + "/user/login/index"}>请登录</a>}
-                            <a onClick={this.logOut}>退出</a>
-                            <a href="./index.html">帮助中心</a>
-                        </span>
+                <div className="portal-top clearfix">
+                    <div className="top-welcomeText">欢迎您来到科技认知计算交易平台!</div>
+                    <div className="top-alink">
+                        <a href={globalConfig.context + "/user/account/index.html"}>返回首页</a>
+                        {window.userData.number ?
+                            <span>
+                                <a href={globalConfig.context + "/user/account/index"}>尊敬的{userData.nickname || userData.number}</a>
+                                <a href="./index.html">交易管理中心</a>
+                                <a href="./index.html">消息</a>
+                            </span>
+                            : <a href={globalConfig.context + "/user/login/index"}>请登录</a>}
+                        <a onClick={this.logOut}>退出</a>
+                        <a href="./index.html">帮助中心</a>
                     </div>
                 </div>
             </div>

+ 240 - 21
js/component/subscriberDetail/content.jsx

@@ -1,7 +1,7 @@
 import React from 'react';
-import { Icon, message, Row, Col, Spin, Tag } from 'antd';
+import { Icon, message, Row, Col, Spin, Tag, Table } from 'antd';
 import './detail.less';
-import { getSearchUrl } from '../tools';
+import { getSearchUrl, getAchievementCategory, getDemandType } from '../tools';
 import { getProvince } from '../NewDicProvinceList';
 import { getTechField } from '../DicTechFieldList';
 import ajax from 'jquery/src/ajax/xhr.js'
@@ -27,30 +27,187 @@ const Content = React.createClass({
                 message.warning(data.error[0].message);
             } else {
                 this.state.data = data.data || {};
+                this.state.theField = this.state.type == 0 ? (data.data.engagedField ? data.data.engagedField.split(',') : []) : (data.data.field ? data.data.field.split(',') : []);
+                this.state.theImgsrc = this.state.type == 0 ? (data.data.lifePhotoUrl ? data.data.lifePhotoUrl.split(',') : []) : (data.data.publicityPictureUrl ? data.data.publicityPictureUrl.split(',') : []);
             }
             this.setState({
                 data: this.state.data,
+                theField: this.state.theField,
+                theImgsrc: this.state.theImgsrc,
                 loading: false
             });
         }.bind(this));
     },
+    achievementLoadData(pageNo) {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/user/partner/achievementList",
+            data: {
+                ownerId: this.state.uid,
+                pageNo: pageNo || 1,
+                pageSize: this.state.achievementPagination.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,
+                            id: thisdata.id,
+                            serialNumber: thisdata.serialNumber,
+                            dataCategory: thisdata.dataCategory,
+                            name: thisdata.name,
+                            keyword: thisdata.keyword,
+                            category: thisdata.category,
+                            ownerType: thisdata.ownerType,
+                            releaseDate: thisdata.releaseDate,
+                            releaseDateFormattedDate: thisdata.releaseDateFormattedDate,
+                        });
+                    };
+                }
+                this.state.achievementPagination.current = data.data.pageNo;
+                this.state.achievementPagination.total = data.data.totalCount;
+                this.setState({
+                    achievementDataSource: theArr,
+                    achievementPagination: this.state.achievementPagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    demandLoadData(pageNo) {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/user/partner/demandList",
+            data: {
+                employerId: this.state.uid,
+                pageNo: pageNo || 1,
+                pageSize: this.state.demandPagination.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,
+                            id: thisdata.id,
+                            serialNumber: thisdata.serialNumber,
+                            dataCategory: thisdata.dataCategory,
+                            name: thisdata.name,
+                            keyword: thisdata.keyword,
+                            releaseDate: thisdata.releaseDate,
+                            demandType: thisdata.demandType,
+                            validityPeriod: thisdata.validityPeriod,
+                            validityPeriodFormattedDate: thisdata.validityPeriodFormattedDate,
+                            releaseDateFormattedDate: thisdata.releaseDateFormattedDate
+                        });
+                    };
+                }
+                this.state.demandPagination.current = data.data.pageNo;
+                this.state.demandPagination.total = data.data.totalCount;
+                this.setState({
+                    demandDataSource: theArr,
+                    demandPagination: this.state.demandPagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    interestClick() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/user/interest/interestUser',
+            data: {
+                toUid: this.state.uid
+            },
+            success: function (data) {
+                if (data.error && data.error.length) {
+                    message.warning(data.error[0].message);
+                } else {
+                    this.loadData();
+                };
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));;
+    },
+    cancelInterestClick() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/user/interest/cancelInterest',
+            data: {
+                id: this.state.data.interestId
+            },
+            success: function (data) {
+                if (data.error && data.error.length) {
+                    message.warning(data.error[0].message);
+                } else {
+                    this.loadData(this.props.data.id);
+                };
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));;
+    },
     getInitialState() {
         return {
             loading: false,
+            theField: [],
             data: {},
-            pagination: {
+            theImgsrc: [],
+            achievementPagination: {
                 defaultCurrent: 1,
                 defaultPageSize: 10,
                 showQuickJumper: true,
                 pageSize: 10,
                 onChange: function (page) {
-                    this.loadData(page);
+                    this.achievementLoadData(page);
                 }.bind(this),
                 showTotal: function (total) {
                     return '共' + total + '条数据';
                 }
             },
-            columns: [
+            achievementColumns: [
                 {
                     title: '编号',
                     dataIndex: 'serialNumber',
@@ -83,33 +240,61 @@ const Content = React.createClass({
                     key: 'category',
                     render: text => { return getAchievementCategory(text); }
                 }, {
-                    title: '行业分类',
-                    dataIndex: 'field',
-                    key: 'field',
-                    render: text => { return getIndustryCategory(text[0], text[1]) }
+                    title: '发布时间',
+                    dataIndex: 'releaseDateFormattedDate',
+                    key: 'releaseDateFormattedDate',
+                }
+            ],
+            achievementDataSource: [],
+            demandColumns: [
+                {
+                    title: '编号',
+                    dataIndex: 'serialNumber',
+                    key: 'serialNumber',
                 }, {
-                    title: '所有人名称',
-                    dataIndex: 'ownerName',
-                    key: 'ownerName',
+                    title: '名称',
+                    dataIndex: 'name',
+                    key: 'name',
                 }, {
-                    title: '所有人类型',
-                    dataIndex: 'ownerType',
-                    key: 'ownerType',
+                    title: '关键字',
+                    dataIndex: 'keyword',
+                    key: 'keyword',
+                }, {
+                    title: '需求类型',
+                    dataIndex: 'dataCategory',
+                    key: 'dataCategory',
                     render: text => {
                         switch (text) {
                             case "0":
-                                return <span>个人</span>;
+                                return <span>个人需求</span>;
                             case "1":
-                                return <span>组织</span>
+                                return <span>单位需求</span>;
                         }
                     }
                 }, {
+                    title: '类型',
+                    dataIndex: 'demandType',
+                    key: 'demandType',
+                    render: text => { return getDemandType(text); }
+                }, {
                     title: '发布时间',
                     dataIndex: 'releaseDateFormattedDate',
                     key: 'releaseDateFormattedDate',
                 }
             ],
-            dataSource: []
+            demandDataSource: [],
+            demandPagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.demandLoadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
         };
     },
     componentWillMount() {
@@ -119,6 +304,8 @@ const Content = React.createClass({
                 this.state.uid = theObj.rid;
                 this.state.type = theObj.type;
                 this.loadData();
+                this.achievementLoadData();
+                this.demandLoadData();
             };
         };
     },
@@ -134,6 +321,10 @@ const Content = React.createClass({
                                     (globalConfig.avatarHost + "/upload" + (this.state.type == 0 ? theData.personPortraitUrl : theData.logoUrl))
                                     : avatarImg} alt="头像" />
                             </div>
+                            <div className="interest">
+                                {theData.interestId ? <a onClick={this.cancelInterestClick}><Icon type="heart" /> 不感兴趣</a>
+                                    : <a onClick={this.interestClick}><Icon type="heart-o" /> 感兴趣</a>}
+                            </div>
                         </Col>
                         <Col span={18} className="avatar-right">
                             <div>
@@ -157,20 +348,48 @@ const Content = React.createClass({
                     <Row>
                         <Col span={12}>
                             <div className="column-title">专业领域</div>
-                            <div className="column-text">{getTechField(this.state.type == 0 ? theData.engagedField.split(',') : theData.field.split(','))}</div>
+                            <div className="column-text">{getTechField(this.state.theField[0], this.state.theField[1], this.state.theField[2])}</div>
                         </Col>
                     </Row>
                     <Row>
                         <Col span={12}>
                             <div className="column-title">能力标签</div>
                             <div className="column-text">
-                                {theData.abilityLabel ? theData.abilityLabel.join(',').map((item) => {
+                                {theData.abilityLabel ? theData.abilityLabel.split(',').map((item) => {
                                     return <Tag key={item}>{item}</Tag>
                                 }) : ''}
                             </div>
                         </Col>
                     </Row>
-                </div >
+                    <Row>
+                        <Col span={12}>
+                            <div className="column-title">用户介绍</div>
+                            <div className="column-text">
+                                {this.state.type == 0 ? theData.personalProfile : theData.companyIntroduction}
+                            </div>
+                        </Col>
+                    </Row>
+                    <Row>
+                        <Col span={12}>
+                            <div className="column-title">用户展示</div>
+                            <div className="column-img">
+                                {this.state.theImgsrc.map((item, i) => {
+                                    return <img key={i} src={globalConfig.avatarHost + "/upload" + item} alt="" />
+                                })}
+                            </div>
+                        </Col>
+                    </Row>
+                </div>
+                <div className="detail-content detail-table">
+                    <p>用户成果列表</p>
+                    <Table columns={this.state.achievementColumns}
+                        dataSource={this.state.achievementDataSource}
+                        pagination={this.state.achievementPagination} />
+                    <p>用户需求列表</p>
+                    <Table columns={this.state.demandColumns}
+                        dataSource={this.state.demandDataSource}
+                        pagination={this.state.demandPagination} />
+                </div>
             </Spin>
         )
     }

+ 1 - 1
js/component/subscriberDetail/top.jsx

@@ -1,6 +1,6 @@
 import React from 'react';
 import './detail.less';
-import logo from '../../../image/logo.jpg';
+import logo from '../../../image/logo.png';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 

+ 2 - 2
js/portal/search/achievement.js

@@ -9,8 +9,8 @@ import Footer from '../../component/portal/footer.jsx';
 
 ReactDOM.render(
     <div className="wrap">
-        <Top searchType={"成果"}/>
-        <Content />
+        <Top />
+        <Content searchType={"achievement"}/>
         <Footer />
     </div>,
     document.getElementById('root')

+ 2 - 2
js/portal/search/demand.js

@@ -9,8 +9,8 @@ import Footer from '../../component/portal/footer.jsx';
 
 ReactDOM.render(
     <div className="wrap">
-        <Top searchType={"需求"}/>
-        <Content />
+        <Top />
+        <Content searchType={"demand"}/>
         <Footer />
     </div>,
     document.getElementById('root')