dengzhiguo 7 年 前
コミット
b5150ecc47

+ 20 - 0
js/component/manageCenter/achievement/content.jsx

@@ -36,6 +36,26 @@ class Content extends Component {
                     const TechAchievement = require('./techAchievement').default;
                     this.setState({
                         component: TechAchievement,
+                        listApiUrl: '/api/admin/achievement/manageList',
+                        detailApiUrl: '/api/admin/achievement/orgDetail'
+                    });
+                });
+                break;
+            case 'myTechAchievement':
+                require.ensure([], () => {
+                    const MyTechAchievement = require('./myTechAchievement').default;
+                    this.setState({
+                        component: MyTechAchievement,
+                        listApiUrl: '/api/admin/achievement/myList',
+                        detailApiUrl: '/api/admin/achievement/orgDetail'
+                    });
+                });
+                break;
+            case 'techAchievementQuery':
+                require.ensure([], () => {
+                    const TechAchievementQuery = require('./techAchievementQuery').default;
+                    this.setState({
+                        component: TechAchievementQuery,
                         listApiUrl: '/api/admin/achievement/orgList',
                         detailApiUrl: '/api/admin/achievement/orgDetail'
                     });

+ 428 - 0
js/component/manageCenter/achievement/myTechAchievement.jsx

@@ -0,0 +1,428 @@
+import React from 'react';
+import { Radio, Icon, Button, Input, Select, Spin, Table, Switch, message, DatePicker, Modal, Upload } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import './techAchievement.less';
+import TechAchievementDesc from './techAchievementDesc.jsx';
+import { achievementCategoryList, techAuditStatusList } from '../../dataDic.js';
+import { beforeUploadFile, companySearch, getAchievementCategory, getSearchUrl, getTechAuditStatus ,getboutique,gethot} from '../../tools.js';
+import BatchImport from './batchImport';
+
+const AchievementList = React.createClass({
+    loadData(pageNo, apiUrl) {
+        this.state.data = [];
+      if(this.state.serialNumber&&isNaN(this.state.serialNumber)){
+     	message.warning('请输入正确的编号格式');
+      	return false;
+      }
+         this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + (apiUrl || this.props['data-listApiUrl']),
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                serialNumber: this.state.serialNumber, //编号
+                name: this.state.name, //名称
+                ownerName: this.state.searchType == 1 ? this.state.searchName : undefined,
+                username: this.state.searchType == 0 && this.props['data-listApiUrl'].indexOf('org') == -1 ? this.state.searchName : undefined,
+                unitName: this.state.searchType == 0 && this.props['data-listApiUrl'].indexOf('user') == -1 ? this.state.searchName : undefined,
+                keyword: this.state.keyword, // 关键词
+                category: this.state.category, //类型(0--专利, 2--软著, 3--项目, 4--版权, 5--工业设计, 6--配方, 7--非标)
+                releaseDateStartDate: this.state.releaseDate[0],
+                releaseDateEndDate: this.state.releaseDate[1],
+                releaseStatus: this.state.releaseStatus ? Number(this.state.releaseStatus) : undefined, //是否发布(0--未发布,1--已发布)
+                auditStatus: this.state.auditStatus,
+                boutique:this.state.boutique,
+                hot:this.state.hot,
+                createDateStartDate: this.state.releaseDateS[0],
+                createDateEndDate: this.state.releaseDateS[1],
+                ownerType:this.state.ownerType,
+            },
+            success: function (data) {
+                let theArr = [];
+                if (!data.data || !data.data.list) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    for (let i = 0; i < data.data.list.length; i++) {
+                        let thisdata = data.data.list[i];
+                        theArr.push({
+                            key: i,
+                            id: thisdata.id,
+                            serialNumber: thisdata.serialNumber,
+                            dataCategory: thisdata.dataCategory,
+                            name: thisdata.name,
+                            keyword: thisdata.keyword,
+                            theName: thisdata.username || thisdata.ownerName,
+                            category: thisdata.category,
+                            ownerName: thisdata.username ? thisdata.username : thisdata.ownerName,
+                            ownerType: thisdata.ownerType,
+                            ownerMobile: thisdata.ownerMobile,
+                            status: thisdata.status,
+                            releaseDate: thisdata.releaseDate,
+                            releaseDateFormattedDate: thisdata.releaseDateFormattedDate,
+                            auditStatus: thisdata.auditStatus,
+                            boutique: thisdata.boutique,
+                            hot: thisdata.hot,
+                            techBrokerId:thisdata.techBrokerId,
+                            createTimeFormattedDate: thisdata.createTimeFormattedDate,
+                            remark:thisdata.remark
+                        });
+                    };
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
+                };
+                this.setState({
+                    dataSource: theArr,
+                    pagination: this.state.pagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            searchMore: true,
+            searchType: 0,
+            validityPeriodDate: [],
+            releaseDate: [],
+            releaseDateS: [],
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '编号',
+                    dataIndex: 'serialNumber',
+                    key: 'serialNumber',
+                }, {
+                    title: '名称',
+                    dataIndex: 'name',
+                    key: 'name',
+                }, {
+                    title: '关键字',
+                    dataIndex: 'keyword',
+                    key: 'keyword',
+                }, {
+                    title: '类型',
+                    dataIndex: 'category',
+                    key: 'category',
+                    render: text => { return getAchievementCategory(text); }
+                }, {
+                    title: '录入人',
+                    dataIndex: 'techBrokerId',
+                    key: 'techBrokerId',
+                },{
+                    title: '审核状态',
+                    dataIndex: 'auditStatus',
+                    key: 'auditStatus',
+                    render: text => { return getTechAuditStatus(text) }
+                }, 
+                {
+                    title: '是否精品',
+                    dataIndex: 'boutique',
+                    key: 'boutique',
+                    render: text => { return getboutique(text) }
+                },
+                 {
+                    title: '首页展示',
+                    dataIndex: 'hot',
+                    key: 'hot',
+                    render: text => { return gethot(text) }
+                },
+                {
+                    title: '发布时间',
+                    dataIndex: 'releaseDateFormattedDate',
+                    key: 'releaseDateFormattedDate',
+                },{
+                    title: '录入时间',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate',
+                },
+                
+            ],
+            dataSource: [],
+            searchTime: [,]
+        };
+    },
+    componentWillMount() {
+        let theArr = [];
+        achievementCategoryList.map(function (item) {
+            theArr.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        let auditArr = [];
+        techAuditStatusList.map(function (item) {
+            auditArr.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        this.state.achievementCategoryOption = theArr;
+        this.state.auditStatusOption = auditArr;
+        if (window.location.search) {
+            let theObj = getSearchUrl(window.location.search);
+            if (theObj.rid) {
+                theObj.id = theObj.rid;
+                if (theObj.rid != 'null') {
+                    this.tableRowClick(theObj);
+                };
+            };
+        };
+        this.loadData();
+    },
+    componentWillReceiveProps(nextProps) {
+        if (this.props['data-listApiUrl'] != nextProps['data-listApiUrl']) {
+            this.state.selectedRowKeys = [];
+            this.state.selectedRows = [];
+            this.state.serialNumber = undefined;
+            this.state.name = undefined;
+            this.state.keyword = undefined;
+            this.state.category = undefined;
+            this.state.ownerType = undefined;
+            this.state.releaseStatus = undefined;
+            this.state.auditStatus = undefined;
+            this.state.searchName = undefined;
+            this.state.searchType = 0;
+            this.state.releaseDate = [];
+            this.state.releaseDateS = [];
+            this.loadData(null, nextProps['data-listApiUrl']);
+        };
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        if(index!=undefined){
+        	this.setState({
+            	showDesc: true
+        	});
+        }
+    },
+    delectRow() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            };
+        };
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/achievement/delete",
+            data: {
+                ids: deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('删除成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData();
+        }.bind(this));
+    },
+    addClick() {
+        this.state.RowData = {};
+        this.setState({
+            showDesc: true
+        });
+    },
+    closeDesc(e, s) {
+        this.state.showDesc = e;
+        if (s) {
+            this.loadData();
+        };
+    },
+    search() {
+        this.loadData();
+    },
+    reset() {
+        this.state.serialNumber = undefined;
+        this.state.name = undefined;
+        this.state.keyword = undefined;
+        this.state.category = undefined;
+        this.state.ownerType = undefined;
+        this.state.releaseStatus = undefined;
+        this.state.auditStatus = undefined;
+        this.state.searchName = undefined;
+        this.state.releaseDate = [];
+        this.state.releaseDateS = [];
+        this.state.boutique = '';
+        this.state.hot='' ;
+        this.loadData();       
+    },
+    searchSwitch() {
+        this.setState({
+            searchMore: !this.state.searchMore
+        });
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows.slice(-1),
+                    selectedRowKeys: selectedRowKeys.slice(-1)
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        const { RangePicker } = DatePicker;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    {this.props['data-listApiUrl'].indexOf('org') == -1 ? <span>我的科技成果</span> : <span>组织科技成果管理</span>}
+                    <div className="patent-addNew clearfix">
+                        <Upload
+                            action={globalConfig.context + "/api/admin/achievement/uploadTemplate"}
+                            data={{ 'sign': 'achievement_template' }}
+                            beforeUpload={beforeUploadFile}
+                            showUploadList={false}
+                            onChange={(info) => {
+                                if (info.file.status !== 'uploading') {
+                                    
+                                }
+                                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;
+                                    };
+                                } else if (info.file.status === 'error') {
+                                    message.error(`${info.file.name} 文件上传失败。`);
+                                };
+                            }} >
+                            <Button>上传批量导入模板</Button>
+                        </Upload>
+                        <Button onClick={() => { window.open(globalConfig.context + '/api/admin/achievement/downloadTemplate?sign=achievement_template') }}>下载批量导入模板</Button>
+                        <Button type="primary" className="addButton" onClick={this.addClick}>发布成果<Icon type="plus" /></Button>
+                        <BatchImport closeDesc={this.closeDesc} />
+                    </div>
+                </div>
+                <div className="user-search">
+                    <Input placeholder="编号"
+                        value={this.state.serialNumber}
+                        onChange={(e) => { this.setState({ serialNumber: e.target.value }); }} />
+                    <Input placeholder="名称"
+                        value={this.state.name}
+                        onChange={(e) => { this.setState({ name: e.target.value }); }} />
+                    <Input placeholder="关键字"
+                        value={this.state.keyword}
+                        onChange={(e) => { this.setState({ keyword: e.target.value }); }} />
+                    <Input placeholder="所有人名称"
+                        value={this.state.searchName}
+                        onChange={(e) => { this.setState({ searchName: e.target.value }); }} />
+                    <Radio.Group value={this.state.searchType} onChange={(e) => {
+                        this.setState({ searchType: e.target.value })
+                    }}>
+                        <Radio value={0}>认证用户</Radio>
+                        <Radio value={1}>非认证用户</Radio>
+                    </Radio.Group>
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button>
+                    <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                        disabled={!hasSelected}
+                        onClick={this.delectRow}>删除<Icon type="minus" /></Button>
+                    <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>
+                    <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
+                    	<Radio.Group value={this.state.boutique} onChange={(e) => {
+		                    this.setState({ boutique: e.target.value })
+		                    }}>
+		                        <Radio value={1}>精品</Radio>
+		                        <Radio value={0}>非精品</Radio>
+		                </Radio.Group>
+		                <Radio.Group value={this.state.hot} onChange={(e) => {
+		                    this.setState({ hot: e.target.value })
+		                    }}>
+		                        <Radio value={1}>首页展示</Radio>
+		                        <Radio value={0}>首页不展示</Radio>
+		                </Radio.Group>
+                        <Select placeholder="选择类型" style={{ width: 160 }}
+                            value={this.state.category}
+                            onChange={(e) => { this.setState({ category: e }) }}>
+                            {this.state.achievementCategoryOption}
+                        </Select>
+                        <Select placeholder="选择审核状态"
+                            style={{ width: 160 }}
+                            value={this.state.auditStatus}
+                            onChange={(e) => { this.setState({ auditStatus: e }) }}>
+                            {this.state.auditStatusOption}
+                        </Select>
+                        <Select placeholder="选择是否发布" style={{ width: 120 }}
+                            value={this.state.releaseStatus}
+                            onChange={(e) => { this.setState({ releaseStatus: e }) }}>
+                            <Select.Option value="0" >未发布</Select.Option>
+                            <Select.Option value="1" >已发布</Select.Option>
+                        </Select>
+                        <Select placeholder="选择所有人类型" style={{ width: 120 }}
+                            value={this.state.ownerType}
+                            onChange={(e) => { this.setState({ ownerType: e }) }}>
+                            <Select.Option value="0" >个人</Select.Option>
+                            <Select.Option value="1" >组织</Select.Option>
+                        </Select>
+                        <div style={{marginTop:'10px'}}>
+                        <span>发布时间 :</span>
+                        <RangePicker
+                            value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
+                            this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
+                            onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
+                         <span style={{marginLeft:'5px'}}>录入时间 :</span>
+                        <RangePicker
+                            value={[this.state.releaseDateS[0] ? moment(this.state.releaseDateS[0]) : null,
+                            this.state.releaseDateS[1] ? moment(this.state.releaseDateS[1]) : null]}
+                            onChange={(data, dataString) => { this.setState({ releaseDateS: dataString }); }} />
+                    	</div>
+                    </div>
+                </div>
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}
+                            rowSelection={rowSelection}
+                            pagination={this.state.pagination}
+                            onRowClick={this.tableRowClick} />
+                    </Spin>
+                </div>
+                <TechAchievementDesc
+                    data={this.state.RowData}
+                    detailApiUrl={this.props['data-detailApiUrl']}
+                    achievementCategoryOption={this.state.achievementCategoryOption}
+                    showDesc={this.state.showDesc}
+                    closeDesc={this.closeDesc} />
+            </div >
+        );
+    }
+});
+
+export default AchievementList;

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

@@ -301,7 +301,7 @@ const AchievementList = React.createClass({
         return (
             <div className="user-content" >
                 <div className="content-title">
-                    {this.props['data-listApiUrl'].indexOf('org') == -1 ? <span>个人科技成果管理</span> : <span>组织科技成果管理</span>}
+                    {this.props['data-listApiUrl'].indexOf('org') == -1 ? <span>个人科技成果管理</span> : <span>科技成果管理</span>}
                     <div className="patent-addNew clearfix">
                         <Upload
                             action={globalConfig.context + "/api/admin/achievement/uploadTemplate"}
@@ -323,11 +323,11 @@ const AchievementList = React.createClass({
                                     message.error(`${info.file.name} 文件上传失败。`);
                                 };
                             }} >
-                            <Button>上传批量导入模板</Button>
+                            <Button style={{"display":"none"}}>上传批量导入模板</Button>
                         </Upload>
-                        <Button onClick={() => { window.open(globalConfig.context + '/api/admin/achievement/downloadTemplate?sign=achievement_template') }}>下载批量导入模板</Button>
-                        <Button type="primary" className="addButton" onClick={this.addClick}>发布成果<Icon type="plus" /></Button>
-                        <BatchImport closeDesc={this.closeDesc} />
+                        <Button onClick={() => { window.open(globalConfig.context + '/api/admin/achievement/downloadTemplate?sign=achievement_template') }} style={{"display":"none"}}>下载批量导入模板</Button>
+                        <Button type="primary" className="addButton" onClick={this.addClick} style={{"display":"none"}}>发布成果<Icon type="plus" /></Button>
+                        
                     </div>
                 </div>
                 <div className="user-search">

+ 10 - 10
js/component/manageCenter/achievement/techAchievementDesc.jsx

@@ -339,8 +339,7 @@ const AchievementDetailShow = Form.create()(React.createClass({
         });
     },
     componentWillMount() {
-    	
-        this.loadData(this.props.data.id, this.props.detailApiUrl);
+    	this.loadData(this.props.data.id, this.props.detailApiUrl);
     },
     componentWillReceiveProps(nextProps) {
         if (!this.props.visible && nextProps.visible) {
@@ -772,10 +771,10 @@ const AchievementDetailShow = Form.create()(React.createClass({
                         </FormItem>
                     </div> : <div></div>}
                     <FormItem wrapperCol={{ span: 12, offset: 4 }}>
-                        {theData.auditStatus == 2 ? <Button className="set-submit" type="primary" htmlType="submit">保存</Button> : <span></span>}
-                        {theData.auditStatus == 3 ? <Button className="set-submit" type="primary" onClick={() => { this.modifyBroker(); }}>保存</Button> : <span></span>}
-                        <Button className="set-submit" type="ghost" onClick={this.props.closeDesc}>取消</Button>
-                        {window.showAuditStatus ? <Button className="set-submit" loading={this.state.buttonLoading} type="primary" onClick={this.buildMatchList}>生成匹配列表</Button> : <span></span>}
+                        {theData.auditStatus == 2 ? <Button className="set-submit" type="primary" htmlType="submit">提交审核</Button> : <span></span>}
+                        {theData.auditStatus == 3 ? <Button className="set-submit" type="primary" onClick={() => { this.modifyBroker(); }} style={{"display":"none"}}>保存</Button> : <span></span>}
+                        {theData.auditStatus == 2 ?<Button className="set-submit" type="ghost" onClick={this.props.closeDesc}>取消</Button> : <span></span>}
+                        {window.showAuditStatus ? <Button className="set-submit" loading={this.state.buttonLoading} type="primary" onClick={this.buildMatchList} style={{"display":"none"}}>生成匹配列表</Button> : <span></span>}
                     </FormItem>
                     <Modal maskClosable={false} title="确认"
                         visible={this.state.formSubmitVisible}
@@ -820,7 +819,8 @@ const AchievementDetailForm = Form.create()(React.createClass({
             crossDomain: false,
             url: globalConfig.context + detailApiUrl,
             data: {
-                id: id
+                id: id,
+                ownerType:this.props.data.ownerType
             },
             success: function (data) {
                 let thisData = data.data;
@@ -1655,8 +1655,8 @@ const AchievementDetailForm = Form.create()(React.createClass({
                             : <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>
+                        {theData.auditStatus != 2 ? <Button className="set-submit" type="primary" htmlType="submit">保存草稿</Button>: <span></span>}
+                        <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>
@@ -1842,7 +1842,7 @@ const AchievementDetail = React.createClass({
                                 }} >
                                 <Tabs.TabPane tab="成果详情" key="1">
                                     {(() => {
-                                        if (this.props.data.id && this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4") {
+                                        if (this.props.data.id && this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4"&& this.props.data.auditStatus != "2") {
                                             return <AchievementDetailShow
                                                 data={this.props.data}
                                                 detailApiUrl={this.props.detailApiUrl}

+ 428 - 0
js/component/manageCenter/achievement/techAchievementQuery.jsx

@@ -0,0 +1,428 @@
+import React from 'react';
+import { Radio, Icon, Button, Input, Select, Spin, Table, Switch, message, DatePicker, Modal, Upload } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import './techAchievement.less';
+import TechAchievementDesc from './techAchievementQueryDesc.jsx';
+import { achievementCategoryList, techAuditStatusList } from '../../dataDic.js';
+import { beforeUploadFile, companySearch, getAchievementCategory, getSearchUrl, getTechAuditStatus ,getboutique,gethot} from '../../tools.js';
+import BatchImport from './batchImport';
+
+const AchievementList = React.createClass({
+    loadData(pageNo, apiUrl) {
+        this.state.data = [];
+      if(this.state.serialNumber&&isNaN(this.state.serialNumber)){
+     	message.warning('请输入正确的编号格式');
+      	return false;
+      }
+         this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + (apiUrl || this.props['data-listApiUrl']),
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                serialNumber: this.state.serialNumber, //编号
+                name: this.state.name, //名称
+                ownerName: this.state.searchType == 1 ? this.state.searchName : undefined,
+                username: this.state.searchType == 0 && this.props['data-listApiUrl'].indexOf('org') == -1 ? this.state.searchName : undefined,
+                unitName: this.state.searchType == 0 && this.props['data-listApiUrl'].indexOf('user') == -1 ? this.state.searchName : undefined,
+                keyword: this.state.keyword, // 关键词
+                category: this.state.category, //类型(0--专利, 2--软著, 3--项目, 4--版权, 5--工业设计, 6--配方, 7--非标)
+                releaseDateStartDate: this.state.releaseDate[0],
+                releaseDateEndDate: this.state.releaseDate[1],
+                releaseStatus: this.state.releaseStatus ? Number(this.state.releaseStatus) : undefined, //是否发布(0--未发布,1--已发布)
+                auditStatus: this.state.auditStatus,
+                boutique:this.state.boutique,
+                hot:this.state.hot,
+                createDateStartDate: this.state.releaseDateS[0],
+                createDateEndDate: this.state.releaseDateS[1],
+                ownerType:this.state.ownerType,
+            },
+            success: function (data) {
+                let theArr = [];
+                if (!data.data || !data.data.list) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    for (let i = 0; i < data.data.list.length; i++) {
+                        let thisdata = data.data.list[i];
+                        theArr.push({
+                            key: i,
+                            id: thisdata.id,
+                            serialNumber: thisdata.serialNumber,
+                            dataCategory: thisdata.dataCategory,
+                            name: thisdata.name,
+                            keyword: thisdata.keyword,
+                            theName: thisdata.username || thisdata.ownerName,
+                            category: thisdata.category,
+                            ownerName: thisdata.username ? thisdata.username : thisdata.ownerName,
+                            ownerType: thisdata.ownerType,
+                            ownerMobile: thisdata.ownerMobile,
+                            status: thisdata.status,
+                            releaseDate: thisdata.releaseDate,
+                            releaseDateFormattedDate: thisdata.releaseDateFormattedDate,
+                            auditStatus: thisdata.auditStatus,
+                            boutique: thisdata.boutique,
+                            hot: thisdata.hot,
+                            techBrokerId:thisdata.techBrokerId,
+                            createTimeFormattedDate: thisdata.createTimeFormattedDate,
+                            remark:thisdata.remark
+                        });
+                    };
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
+                };
+                this.setState({
+                    dataSource: theArr,
+                    pagination: this.state.pagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            searchMore: true,
+            searchType: 0,
+            validityPeriodDate: [],
+            releaseDate: [],
+            releaseDateS: [],
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '编号',
+                    dataIndex: 'serialNumber',
+                    key: 'serialNumber',
+                }, {
+                    title: '名称',
+                    dataIndex: 'name',
+                    key: 'name',
+                }, {
+                    title: '关键字',
+                    dataIndex: 'keyword',
+                    key: 'keyword',
+                }, {
+                    title: '类型',
+                    dataIndex: 'category',
+                    key: 'category',
+                    render: text => { return getAchievementCategory(text); }
+                }, {
+                    title: '录入人',
+                    dataIndex: 'techBrokerId',
+                    key: 'techBrokerId',
+                },{
+                    title: '审核状态',
+                    dataIndex: 'auditStatus',
+                    key: 'auditStatus',
+                    render: text => { return getTechAuditStatus(text) }
+                }, 
+                {
+                    title: '是否精品',
+                    dataIndex: 'boutique',
+                    key: 'boutique',
+                    render: text => { return getboutique(text) }
+                },
+                 {
+                    title: '首页展示',
+                    dataIndex: 'hot',
+                    key: 'hot',
+                    render: text => { return gethot(text) }
+                },
+                {
+                    title: '发布时间',
+                    dataIndex: 'releaseDateFormattedDate',
+                    key: 'releaseDateFormattedDate',
+                },{
+                    title: '录入时间',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate',
+                },
+                
+            ],
+            dataSource: [],
+            searchTime: [,]
+        };
+    },
+    componentWillMount() {
+        let theArr = [];
+        achievementCategoryList.map(function (item) {
+            theArr.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        let auditArr = [];
+        techAuditStatusList.map(function (item) {
+            auditArr.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        this.state.achievementCategoryOption = theArr;
+        this.state.auditStatusOption = auditArr;
+        if (window.location.search) {
+            let theObj = getSearchUrl(window.location.search);
+            if (theObj.rid) {
+                theObj.id = theObj.rid;
+                if (theObj.rid != 'null') {
+                    this.tableRowClick(theObj);
+                };
+            };
+        };
+        this.loadData();
+    },
+    componentWillReceiveProps(nextProps) {
+        if (this.props['data-listApiUrl'] != nextProps['data-listApiUrl']) {
+            this.state.selectedRowKeys = [];
+            this.state.selectedRows = [];
+            this.state.serialNumber = undefined;
+            this.state.name = undefined;
+            this.state.keyword = undefined;
+            this.state.category = undefined;
+            this.state.ownerType = undefined;
+            this.state.releaseStatus = undefined;
+            this.state.auditStatus = undefined;
+            this.state.searchName = undefined;
+            this.state.searchType = 0;
+            this.state.releaseDate = [];
+            this.state.releaseDateS = [];
+            this.loadData(null, nextProps['data-listApiUrl']);
+        };
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        if(index!=undefined){
+        	this.setState({
+            	showDesc: true
+        	});
+        }
+    },
+    delectRow() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            };
+        };
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/achievement/delete",
+            data: {
+                ids: deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('删除成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData();
+        }.bind(this));
+    },
+    addClick() {
+        this.state.RowData = {};
+        this.setState({
+            showDesc: true
+        });
+    },
+    closeDesc(e, s) {
+        this.state.showDesc = e;
+        if (s) {
+            this.loadData();
+        };
+    },
+    search() {
+        this.loadData();
+    },
+    reset() {
+        this.state.serialNumber = undefined;
+        this.state.name = undefined;
+        this.state.keyword = undefined;
+        this.state.category = undefined;
+        this.state.ownerType = undefined;
+        this.state.releaseStatus = undefined;
+        this.state.auditStatus = undefined;
+        this.state.searchName = undefined;
+        this.state.releaseDate = [];
+        this.state.releaseDateS = [];
+        this.state.boutique = '';
+        this.state.hot='' ;
+        this.loadData();       
+    },
+    searchSwitch() {
+        this.setState({
+            searchMore: !this.state.searchMore
+        });
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows.slice(-1),
+                    selectedRowKeys: selectedRowKeys.slice(-1)
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        const { RangePicker } = DatePicker;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    {this.props['data-listApiUrl'].indexOf('org') == -1 ? <span>个人科技成果管理</span> : <span>科技成果查询</span>}
+                    <div className="patent-addNew clearfix">
+                        <Upload
+                            action={globalConfig.context + "/api/admin/achievement/uploadTemplate"}
+                            data={{ 'sign': 'achievement_template' }}
+                            beforeUpload={beforeUploadFile}
+                            showUploadList={false}
+                            onChange={(info) => {
+                                if (info.file.status !== 'uploading') {
+                                    
+                                }
+                                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;
+                                    };
+                                } else if (info.file.status === 'error') {
+                                    message.error(`${info.file.name} 文件上传失败。`);
+                                };
+                            }} >
+                            <Button style={{"display":"none"}}>上传批量导入模板</Button>
+                        </Upload>
+                        <Button onClick={() => { window.open(globalConfig.context + '/api/admin/achievement/downloadTemplate?sign=achievement_template') }} style={{"display":"none"}}>下载批量导入模板</Button>
+                        <Button type="primary" className="addButton" onClick={this.addClick} style={{"display":"none"}}>发布成果<Icon type="plus" /></Button>
+                        
+                    </div>
+                </div>
+                <div className="user-search">
+                    <Input placeholder="编号"
+                        value={this.state.serialNumber}
+                        onChange={(e) => { this.setState({ serialNumber: e.target.value }); }} />
+                    <Input placeholder="名称"
+                        value={this.state.name}
+                        onChange={(e) => { this.setState({ name: e.target.value }); }} />
+                    <Input placeholder="关键字"
+                        value={this.state.keyword}
+                        onChange={(e) => { this.setState({ keyword: e.target.value }); }} />
+                    <Input placeholder="所有人名称"
+                        value={this.state.searchName}
+                        onChange={(e) => { this.setState({ searchName: e.target.value }); }} />
+                    <Radio.Group value={this.state.searchType} onChange={(e) => {
+                        this.setState({ searchType: e.target.value })
+                    }}>
+                        <Radio value={0}>认证用户</Radio>
+                        <Radio value={1}>非认证用户</Radio>
+                    </Radio.Group>
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button>
+                    <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                        disabled={!hasSelected}
+                        onClick={this.delectRow}>删除<Icon type="minus" /></Button>
+                    <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>
+                    <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
+                    	<Radio.Group value={this.state.boutique} onChange={(e) => {
+		                    this.setState({ boutique: e.target.value })
+		                    }}>
+		                        <Radio value={1}>精品</Radio>
+		                        <Radio value={0}>非精品</Radio>
+		                </Radio.Group>
+		                <Radio.Group value={this.state.hot} onChange={(e) => {
+		                    this.setState({ hot: e.target.value })
+		                    }}>
+		                        <Radio value={1}>首页展示</Radio>
+		                        <Radio value={0}>首页不展示</Radio>
+		                </Radio.Group>
+                        <Select placeholder="选择类型" style={{ width: 160 }}
+                            value={this.state.category}
+                            onChange={(e) => { this.setState({ category: e }) }}>
+                            {this.state.achievementCategoryOption}
+                        </Select>
+                        <Select placeholder="选择审核状态"
+                            style={{ width: 160 }}
+                            value={this.state.auditStatus}
+                            onChange={(e) => { this.setState({ auditStatus: e }) }}>
+                            {this.state.auditStatusOption}
+                        </Select>
+                        <Select placeholder="选择是否发布" style={{ width: 120 }}
+                            value={this.state.releaseStatus}
+                            onChange={(e) => { this.setState({ releaseStatus: e }) }}>
+                            <Select.Option value="0" >未发布</Select.Option>
+                            <Select.Option value="1" >已发布</Select.Option>
+                        </Select>
+                        <Select placeholder="选择所有人类型" style={{ width: 120 }}
+                            value={this.state.ownerType}
+                            onChange={(e) => { this.setState({ ownerType: e }) }}>
+                            <Select.Option value="0" >个人</Select.Option>
+                            <Select.Option value="1" >组织</Select.Option>
+                        </Select>
+                        <div style={{marginTop:'10px'}}>
+                        <span>发布时间 :</span>
+                        <RangePicker
+                            value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
+                            this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
+                            onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
+                         <span style={{marginLeft:'5px'}}>录入时间 :</span>
+                        <RangePicker
+                            value={[this.state.releaseDateS[0] ? moment(this.state.releaseDateS[0]) : null,
+                            this.state.releaseDateS[1] ? moment(this.state.releaseDateS[1]) : null]}
+                            onChange={(data, dataString) => { this.setState({ releaseDateS: dataString }); }} />
+                    	</div>
+                    </div>
+                </div>
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}
+                            rowSelection={rowSelection}
+                            pagination={this.state.pagination}
+                            onRowClick={this.tableRowClick} />
+                    </Spin>
+                </div>
+                <TechAchievementDesc
+                    data={this.state.RowData}
+                    detailApiUrl={this.props['data-detailApiUrl']}
+                    achievementCategoryOption={this.state.achievementCategoryOption}
+                    showDesc={this.state.showDesc}
+                    closeDesc={this.closeDesc} />
+            </div >
+        );
+    }
+});
+
+export default AchievementList;

File diff suppressed because it is too large
+ 1875 - 0
js/component/manageCenter/achievement/techAchievementQueryDesc.jsx


+ 20 - 0
js/component/manageCenter/demand/content.jsx

@@ -36,6 +36,26 @@ class Content extends Component {
                     const TechDemand = require('./techDemand').default;
                     this.setState({
                         component: TechDemand,
+                        listApiUrl: '/api/admin/demand/manageList',
+                        detailApiUrl: '/api/admin/demand/orgDemandDetail'
+                    });
+                });
+                break;
+            case 'myTechDemand':
+                require.ensure([], () => {
+                    const MyTechDemand = require('./myTechDemand').default;
+                    this.setState({
+                        component: MyTechDemand,
+                        listApiUrl: '/api/admin/demand/myList',
+                        detailApiUrl: '/api/admin/demand/orgDemandDetail'
+                    });
+                });
+                break;
+             case 'techDemandQuery':
+                require.ensure([], () => {
+                    const TechDemandQuery = require('./techDemandQuery').default;
+                    this.setState({
+                        component: TechDemandQuery,
                         listApiUrl: '/api/admin/demand/orgList',
                         detailApiUrl: '/api/admin/demand/orgDemandDetail'
                     });

+ 587 - 0
js/component/manageCenter/demand/myTechDemand.jsx

@@ -0,0 +1,587 @@
+import React from 'react';
+import { Radio, Icon, Button, Input, Select, Spin, Table, Switch, message, DatePicker, Modal, Upload } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import './techDemand.less';
+import TechDemandDesc from './techDemandDesc.jsx';
+import { demandTypeList } from '../../dataDic.js';
+import { companySearch, getDemandType, getSearchUrl, beforeUploadFile ,getboutique,gethot} from '../../tools.js';
+import BatchImport from './batchImport';
+
+const DemandList = React.createClass({
+    loadData(pageNo, apiUrl) {
+        this.state.data = [];
+        if(this.state.serialNumber&&isNaN(this.state.serialNumber)){
+        	message.warning('请输入正确的编号格式');
+        	return false;
+        }
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + (apiUrl || this.props['data-listApiUrl']),
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                serialNumber: this.state.serialNumber,
+                name: this.state.name,
+                keyword: this.state.keyword,
+                infoSources: this.state.infoSources ? Number(this.state.infoSources) : undefined,
+                demandType: this.state.demandType ? Number(this.state.demandType) : undefined,
+                //username: this.state.username,
+                status: this.state.status ? Number(this.state.status) : undefined,
+                releaseStatus: this.state.releaseStatus ? Number(this.state.releaseStatus) : undefined,
+                validityPeriodStartDate: this.state.validityPeriodDate[0],
+                validityPeriodEndDate: this.state.validityPeriodDate[1],
+                releaseDateStartDate: this.state.releaseDate[0],
+                releaseDateEndDate: this.state.releaseDate[1],
+                createDateStartDate: this.state.releaseDateS[0],
+                createDateEndDate: this.state.releaseDateS[1],
+                auditStatus: this.state.auditStatus,
+                boutique:this.state.boutique,
+                hot:this.state.hot,
+                dataCategory:this.state.dataCategory,
+                employerName: this.state.searchType == 1 ? this.state.searchName : undefined,
+                username: this.state.searchType == 0 && this.props['data-listApiUrl'].indexOf('org') == -1 ? this.state.searchName : undefined,
+                unitName: this.state.searchType == 0 && this.props['data-listApiUrl'].indexOf('user') == -1 ? this.state.searchName : undefined,
+            },
+            success: function (data) {
+                let theArr = [];
+                if (!data.data || !data.data.list) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    for (let i = 0; i < data.data.list.length; i++) {
+                        let thisdata = data.data.list[i];
+                        theArr.push({
+                            key: i,
+                            id: thisdata.id,
+                            serialNumber: thisdata.serialNumber,
+                            dataCategory: thisdata.dataCategory,
+                            name: thisdata.name,
+                            keyword: thisdata.keyword,
+                            infoSources: thisdata.infoSources,
+                            username: thisdata.username,
+                            theName: thisdata.username || thisdata.employerName,
+                            demandType: thisdata.demandType,
+                            validityPeriod: thisdata.validityPeriod,
+                            employerName: thisdata.employerName,
+                            employerId: thisdata.employerId,
+                            province: thisdata.province,
+                            status: thisdata.status,
+                            releaseStatus: thisdata.releaseStatus,
+                            releaseDate: thisdata.releaseDate,
+                            principalId: thisdata.principalId,
+                            validityPeriodFormattedDate: thisdata.validityPeriodFormattedDate,
+                            releaseDateFormattedDate: thisdata.releaseDateFormattedDate,
+                            auditStatus: thisdata.auditStatus,
+                            boutique: thisdata.boutique,
+                            urgentMoney:thisdata.urgentMoney,
+                            urgentDays:thisdata.urgentDays,
+                            hot: thisdata.hot,
+                            techBrokerId:thisdata.techBrokerId,
+                            createTimeFormattedDate: thisdata.createTimeFormattedDate,
+                        });
+                    };
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
+                };
+                this.setState({
+                    dataSource: theArr,
+                    pagination: this.state.pagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            searchMore: true,
+            searchType: 0,               
+            validityPeriodDate: [],
+            releaseDate: [],
+            releaseDateS: [],
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '编号',
+                    dataIndex: 'serialNumber',
+                    key: 'serialNumber',
+                }, {
+                    title: '需求名称',
+                    dataIndex: 'name',
+                    key: 'name',
+                },
+                 {
+                    title: '录入人',
+                    dataIndex: 'techBrokerId',
+                    key: 'techBrokerId',
+                },
+              	{
+                    title: '是否精品',
+                    dataIndex: 'boutique',
+                    key: 'boutique',
+                    render: text => { return getboutique(text) }
+                },
+                {
+                    title: '首页展示',
+                    dataIndex: 'hot',
+                    key: 'hot',
+                    render: text => { return gethot(text) }
+                },
+                {
+                    title: '关键字',
+                    dataIndex: 'keyword',
+                    key: 'keyword',
+                }, {
+                    title: '需求类型',
+                    dataIndex: 'demandType',
+                    key: 'demandType',
+                    render: text => { return getDemandType(text); }
+                }, {
+                    title: '信息来源',
+                    dataIndex: 'infoSources',
+                    key: 'infoSources',
+                    render: text => {
+                        switch (text) {
+                            case "0":
+                                return <span>平台采集</span>;
+                            case "1":
+                                return <span>客户发布</span>;
+                            case "2":
+                                return <span>批量导入</span>
+                            case "3":
+                                return <span>三方对接</span>
+                        }
+                    }
+                }, {
+                    title: '加急天数',
+                    dataIndex: 'urgentDays',
+                    key: 'urgentDays',
+                }, {
+                    title: '加急报酬(万)',
+                    dataIndex: 'urgentMoney',
+                    key: 'urgentMoney',
+                }, {
+                    title: '审核状态',
+                    dataIndex: 'auditStatus',
+                    key: 'auditStatus',
+                    render: text => {
+                        switch (text) {
+                            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>;
+                        }
+                    }
+                }, {
+                    title: '需求状态',
+                    dataIndex: 'status',
+                    key: 'status',
+                    render: text => {
+                        switch (text) {
+                            case "0":
+                                return <span>进行中</span>;
+                            case "1":
+                                return <span>未解决</span>;
+                            case "2":
+                                return <span>已解决</span>;
+                        }
+                    }
+                }, {
+                    title: '有效期限',
+                    dataIndex: 'validityPeriodFormattedDate',
+                    key: 'validityPeriodFormattedDate',
+                }, {
+                    title: '发布时间',
+                    dataIndex: 'releaseDateFormattedDate',
+                    key: 'releaseDateFormattedDate',
+                },{
+                    title: '录入时间',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate',
+                }
+            ],
+            dataSource: [],
+            searchTime: []
+        };
+    },
+    getCompanyList() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/demand/unitNames",
+            success: function (data) {
+                let theArr = [];
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    data.data.map(function (item) {
+                        theArr.push(
+                            <Select.Option value={item.uid} key={item.uid}>{item.unitName}</Select.Option>
+                        )
+                    });
+                };
+                this.setState({
+                    companyOption: theArr
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getUserList() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/demand/userNames",
+            success: function (data) {
+                let theArr = [];
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    data.data.map(function (item) {
+                        theArr.push(
+                            <Select.Option value={item.uid} key={item.uid}>{item.username}</Select.Option>
+                        )
+                    });
+                };
+                this.setState({
+                    userOption: theArr
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    componentWillMount() {
+        let theArr = [];
+        demandTypeList.map(function (item) {
+            theArr.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        this.state.demandTypeOption = theArr;
+        if (window.location.search) {
+            let theObj = getSearchUrl(window.location.search);
+            if (theObj.rid) {
+                theObj.id = theObj.rid;
+                theObj.employerId = theObj.uid;
+                if (theObj.rid != 'null') {
+                    this.tableRowClick(theObj);
+                };
+            };
+        };
+        this.loadData();
+        this.getCompanyList();
+        this.getUserList();
+    },
+    componentWillReceiveProps(nextProps) {
+        if (this.props['data-listApiUrl'] != nextProps['data-listApiUrl']) {
+            this.state.selectedRowKeys = [];
+            this.state.selectedRows = [];
+            this.state.serialNumber = undefined;
+            this.state.name = undefined;
+            this.state.keyword = undefined;
+            this.state.infoSources = undefined;
+            this.state.demandType = undefined;
+            this.state.searchName = undefined;
+            this.state.searchType = 0;            
+            this.state.status = undefined;
+            this.state.releaseStatus = undefined;
+            this.state.auditStatus = undefined;
+            this.state.validityPeriodDate = [];
+            this.state.releaseDate = [];
+            this.state.releaseDateS = [];
+            this.loadData(null, nextProps['data-listApiUrl']);
+        };
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        if(index!=undefined){
+        	this.setState({
+           	 showDesc: true
+        	});
+        }
+    },
+    delectRow() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            };
+        };
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/demand/delete",
+            data: {
+                ids: deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('删除成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData();
+        }.bind(this));
+    },
+    addClick() {
+        this.state.RowData = {};
+        this.setState({
+            showDesc: true
+        });
+    },
+    closeDesc(e, s) {
+        this.state.showDesc = e;
+        if (s) {
+            this.loadData();
+        };
+    },
+    search() {
+        this.loadData();
+    },
+    reset() {
+        this.state.serialNumber = undefined;
+        this.state.name = undefined;
+        this.state.keyword = undefined;
+        this.state.infoSources = undefined;
+        this.state.demandType = undefined;
+        this.state.searchName = undefined;
+        this.state.searchType = 0;
+        this.state.boutique = '';
+        this.state.hot='' ;
+        this.state.status = undefined;
+        this.state.releaseStatus = undefined;
+        this.state.auditStatus = undefined;
+        this.state.dataCategory = undefined;
+        this.state.validityPeriodDate = [];
+        this.state.releaseDate = [];
+        this.state.releaseDateS = [];
+        this.loadData();
+    },
+    searchSwitch() {
+        this.setState({
+            searchMore: !this.state.searchMore
+        });
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows.slice(-1),
+                    selectedRowKeys: selectedRowKeys.slice(-1)
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        const { RangePicker } = DatePicker;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    <span>我的科技需求</span>
+                    <div className="patent-addNew clearfix">
+                        <Upload
+                            action={globalConfig.context + "/api/admin/demand/uploadTemplate"}
+                            data={{ 'sign': 'demand_template' }}
+                            beforeUpload={beforeUploadFile}
+                            showUploadList={false}
+                            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;
+                                    };
+                                } else if (info.file.status === 'error') {
+                                    message.error(`${info.file.name} 文件上传失败。`);
+                                };
+                            }} >
+                            <Button>上传批量导入模板</Button>
+                        </Upload>
+                        <Button onClick={() => { window.open(globalConfig.context + '/api/admin/demand/downloadTemplate?sign=demand_template') }}>下载批量导入模板</Button>
+                        <Button type="primary" className="addButton" onClick={this.addClick}>新增需求<Icon type="plus" /></Button>
+                        <BatchImport closeDesc={this.closeDesc} />
+                    </div>
+                </div>
+                <div className="user-search">
+                    <Input placeholder="需求编号"
+                        value={this.state.serialNumber}
+                        onChange={(e) => { this.setState({ serialNumber: e.target.value }); }} />
+                    <Input placeholder="需求名称"
+                        value={this.state.name}
+                        onChange={(e) => { this.setState({ name: e.target.value }); }} />
+                    <Input placeholder="关键字"
+                        value={this.state.keyword}
+                        onChange={(e) => { this.setState({ keyword: e.target.value }); }} />
+                    <Input placeholder="雇主名称"
+                        value={this.state.searchName}
+                        onChange={(e) => { this.setState({ searchName: e.target.value }); }} />
+                    <Radio.Group value={this.state.searchType} onChange={(e) => {
+                        this.setState({ searchType: e.target.value })
+                    }}>
+                        <Radio value={0}>认证用户</Radio>
+                        <Radio value={1}>非认证用户</Radio>
+                    </Radio.Group>                   
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button>
+                    <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                        disabled={!hasSelected}
+                        onClick={this.delectRow}>删除<Icon type="minus" /></Button>
+                    <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>
+                    <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
+                    	<Radio.Group value={this.state.boutique} onChange={(e) => {
+		                    this.setState({ boutique: e.target.value })
+		                    }}>
+		                        <Radio value={1}>精品</Radio>
+		                        <Radio value={0}>非精品</Radio>
+		                </Radio.Group>
+		                <Radio.Group value={this.state.hot} onChange={(e) => {
+		                    this.setState({ hot: e.target.value })
+		                    }}>
+		                        <Radio value={1}>首页展示</Radio>
+		                        <Radio value={0}>首页不展示</Radio>
+		                </Radio.Group>
+                        <Select placeholder="选择信息来源" style={{ width: 120 }}
+                            value={this.state.infoSources}
+                            onChange={(e) => { this.setState({ infoSources: e }) }}>
+                            <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>
+                        <Select placeholder="选择需求类型"
+                            style={{ width: 120 }}
+                            value={this.state.demandType}
+                            onChange={(e) => { this.setState({ demandType: e }) }}>
+                            {this.state.demandTypeOption}
+                        </Select>
+                        <Select placeholder="选择需求状态" style={{ width: 120 }}
+                            value={this.state.status}
+                            onChange={(e) => { this.setState({ status: e }) }}>
+                            <Select.Option value="0" >进行中</Select.Option>
+                            <Select.Option value="1" >未解决</Select.Option>
+                            <Select.Option value="2" >已解决</Select.Option>
+                        </Select>
+                        <Select placeholder="选择审核状态" style={{ width: 160 }}
+                            value={this.state.auditStatus}
+                            onChange={(e) => { this.setState({ auditStatus: e }) }}>
+                            <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>
+                        <Select placeholder="选择是否发布" style={{ width: 120 }}
+                            value={this.state.releaseStatus}
+                            onChange={(e) => { this.setState({ releaseStatus: e }) }}>
+                            <Select.Option value="0" >未发布</Select.Option>
+                            <Select.Option value="1" >已发布</Select.Option>
+                        </Select>
+                        <Select placeholder="选择需求类别" style={{ width: 120 }}
+                            value={this.state.dataCategory}
+                            onChange={(e) => { this.setState({ dataCategory: e }) }}>
+                            <Select.Option value="0" >个人</Select.Option>
+                            <Select.Option value="1" >组织</Select.Option>
+                        </Select>
+                        <div style={{ marginTop: '10px' }}>
+	                        <span style={{ marginLeft: '10px' }}>有效期限 : </span>
+	                        <RangePicker
+	                            value={[this.state.validityPeriodDate[0] ? moment(this.state.validityPeriodDate[0]) : null,
+	                            this.state.validityPeriodDate[1] ? moment(this.state.validityPeriodDate[1]) : null]}
+	                            onChange={(data, dataString) => { this.setState({ validityPeriodDate: dataString }); }} />
+	                        <span style={{ marginLeft: '10px' }}>发布时间 : </span>
+	                        <RangePicker
+	                            value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
+	                            this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
+	                            onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
+	                        <span style={{ marginLeft: '10px' }}>录入时间 : </span>
+	                        <RangePicker
+	                            value={[this.state.releaseDateS[0] ? moment(this.state.releaseDateS[0]) : null,
+	                            this.state.releaseDateS[1] ? moment(this.state.releaseDateS[1]) : null]}
+	                            onChange={(data, dataString) => { this.setState({ releaseDateS: dataString }); }} />
+                        </div>
+                    </div>
+                </div>
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}
+                            rowSelection={rowSelection}
+                            pagination={this.state.pagination}
+                            onRowClick={this.tableRowClick} />
+                    </Spin>
+                </div>
+                <TechDemandDesc
+                    data={this.state.RowData}
+                    detailApiUrl={this.props['data-detailApiUrl']}
+                    companyOption={this.state.companyOption}
+                    userOption={this.state.userOption}
+                    demandTypeOption={this.state.demandTypeOption}
+                    showDesc={this.state.showDesc}
+                    closeDesc={this.closeDesc} />
+            </div >
+        );
+    }
+});
+
+export default DemandList;

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

@@ -456,11 +456,11 @@ const DemandList = React.createClass({
                                     message.error(`${info.file.name} 文件上传失败。`);
                                 };
                             }} >
-                            <Button>上传批量导入模板</Button>
+                            <Button style={{"display":"none"}}>上传批量导入模板</Button>
                         </Upload>
-                        <Button onClick={() => { window.open(globalConfig.context + '/api/admin/demand/downloadTemplate?sign=demand_template') }}>下载批量导入模板</Button>
-                        <Button type="primary" className="addButton" onClick={this.addClick}>新增需求<Icon type="plus" /></Button>
-                        <BatchImport closeDesc={this.closeDesc} />
+                        <Button onClick={() => { window.open(globalConfig.context + '/api/admin/demand/downloadTemplate?sign=demand_template') }} style={{"display":"none"}}>下载批量导入模板</Button>
+                        <Button type="primary" className="addButton" onClick={this.addClick} style={{"display":"none"}}>新增需求<Icon type="plus" /></Button>
+                       
                     </div>
                 </div>
                 <div className="user-search">

+ 12 - 10
js/component/manageCenter/demand/techDemandDesc.jsx

@@ -155,7 +155,8 @@ const DemandDetailShow = Form.create()(React.createClass({
             crossDomain: false,
             url: globalConfig.context + detailApiUrl,
             data: {
-                id: id
+                id: id,
+                dataCategory:this.props.data.dataCategory
             },
             success: function (data) {
             	
@@ -707,7 +708,7 @@ const DemandDetailShow = Form.create()(React.createClass({
                             {getFieldDecorator('modifyTechBrokerId', {
                                 initialValue: theData.techBrokerId
                             })(
-                                <Select style={{ width: 260 }}
+                                <Select style={{ width: 260 ,"display":"none"}}
                                     placeholder="请选择要指派的新经纪人"
                                     notFoundContent="未获取到经纪人列表"
                                     showSearch
@@ -718,10 +719,10 @@ const DemandDetailShow = Form.create()(React.createClass({
                         </FormItem>
                     </div> : <div></div>}
                     <FormItem wrapperCol={{ span: 12, offset: 3 }}>
-                        {theData.auditStatus == 2 ? <Button className="set-submit" type="primary" htmlType="submit">保存</Button> : <span></span>}
-                        {theData.auditStatus == 3 ? <Button className="set-submit" type="primary" onClick={() => { this.modifyBroker(); }}>保存</Button> : <span></span>}
-                        <Button className="set-submit" type="ghost" onClick={this.props.closeDesc}>取消</Button>
-                        {window.showAuditStatus ? <Button className="set-submit" loading={this.state.buttonLoading} type="primary" onClick={this.buildMatchList}>生成匹配列表</Button> : <span></span>}
+                        {theData.auditStatus == 2 ? <Button className="set-submit" type="primary" htmlType="submit">提交审核</Button> : <span></span>}
+                        {theData.auditStatus == 3 ? <Button className="set-submit" type="primary" onClick={() => { this.modifyBroker(); }} style={{"display":"none"}}>保存</Button> : <span></span>}
+                        {theData.auditStatus == 2 ? <Button className="set-submit" type="ghost" onClick={this.props.closeDesc}>取消</Button>: <span></span>}
+                        {window.showAuditStatus ? <Button className="set-submit" loading={this.state.buttonLoading} type="primary" onClick={this.buildMatchList} style={{"display":"none"}}>生成匹配列表</Button> : <span></span>}
                     </FormItem>
                     <Modal maskClosable={false} title="确认"
                         visible={this.state.formSubmitVisible}
@@ -795,7 +796,8 @@ const DemandDetailForm = Form.create()(React.createClass({
             crossDomain: false,
             url: globalConfig.context + detailApiUrl,
             data: {
-                id: id
+                id: id,
+                dataCategory:this.props.data.dataCategory
             },
             success: function (data) {
                 let thisData = data.data;
@@ -1441,8 +1443,8 @@ const DemandDetailForm = Form.create()(React.createClass({
                         </FormItem>
                     </div>
                     <FormItem wrapperCol={{ span: 12, offset: 3 }}>
-                        <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
-                        <Button className="set-submit" type="ghost" onClick={(e) => { this.state.auditStatus = 1; }} htmlType="submit">发布</Button>
+                        {(theData.auditStatus != 2)? <Button className="set-submit" type="primary" htmlType="submit">保存草稿</Button>: <span></span>}
+                        <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>
@@ -1621,7 +1623,7 @@ const DemandDetail = React.createClass({
                                 }} >
                                 <Tabs.TabPane tab="需求详情" key="1">
                                     {(() => {
-                                        if (this.props.data.id && this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4") {
+                                        if (this.props.data.id && this.props.data.auditStatus != "0" && this.props.data.auditStatus != "4"&& this.props.data.auditStatus != "2") {
                                             return <DemandDetailShow
                                                 data={this.props.data}
                                                 detailApiUrl={this.props.detailApiUrl}

+ 587 - 0
js/component/manageCenter/demand/techDemandQuery.jsx

@@ -0,0 +1,587 @@
+import React from 'react';
+import { Radio, Icon, Button, Input, Select, Spin, Table, Switch, message, DatePicker, Modal, Upload } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import './techDemand.less';
+import TechDemandDesc from './techDemandQueryDesc.jsx';
+import { demandTypeList } from '../../dataDic.js';
+import { companySearch, getDemandType, getSearchUrl, beforeUploadFile ,getboutique,gethot} from '../../tools.js';
+import BatchImport from './batchImport';
+
+const DemandList = React.createClass({
+    loadData(pageNo, apiUrl) {
+        this.state.data = [];
+        if(this.state.serialNumber&&isNaN(this.state.serialNumber)){
+        	message.warning('请输入正确的编号格式');
+        	return false;
+        }
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + (apiUrl || this.props['data-listApiUrl']),
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                serialNumber: this.state.serialNumber,
+                name: this.state.name,
+                keyword: this.state.keyword,
+                infoSources: this.state.infoSources ? Number(this.state.infoSources) : undefined,
+                demandType: this.state.demandType ? Number(this.state.demandType) : undefined,
+                //username: this.state.username,
+                status: this.state.status ? Number(this.state.status) : undefined,
+                releaseStatus: this.state.releaseStatus ? Number(this.state.releaseStatus) : undefined,
+                validityPeriodStartDate: this.state.validityPeriodDate[0],
+                validityPeriodEndDate: this.state.validityPeriodDate[1],
+                releaseDateStartDate: this.state.releaseDate[0],
+                releaseDateEndDate: this.state.releaseDate[1],
+                createDateStartDate: this.state.releaseDateS[0],
+                createDateEndDate: this.state.releaseDateS[1],
+                auditStatus: this.state.auditStatus,
+                boutique:this.state.boutique,
+                hot:this.state.hot,
+                dataCategory:this.state.dataCategory,
+                employerName: this.state.searchType == 1 ? this.state.searchName : undefined,
+                username: this.state.searchType == 0 && this.props['data-listApiUrl'].indexOf('org') == -1 ? this.state.searchName : undefined,
+                unitName: this.state.searchType == 0 && this.props['data-listApiUrl'].indexOf('user') == -1 ? this.state.searchName : undefined,
+            },
+            success: function (data) {
+                let theArr = [];
+                if (!data.data || !data.data.list) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    for (let i = 0; i < data.data.list.length; i++) {
+                        let thisdata = data.data.list[i];
+                        theArr.push({
+                            key: i,
+                            id: thisdata.id,
+                            serialNumber: thisdata.serialNumber,
+                            dataCategory: thisdata.dataCategory,
+                            name: thisdata.name,
+                            keyword: thisdata.keyword,
+                            infoSources: thisdata.infoSources,
+                            username: thisdata.username,
+                            theName: thisdata.username || thisdata.employerName,
+                            demandType: thisdata.demandType,
+                            validityPeriod: thisdata.validityPeriod,
+                            employerName: thisdata.employerName,
+                            employerId: thisdata.employerId,
+                            province: thisdata.province,
+                            status: thisdata.status,
+                            releaseStatus: thisdata.releaseStatus,
+                            releaseDate: thisdata.releaseDate,
+                            principalId: thisdata.principalId,
+                            validityPeriodFormattedDate: thisdata.validityPeriodFormattedDate,
+                            releaseDateFormattedDate: thisdata.releaseDateFormattedDate,
+                            auditStatus: thisdata.auditStatus,
+                            boutique: thisdata.boutique,
+                            urgentMoney:thisdata.urgentMoney,
+                            urgentDays:thisdata.urgentDays,
+                            hot: thisdata.hot,
+                            techBrokerId:thisdata.techBrokerId,
+                            createTimeFormattedDate: thisdata.createTimeFormattedDate,
+                        });
+                    };
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
+                };
+                this.setState({
+                    dataSource: theArr,
+                    pagination: this.state.pagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            searchMore: true,
+            searchType: 0,               
+            validityPeriodDate: [],
+            releaseDate: [],
+            releaseDateS: [],
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '编号',
+                    dataIndex: 'serialNumber',
+                    key: 'serialNumber',
+                }, {
+                    title: '需求名称',
+                    dataIndex: 'name',
+                    key: 'name',
+                },
+                 {
+                    title: '录入人',
+                    dataIndex: 'techBrokerId',
+                    key: 'techBrokerId',
+                },
+              	{
+                    title: '是否精品',
+                    dataIndex: 'boutique',
+                    key: 'boutique',
+                    render: text => { return getboutique(text) }
+                },
+                {
+                    title: '首页展示',
+                    dataIndex: 'hot',
+                    key: 'hot',
+                    render: text => { return gethot(text) }
+                },
+                {
+                    title: '关键字',
+                    dataIndex: 'keyword',
+                    key: 'keyword',
+                }, {
+                    title: '需求类型',
+                    dataIndex: 'demandType',
+                    key: 'demandType',
+                    render: text => { return getDemandType(text); }
+                }, {
+                    title: '信息来源',
+                    dataIndex: 'infoSources',
+                    key: 'infoSources',
+                    render: text => {
+                        switch (text) {
+                            case "0":
+                                return <span>平台采集</span>;
+                            case "1":
+                                return <span>客户发布</span>;
+                            case "2":
+                                return <span>批量导入</span>
+                            case "3":
+                                return <span>三方对接</span>
+                        }
+                    }
+                }, {
+                    title: '加急天数',
+                    dataIndex: 'urgentDays',
+                    key: 'urgentDays',
+                }, {
+                    title: '加急报酬(万)',
+                    dataIndex: 'urgentMoney',
+                    key: 'urgentMoney',
+                }, {
+                    title: '审核状态',
+                    dataIndex: 'auditStatus',
+                    key: 'auditStatus',
+                    render: text => {
+                        switch (text) {
+                            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>;
+                        }
+                    }
+                }, {
+                    title: '需求状态',
+                    dataIndex: 'status',
+                    key: 'status',
+                    render: text => {
+                        switch (text) {
+                            case "0":
+                                return <span>进行中</span>;
+                            case "1":
+                                return <span>未解决</span>;
+                            case "2":
+                                return <span>已解决</span>;
+                        }
+                    }
+                }, {
+                    title: '有效期限',
+                    dataIndex: 'validityPeriodFormattedDate',
+                    key: 'validityPeriodFormattedDate',
+                }, {
+                    title: '发布时间',
+                    dataIndex: 'releaseDateFormattedDate',
+                    key: 'releaseDateFormattedDate',
+                },{
+                    title: '录入时间',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate',
+                }
+            ],
+            dataSource: [],
+            searchTime: []
+        };
+    },
+    getCompanyList() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/demand/unitNames",
+            success: function (data) {
+                let theArr = [];
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    data.data.map(function (item) {
+                        theArr.push(
+                            <Select.Option value={item.uid} key={item.uid}>{item.unitName}</Select.Option>
+                        )
+                    });
+                };
+                this.setState({
+                    companyOption: theArr
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getUserList() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/demand/userNames",
+            success: function (data) {
+                let theArr = [];
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    data.data.map(function (item) {
+                        theArr.push(
+                            <Select.Option value={item.uid} key={item.uid}>{item.username}</Select.Option>
+                        )
+                    });
+                };
+                this.setState({
+                    userOption: theArr
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    componentWillMount() {
+        let theArr = [];
+        demandTypeList.map(function (item) {
+            theArr.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        this.state.demandTypeOption = theArr;
+        if (window.location.search) {
+            let theObj = getSearchUrl(window.location.search);
+            if (theObj.rid) {
+                theObj.id = theObj.rid;
+                theObj.employerId = theObj.uid;
+                if (theObj.rid != 'null') {
+                    this.tableRowClick(theObj);
+                };
+            };
+        };
+        this.loadData();
+        this.getCompanyList();
+        this.getUserList();
+    },
+    componentWillReceiveProps(nextProps) {
+        if (this.props['data-listApiUrl'] != nextProps['data-listApiUrl']) {
+            this.state.selectedRowKeys = [];
+            this.state.selectedRows = [];
+            this.state.serialNumber = undefined;
+            this.state.name = undefined;
+            this.state.keyword = undefined;
+            this.state.infoSources = undefined;
+            this.state.demandType = undefined;
+            this.state.searchName = undefined;
+            this.state.searchType = 0;            
+            this.state.status = undefined;
+            this.state.releaseStatus = undefined;
+            this.state.auditStatus = undefined;
+            this.state.validityPeriodDate = [];
+            this.state.releaseDate = [];
+            this.state.releaseDateS = [];
+            this.loadData(null, nextProps['data-listApiUrl']);
+        };
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        if(index!=undefined){
+        	this.setState({
+           	 showDesc: true
+        	});
+        }
+    },
+    delectRow() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            };
+        };
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/demand/delete",
+            data: {
+                ids: deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('删除成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData();
+        }.bind(this));
+    },
+    addClick() {
+        this.state.RowData = {};
+        this.setState({
+            showDesc: true
+        });
+    },
+    closeDesc(e, s) {
+        this.state.showDesc = e;
+        if (s) {
+            this.loadData();
+        };
+    },
+    search() {
+        this.loadData();
+    },
+    reset() {
+        this.state.serialNumber = undefined;
+        this.state.name = undefined;
+        this.state.keyword = undefined;
+        this.state.infoSources = undefined;
+        this.state.demandType = undefined;
+        this.state.searchName = undefined;
+        this.state.searchType = 0;
+        this.state.boutique = '';
+        this.state.hot='' ;
+        this.state.status = undefined;
+        this.state.releaseStatus = undefined;
+        this.state.auditStatus = undefined;
+        this.state.dataCategory = undefined;
+        this.state.validityPeriodDate = [];
+        this.state.releaseDate = [];
+        this.state.releaseDateS = [];
+        this.loadData();
+    },
+    searchSwitch() {
+        this.setState({
+            searchMore: !this.state.searchMore
+        });
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows.slice(-1),
+                    selectedRowKeys: selectedRowKeys.slice(-1)
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        const { RangePicker } = DatePicker;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    <span>科技需求管理</span>
+                    <div className="patent-addNew clearfix">
+                        <Upload
+                            action={globalConfig.context + "/api/admin/demand/uploadTemplate"}
+                            data={{ 'sign': 'demand_template' }}
+                            beforeUpload={beforeUploadFile}
+                            showUploadList={false}
+                            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;
+                                    };
+                                } else if (info.file.status === 'error') {
+                                    message.error(`${info.file.name} 文件上传失败。`);
+                                };
+                            }} >
+                            <Button style={{"display":"none"}}>上传批量导入模板</Button>
+                        </Upload>
+                        <Button onClick={() => { window.open(globalConfig.context + '/api/admin/demand/downloadTemplate?sign=demand_template') }} style={{"display":"none"}}>下载批量导入模板</Button>
+                        <Button type="primary" className="addButton" onClick={this.addClick} style={{"display":"none"}}>新增需求<Icon type="plus" /></Button>
+                       
+                    </div>
+                </div>
+                <div className="user-search">
+                    <Input placeholder="需求编号"
+                        value={this.state.serialNumber}
+                        onChange={(e) => { this.setState({ serialNumber: e.target.value }); }} />
+                    <Input placeholder="需求名称"
+                        value={this.state.name}
+                        onChange={(e) => { this.setState({ name: e.target.value }); }} />
+                    <Input placeholder="关键字"
+                        value={this.state.keyword}
+                        onChange={(e) => { this.setState({ keyword: e.target.value }); }} />
+                    <Input placeholder="雇主名称"
+                        value={this.state.searchName}
+                        onChange={(e) => { this.setState({ searchName: e.target.value }); }} />
+                    <Radio.Group value={this.state.searchType} onChange={(e) => {
+                        this.setState({ searchType: e.target.value })
+                    }}>
+                        <Radio value={0}>认证用户</Radio>
+                        <Radio value={1}>非认证用户</Radio>
+                    </Radio.Group>                   
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button>
+                    <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                        disabled={!hasSelected}
+                        onClick={this.delectRow}>删除<Icon type="minus" /></Button>
+                    <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>
+                    <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
+                    	<Radio.Group value={this.state.boutique} onChange={(e) => {
+		                    this.setState({ boutique: e.target.value })
+		                    }}>
+		                        <Radio value={1}>精品</Radio>
+		                        <Radio value={0}>非精品</Radio>
+		                </Radio.Group>
+		                <Radio.Group value={this.state.hot} onChange={(e) => {
+		                    this.setState({ hot: e.target.value })
+		                    }}>
+		                        <Radio value={1}>首页展示</Radio>
+		                        <Radio value={0}>首页不展示</Radio>
+		                </Radio.Group>
+                        <Select placeholder="选择信息来源" style={{ width: 120 }}
+                            value={this.state.infoSources}
+                            onChange={(e) => { this.setState({ infoSources: e }) }}>
+                            <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>
+                        <Select placeholder="选择需求类型"
+                            style={{ width: 120 }}
+                            value={this.state.demandType}
+                            onChange={(e) => { this.setState({ demandType: e }) }}>
+                            {this.state.demandTypeOption}
+                        </Select>
+                        <Select placeholder="选择需求状态" style={{ width: 120 }}
+                            value={this.state.status}
+                            onChange={(e) => { this.setState({ status: e }) }}>
+                            <Select.Option value="0" >进行中</Select.Option>
+                            <Select.Option value="1" >未解决</Select.Option>
+                            <Select.Option value="2" >已解决</Select.Option>
+                        </Select>
+                        <Select placeholder="选择审核状态" style={{ width: 160 }}
+                            value={this.state.auditStatus}
+                            onChange={(e) => { this.setState({ auditStatus: e }) }}>
+                            <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>
+                        <Select placeholder="选择是否发布" style={{ width: 120 }}
+                            value={this.state.releaseStatus}
+                            onChange={(e) => { this.setState({ releaseStatus: e }) }}>
+                            <Select.Option value="0" >未发布</Select.Option>
+                            <Select.Option value="1" >已发布</Select.Option>
+                        </Select>
+                        <Select placeholder="选择需求类别" style={{ width: 120 }}
+                            value={this.state.dataCategory}
+                            onChange={(e) => { this.setState({ dataCategory: e }) }}>
+                            <Select.Option value="0" >个人</Select.Option>
+                            <Select.Option value="1" >组织</Select.Option>
+                        </Select>
+                        <div style={{ marginTop: '10px' }}>
+	                        <span style={{ marginLeft: '10px' }}>有效期限 : </span>
+	                        <RangePicker
+	                            value={[this.state.validityPeriodDate[0] ? moment(this.state.validityPeriodDate[0]) : null,
+	                            this.state.validityPeriodDate[1] ? moment(this.state.validityPeriodDate[1]) : null]}
+	                            onChange={(data, dataString) => { this.setState({ validityPeriodDate: dataString }); }} />
+	                        <span style={{ marginLeft: '10px' }}>发布时间 : </span>
+	                        <RangePicker
+	                            value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
+	                            this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
+	                            onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
+	                        <span style={{ marginLeft: '10px' }}>录入时间 : </span>
+	                        <RangePicker
+	                            value={[this.state.releaseDateS[0] ? moment(this.state.releaseDateS[0]) : null,
+	                            this.state.releaseDateS[1] ? moment(this.state.releaseDateS[1]) : null]}
+	                            onChange={(data, dataString) => { this.setState({ releaseDateS: dataString }); }} />
+                        </div>
+                    </div>
+                </div>
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}
+                            rowSelection={rowSelection}
+                            pagination={this.state.pagination}
+                            onRowClick={this.tableRowClick} />
+                    </Spin>
+                </div>
+                <TechDemandDesc
+                    data={this.state.RowData}
+                    detailApiUrl={this.props['data-detailApiUrl']}
+                    companyOption={this.state.companyOption}
+                    userOption={this.state.userOption}
+                    demandTypeOption={this.state.demandTypeOption}
+                    showDesc={this.state.showDesc}
+                    closeDesc={this.closeDesc} />
+            </div >
+        );
+    }
+});
+
+export default DemandList;

File diff suppressed because it is too large
+ 1644 - 0
js/component/manageCenter/demand/techDemandQueryDesc.jsx