yee 7 years ago
parent
commit
b3c95b3b82

BIN
image/achievement_ico_1.png


BIN
image/achievement_ico_2.png


BIN
image/demand_ico_5.png


BIN
image/list_title_ico_1.png


BIN
image/list_title_ico_2.png


BIN
image/list_title_ico_3.png


BIN
image/score_ioc.png


+ 372 - 367
js/component/account/achievement/techAchievementDesc.jsx

@@ -187,6 +187,9 @@ const AchievementDetailShow = Form.create()(React.createClass({
             url: globalConfig.context + "/api/user/achievement/offShelf",
             data: { "id": this.props.data.id }
         }).done(function (data) {
+            this.setState({
+                loading: false
+            });
             if (!data.error.length) {
                 message.success('撤销成功!');
                 this.setState({
@@ -738,15 +741,15 @@ const AchievementDetailForm = Form.create()(React.createClass({
                         businessPlanUrl: this.state.businessPlanUrl,
                         auditStatus: this.state.auditStatus,
 
-                        ownerType:window.userData.type // 所有人类型
+                        ownerType: window.userData.type // 所有人类型
                     }
                 }).done(function (data) {
                     this.state.auditStatus = 0;
+                    this.setState({
+                        loading: false
+                    });
                     if (!data.error.length) {
                         message.success('保存成功!');
-                        this.setState({
-                            visible: false
-                        });
                         this.props.handleOk();
                     } else {
                         message.warning(data.error[0].message);
@@ -788,411 +791,413 @@ const AchievementDetailForm = Form.create()(React.createClass({
         };
         return (
             <Form horizontal onSubmit={this.handleSubmit} id="demand-form">
-                <div className="clearfix">
-                    <FormItem className="half-item"
-                        {...formItemLayout}
-                        label="编号" >
-                        <span>{theData.serialNumber}</span>
+                <Spin spinning={this.state.loading}>
+                    <div className="clearfix">
+                        <FormItem className="half-item"
+                            {...formItemLayout}
+                            label="编号" >
+                            <span>{theData.serialNumber}</span>
+                        </FormItem>
+                        <FormItem className="half-item"
+                            {...formItemLayout}
+                            label="名称" >
+                            {getFieldDecorator('name', {
+                                rules: [{ required: true, message: '此项为必填项!' }],
+                                initialValue: theData.name
+                            })(
+                                <Input />
+                                )}
+                        </FormItem>
+                        <FormItem className="half-item"
+                            {...formItemLayout}
+                            label="数据类别" >
+                            {getFieldDecorator('dataCategory', {
+                                rules: [{ required: true, message: '此项为必填项!' }],
+                                initialValue: theData.dataCategory
+                            })(
+                                <Select placeholder="选择数据类型" style={{ width: 160 }} >
+                                    <Select.Option value="0" >成果</Select.Option>
+                                    <Select.Option value="1" >技术</Select.Option>
+                                    <Select.Option value="2" >项目</Select.Option>
+                                </Select>
+                                )}
+                        </FormItem>
+                        <FormItem className="half-item"
+                            {...formItemLayout}
+                            label="类型" >
+                            {getFieldDecorator('category', {
+                                rules: [{ required: true, message: '此项为必填项!' }],
+                                initialValue: theData.category
+                            })(
+                                <Select style={{ width: 160 }} placeholder="请选择成果类型">
+                                    {this.props.achievementCategoryOption}
+                                </Select>
+                                )}
+                        </FormItem>
+                        <div className="clearfix">
+                            <FormItem className="half-item"
+                                {...formItemLayout}
+                                label="是否发布" >
+                                {(() => {
+                                    switch (theData.releaseStatus) {
+                                        case "0":
+                                            return <span>未发布</span>;
+                                        case "1":
+                                            return <span>已发布</span>;
+                                    }
+                                })()}
+                            </FormItem>
+                            <FormItem className="half-item"
+                                {...formItemLayout}
+                                label="发布时间" >
+                                <span>{theData.releaseDateFormattedDate}</span>
+                            </FormItem>
+                            <FormItem className="half-item"
+                                {...formItemLayout}
+                                label="审核状态" >
+                                {(() => {
+                                    switch (theData.auditStatus) {
+                                        case "0":
+                                            return <span>未提交审核(草稿)</span>;
+                                        case "1":
+                                            return <span>提交审核</span>;
+                                        case "2":
+                                            return <span>审核中</span>;
+                                        case "3":
+                                            return <span>审核通过</span>;
+                                        case "4":
+                                            return <span>审核未通过</span>;
+                                    }
+                                })()}
+                            </FormItem>
+
+                        </div>
+                    </div>
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="关键词" >
+                        <KeyWordTagGroup
+                            keyWordArr={this.state.tags}
+                            tagsArr={this.getTagsArr}
+                            visible={this.props.visible} />
                     </FormItem>
-                    <FormItem className="half-item"
-                        {...formItemLayout}
-                        label="名称" >
-                        {getFieldDecorator('name', {
-                            rules: [{ required: true, message: '此项为必填项!' }],
-                            initialValue: theData.name
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="摘要" >
+                        {getFieldDecorator('summary', {
+                            initialValue: theData.summary
                         })(
-                            <Input />
+                            <Input type="textarea" rows={4} />
                             )}
                     </FormItem>
-                    <FormItem className="half-item"
-                        {...formItemLayout}
-                        label="数据类别" >
-                        {getFieldDecorator('dataCategory', {
-                            rules: [{ required: true, message: '此项为必填项!' }],
-                            initialValue: theData.dataCategory
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="成果简介" >
+                        {getFieldDecorator('introduction', {
+                            initialValue: theData.introduction
                         })(
-                            <Select placeholder="选择数据类型" style={{ width: 160 }} >
-                                <Select.Option value="0" >成果</Select.Option>
-                                <Select.Option value="1" >技术</Select.Option>
-                                <Select.Option value="2" >项目</Select.Option>
-                            </Select>
+                            <Input type="textarea" rows={4} placeholder="项目成果简介;项目核心创新点;项目详细用途;预期效益说明;主要技术(性能)指标;市场前景;应用范围;发展历程。" />
                             )}
                     </FormItem>
-                    <FormItem className="half-item"
-                        {...formItemLayout}
-                        label="类型" >
-                        {getFieldDecorator('category', {
-                            rules: [{ required: true, message: '此项为必填项!' }],
-                            initialValue: theData.category
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="技术图片" >
+                        <PicturesWall
+                            pictureSign="achievement_technical_picture"
+                            fileList={this.getTechnicalPictureUrl}
+                            pictureUrl={this.state.technicalPictureUrl} />
+                        <p>图片建议:专利证书或专利申请书图片、技术图纸、样品图片、技术相关网络图片;成熟度处于非研发阶段的项目,必须上传样品图片,如未上传,成熟度将视为处在研发阶段。</p>
+                    </FormItem>
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="应用领域" >
+                        {getFieldDecorator('field', {
+                            rules: [{ type: 'array', required: true, message: '此项为必填项!' }],
+                            initialValue: [theData.fieldA, theData.fieldB]
                         })(
-                            <Select style={{ width: 160 }} placeholder="请选择成果类型">
-                                {this.props.achievementCategoryOption}
-                            </Select>
+                            <Cascader style={{ width: 300 }} options={IndustryObject} placeholder="应用领域" />
                             )}
                     </FormItem>
                     <div className="clearfix">
                         <FormItem className="half-item"
                             {...formItemLayout}
-                            label="是否发布" >
-                            {(() => {
-                                switch (theData.releaseStatus) {
-                                    case "0":
-                                        return <span>未发布</span>;
-                                    case "1":
-                                        return <span>已发布</span>;
+                            label="成熟度" >
+                            {getFieldDecorator('maturity', {
+                                initialValue: theData.maturity
+                            })(
+                                <Select placeholder="选择成熟度" style={{ width: 160 }} >
+                                    <Select.Option value="0" >正在研发</Select.Option>
+                                    <Select.Option value="1" >已有样品</Select.Option>
+                                    <Select.Option value="2" >通过小试</Select.Option>
+                                    <Select.Option value="3" >通过中试</Select.Option>
+                                    <Select.Option value="4" >可以量产</Select.Option>
+                                </Select>
+                                )}
+                        </FormItem>
+                        <FormItem className="half-item"
+                            {...formItemLayout}
+                            label="创新度" >
+                            {getFieldDecorator('innovation', {
+                                initialValue: theData.innovation
+                            })(
+                                <Select placeholder="选择创新度" style={{ width: 160 }} >
+                                    <Select.Option value="0" >行业先进</Select.Option>
+                                    <Select.Option value="1" >行业领先</Select.Option>
+                                    <Select.Option value="2" >国内先进</Select.Option>
+                                    <Select.Option value="3" >国内领先</Select.Option>
+                                    <Select.Option value="4" >国际先进</Select.Option>
+                                    <Select.Option value="5" >国际领先</Select.Option>
+                                </Select>
+                                )}
+                        </FormItem>
+                    </div>
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="成熟度证明材料(图片)" >
+                        <PicturesWall
+                            pictureSign="achievement_maturity_picture"
+                            fileList={this.getMaturityPictureUrl}
+                            pictureUrl={this.state.maturityPictureUrl} />
+                    </FormItem>
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 6 }}
+                        label="成熟度证明材料(文本)" >
+                        <Upload
+                            name="ratepay"
+                            action={globalConfig.context + "/api/user/achievement/uploadTextFile"}
+                            data={{ 'sign': 'achievement_maturity_text_file' }}
+                            beforeUpload={beforeUploadFile}
+                            fileList={this.state.textFileList}
+                            onChange={(info) => {
+                                if (info.file.status !== 'uploading') {
+                                    console.log(info.file, info.fileList);
                                 }
-                            })()}
+                                if (info.file.status === 'done') {
+                                    if (!info.file.response.error.length) {
+                                        message.success(`${info.file.name} 文件上传成功!`);
+                                    } else {
+                                        message.warning(info.file.response.error[0].message);
+                                        return;
+                                    };
+                                    this.state.maturityTextFileUrl = info.file.response.data;
+                                } else if (info.file.status === 'error') {
+                                    message.error(`${info.file.name} 文件上传失败。`);
+                                };
+                                this.setState({ textFileList: info.fileList.slice(-1) });
+                            }} >
+                            <Button><Icon type="upload" /> 上传需求文本文件 </Button>
+                        </Upload>
+                        <p style={{ marginTop: '10px' }}>{theData.maturityTextFileUrl ?
+                            <span className="download-file">
+                                <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + this.props.data.id + '&sign=achievement_maturity_text_file') }}>成熟度证明材料(文本文件)</a>
+                            </span>
+                            : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    </FormItem>
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="成熟度证明材料(视频地址)" >
+                        {getFieldDecorator('maturityVideoUrl', {
+                            initialValue: theData.maturityVideoUrl
+                        })(
+                            <Input />
+                            )}
+                    </FormItem>
+                    <div className="clearfix">
+                        <FormItem className="half-item"
+                            {...formItemLayout}
+                            label="合作方式" >
+                            {getFieldDecorator('cooperationMode', {
+                                rules: [{ required: true, message: '此项为必填项!' }],
+                                initialValue: theData.cooperationMode
+                            })(
+                                <Radio.Group>
+                                    <Radio value="0">技术转让</Radio>
+                                    <Radio value="1">授权生产</Radio>
+                                </Radio.Group>
+                                )}
                         </FormItem>
                         <FormItem className="half-item"
                             {...formItemLayout}
-                            label="发布时间" >
-                            <span>{theData.releaseDateFormattedDate}</span>
+                            label="转让方式" >
+                            {getFieldDecorator('transferMode', {
+                                initialValue: theData.transferMode
+                            })(
+                                <Select placeholder="选择转让方式" style={{ width: 160 }} >
+                                    <Select.Option value="0" >完全转让</Select.Option>
+                                    <Select.Option value="1" >许可转让</Select.Option>
+                                    <Select.Option value="2" >技术入股</Select.Option>
+                                </Select>
+                                )}
                         </FormItem>
+                    </div>
+                    <div className="clearfix">
                         <FormItem className="half-item"
                             {...formItemLayout}
-                            label="审核状态" >
-                            {(() => {
-                                switch (theData.auditStatus) {
-                                    case "0":
-                                        return <span>未提交审核(草稿)</span>;
-                                    case "1":
-                                        return <span>提交审核</span>;
-                                    case "2":
-                                        return <span>审核中</span>;
-                                    case "3":
-                                        return <span>审核通过</span>;
-                                    case "4":
-                                        return <span>审核未通过</span>;
-                                }
-                            })()}
+                            label="议价方式" >
+                            {getFieldDecorator('bargainingMode', {
+                                initialValue: theData.bargainingMode
+                            })(
+                                <Radio.Group>
+                                    <Radio value="0">面议</Radio>
+                                    <Radio value="1">定价</Radio>
+                                </Radio.Group>
+                                )}
+                        </FormItem>
+                        <FormItem className="half-item"
+                            {...formItemLayout}
+                            label="转让价格" >
+                            {getFieldDecorator('transferPrice', {
+                                initialValue: theData.transferPrice
+                            })(
+                                <InputNumber />
+                                )}
+                            <span style={{ marginLeft: '20px' }}>万元</span>
                         </FormItem>
-
                     </div>
-                </div>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="关键词" >
-                    <KeyWordTagGroup
-                        keyWordArr={this.state.tags}
-                        tagsArr={this.getTagsArr}
-                        visible={this.props.visible} />
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="摘要" >
-                    {getFieldDecorator('summary', {
-                        initialValue: theData.summary
-                    })(
-                        <Input type="textarea" rows={4} />
-                        )}
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="成果简介" >
-                    {getFieldDecorator('introduction', {
-                        initialValue: theData.introduction
-                    })(
-                        <Input type="textarea" rows={4} placeholder="项目成果简介;项目核心创新点;项目详细用途;预期效益说明;主要技术(性能)指标;市场前景;应用范围;发展历程。" />
-                        )}
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="技术图片" >
-                    <PicturesWall
-                        pictureSign="achievement_technical_picture"
-                        fileList={this.getTechnicalPictureUrl}
-                        pictureUrl={this.state.technicalPictureUrl} />
-                    <p>图片建议:专利证书或专利申请书图片、技术图纸、样品图片、技术相关网络图片;成熟度处于非研发阶段的项目,必须上传样品图片,如未上传,成熟度将视为处在研发阶段。</p>
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="应用领域" >
-                    {getFieldDecorator('field', {
-                        rules: [{ type: 'array', required: true, message: '此项为必填项!' }],
-                        initialValue: [theData.fieldA, theData.fieldB]
-                    })(
-                        <Cascader style={{ width: 300 }} options={IndustryObject} placeholder="应用领域" />
-                        )}
-                </FormItem>
-                <div className="clearfix">
-                    <FormItem className="half-item"
-                        {...formItemLayout}
-                        label="成熟度" >
-                        {getFieldDecorator('maturity', {
-                            initialValue: theData.maturity
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="技术场景" >
+                        {getFieldDecorator('technicalScene', {
+                            initialValue: theData.technicalScene
                         })(
-                            <Select placeholder="选择成熟度" style={{ width: 160 }} >
-                                <Select.Option value="0" >正在研发</Select.Option>
-                                <Select.Option value="1" >已有样品</Select.Option>
-                                <Select.Option value="2" >通过小试</Select.Option>
-                                <Select.Option value="3" >通过中试</Select.Option>
-                                <Select.Option value="4" >可以量产</Select.Option>
-                            </Select>
+                            <Input type="textarea" rows={2} placeholder="说明解决了什么问题。" />
                             )}
                     </FormItem>
-                    <FormItem className="half-item"
-                        {...formItemLayout}
-                        label="创新度" >
-                        {getFieldDecorator('innovation', {
-                            initialValue: theData.innovation
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="技术突破" >
+                        {getFieldDecorator('breakthrough', {
+                            initialValue: theData.breakthrough
                         })(
-                            <Select placeholder="选择创新度" style={{ width: 160 }} >
-                                <Select.Option value="0" >行业先进</Select.Option>
-                                <Select.Option value="1" >行业领先</Select.Option>
-                                <Select.Option value="2" >国内先进</Select.Option>
-                                <Select.Option value="3" >国内领先</Select.Option>
-                                <Select.Option value="4" >国际先进</Select.Option>
-                                <Select.Option value="5" >国际领先</Select.Option>
-                            </Select>
+                            <Input type="textarea" rows={2} placeholder="说明该技术成果突破性的研究。" />
                             )}
                     </FormItem>
-                </div>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="成熟度证明材料(图片)" >
-                    <PicturesWall
-                        pictureSign="achievement_maturity_picture"
-                        fileList={this.getMaturityPictureUrl}
-                        pictureUrl={this.state.maturityPictureUrl} />
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 6 }}
-                    label="成熟度证明材料(文本)" >
-                    <Upload
-                        name="ratepay"
-                        action={globalConfig.context + "/api/user/achievement/uploadTextFile"}
-                        data={{ 'sign': 'achievement_maturity_text_file' }}
-                        beforeUpload={beforeUploadFile}
-                        fileList={this.state.textFileList}
-                        onChange={(info) => {
-                            if (info.file.status !== 'uploading') {
-                                console.log(info.file, info.fileList);
-                            }
-                            if (info.file.status === 'done') {
-                                if (!info.file.response.error.length) {
-                                    message.success(`${info.file.name} 文件上传成功!`);
-                                } else {
-                                    message.warning(info.file.response.error[0].message);
-                                    return;
-                                };
-                                this.state.maturityTextFileUrl = info.file.response.data;
-                            } else if (info.file.status === 'error') {
-                                message.error(`${info.file.name} 文件上传失败。`);
-                            };
-                            this.setState({ textFileList: info.fileList.slice(-1) });
-                        }} >
-                        <Button><Icon type="upload" /> 上传需求文本文件 </Button>
-                    </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.maturityTextFileUrl ?
-                        <span className="download-file">
-                            <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + this.props.data.id + '&sign=achievement_maturity_text_file') }}>成熟度证明材料(文本文件)</a>
-                        </span>
-                        : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="成熟度证明材料(视频地址)" >
-                    {getFieldDecorator('maturityVideoUrl', {
-                        initialValue: theData.maturityVideoUrl
-                    })(
-                        <Input />
-                        )}
-                </FormItem>
-                <div className="clearfix">
-                    <FormItem className="half-item"
-                        {...formItemLayout}
-                        label="合作方式" >
-                        {getFieldDecorator('cooperationMode', {
-                            rules: [{ required: true, message: '此项为必填项!' }],
-                            initialValue: theData.cooperationMode
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="专利情况" >
+                        {getFieldDecorator('patentCase', {
+                            initialValue: theData.patentCase
                         })(
-                            <Radio.Group>
-                                <Radio value="0">技术转让</Radio>
-                                <Radio value="1">授权生产</Radio>
-                            </Radio.Group>
+                            <Input type="textarea" rows={2} placeholder="一个“技术”可能由多个专利构成,需要说明技术-专利的关系。" />
                             )}
                     </FormItem>
-                    <FormItem className="half-item"
-                        {...formItemLayout}
-                        label="转让方式" >
-                        {getFieldDecorator('transferMode', {
-                            initialValue: theData.transferMode
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="获奖情况" >
+                        {getFieldDecorator('awards', {
+                            initialValue: theData.awards
                         })(
-                            <Select placeholder="选择转让方式" style={{ width: 160 }} >
-                                <Select.Option value="0" >完全转让</Select.Option>
-                                <Select.Option value="1" >许可转让</Select.Option>
-                                <Select.Option value="2" >技术入股</Select.Option>
-                            </Select>
+                            <Input type="textarea" rows={2} placeholder="一个“技术”可能存在社会奖励情况,需要说明社会奖励情况。" />
                             )}
                     </FormItem>
-                </div>
-                <div className="clearfix">
-                    <FormItem className="half-item"
-                        {...formItemLayout}
-                        label="议价方式" >
-                        {getFieldDecorator('bargainingMode', {
-                            initialValue: theData.bargainingMode
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="技术团队情况" >
+                        {getFieldDecorator('teamDes', {
+                            initialValue: theData.teamDes
                         })(
-                            <Radio.Group>
-                                <Radio value="0">面议</Radio>
-                                <Radio value="1">定价</Radio>
-                            </Radio.Group>
+                            <Input type="textarea" rows={2} placeholder="一个“技术”、“项目”可能存在团队,需要说明团队情况。" />
                             )}
                     </FormItem>
-                    <FormItem className="half-item"
-                        {...formItemLayout}
-                        label="转让价格" >
-                        {getFieldDecorator('transferPrice', {
-                            initialValue: theData.transferPrice
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 18 }}
+                        label="技术参数" >
+                        {getFieldDecorator('parameter', {
+                            initialValue: theData.parameter
                         })(
-                            <InputNumber />
+                            <Input type="textarea" rows={2} placeholder="描述技术参数信息" />
                             )}
-                        <span style={{ marginLeft: '20px' }}>万元</span>
                     </FormItem>
-                </div>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="技术场景" >
-                    {getFieldDecorator('technicalScene', {
-                        initialValue: theData.technicalScene
-                    })(
-                        <Input type="textarea" rows={2} placeholder="说明解决了什么问题。" />
-                        )}
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="技术突破" >
-                    {getFieldDecorator('breakthrough', {
-                        initialValue: theData.breakthrough
-                    })(
-                        <Input type="textarea" rows={2} placeholder="说明该技术成果突破性的研究。" />
-                        )}
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="专利情况" >
-                    {getFieldDecorator('patentCase', {
-                        initialValue: theData.patentCase
-                    })(
-                        <Input type="textarea" rows={2} placeholder="一个“技术”可能由多个专利构成,需要说明技术-专利的关系。" />
-                        )}
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="获奖情况" >
-                    {getFieldDecorator('awards', {
-                        initialValue: theData.awards
-                    })(
-                        <Input type="textarea" rows={2} placeholder="一个“技术”可能存在社会奖励情况,需要说明社会奖励情况。" />
-                        )}
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="技术团队情况" >
-                    {getFieldDecorator('teamDes', {
-                        initialValue: theData.teamDes
-                    })(
-                        <Input type="textarea" rows={2} placeholder="一个“技术”、“项目”可能存在团队,需要说明团队情况。" />
-                        )}
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 18 }}
-                    label="技术参数" >
-                    {getFieldDecorator('parameter', {
-                        initialValue: theData.parameter
-                    })(
-                        <Input type="textarea" rows={2} placeholder="描述技术参数信息" />
-                        )}
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 6 }}
-                    label="技术方案" >
-                    <Upload
-                        name="ratepay"
-                        action={globalConfig.context + "/api/user/achievement/uploadTextFile"}
-                        data={{ 'sign': 'achievement_tech_plan' }}
-                        beforeUpload={beforeUploadFile}
-                        fileList={this.state.techPlanFileList}
-                        onChange={(info) => {
-                            if (info.file.status !== 'uploading') {
-                                console.log(info.file, info.fileList);
-                            }
-                            if (info.file.status === 'done') {
-                                if (!info.file.response.error.length) {
-                                    message.success(`${info.file.name} 文件上传成功!`);
-                                } else {
-                                    message.warning(info.file.response.error[0].message);
-                                    return;
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 6 }}
+                        label="技术方案" >
+                        <Upload
+                            name="ratepay"
+                            action={globalConfig.context + "/api/user/achievement/uploadTextFile"}
+                            data={{ 'sign': 'achievement_tech_plan' }}
+                            beforeUpload={beforeUploadFile}
+                            fileList={this.state.techPlanFileList}
+                            onChange={(info) => {
+                                if (info.file.status !== 'uploading') {
+                                    console.log(info.file, info.fileList);
+                                }
+                                if (info.file.status === 'done') {
+                                    if (!info.file.response.error.length) {
+                                        message.success(`${info.file.name} 文件上传成功!`);
+                                    } else {
+                                        message.warning(info.file.response.error[0].message);
+                                        return;
+                                    };
+                                    this.state.techPlanUrl = info.file.response.data;
+                                } else if (info.file.status === 'error') {
+                                    message.error(`${info.file.name} 文件上传失败。`);
                                 };
-                                this.state.techPlanUrl = info.file.response.data;
-                            } else if (info.file.status === 'error') {
-                                message.error(`${info.file.name} 文件上传失败。`);
-                            };
-                            this.setState({ techPlanFileList: info.fileList.slice(-1) });
-                        }} >
-                        <Button><Icon type="upload" /> 上传技术方案文件 </Button>
-                    </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.techPlanUrl ?
-                        <span className="download-file">
-                            <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + this.props.data.id + '&sign=achievement_tech_plan') }}>技术方案</a>
-                        </span>
-                        : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
-                </FormItem>
-                <FormItem
-                    labelCol={{ span: 4 }}
-                    wrapperCol={{ span: 6 }}
-                    label="商业计划书" >
-                    <Upload
-                        name="ratepay"
-                        action={globalConfig.context + "/api/user/achievement/uploadTextFile"}
-                        data={{ 'sign': 'achievement_business_plan' }}
-                        beforeUpload={beforeUploadFile}
-                        fileList={this.state.businessPlanFileList}
-                        onChange={(info) => {
-                            if (info.file.status !== 'uploading') {
-                                console.log(info.file, info.fileList);
-                            }
-                            if (info.file.status === 'done') {
-                                if (!info.file.response.error.length) {
-                                    message.success(`${info.file.name} 文件上传成功!`);
-                                } else {
-                                    message.warning(info.file.response.error[0].message);
-                                    return;
+                                this.setState({ techPlanFileList: info.fileList.slice(-1) });
+                            }} >
+                            <Button><Icon type="upload" /> 上传技术方案文件 </Button>
+                        </Upload>
+                        <p style={{ marginTop: '10px' }}>{theData.techPlanUrl ?
+                            <span className="download-file">
+                                <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + this.props.data.id + '&sign=achievement_tech_plan') }}>技术方案</a>
+                            </span>
+                            : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    </FormItem>
+                    <FormItem
+                        labelCol={{ span: 4 }}
+                        wrapperCol={{ span: 6 }}
+                        label="商业计划书" >
+                        <Upload
+                            name="ratepay"
+                            action={globalConfig.context + "/api/user/achievement/uploadTextFile"}
+                            data={{ 'sign': 'achievement_business_plan' }}
+                            beforeUpload={beforeUploadFile}
+                            fileList={this.state.businessPlanFileList}
+                            onChange={(info) => {
+                                if (info.file.status !== 'uploading') {
+                                    console.log(info.file, info.fileList);
+                                }
+                                if (info.file.status === 'done') {
+                                    if (!info.file.response.error.length) {
+                                        message.success(`${info.file.name} 文件上传成功!`);
+                                    } else {
+                                        message.warning(info.file.response.error[0].message);
+                                        return;
+                                    };
+                                    this.state.businessPlanUrl = info.file.response.data;
+                                } else if (info.file.status === 'error') {
+                                    message.error(`${info.file.name} 文件上传失败。`);
                                 };
-                                this.state.businessPlanUrl = info.file.response.data;
-                            } else if (info.file.status === 'error') {
-                                message.error(`${info.file.name} 文件上传失败。`);
-                            };
-                            this.setState({ businessPlanFileList: info.fileList.slice(-1) });
-                        }} >
-                        <Button><Icon type="upload" /> 上传商业计划书文件 </Button>
-                    </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.businessPlanUrl ?
-                        <span className="download-file">
-                            <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + this.props.data.id + '&sign=achievement_business_plan') }}>商业计划书</a>
-                        </span>
-                        : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
-                </FormItem>
-                <FormItem wrapperCol={{ span: 12, offset: 4 }}>
-                    <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
-                    <Button className="set-submit" type="ghost" onClick={(e) => { this.state.auditStatus = 1; }} htmlType="submit">发布</Button>
-                    <Button className="set-submit" type="ghost" onClick={this.props.closeDesc}>取消</Button>
-                </FormItem>
+                                this.setState({ businessPlanFileList: info.fileList.slice(-1) });
+                            }} >
+                            <Button><Icon type="upload" /> 上传商业计划书文件 </Button>
+                        </Upload>
+                        <p style={{ marginTop: '10px' }}>{theData.businessPlanUrl ?
+                            <span className="download-file">
+                                <a onClick={() => { window.open(globalConfig.context + '/api/user/achievement/download?id=' + this.props.data.id + '&sign=achievement_business_plan') }}>商业计划书</a>
+                            </span>
+                            : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    </FormItem>
+                    <FormItem wrapperCol={{ span: 12, offset: 4 }}>
+                        <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
+                        <Button className="set-submit" type="ghost" onClick={(e) => { this.state.auditStatus = 1; }} htmlType="submit">发布</Button>
+                        <Button className="set-submit" type="ghost" onClick={this.props.closeDesc}>取消</Button>
+                    </FormItem>
+                </Spin>
             </Form >
         )
     }

+ 6 - 0
js/component/account/demand/techDemandDesc.jsx

@@ -184,6 +184,9 @@ const DemandDetailShow = Form.create()(React.createClass({
             url: globalConfig.context + "/api/user/demand/offShelf",
             data: { "id": this.props.data.id }
         }).done(function (data) {
+            this.setState({
+                loading: false
+            });
             if (!data.error.length) {
                 message.success('撤销成功!');
                 this.setState({
@@ -565,6 +568,9 @@ const DemandDetailForm = Form.create()(React.createClass({
                     }
                 }).done(function (data) {
                     this.state.auditStatus = 0;
+                    this.setState({
+                        loading: false
+                    });
                     if (!data.error.length) {
                         message.success('保存成功!');
                         this.setState({

+ 43 - 7
js/component/portal/portal.less

@@ -155,11 +155,16 @@
         }
         ul {
             box-sizing: border-box;
+            margin-top: 20px;
             .user-detail {
                 float: left;
                 height: auto;
-                width: 20%;
+                width: 24%;
                 background: #fff;
+                border: 1px solid #d9d9d9;
+                padding: 20px;
+                margin-right: 12px;
+                margin-bottom: 20px;
                 .logo {
                     height: 120px;
                     width: 120px;
@@ -176,18 +181,27 @@
                 }
                 >div:not(:first-child) {
                     font-size: 16px;
-                    margin-left: 20px;
                     height: 24px;
                     line-height: 24px;
+                    overflow: hidden;
                     vertical-align: middle;
+                    color: #999;
                 }
                 .name {
                     margin-top: 10px;
+                    text-align: center;
+                    color: #333;
+                }
+                .address {
+                    font-size: 18px;
+                }
+                .text-Number {
+                    color: #ea0862;
+                    font-size: 18px;
                 }
-                .follow {
-                    float: right;
-                    font-size: 13px;
-                    margin-right: 10px;
+                .text-unit {
+                    color: #333;
+                    font-size: 18px;
                 }
             }
         }
@@ -199,6 +213,19 @@
                 width: 100%;
             }
         }
+        .slick-dots {
+            >li {
+                button {
+                    height: 4px;
+                    width: 20px;
+                }
+            }
+        }
+    }
+    .portal-rate {
+        &:hover {
+            cursor: default;
+        }
     }
 }
 
@@ -252,13 +279,22 @@
     .money_text {
         color: #58a3ff;
     }
+    .detial_sub_score {
+        display: inline-block;
+        width: 90px;
+        >span {
+            overflow: hidden;
+            display: inline-block;
+            vertical-align: top;
+        }
+    }
 }
 
 .detail_interest_sub {
     list-style: none;
     padding: 0 200px;
     margin-bottom: 20px;
-    li {
+    >li {
         margin-top: 20px;
         border: 1px solid #ececec;
         padding: 0 20px 20px;

+ 89 - 81
js/component/portal/search/achievement.jsx

@@ -1,17 +1,27 @@
 import React from 'react';
-import { Icon, message, Row, Col, Radio, Checkbox, Input, InputNumber, Button, Table, Spin, Carousel } from 'antd';
+import { Rate, Icon, message, Row, Col, Radio, Checkbox, Input, InputNumber, Button, Pagination, 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 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 achievement_ico_1 from '../../../../image/achievement_ico_1.png';
+import achievement_ico_2 from '../../../../image/achievement_ico_2.png';
+import uncertify from '../../../../image/demand_ico_6.png';
+import certify from '../../../../image/demand_ico_6_atv.png';
+import score_ioc from '../../../../image/score_ioc.png';
+
 import { IndustryObject, getIndustryCategory } from '../../DicIndustryList';
 import { achievementCategoryList, transferModeList, maturityList } from '../../dataDic';
-import { getAchievementCategory } from '../../tools';
+import { getAchievementCategory, getTransferMode, getMaturity } from '../../tools';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
-import AchievementDesc from './achievementDesc';
 
 const Content = React.createClass({
     loadData(pageNo) {
@@ -78,6 +88,7 @@ const Content = React.createClass({
                             id: thisdata.id,
                             serialNumber: thisdata.serialNumber,
                             keyword: thisdata.keyword,
+                            level: thisdata.level,
                             name: thisdata.name,
                             dataCategory: thisdata.dataCategory,
                             category: thisdata.category,
@@ -86,6 +97,8 @@ const Content = React.createClass({
                             unitName: thisdata.unitName,
                             releaseDate: thisdata.releaseDate,
                             ownerType: thisdata.ownerType,
+                            fieldA: thisdata.fieldA,
+                            fieldB: thisdata.fieldB,
                             field: [thisdata.fieldA, thisdata.fieldB],
                             transferPrice: thisdata.transferPrice,
                             maturity: thisdata.maturity,
@@ -118,76 +131,10 @@ const Content = React.createClass({
             industryRadioB: [],
             transferPrice: 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>;
-                            case "2":
-                                return <span>项目</span>;
-                        }
-                    }
-                }, {
-                    title: '类型',
-                    dataIndex: 'category',
-                    key: 'category',
-                    render: text => { return getAchievementCategory(text); }
-                }, {
-                    title: '行业分类',
-                    dataIndex: 'field',
-                    key: 'field',
-                    render: text => { return getIndustryCategory(text[0], text[1]) }
-                }, {
-                    title: '所有人名称',
-                    dataIndex: 'ownerName',
-                    key: 'ownerName',
-                }, {
-                    title: '所有人类型',
-                    dataIndex: 'ownerType',
-                    key: 'ownerType',
-                    render: text => {
-                        switch (text) {
-                            case "0":
-                                return <span>个人</span>;
-                            case "1":
-                                return <span>组织</span>
-                        }
-                    }
-                }, {
-                    title: '发布时间',
-                    dataIndex: 'releaseDateFormattedDate',
-                    key: 'releaseDateFormattedDate',
-                }
-            ],
             dataSource: []
         };
     },
@@ -267,6 +214,8 @@ const Content = React.createClass({
         });
     },
     render() {
+        const { pageNo, pageSize, total } = this.state.pagination;
+        const _me = this;
         return (
             <div className="portal-body">
                 <div className="portal-nav clearfix">
@@ -276,6 +225,7 @@ const Content = React.createClass({
                     <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; }} />
@@ -394,16 +344,74 @@ const Content = React.createClass({
                             </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 spinning={this.state.loading} style={{ marginBottom: '40px' }}>
+                        <ul className='detail_interest_sub clearfix' style={{ padding: 0 }}>
+                            {this.state.dataSource.map((item) => {
+                                return <li key={item.id} onClick={() => { this.tableRowClick(item) }}
+                                    style={{ float: 'left', marginLeft: '20px', width: '48%' }}>
+                                    <div className="interest_list_title" style={{ paddingLeft: '20px' }}>
+                                        <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.keyword}</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">{getAchievementCategory(item.category)}</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.fieldA, item.fieldB)}</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.transferPrice ? (item.transferPrice + '万元') : '价格面议'}</span>
+                                    </div>
+                                    <div className="detial_sub">
+                                        <span className="detial_sub_icon">
+                                            <img src={achievement_ico_1} alt="交易方式" />
+                                        </span>
+                                        <span className="detial_sub_title">交易方式: </span>
+                                        <span className="money_text">{getTransferMode(item.transferMode)}</span>
+                                    </div>
+                                    <div className="detial_sub">
+                                        <span className="detial_sub_icon">
+                                            <img src={achievement_ico_2} alt="成熟度" />
+                                        </span>
+                                        <span className="detial_sub_title">技术成熟度: </span>
+                                        <span className="detial_sub_score" >
+                                            <span style={{ width: (item.maturity ? Number(item.maturity) * 20 : 0) + '%' }}>
+                                                <img src={score_ioc} alt={getMaturity(item.maturity)} />
+                                            </span>
+                                        </span>
+                                    </div>
+                                </li>
+                            })}
+                        </ul>
+                        <Pagination style={{ float: 'right' }}
+                            onChange={(e) => { this.loadData(e); }}
+                            total={total}
+                            showTotal={() => { return '共' + total + '条数据' }}
+                            current={pageNo}
+                            pageSize={pageSize} />
                     </Spin>
-                    <AchievementDesc
-                        data={this.state.RowData}
-                        showDesc={this.state.showDesc}
-                        closeDesc={this.closeDesc} />
                 </div >
             </div>
         )

+ 5 - 3
js/component/portal/search/demand.jsx

@@ -4,6 +4,7 @@ import '../portal.less';
 
 import logoImg from '../../../../image/logo.png';
 import searchImg from '../../../../image/search.png';
+import slideImg from '../../../../image/slide_img_1.png';
 
 import demand_sup from '../../../../image/demand_sup.png';
 import demand_ico_5 from '../../../../image/demand_ico_5.png';
@@ -191,6 +192,7 @@ const Content = React.createClass({
                     <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; }} />
@@ -273,9 +275,9 @@ const Content = React.createClass({
                         </Col>
                     </Row>
                     <Spin spinning={this.state.loading} style={{ marginBottom: '40px' }}>
-                        <div className='detail_interest_sub'>
+                        <ul className='detail_interest_sub'>
                             {this.state.dataSource.map((item) => {
-                                return <li key={item.id}>
+                                return <li key={item.id} onClick={() => { this.tableRowClick(item) }}>
                                     <div className="interest_list_title">
                                         <img src={demand_sup} alt="" />
                                         <span>{item.name}</span>
@@ -314,7 +316,7 @@ const Content = React.createClass({
                                     </div>
                                 </li>
                             })}
-                        </div>
+                        </ul>
                         <Pagination style={{ float: 'right' }}
                             onChange={(e) => { this.loadData(e); }}
                             total={total}

+ 178 - 148
js/component/portal/search/subscriber.jsx

@@ -1,6 +1,11 @@
 import React from 'react';
-import { Icon, message, Row, Col, Select, Radio, Checkbox, Input, InputNumber, Button, Table, Spin, Pagination } from 'antd';
+import { Carousel, Icon, message, Row, Col, Select, Radio, Checkbox, Input, InputNumber, Button, Table, Spin, Pagination } 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 { techFieldList, getTechField } from '../../DicTechFieldList';
 import { provinceList, getProvince } from '../../NewDicProvinceList';
 import { companySearch } from '../../tools';
@@ -10,7 +15,7 @@ import $ from 'jquery/src/ajax';
 
 import avatarImg from '../../../../image/avatarImg.png';
 
-const Content = React.createClass({
+const SubContent = React.createClass({
     loadData(pageNo) {
         this.setState({
             loading: true
@@ -177,7 +182,7 @@ const Content = React.createClass({
         })
     },
     tableRowClick(record, index) {
-        this.state.RowData = record;
+        window.open(globalConfig.context + '/user/subscriberDetail.html?rid=' + record.uid + '&type=' + record.type);
     },
     interest(e) {
         this.setState({
@@ -223,156 +228,181 @@ const Content = React.createClass({
         const { pageNo, pageSize, total } = this.state.pagination;
         const _me = this;
         return (
-            <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}>
-                            {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.setState({ thirdField: e }) }}>
-                            {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>
-                    </Col>
-                </Row>
-                <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.setState({ area: e }) }}>
-                            {this.state.areaOption}
-                        </Select>
-                        <Button type="ghost" style={{ marginLeft: '20px' }}
-                            onClick={() => {
+            <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>
+                        <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>
+                <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 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}>
+                                {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.setState({ thirdField: e }) }}>
+                                {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>
+                        </Col>
+                    </Row>
+                    <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.setState({ area: e }) }}>
+                                {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>
+                    <Row className="search-criteria">
+                        <Col className="search-title" span={2}>
+                            <span>用户类型</span>
+                        </Col>
+                        <Col className="search-select" span={6}>
+                            <Radio.Group defaultValue={0} onChange={(e) => {
                                 this.setState({
-                                    province: undefined,
-                                    city: undefined,
-                                    area: undefined
+                                    type: e.target.value
                                 });
-                                this.state.province = undefined;
-                                this.state.city = undefined;
-                                this.state.area = undefined;
+                                this.state.type = e.target.value;
                                 this.loadData();
-                            }}>不限</Button>
-                    </Col>
-                </Row>
-                <Row className="search-criteria">
-                    <Col className="search-title" span={2}>
-                        <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();
-                        }}>
-                            <Radio.Button value={0}>个人</Radio.Button>
-                            <Radio.Button value={1}>组织</Radio.Button>
-                        </Radio.Group>
-                    </Col>
-                </Row>
-                <Row className="search-criteria">
-                    <Col className="search-title" span={2}>
-                        <span>用户名</span>
-                    </Col>
-                    <Col className="search-select" span={6}>
-                        <Input style={{ width: 200, marginBottom: '10px' }} value={this.state.searchName} onChange={(e) => { this.setState({ searchName: e.target.value }) }} />
-                        <Button type="primary" style={{ marginLeft: '20px' }}
-                            onClick={() => { this.loadData(); }}>搜索</Button>
-                    </Col>
-                </Row>
-                <Spin spinning={this.state.loading}>
-                    <ul className="clearfix">
-                        {this.state.dataSource.map((item) => {
-                            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="头像" />
-                                </div>
-                                <div className="name">
-                                    {_me.state.type == 0 ? item.username : item.unitName}
-                                </div>
-                                <div className="province">{getProvince(item.province)}</div>
-                                <div className="text">{'需求:' + item.demandNum + '条'}</div>
-                                <div className="text">{'技术成果:' + item.achievementNum + '条'}</div>
-                            </li>
-                        })}
-                    </ul>
-                    <Pagination style={{ float: 'right' }}
-                        onChange={(e) => { this.loadData(e); }}
-                        total={total}
-                        showTotal={() => { return '共' + total + '条数据' }}
-                        current={pageNo}
-                        pageSize={pageSize} />
-                </Spin>
-            </div >
+                                <Radio.Button value={0}>个人</Radio.Button>
+                                <Radio.Button value={1}>组织</Radio.Button>
+                            </Radio.Group>
+                        </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))
+                                            : avatarImg} alt="头像" />
+                                    </div>
+                                    <div className="name">
+                                        {_me.state.type == 0 ? item.username : item.unitName}
+                                    </div>
+                                    <div className="province">
+                                        <span style={{ letterSpacing: '32px' }}>地</span>
+                                        <span>区: </span>
+                                        <span className="address"> {getProvince(item.province)}</span>
+                                    </div>
+                                    <div className="text">
+                                        <span style={{ letterSpacing: '32px' }}>需</span>
+                                        <span>求: </span>
+                                        <span className="text-Number"> {item.demandNum} </span>
+                                        <span className="text-unit"> 条</span>
+                                    </div>
+                                    <div className="text">
+                                        <span>技术成果: </span>
+                                        <span className="text-Number"> {item.achievementNum} </span>
+                                        <span className="text-unit"> 条</span>
+                                    </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 Content;
+export default SubContent;

+ 185 - 145
js/component/subscriberDetail/content.jsx

@@ -1,13 +1,25 @@
 import React from 'react';
-import { Icon, message, Row, Col, Spin, Tag, Table } from 'antd';
+import { Icon, message, Row, Col, Spin, Tag, Pagination } from 'antd';
 import './detail.less';
-import { getSearchUrl, getAchievementCategory, getDemandType } from '../tools';
+import { getSearchUrl, getAchievementCategory, getDemandType, getTransferMode, getMaturity } from '../tools';
 import { getProvince } from '../NewDicProvinceList';
+import { getIndustryCategory } from '../DicIndustryList';
 import { getTechField } from '../DicTechFieldList';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
 
 import avatarImg from '../../../image/avatarImg.png';
+import list_title_ico_1 from '../../../image/list_title_ico_1.png';
+import list_title_ico_2 from '../../../image/list_title_ico_2.png';
+import list_title_ico_3 from '../../../image/list_title_ico_3.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 achievement_ico_1 from '../../../image/achievement_ico_1.png';
+import achievement_ico_2 from '../../../image/achievement_ico_2.png';
+import score_ioc from '../../../image/score_ioc.png';
+import demand_sup from '../../../image/demand_sup.png';
 
 const Content = React.createClass({
     loadData() {
@@ -196,104 +208,16 @@ const Content = React.createClass({
             data: {},
             theImgsrc: [],
             achievementPagination: {
-                defaultCurrent: 1,
-                defaultPageSize: 10,
-                showQuickJumper: true,
-                pageSize: 10,
-                onChange: function (page) {
-                    this.achievementLoadData(page);
-                }.bind(this),
-                showTotal: function (total) {
-                    return '共' + total + '条数据';
-                }
+                a_pageNo: 1,
+                a_pageSize: 10,
+                a_total: 0
             },
-            achievementColumns: [
-                {
-                    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>;
-                            case "2":
-                                return <span>项目</span>;
-                        }
-                    }
-                }, {
-                    title: '类型',
-                    dataIndex: 'category',
-                    key: 'category',
-                    render: text => { return getAchievementCategory(text); }
-                }, {
-                    title: '发布时间',
-                    dataIndex: 'releaseDateFormattedDate',
-                    key: 'releaseDateFormattedDate',
-                }
-            ],
             achievementDataSource: [],
-            demandColumns: [
-                {
-                    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: 'releaseDateFormattedDate',
-                    key: 'releaseDateFormattedDate',
-                }
-            ],
             demandDataSource: [],
             demandPagination: {
-                defaultCurrent: 1,
-                defaultPageSize: 10,
-                showQuickJumper: true,
-                pageSize: 10,
-                onChange: function (page) {
-                    this.demandLoadData(page);
-                }.bind(this),
-                showTotal: function (total) {
-                    return '共' + total + '条数据';
-                }
+                d_pageNo: 1,
+                d_pageSize: 10,
+                d_total: 0
             },
         };
     },
@@ -309,13 +233,21 @@ const Content = React.createClass({
             };
         };
     },
+    achievementListClick(record, index) {
+        window.open(globalConfig.context + '/portal/detail/achievementDetail.html?id=' + record.id + '&type=' + record.ownerType);
+    },
+    demandListClick(record, index) {
+        window.open(globalConfig.context + '/portal/detail/demandDetail.html?id=' + record.id + '&type=' + record.dataCategory);
+    },
     render() {
         const theData = this.state.data;
+        const { a_pageNo, a_pageSize, a_total } = this.state.achievementPagination;
+        const { d_pageNo, d_pageSize, d_total } = this.state.demandPagination;
         return (
-            <Spin spinning={this.state.loading}>
+            <Spin spinning={this.state.loading} style={{ marginBottom: '80px' }}>
                 <div className="detail-content">
                     <Row>
-                        <Col span={6}>
+                        <Col span={8}>
                             <div className="avatar-box">
                                 <img src={(theData.personPortraitUrl || theData.logoUrl) ?
                                     (globalConfig.avatarHost + "/upload" + (this.state.type == 0 ? theData.personPortraitUrl : theData.logoUrl))
@@ -326,34 +258,39 @@ const Content = React.createClass({
                                     : <a onClick={this.interestClick}><Icon type="heart-o" /> 感兴趣</a>}
                             </div>
                         </Col>
-                        <Col span={18} className="avatar-right">
-                            <div>
-                                <div className="column-title">用户名称</div>
-                                <div className="column-text">{this.state.type == 0 ? theData.username : theData.unitName}</div>
-                            </div>
+                        <Col span={16} className="avatar-right">
+                            <div className="user-name">{this.state.type == 0 ? theData.username : theData.unitName}</div>
                             <div>
-                                <div className="column-title">用户类型</div>
-                                <div className="column-text">{this.state.type == 0 ? '个人' : '组织'}</div>
-                            </div>
-                            <div>
-                                <div className="column-title">用户等级</div>
-                                <div className="column-text">Lv.{theData.level}</div>
-                            </div>
-                            <div>
-                                <div className="column-title">所在地</div>
-                                <div className="column-text">{getProvince(theData.province, theData.city, theData.area)}</div>
+                                Lv.
+                                <span className="user-level">{theData.level}</span>
+                                <span className="user-type">{this.state.type == 0 ? '个人' : '组织'}</span>
                             </div>
+                            <div className="user-desc">
+                                <span>简介:</span>
+                                {this.state.type == 0 ? theData.personalProfile : theData.companyIntroduction}</div>
                         </Col>
                     </Row>
-                    <Row>
-                        <Col span={12}>
-                            <div className="column-title">专业领域</div>
+                    <Row className="all-row">
+                        <Col span={4}>
+                            <div className="column-title">所在地:</div>
+                        </Col>
+                        <Col span={20}>
+                            <div className="column-text">{getProvince(theData.province, theData.city, theData.area)}</div>
+                        </Col>
+                    </Row>
+                    <Row className="all-row">
+                        <Col span={4}>
+                            <div className="column-title">专业领域:</div>
+                        </Col>
+                        <Col span={20}>
                             <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>
+                    <Row className="all-row">
+                        <Col span={4}>
+                            <div className="column-title">能力标签:</div>
+                        </Col>
+                        <Col span={20}>
                             <div className="column-text">
                                 {theData.abilityLabel ? theData.abilityLabel.split(',').map((item) => {
                                     return <Tag key={item}>{item}</Tag>
@@ -361,34 +298,137 @@ const Content = React.createClass({
                             </div>
                         </Col>
                     </Row>
-                    <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>
+                <div className="detail-list">
+                    <div className="list-title">
+                        <img src={list_title_ico_1} alt="" />
+                        <span>用户展示</span>
+                    </div>
+                    <div className="column-img clearfix">
+                        {this.state.theImgsrc.map((item, i) => {
+                            return <div className="img-box" key={i}>
+                                <img src={globalConfig.avatarHost + "/upload" + item} alt="" />
                             </div>
-                        </Col>
-                    </Row>
+                        })}
+                    </div>
+                </div>
+                <div className="detail-list">
+                    <div className="list-title">
+                        <img src={list_title_ico_2} alt="" />
+                        <span>技术成果</span>
+                    </div>
+                    <ul className="detail_interest_sub clearfix">
+                        {this.state.achievementDataSource.map((item, i) => {
+                            return <li key={item.id} onClick={() => { this.achievementListClick(item) }}
+                                style={{ float: 'left', marginLeft: '18px', width: '48%' }}>
+                                <div className="interest_list_title" style={{ paddingLeft: '20px' }}>
+                                    <span>{item.name}</span>
+                                </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.keyword}</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">{getAchievementCategory(item.category)}</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.fieldA, item.fieldB)}</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.transferPrice ? (item.transferPrice + '万元') : '价格面议'}</span>
+                                </div>
+                                <div className="detial_sub">
+                                    <span className="detial_sub_icon">
+                                        <img src={achievement_ico_1} alt="交易方式" />
+                                    </span>
+                                    <span className="detial_sub_title">交易方式: </span>
+                                    <span className="money_text">{getTransferMode(item.transferMode)}</span>
+                                </div>
+                                <div className="detial_sub">
+                                    <span className="detial_sub_icon">
+                                        <img src={achievement_ico_2} alt="成熟度" />
+                                    </span>
+                                    <span className="detial_sub_title">技术成熟度: </span>
+                                    <span className="detial_sub_score" >
+                                        <span style={{ width: (item.maturity ? Number(item.maturity) * 20 : 0) + '%' }}>
+                                            <img src={score_ioc} alt={getMaturity(item.maturity)} />
+                                        </span>
+                                    </span>
+                                </div>
+                            </li>
+                        })}
+                    </ul>
+                    <Pagination style={{ float: 'right' }}
+                        onChange={(e) => { this.achievementLoadData(e); }}
+                        total={a_total}
+                        showTotal={() => { return '共' + a_total + '条数据' }}
+                        current={a_pageNo}
+                        pageSize={a_pageSize} />
                 </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 className="detail-list">
+                    <div className="list-title">
+                        <img src={list_title_ico_2} alt="" />
+                        <span>技术成果</span>
+                    </div>
+                    <ul className="detail_interest_sub clearfix">
+                        {this.state.demandDataSource.map((item, i) => {
+                            return <li key={item.id} onClick={() => { this.demandListClick(item) }}>
+                                <div className="interest_list_title">
+                                    <img src={demand_sup} alt="" />
+                                    <span>{item.name}</span>
+                                </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>
+                        })}
+                    </ul>
+                    <Pagination style={{ float: 'right' }}
+                        onChange={(e) => { this.demandLoadData(e); }}
+                        total={d_total}
+                        showTotal={() => { return '共' + d_total + '条数据' }}
+                        current={d_pageNo}
+                        pageSize={d_pageSize} />
                 </div>
             </Spin>
         )

+ 169 - 3
js/component/subscriberDetail/detail.less

@@ -66,10 +66,10 @@
         }
     }
     .detail-content {
-        width: 1280px;
-        margin: 0 auto;
+        width: 600px;
+        margin: 20px auto;
         padding-top: 20px;
-        padding-bottom: 60px;
+        border: 1px solid #eee;
         .avatar-box {
             height: 120px;
             width: 120px;
@@ -84,5 +84,171 @@
                 width: auto;
             }
         }
+        .interest {
+            text-align: center;
+            font-size: 14px;
+        }
+        .avatar-right {
+            font-size: 16px;
+            >div {
+                margin-bottom: 10px;
+            }
+            .user-name {
+                font-size: 20px;
+            }
+            .user-level {
+                font-size: 18px;
+                color: #ea0862;
+            }
+            .user-type {
+                font-size: 14px;
+                margin-left: 20px;
+                border-radius: 4px;
+                padding: 0 4px;
+                background: #eee;
+            }
+        }
+        .all-row {
+            >div {
+                line-height: 30px;
+                vertical-align: middle;
+                font-size: 16px;
+                margin-bottom: 10px;
+            }
+        }
+        .column-title {
+            text-align: right;
+            color: #999999;
+            margin-right: 10px;
+        }
+        .column-text {
+            color: #333;
+            font-size: 18px;
+        }
+    }
+    .detail-list {
+        width: 1000px;
+        margin: 0 auto;
+        margin-top: 40px;
+        padding: 20px;
+        padding-bottom: 40px;
+        border: 1px solid #eee;
+        .list-title {
+            width: 400px;
+            height: 36px;
+            vertical-align: middle;
+            text-align: center;
+            background: #fff;
+            margin: 0 auto;
+            margin-top: -36px;
+            >img {
+                vertical-align: middle;
+            }
+            >span {
+                vertical-align: middle;
+                margin-left: 10px;
+                line-height: 36px;
+                font-size: 28px;
+                color: #58a3ff;
+            }
+        }
+        .column-img {
+            .img-box {
+                height: 100px;
+                width: 100px;
+                float: left;
+                margin-right: 30px;
+                padding-top: 100px;
+                overflow: hidden;
+                position: relative;
+                img {
+                    height: auto;
+                    width: 100px;
+                    position: absolute;
+                    top: 0;
+                    left: 0;
+                }
+            }
+        }
+        .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;
+            }
+            .detial_sub_score {
+                display: inline-block;
+                width: 90px;
+                >span {
+                    overflow: hidden;
+                    display: inline-block;
+                    vertical-align: top;
+                }
+            }
+        }
+        .detail_interest_sub {
+            list-style: none;
+            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;
+                    }
+                }
+            }
+        }
     }
 }

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

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