Browse Source

update 管理端订单完成

yee 7 years ago
parent
commit
f1cd64c1a4

+ 582 - 0
js/component/manageCenter/achievement/achievementOrder.jsx

@@ -0,0 +1,582 @@
+import React from 'react';
+import { Icon, Button, Input, InputNumber, Select, Spin, Table, message, Modal, Row, Col, DatePicker } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import './techAchievement.less';
+import { orderStatusList } from '../../dataDic.js';
+import { befoFile, getSearchUrl, getOrderStatus, companySearch } from '../../tools.js';
+import BatchImport from './batchImport';
+
+const AchievementDetail = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false,
+            columns: [
+                {
+                    title: '状态',
+                    dataIndex: 'status',
+                    key: 'status',
+                    render: text => { return getOrderStatus(text) }
+                }, {
+                    title: '操作时间',
+                    dataIndex: 'recordTimeFormattedDate',
+                    key: 'recordTimeFormattedDate',
+                }, {
+                    title: '管理员',
+                    dataIndex: 'operator',
+                    key: 'operator',
+                }, {
+                    title: '备注',
+                    dataIndex: 'comment',
+                    key: 'comment',
+                }
+            ],
+            dataSource: [],
+        };
+    },
+    loadLogs(id) {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/portal/order/achievementOrderLog",
+            data: {
+                achievementOrderId: id
+            },
+            success: function (data) {
+                let theArr = [];
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    for (let i = 0; i < data.data.length; i++) {
+                        let thisdata = data.data[i];
+                        theArr.push({
+                            key: i,
+                            recordTime: thisdata.recordTime,
+                            status: thisdata.status,
+                            comment: thisdata.comment,
+                            operator: thisdata.operator,
+                            recordTimeFormattedDate: thisdata.recordTimeFormattedDate
+                        });
+                    };
+                };
+                this.setState({
+                    dataSource: theArr
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    handleSubmit(e) {
+        //keyword长度判断
+        if (this.state.orderStatus || this.state.comment || this.state.recordTime) {
+            if (this.state.orderStatus && this.state.comment && this.state.recordTime) {
+            } else {
+                message.warning('请填写完整的状态流转记录!');
+                return;
+            };
+        };
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/portal/order/updateAchievementOrder',
+            data: {
+                id: this.props.data.id,
+                achievementId: this.props.data.achievementId,
+                status: this.state.orderStatus || this.props.data.status,
+                recordTimeFormattedDate: this.state.recordTime ? this.state.recordTime.format("YYYY-MM-DD HH:mm:ss") : undefined,
+                comment: this.state.comment,
+                intentionMoney: this.state.intentionMoney * 10000,
+                contractMoney: this.state.contractMoney * 10000,
+                commission: this.state.commission * 10000,
+                serviceMoney: this.state.serviceMoney * 10000,
+            }
+        }).done(function (data) {
+            this.setState({
+                loading: false
+            });
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.handleOk();
+            } else {
+                message.warning(data.error[0].message);
+            };
+        }.bind(this));
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    handleOk(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false, true);
+    },
+    componentWillReceiveProps(nextProps) {
+        if (!this.state.visible && nextProps.showDesc && nextProps.data) {
+            this.loadLogs(nextProps.data.id);
+            this.state.intentionMoney = nextProps.data.intentionMoney;
+            this.state.contractMoney = nextProps.data.contractMoney;
+            this.state.commission = nextProps.data.commission;
+            this.state.serviceMoney = nextProps.data.serviceMoney;
+            this.state.orderStatus = undefined;
+            this.state.comment = undefined;
+            this.state.recordTime = undefined;
+        };
+        this.state.visible = nextProps.showDesc;
+    },
+    render() {
+        let theData = this.props.data;
+        if (theData) {
+            return (
+                <div className="patent-desc">
+                    <Modal maskClosable={false} visible={this.state.visible}
+                        onOk={this.checkPatentProcess} onCancel={this.handleCancel}
+                        width='800px'
+                        footer={null}
+                        title="订单详情"
+                        className="demand-order-content">
+                        <Spin spinning={this.state.loading}>
+                            <Row>
+                                <Col span={2}>订单编号:</Col>
+                                <Col span={10}>{theData.serialNumber}</Col>
+                                <Col span={2}>订单状态:</Col>
+                                <Col span={10}>{getOrderStatus(theData.status)}</Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>成果编号:</Col>
+                                <Col span={10}>{theData.achievementSerialNumber}</Col>
+                                <Col span={2}>成果名称:</Col>
+                                <Col span={10}>{theData.name}</Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>成果状态:</Col>
+                                <Col span={10}>{(() => {
+                                    if (theData.deletedSign == 1) {
+                                        return "已删除"
+                                    } else if (theData.auditStatus != 3) {
+                                        return "已下架"
+                                    } else {
+                                        return "正常"
+                                    }
+                                })()}</Col>
+                                <Col span={3}>所有人名称:</Col>
+                                <Col span={9}>{theData.theName}</Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>接单时间:</Col>
+                                <Col span={10}>{theData.createTimeFormattedDate}</Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>意向金:</Col>
+                                <Col span={10}>
+                                    <InputNumber
+                                        value={this.state.intentionMoney}
+                                        onChange={(e) => { this.setState({ intentionMoney: Math.round(e * 10000) / 10000 }) }} />
+                                    <span> 万元</span>
+                                </Col>
+                                <Col span={2}>合同金:</Col>
+                                <Col span={10}>
+                                    <InputNumber
+                                        value={this.state.contractMoney}
+                                        onChange={(e) => { this.setState({ contractMoney: Math.round(e * 10000) / 10000 }) }} />
+                                    <span> 万元</span>
+                                </Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>佣金:</Col>
+                                <Col span={10}>
+                                    <InputNumber
+                                        value={this.state.commission}
+                                        onChange={(e) => { this.setState({ commission: Math.round(e * 10000) / 10000 }) }} />
+                                    <span> 万元</span>
+                                </Col>
+                                <Col span={2}>服务金:</Col>
+                                <Col span={10}>
+                                    <InputNumber
+                                        value={this.state.serviceMoney}
+                                        onChange={(e) => { this.setState({ serviceMoney: Math.round(e * 10000) / 10000 }) }} />
+                                    <span> 万元</span>
+                                </Col>
+                            </Row>
+                            <p>订单状态流转记录</p>
+                            <Table columns={this.state.columns}
+                                dataSource={this.state.dataSource}
+                                pagination={false} />
+                            <Row style={{ marginTop: '20px' }}>
+                                <Col span={2}>状态:</Col>
+                                <Col span={10}>
+                                    <Select style={{ width: 160 }}
+                                        value={this.state.orderStatus}
+                                        onChange={(e) => { this.setState({ orderStatus: e }); }}>
+                                        {(() => {
+                                            let theArr = [];
+                                            orderStatusList.map(function (item, i) {
+                                                if (i < 6) {
+                                                    theArr.push(<Select.Option key={item.value}>{item.key}</Select.Option>)
+                                                };
+                                            });
+                                            theArr.push(<Select.Option key="999">关闭</Select.Option>)
+                                            return theArr;
+                                        })()}
+                                    </Select>
+                                </Col>
+                                <Col span={2}>时间:</Col>
+                                <Col span={10}>
+                                    <DatePicker
+                                        value={this.state.recordTime || null}
+                                        onChange={(e) => { this.setState({ recordTime: e }); }} />
+                                </Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>备注:</Col>
+                                <Col span={20}>
+                                    <Input value={this.state.comment} onChange={(e) => { this.setState({ comment: e.target.value }); }} />
+                                </Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}></Col>
+                                <Col span={20}>
+                                    <Button style={{ marginRight: '20px' }} type="primary" onClick={this.handleSubmit}>保存</Button>
+                                    <Button className="set-submit" type="ghost" onClick={this.handleCancel}>取消</Button>
+                                </Col>
+                            </Row>
+                        </Spin>
+                    </Modal>
+                </div>
+            );
+        } else {
+            return <div></div>
+        }
+    },
+});
+
+const AchievementOrderList = React.createClass({
+    loadData(pageNo, apiUrl) {
+        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,
+                uid: this.state.uid,
+                username: this.state.username,
+                unitName: this.state.unitName
+            },
+            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,  //线索单/意向单ID
+                            serialNumber: thisdata.serialNumber,  //线索单/意向单编号
+                            achievementId: thisdata.achievementId, //科技需求ID
+                            createTime: thisdata.createTime,
+                            status: thisdata.status, 	//线索单/意向单状态
+                            intentionMoney: thisdata.intentionMoney / 10000, 	//意向金
+                            contractMoney: thisdata.contractMoney / 10000, 	//合同金
+                            commission: thisdata.commission / 10000, 	//佣金
+                            serviceMoney: thisdata.serviceMoney / 10000, 	//服务金
+                            name: thisdata.name, //成果名称,
+                            achievementSerialNumber: thisdata.achievementSerialNumber, //科技成果编号
+                            deletedSign: thisdata.deletedSign, 	//科技成果删除标记
+                            auditStatus: thisdata.auditStatus, 	//科技成果审核状态 	//个人用户名称
+                            theName: thisdata.username || thisdata.unitName,
+                            uid: thisdata.uid,	//个人用户ID
+                            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 {
+            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: 'achievementSerialNumber',
+                    key: 'achievementSerialNumber',
+                }, {
+                    title: '成果所有人',
+                    dataIndex: 'theName',
+                    key: 'theName',
+                }, {
+                    title: '订单状态',
+                    dataIndex: 'auditStatus',
+                    key: 'auditStatus',
+                    render: (text, record) => {
+                        if (record.deletedSign == 1) {
+                            return "已删除"
+                        } else if (record.auditStatus != 3) {
+                            return "已下架"
+                        } else {
+                            return "正常"
+                        }
+                    }
+                }, {
+                    title: '流程状态',
+                    dataIndex: 'status',
+                    key: 'status',
+                    render: (text, record) => { return getOrderStatus(text); }
+                }, {
+                    title: '意向金(万元)',
+                    dataIndex: 'intentionMoney',
+                    key: 'intentionMoney',
+                }, {
+                    title: '合同金(万元)',
+                    dataIndex: 'contractMoney',
+                    key: 'contractMoney',
+                }, {
+                    title: '佣金(万元)',
+                    dataIndex: 'commission',
+                    key: 'commission',
+                }, {
+                    title: '服务金(万元)',
+                    dataIndex: 'serviceMoney',
+                    key: 'serviceMoney',
+                }, {
+                    title: '接单时间',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate',
+                }
+            ],
+            dataSource: [],
+        };
+    },
+    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 = [], typeArr = [];
+        orderStatusList.map(function (item) {
+            theArr.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        this.state.demandTypeOption = typeArr;
+        this.state.orderStatusOption = theArr;
+        // 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();
+        this.getCompanyList();
+        this.getUserList();
+    },
+    componentWillReceiveProps(nextProps) {
+        if (this.props['data-listApiUrl'] != nextProps['data-listApiUrl']) {
+            this.loadData(null, nextProps['data-listApiUrl']);
+            this.state.selectedRowKeys = [];
+            this.state.selectedRows = [];
+        };
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        this.setState({
+            showDesc: true
+        });
+    },
+    closeDesc(e, s) {
+        this.state.showDesc = e;
+        if (s) {
+            this.loadData();
+        };
+    },
+    search() {
+        this.loadData();
+    },
+    reset() {
+        this.state.uid = undefined;
+        this.state.username = undefined;
+        this.state.unitName = undefined;
+        this.state.status = undefined;
+        this.loadData();
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows.splice(-1),
+                    selectedRowKeys: selectedRowKeys.splice(-1)
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    {this.props['data-listApiUrl'].indexOf('org') == -1 ? <span>个人成果订单管理</span> : <span>组织成果订单管理</span>}
+                </div>
+                <div className="user-search">
+                    <Select placeholder="选择状态" style={{ width: 160 }}
+                        value={this.state.status}
+                        onChange={(e) => { this.setState({ status: e }) }}>
+                        {this.state.orderStatusOption}
+                    </Select>
+                    {this.props['data-listApiUrl'].indexOf('org') == -1 ? <Select placeholder="选择用户名" style={{ width: 260 }}
+                        value={this.state.username}
+                        notFoundContent="未获取到用户列表"
+                        showSearch
+                        filterOption={companySearch}
+                        onChange={(e) => { this.setState({ username: e }) }}>
+                        {this.state.userOption}
+                    </Select> :
+                        <Select placeholder="选择用户名" style={{ width: 260 }}
+                            value={this.state.unitName}
+                            notFoundContent="未获取到用户列表"
+                            showSearch
+                            filterOption={companySearch}
+                            onChange={(e) => { this.setState({ unitName: e }) }}>
+                            {this.state.companyOption}
+                        </Select>}
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button>
+                </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>
+                <AchievementDetail
+                    data={this.state.RowData}
+                    showDesc={this.state.showDesc}
+                    closeDesc={this.closeDesc} />
+            </div >
+        );
+    }
+});
+
+export default AchievementOrderList;

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

@@ -41,6 +41,26 @@ class Content extends Component {
                     });
                 });
                 break;
+            case 'userAchievementOrder':
+                require.ensure([], () => {
+                    const AchievementOrder = require('./achievementOrder').default;
+                    this.setState({
+                        component: AchievementOrder,
+                        listApiUrl: '/api/admin/portal/order/userAchievementOrderList',
+                        detailApiUrl: '/api/admin/achievement/userDetail'
+                    });
+                });
+                break;
+            case 'orgAchievementOrder':
+                require.ensure([], () => {
+                    const AchievementOrder = require('./achievementOrder').default;
+                    this.setState({
+                        component: AchievementOrder,
+                        listApiUrl: '/api/admin/portal/order/orgAchievementOrderList',
+                        detailApiUrl: '/api/admin/achievement/orgDetail'
+                    });
+                });
+                break;
         };
         window.location.hash = key;
     }

+ 7 - 2
js/component/manageCenter/achievement/leftTab.jsx

@@ -27,14 +27,19 @@ const LeftTab = React.createClass({
             <Menu onClick={this.handleClick}
                 selectedKeys={[this.state.current]}
                 mode="vertical"
-                className="account-left"
-            >
+                className="account-left" >
                 <Menu.Item key="orgTechAchievement">
                     组织科技成果列表
                 </Menu.Item>
                 <Menu.Item key="userTechAchievement">
                     个人科技成果列表
                 </Menu.Item>
+                <Menu.Item key="orgAchievementOrder">
+                    组织成果订单列表
+                </Menu.Item>
+                <Menu.Item key="userAchievementOrder">
+                    个人成果订单列表
+                </Menu.Item>
             </Menu>
         );
     },

+ 10 - 1
js/component/manageCenter/achievement/techAchievement.less

@@ -32,7 +32,7 @@
 .patent-addNew {
     float: right;
     margin-left: 20px;
-    > * {
+    >* {
         float: left;
         margin-right: 20px;
     }
@@ -85,4 +85,13 @@
     .modal-submit {
         margin-left: 20px;
     }
+}
+
+.demand-order-content {
+    .ant-row {
+        margin-bottom: 20px;
+    }
+    .ant-input-number-handler-wrap {
+        display: none
+    }
 }

File diff suppressed because it is too large
+ 442 - 552
js/component/manageCenter/achievement/techAchievementDesc.jsx


+ 25 - 6
js/component/manageCenter/demand/content.jsx

@@ -10,35 +10,54 @@ class Content extends Component {
         this.state = {
             loading: false,
             component: 'div',
-            apiUrl: 'orgList'
         };
     }
     componentWillMount() {
         if (window.location.hash) {
             this.getKey(window.location.hash.substr(1));
         } else {
-            this.getKey("techDemandOrg");
+            this.getKey("orgTechDemand");
         };
     }
     getKey(key) {
         switch (key) {
-            case 'techDemandOrg':
+            case 'orgTechDemand':
                 require.ensure([], () => {
                     const TechDemand = require('./techDemand').default;
                     this.setState({
                         component: TechDemand,
                         listApiUrl: '/api/admin/demand/orgList',
-                        detailApiUrl:'/api/admin/demand/orgDemandDetail'
+                        detailApiUrl: '/api/admin/demand/orgDemandDetail'
                     });
                 });
                 break;
-            case 'techDemandUser':
+            case 'userTechDemand':
                 require.ensure([], () => {
                     const TechDemand = require('./techDemand').default;
                     this.setState({
                         component: TechDemand,
                         listApiUrl: '/api/admin/demand/userList',
-                        detailApiUrl:'/api/admin/demand/userDemandDetail'
+                        detailApiUrl: '/api/admin/demand/userDemandDetail'
+                    });
+                });
+                break;
+            case 'orgDemandOrder':
+                require.ensure([], () => {
+                    const DemandOrder = require('./demandOrder').default;
+                    this.setState({
+                        component: DemandOrder,
+                        listApiUrl: '/api/admin/portal/order/orgDemandOrderList',
+                        detailApiUrl: '/api/admin/demand/orgDemandDetail'
+                    });
+                });
+                break;
+            case 'userDemandOrder':
+                require.ensure([], () => {
+                    const DemandOrder = require('./demandOrder').default;
+                    this.setState({
+                        component: DemandOrder,
+                        listApiUrl: '/api/admin/portal/order/userDemandOrderList',
+                        detailApiUrl: '/api/admin/demand/userDemandDetail'
                     });
                 });
                 break;

+ 634 - 0
js/component/manageCenter/demand/demandOrder.jsx

@@ -0,0 +1,634 @@
+import React from 'react';
+import { Icon, Button, Input, InputNumber, Select, Spin, Table, message, Modal, Row, Col, DatePicker } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import './techDemand.less';
+import { orderStatusList } from '../../dataDic.js';
+import { befoFile, getSearchUrl, getOrderStatus, companySearch } from '../../tools.js';
+import BatchImport from './batchImport';
+
+const DemandDetail = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false,
+            columns: [
+                {
+                    title: '状态',
+                    dataIndex: 'status',
+                    key: 'status',
+                    render: text => { return getOrderStatus(text) }
+                }, {
+                    title: '操作时间',
+                    dataIndex: 'recordTimeFormattedDate',
+                    key: 'recordTimeFormattedDate',
+                }, {
+                    title: '管理员',
+                    dataIndex: 'operator',
+                    key: 'operator',
+                }, {
+                    title: '备注',
+                    dataIndex: 'comment',
+                    key: 'comment',
+                }
+            ],
+            dataSource: [],
+        };
+    },
+    loadLogs(id) {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/portal/order/demandOrderLog",
+            data: {
+                demandOrderId: id
+            },
+            success: function (data) {
+                let theArr = [];
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    for (let i = 0; i < data.data.length; i++) {
+                        let thisdata = data.data[i];
+                        theArr.push({
+                            key: i,
+                            recordTime: thisdata.recordTime,
+                            status: thisdata.status,
+                            comment: thisdata.comment,
+                            operator: thisdata.operator,
+                            recordTimeFormattedDate: thisdata.recordTimeFormattedDate
+                        });
+                    };
+                };
+                this.setState({
+                    dataSource: theArr
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    handleSubmit(e) {
+        //keyword长度判断
+        if (this.state.orderStatus || this.state.comment || this.state.recordTime) {
+            if (this.state.orderStatus && this.state.comment && this.state.recordTime) {
+            } else {
+                message.warning('请填写完整的状态流转记录!');
+                return;
+            };
+        };
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/portal/order/updateDemandOrder',
+            data: {
+                id: this.props.data.id,
+                demandId: this.props.data.demandId,
+                enclosureUrl: this.props.data.enclosureUrl,
+                status: this.state.orderStatus || this.props.data.status,
+                recordTimeFormattedDate: this.state.recordTime ? this.state.recordTime.format("YYYY-MM-DD HH:mm:ss") : undefined,
+                comment: this.state.comment,
+                intentionMoney: this.state.intentionMoney * 10000,
+                contractMoney: this.state.contractMoney * 10000,
+                commission: this.state.commission * 10000,
+                serviceMoney: this.state.serviceMoney * 10000,
+            }
+        }).done(function (data) {
+            this.setState({
+                loading: false
+            });
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.handleOk();
+            } else {
+                message.warning(data.error[0].message);
+            };
+        }.bind(this));
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    handleOk(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false, true);
+    },
+    componentWillReceiveProps(nextProps) {
+        if (!this.state.visible && nextProps.showDesc && nextProps.data) {
+            this.loadLogs(nextProps.data.id);
+            this.state.intentionMoney = nextProps.data.intentionMoney;
+            this.state.contractMoney = nextProps.data.contractMoney;
+            this.state.commission = nextProps.data.commission;
+            this.state.serviceMoney = nextProps.data.serviceMoney;
+            this.state.orderStatus = undefined;
+            this.state.comment = undefined;
+            this.state.recordTime = undefined;
+        };
+        this.state.visible = nextProps.showDesc;
+    },
+    render() {
+        let theData = this.props.data;
+        if (theData) {
+            return (
+                <div className="patent-desc">
+                    <Modal maskClosable={false} visible={this.state.visible}
+                        onOk={this.checkPatentProcess} onCancel={this.handleCancel}
+                        width='800px'
+                        footer={null}
+                        title="订单详情"
+                        className="demand-order-content">
+                        <Spin spinning={this.state.loading}>
+                            <Row>
+                                <Col span={2}>订单编号:</Col>
+                                <Col span={10}>{theData.serialNumber}</Col>
+                                <Col span={2}>订单状态:</Col>
+                                <Col span={10}>{getOrderStatus(theData.status)}</Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>需求编号:</Col>
+                                <Col span={10}>{theData.demandSerialNumber}</Col>
+                                <Col span={2}>需求名称:</Col>
+                                <Col span={10}>{theData.name}</Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>需求状态:</Col>
+                                <Col span={10}>{(() => {
+                                    if (theData.deletedSign == 1) {
+                                        return "已删除"
+                                    } else if (theData.auditStatus != 3) {
+                                        return "已下架"
+                                    } else {
+                                        return "正常"
+                                    }
+                                })()}</Col>
+                                <Col span={2}>雇主名称:</Col>
+                                <Col span={10}>{theData.theName}</Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>相关附件:</Col>
+                                <Col span={10}>
+                                    {theData.enclosureUrl ?
+                                        <span className="download-file">
+                                            <a onClick={() => { window.open(globalConfig.context + '/api/admin/portal/order/downloadDemandOrder?id=' + theData.id) }}>科技需求订单文件</a>
+                                        </span>
+                                        : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}
+                                </Col>
+                                <Col span={2}>接单时间:</Col>
+                                <Col span={10}>{theData.createTimeFormattedDate}</Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>意向金:</Col>
+                                <Col span={10}>
+                                    <InputNumber
+                                        value={this.state.intentionMoney}
+                                        onChange={(e) => { this.setState({ intentionMoney: Math.round(e * 10000) / 10000 }) }} />
+                                    <span> 万元</span>
+                                </Col>
+                                <Col span={2}>合同金:</Col>
+                                <Col span={10}>
+                                    <InputNumber
+                                        value={this.state.contractMoney}
+                                        onChange={(e) => { this.setState({ contractMoney: Math.round(e * 10000) / 10000 }) }} />
+                                    <span> 万元</span>
+                                </Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>佣金:</Col>
+                                <Col span={10}>
+                                    <InputNumber
+                                        value={this.state.commission}
+                                        onChange={(e) => { this.setState({ commission: Math.round(e * 10000) / 10000 }) }} />
+                                    <span> 万元</span>
+                                </Col>
+                                <Col span={2}>服务金:</Col>
+                                <Col span={10}>
+                                    <InputNumber
+                                        value={this.state.serviceMoney}
+                                        onChange={(e) => { this.setState({ serviceMoney: Math.round(e * 10000) / 10000 }) }} />
+                                    <span> 万元</span>
+                                </Col>
+                            </Row>
+                            <p>订单状态流转记录</p>
+                            <Table columns={this.state.columns}
+                                dataSource={this.state.dataSource}
+                                pagination={false} />
+                            <Row style={{ marginTop: '20px' }}>
+                                <Col span={2}>状态:</Col>
+                                <Col span={10}>
+                                    <Select style={{ width: 160 }}
+                                        value={this.state.orderStatus}
+                                        onChange={(e) => { this.setState({ orderStatus: e }); }}>
+                                        {(() => {
+                                            let theArr = [];
+                                            orderStatusList.map(function (item, i) {
+                                                if (i < 6) {
+                                                    theArr.push(<Select.Option key={item.value}>{item.key}</Select.Option>)
+                                                };
+                                            });
+                                            theArr.push(<Select.Option key="999">关闭</Select.Option>)
+                                            return theArr;
+                                        })()}
+                                    </Select>
+                                </Col>
+                                <Col span={2}>时间:</Col>
+                                <Col span={10}>
+                                    <DatePicker
+                                        value={this.state.recordTime || null}
+                                        onChange={(e) => { this.setState({ recordTime: e }); }} />
+                                </Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}>备注:</Col>
+                                <Col span={20}>
+                                    <Input value={this.state.comment} onChange={(e) => { this.setState({ comment: e.target.value }); }} />
+                                </Col>
+                            </Row>
+                            <Row>
+                                <Col span={2}></Col>
+                                <Col span={20}>
+                                    <Button style={{ marginRight: '20px' }} type="primary" onClick={this.handleSubmit}>保存</Button>
+                                    <Button className="set-submit" type="ghost" onClick={this.handleCancel}>取消</Button>
+                                </Col>
+                            </Row>
+                        </Spin>
+                    </Modal>
+                </div>
+            );
+        } else {
+            return <div></div>
+        }
+    },
+});
+
+const DemandOrderList = React.createClass({
+    loadData(pageNo, apiUrl) {
+        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,
+                uid: this.state.uid,
+                username: this.state.username,
+                unitName: this.state.unitName
+            },
+            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,  //线索单/意向单ID
+                            serialNumber: thisdata.serialNumber,  //线索单/意向单编号
+                            demandId: thisdata.demandId, //科技需求ID
+                            createTime: thisdata.createTime,
+                            enclosureUrl: thisdata.enclosureUrl,
+                            status: thisdata.status, 	//线索单/意向单状态
+                            intentionMoney: thisdata.intentionMoney / 10000, 	//意向金
+                            contractMoney: thisdata.contractMoney / 10000, 	//合同金
+                            commission: thisdata.commission / 10000, 	//佣金
+                            serviceMoney: thisdata.serviceMoney / 10000, 	//服务金
+                            name: thisdata.name, //需求名称,
+                            demandSerialNumber: thisdata.demandSerialNumber, //科技需求编号
+                            deletedSign: thisdata.deletedSign, 	//科技需求删除标记
+                            auditStatus: thisdata.auditStatus, 	//科技需求审核状态
+                            theName: thisdata.username || thisdata.unitName, 	//个人用户名称
+                            uid: thisdata.uid,	//个人用户ID
+                            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 {
+            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: 'demandSerialNumber',
+                    key: 'demandSerialNumber',
+                }, {
+                    title: '雇主编号',
+                    dataIndex: 'theName',
+                    key: 'theName',
+                }, {
+                    title: '订单状态',
+                    dataIndex: 'auditStatus',
+                    key: 'auditStatus',
+                    render: (text, record) => {
+                        if (record.deletedSign == 1) {
+                            return "已删除"
+                        } else if (record.auditStatus != 3) {
+                            return "已下架"
+                        } else {
+                            return "正常"
+                        }
+                    }
+                }, {
+                    title: '流程状态',
+                    dataIndex: 'status',
+                    key: 'status',
+                    render: (text, record) => { return getOrderStatus(text); }
+                }, {
+                    title: '意向金(万元)',
+                    dataIndex: 'intentionMoney',
+                    key: 'intentionMoney',
+                }, {
+                    title: '合同金(万元)',
+                    dataIndex: 'contractMoney',
+                    key: 'contractMoney',
+                }, {
+                    title: '佣金(万元)',
+                    dataIndex: 'commission',
+                    key: 'commission',
+                }, {
+                    title: '服务金(万元)',
+                    dataIndex: 'serviceMoney',
+                    key: 'serviceMoney',
+                }, {
+                    title: '接单时间',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate',
+                }
+            ],
+            dataSource: [],
+        };
+    },
+    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 = [], typeArr = [];
+        orderStatusList.map(function (item) {
+            theArr.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        this.state.demandTypeOption = typeArr;
+        this.state.orderStatusOption = theArr;
+        // 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();
+        this.getCompanyList();
+        this.getUserList();
+    },
+    componentWillReceiveProps(nextProps) {
+        if (this.props['data-listApiUrl'] != nextProps['data-listApiUrl']) {
+            this.loadData(null, nextProps['data-listApiUrl']);
+            this.state.selectedRowKeys = [];
+            this.state.selectedRows = [];
+        };
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        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.uid = undefined;
+        this.state.username = undefined;
+        this.state.unitName = undefined;
+        this.state.status = undefined;
+        this.loadData();
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows.splice(-1),
+                    selectedRowKeys: selectedRowKeys.splice(-1)
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    {this.props['data-listApiUrl'].indexOf('org') == -1 ? <span>个人需求订单管理</span> : <span>组织需求订单管理</span>}
+                </div>
+                <div className="user-search">
+                    <Select placeholder="选择状态" style={{ width: 160 }}
+                        value={this.state.status}
+                        onChange={(e) => { this.setState({ status: e }) }}>
+                        {this.state.orderStatusOption}
+                    </Select>
+                    {this.props['data-listApiUrl'].indexOf('org') == -1 ? <Select placeholder="选择用户名" style={{ width: 260 }}
+                        value={this.state.username}
+                        notFoundContent="未获取到用户列表"
+                        showSearch
+                        filterOption={companySearch}
+                        onChange={(e) => { this.setState({ username: e }) }}>
+                        {this.state.userOption}
+                    </Select> :
+                        <Select placeholder="选择用户名" style={{ width: 260 }}
+                            value={this.state.unitName}
+                            notFoundContent="未获取到用户列表"
+                            showSearch
+                            filterOption={companySearch}
+                            onChange={(e) => { this.setState({ unitName: e }) }}>
+                            {this.state.companyOption}
+                        </Select>}
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button>
+                </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>
+                <DemandDetail
+                    data={this.state.RowData}
+                    showDesc={this.state.showDesc}
+                    closeDesc={this.closeDesc} />
+            </div >
+        );
+    }
+});
+
+export default DemandOrderList;
+
+// <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+//                         disabled={!hasSelected}
+//                         onClick={this.delectRow}>删除<Icon type="minus" /></Button>

+ 9 - 3
js/component/manageCenter/demand/leftTab.jsx

@@ -8,7 +8,7 @@ const MenuItemGroup = Menu.ItemGroup;
 const LeftTab = React.createClass({
     getInitialState() {
         return {
-            current: 'techDemandOrg'
+            current: 'orgTechDemand'
         };
     },
     handleClick(e) {
@@ -29,12 +29,18 @@ const LeftTab = React.createClass({
                 mode="vertical"
                 className="account-left"
             >
-                <Menu.Item key="techDemandOrg">
+                <Menu.Item key="orgTechDemand">
                     组织科技需求列表
                 </Menu.Item>
-                <Menu.Item key="techDemandUser">
+                <Menu.Item key="userTechDemand">
                     个人科技需求列表
                 </Menu.Item>
+                <Menu.Item key="orgDemandOrder">
+                    组织需求订单列表
+                </Menu.Item>
+                <Menu.Item key="userDemandOrder">
+                    个人需求订单列表
+                </Menu.Item>
             </Menu>
         );
     },

+ 11 - 3
js/component/manageCenter/demand/techDemand.less

@@ -34,7 +34,7 @@
 .patent-addNew {
     float: right;
     margin-left: 20px;
-    > * {
+    >* {
         float: left;
         margin-right: 20px;
     }
@@ -77,10 +77,9 @@
         .anticon-eye-o {
             margin-left: -8px;
         }
-        .anticon-delete{
+        .anticon-delete {
             display: none
         }
-
     }
 }
 
@@ -88,4 +87,13 @@
     .modal-submit {
         margin-left: 20px;
     }
+}
+
+.demand-order-content {
+    .ant-row {
+        margin-bottom: 20px;
+    }
+    .ant-input-number-handler-wrap {
+        display: none
+    }
 }

File diff suppressed because it is too large
+ 671 - 790
js/component/manageCenter/demand/techDemandDesc.jsx


+ 1 - 1
js/component/tools.js

@@ -706,7 +706,7 @@ module.exports = {
         }
     },
     //获取需求和成果审核状态
-    gettTransferMode: function (e) {
+    getTransferMode: function (e) {
         if (e) {
             let theType = '';
             transferModeList.map(function (item) {

+ 1 - 1
package.json

@@ -13,7 +13,7 @@
     "buildtest": "webpack --progress --colors --env.deploy test",
     "buildstage": "webpack --progress --colors --env.deploy stage",
     "pro": "webpack --progress --colors --env.deploy prod",
-    "dev": "webpack-dev-server --port 8088 --devtool eval --progress --colors --hot --content-base build --env.deploy dev --env.watch watch"
+    "dev": "webpack-dev-server --port 80 --devtool eval --progress --colors --hot --content-base build --env.deploy dev --env.watch watch"
   },
   "repository": {
     "type": "git",

+ 24 - 24
webpack/entry.config.js

@@ -29,103 +29,103 @@ module.exports = {
     'admin/achievement': './js/admin/achievement.js'
   },
   watch: {
-    'user/index': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'user/index': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/user/index.js'
     ],
-    'user/login': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'user/login': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/user/login.js'
     ],
-    'user/signIn': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'user/signIn': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/user/signIn.js'
     ],
-    'user/certify': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'user/certify': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/user/certify.js'
     ],
-    'user/groupCertify': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'user/groupCertify': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/user/groupCertify.js'
     ],
     //user-account
-    'user/account/index': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'user/account/index': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/user/account/index.js'
     ],
-    'user/account/set': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'user/account/set': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/user/account/set.js'
     ],
-    'user/account/services': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'user/account/services': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/user/account/services.js'
     ],
-    'user/account/achievement': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'user/account/achievement': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/user/account/achievement.js'
     ],
-    'user/account/demand': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'user/account/demand': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/user/account/demand.js'
     ],
     //admin
-    'admin/index': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/index': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/index.js'
     ],
-    'admin/login': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/login': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/login.js'
     ],
-    'admin/userManage': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/userManage': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/userManage.js'
     ],
-    'admin/demand': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/demand': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/demand.js'
     ],
-    'admin/achievement': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/achievement': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/achievement.js'
     ],
-    'admin/set': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/set': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/set.js'
     ],
     //admin-servicesManage
-    'admin/servicesManage/contract': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/servicesManage/contract': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/servicesManage/contract.js'
     ],
-    'admin/servicesManage/patent': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/servicesManage/patent': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/servicesManage/patent.js'
     ],
-    'admin/servicesManage/copyright': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/servicesManage/copyright': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/servicesManage/copyright.js'
     ],
-    'admin/servicesManage/highTech': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/servicesManage/highTech': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/servicesManage/highTech.js'
     ],
-    'admin/servicesManage/highTechInfo': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/servicesManage/highTechInfo': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/servicesManage/highTechInfo.js'
     ],
-    'admin/servicesManage/technology': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'admin/servicesManage/technology': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/servicesManage/technology.js'
     ],
     //portal  门户
-    'portal/search/demand': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'portal/search/demand': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/portal/search/demand.js'
     ],
-    'portal/search/achievement': ['webpack-dev-server/client?http://127.0.0.1:8088', // WebpackDevServer host and port
+    'portal/search/achievement': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/portal/search/achievement.js'
     ],