dengzhiguo 6 years ago
parent
commit
3402d99541

+ 16 - 0
js/admin/project.js

@@ -0,0 +1,16 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import '../../css/base.less';
+
+import TopTab from '../component/manageCenter/topTab.jsx';
+import Footer from '../component/manageCenter/bottom.jsx';
+import Content from '../component/manageCenter/project/content.jsx';
+
+ReactDOM.render(
+    <div className="wrap clearfix">
+        <TopTab active={'myClient'}/>
+        <Content />
+        <Footer />
+    </div>,
+    document.getElementById('root')
+)

+ 10 - 0
js/component/manageCenter/order/content.jsx

@@ -32,6 +32,7 @@ class Content extends Component {
     }
     getKey (key) {
         switch (key) {
+        	//科技服务订单
             case 'myService':
                 require.ensure([], () => {
                     const MyService = require('./myOrder/servicesOrder/myService').default;
@@ -40,6 +41,15 @@ class Content extends Component {
                     });
                 });
                 break;
+            //开单与签单
+            case 'billing':
+                require.ensure([], () => {
+                    const Billing = require('./orderNew/billing').default;
+                    this.setState({
+                        component: <Billing />
+                    });
+                });
+                break;
             case 'orderStatistics':
                 require.ensure([], () => {
                     const OrderStatistics = require('./orderStatistics/orderStatistics').default;

File diff suppressed because it is too large
+ 1812 - 0
js/component/manageCenter/order/orderNew/addService.jsx


+ 471 - 0
js/component/manageCenter/order/orderNew/billing.jsx

@@ -0,0 +1,471 @@
+import React from 'react';
+import ReactDom from 'react-dom';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import { Form,Radio, Icon, Button, Input, Select, Spin, Table, Switch, message, DatePicker, Checkbox ,Modal, Upload ,Popconfirm} from 'antd';
+import NewService from "./addService.jsx";
+import moment from 'moment';
+import '../userMangagement.less';
+import {intentProgress,transactionProgress,contractProgress,projectProgress,orderType, orderStage, orderState,paymentState,specially,specialBatchState, projectState,orderChannel, approvedState, lock,paymentMethod,transactionChannel} from '../../../dataDic.js';
+import {getIntentProgress,getTransactionProgress,getProjectState,getContractProgress,getProjectProgress,splitUrl,getOrderType,getOrderStage,getOrderState,getPaymentState,getOrderChannel,getApprovedState,getLock,getPaymentMethod,getTransactionChannel} from '../../../tools.js';
+
+const MyService=Form.create()(React.createClass({
+	loadData(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/order/listServiceOrder',
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                buyerName:this.state.customerName,
+                orderNo:this.state.orderNo,
+                startDate: this.state.releaseDate[0],
+				endDate: this.state.releaseDate[1],
+				projectStage:this.state.projectProgress,
+				liquidationStatus:this.state.settlementState, //结算
+				orderStatus:this.state.orderStatusSearch,
+				approval:this.state.approval,
+				orderChannel:this.state.orderChannelSearch,
+				intention:this.state.intentOrder?1:0,
+				formal:this.state.formalOrder?1:0,
+            },
+            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.list.length; i++) {
+                        let thisdata = data.data.list[i];
+                        theArr.push({
+                             key: i,
+	                         id: thisdata.id,
+	                         orderNo: thisdata.orderNo,//订单编号
+	                         orderType:thisdata.orderType,//订单类型
+	                         orderStatus:thisdata.orderStatus,
+	                         liquidationStatus:thisdata.liquidationStatus,
+	                         createTime:thisdata.createTime,
+	                         buyerName:thisdata.buyerName,
+	                         signTotalAmount:thisdata.signTotalAmount,
+	                         projectStage:thisdata.projectStage,
+	                         approval:thisdata.approval,
+	                         orderChannel:thisdata.orderChannel,
+	                         salesmanName:thisdata.salesmanName,
+	                         active:thisdata.active,
+	                         signTime:thisdata.signTime,
+	                         financeName:thisdata.financeName
+                        });
+                    };
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
+                };
+                if(!data.data.list.length){
+					this.state.pagination.current=0
+					this.state.pagination.total=0
+				}
+                this.setState({
+                	pageNo:pageNo,
+                    dataSource: theArr,
+                    pagination: this.state.pagination,
+                    selectedRowKeys:[],
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+        	datauser:{},
+            selectedRowKeys: [],
+            releaseDate: [],
+            signBillState:false,
+            signBillVisible:false,
+            selectedRows: [],
+            searchMore: true,
+            loading: false,
+            intentOrder:true,
+            formalOrder:true,
+            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: 'orderNo',
+                    key: 'orderNo'
+                }, {
+                    title: '下单时间',
+                    dataIndex: 'createTime',
+                    key: 'createTime'
+                },{
+                    title: '合同签订时间',
+                    dataIndex: 'signTime',
+                    key: 'signTime'
+                },{
+                    title: '客户名称',
+                    dataIndex: 'buyerName',
+                    key: 'buyerName',
+                    render:(text)=>{
+                    	return (text&&text.length>8?text.substr(0,8)+'...':text)
+                    }
+                }, {
+                    title: '流程状态',
+                    dataIndex: 'projectStage',
+                    key: 'projectStage',
+                    render:text=>{return getProjectState(text)}
+                }, {
+                    title: '签单金额(万元)',
+                    dataIndex: 'signTotalAmount',
+                    key: 'signTotalAmount'
+                },{
+                    title: '结算状态',
+                    dataIndex: 'liquidationStatus',
+                    key: 'liquidationStatus',
+                    render:text=>{return getPaymentState(text)}
+                }, {
+                    title: '是否特批',
+                    dataIndex: 'approval',
+                    key: 'approval',
+                    render:text=>{return getApprovedState(text)}
+                },{
+                    title: '订单负责人',
+                    dataIndex: 'salesmanName',
+                    key: 'salesmanName'
+                },{
+                    title: '财务负责人',
+                    dataIndex: 'financeName',
+                    key: 'financeName'
+                }
+            ],
+            dataSource: [],
+        };
+    },
+    //是否退款
+    refundCancel(record){
+    	this.refund(record,0)
+    },
+    refundOk(record){
+    	this.refund(record,1)
+    },
+    refund(record,index){
+    	this.setState({
+        	signBillVisible:false,
+            selectedRowKeys: [],
+            loading: true,
+            userDetaile:false
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/order/confirmRefund',
+            data: {
+            	orderNo:record.orderNo,
+            	confirm:index
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('操作成功!');
+                this.setState({
+                    loading: false,
+                    showDesc:false
+                });
+            } 
+            this.loadData(this.state.pageNo);
+        }.bind(this));
+    },
+    //受理订单
+    admissibleOrderOk(e){
+    	this.admissibleOrder(e,true)
+    },
+    admissibleOrderCancel(e){
+    	this.admissibleOrder(e,false)
+    },
+    admissibleOrder(record,index) {
+        this.setState({
+        	signBillVisible:false,
+            selectedRowKeys: [],
+            loading: true,
+            userDetaile:false
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/order/confirmIntention',
+            data: {
+            	orderNo:record.orderNo,
+            	confirm:index
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('操作成功!');
+                this.setState({
+                    loading: false,
+                    showDesc:false
+                });
+            } else {
+                message.warning(data.error[0].message);
+                this.setState({
+                	showDesc:true
+                })
+            };
+            this.loadData(this.state.pageNo);
+        }.bind(this));
+    },
+    //取消订单
+    cancelOrder(e){
+    	this.operation(e,3)
+    },
+    //作废订单
+    scrapOrder(e){
+    	this.operation(e,2)
+    },
+    //锁定订单
+    lockOrder(e){
+    	this.operation(e,0)
+    },
+    //解锁订单
+    unlockOrder(e){
+    	this.operation(e,1)
+    },
+    //签单
+    signBill(ids){
+    	this.setState({
+    		uid:ids,
+    		signBillVisible:true
+    	})
+    },
+    componentWillMount() {
+        this.loadData();
+        let data=localStorage.getItem('newData');
+    	if(data!='{}'&&data){
+    		var newData = JSON.parse(data);
+    		this.tableRowClick(newData);
+    	};
+    },
+    tableRowClick(record, index) {
+    	this.state.userDetaile=true;
+        this.state.datauser = record;
+        this.setState({
+        	signBillVisible:false,
+        	signBillState:true,
+            showDesc: true
+        });
+    	localStorage.setItem('newData','{}');
+    },
+    //列表各种骚操作
+    operation(record,index) {
+        this.setState({
+            selectedRowKeys: [],
+            loading: true,
+            showDesc:false
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/order/lockOrRevokeOrder',
+            data: {
+            	orderNo:record.orderNo,
+            	operatorType:index
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('操作成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData(this.state.pageNo);
+        }.bind(this));
+    },
+    addClick() {
+    	this.state.userDetaile=false;
+        this.setState({
+        	signBillVisible:false,
+            showDesc: true
+        });
+    },
+    closeDesc(e, s) {
+    	this.state.userDetaile=false;
+    	this.state.signBillVisible=false;
+        this.state.showDesc = e;
+        if (s) {
+            this.loadData(this.state.pageNo);
+        };
+    },
+    searchSwitch() {
+		this.setState({
+			signBillVisible:false,
+			searchMore: !this.state.searchMore
+		});
+	},
+    search() {
+    	this.setState({
+    		signBillVisible:false
+    	})
+        this.loadData();
+    },
+    reset() {
+    	this.setState({
+    		signBillVisible:false
+    	})
+    	this.state.orderNo='';
+    	this.state.customerName='';
+    	this.state.releaseDate[0] = undefined;
+		this.state.releaseDate[1] = undefined;
+		this.state.projectProgress = undefined;
+		this.state.settlementState = undefined;
+		this.state.orderStatusSearch = undefined;
+		this.state.orderChannelSearch = undefined;
+		this.state.approval= undefined;
+		this.state.formalOrder=true;
+		this.state.intentOrder=true;
+        this.loadData();       
+    },
+    render() {
+    	const FormItem = Form.Item;
+    	const formItemLayout = {
+			labelCol: { span: 8 },
+			wrapperCol: { span: 14 },
+		};
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+	                this.setState({
+	                    selectedRows: selectedRows.slice(-1),
+	                    selectedRowKeys: selectedRowKeys.slice(-1)
+	                }); 
+            },
+            onSelectAll: (selected, selectedRows, changeRows) => {
+			   this.setState({
+			   		selectedRowKeys:[]
+			   })
+			},
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        const { RangePicker } = DatePicker;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                	<span style={{fontSize:'16px'}}>开单与签单</span>	
+	                <div className="user-search">
+	                    <Input placeholder="客户名称" style={{width:'150px'}}
+	                        value={this.state.customerName}
+	                        onChange={(e) => { this.setState({ customerName: e.target.value }); }} />
+	                    <Input placeholder="订单编号" style={{width:'150px'}}
+	                        value={this.state.orderNo}
+	                        onChange={(e) => { this.setState({ orderNo: e.target.value }); }} />
+	                    <span style={{marginRight:"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 }); }} />    
+		                <Select placeholder="特批筛选"
+                            style={{ width: 150 ,marginLeft:'10px'}}
+                            value={this.state.approval}
+                            onChange={(e) => { this.setState({ approval: e }) }}>
+                            {
+                                specially.map(function (item) {
+                                        return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                })
+                            }
+                        </Select>
+                        <Button type="primary" onClick={this.search} style={{marginLeft:'10px'}}>搜索<Icon type="search" /></Button>
+	                    <Button onClick={this.reset}>重置 <Icon type="reload" /></Button>
+	                    <span style={{marginLeft:'10px',marginRight:'20px'}}>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>    
+	                    <Button type="primary" className="addButton" onClick={this.addClick} >开单<Icon type="plus" /></Button>
+	                </div>
+	                <div className='clearfix' style={{marginTop:'5px'}}>
+	                  <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>   
+	                  		<Select placeholder="订单状态"
+	                            style={{ width: 150 ,marginRight:'10px',marginBottom:'10px'}}
+	                            value={this.state.orderStatusSearch}
+	                            onChange={(e) => { this.setState({ orderStatusSearch: e }) }}>
+	                            {
+                                    orderState.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                }
+	                        </Select>
+	                        <Select placeholder="结算状态"
+	                            style={{ width: 150 ,marginRight:'10px'}}
+	                            value={this.state.settlementState}
+	                            onChange={(e) => { this.setState({ settlementState: e }) }}>
+	                            {
+                                    paymentState.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                }
+	                        </Select>
+	                        <Select placeholder="项目进度"
+	                            style={{ width: 150 ,marginRight:'10px'}}
+	                            value={this.state.projectProgress}
+	                            onChange={(e) => { this.setState({ projectProgress: e }) }}>
+	                            {
+                                    projectState.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                }
+	                        </Select>
+	                        <Select placeholder="订单渠道"
+	                            style={{ width: 150 }}
+	                            value={this.state.orderChannelSearch}
+	                            onChange={(e) => { this.setState({ orderChannelSearch: e }) }}>
+	                            {
+                                    orderChannel.map(function (item) {
+                                            return <Select.Option key={item.value} >{item.key}</Select.Option>
+                                    })
+                                }
+	                        </Select>
+	                    </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>
+	                <NewService
+	                	uid={this.state.uid}
+	                	signBillVisible={this.state.signBillVisible}
+	                    signBillState={this.state.signBillState}
+	                	operation={this.operation}
+	                	admissibleOrder={this.admissibleOrder}
+	                    userDetaile={this.state.userDetaile}
+	                    datauser={this.state.datauser}
+	                    showDesc={this.state.showDesc}
+	                    closeDesc={this.closeDesc} />
+	            </div >
+            </div>
+        );
+    }
+}));
+
+export default MyService;
+

+ 113 - 0
js/component/manageCenter/project/content.jsx

@@ -0,0 +1,113 @@
+import React, { Component } from 'react';
+import '../content.less';
+import LeftTab from '../leftTab';
+import {getMenu} from '../publicMenu.js'
+
+class Content extends Component {
+    constructor() {
+        super();
+        this.state = {
+            loading: false,
+            component: <div></div>,
+        };
+    }
+    componentWillMount() {
+        var ids=window.location.href.indexOf('rid=');
+        var idk=window.location.href.substr(ids+4);
+        var rid=idk.split('#');
+        let menu=getMenu(rid);
+        let curry;
+        if(menu[0].subMenus.length>0){
+        	curry=menu[0].subMenus[0].url.split('#');
+        }else{
+        	curry=menu[0].url.split('#');
+        };
+        if (window.location.hash) {
+            this.getKey(window.location.hash.substr(1));
+        } else {
+         this.getKey(curry[1]);
+        };
+    }
+    getKey(key) {
+        switch (key) {    
+            //项目派单
+            case 'projectAssignment':
+                require.ensure([], () => {
+                    const ProjectAssignment = require('./project/projectAssignment').default;
+                    this.setState({
+                        component: <ProjectAssignment ApiUrl={''}/>                      
+                      
+                    });
+                });
+                break; 
+          	//项目查询
+			case 'projectQuery':
+                require.ensure([], () => {
+	                const ProjectQuery = require('./project/projectQuery').default;
+	                this.setState({
+	                    component:<ProjectQuery ApiUrl={''}/>,	                    	                  
+	                });
+          	    });
+          	    break;
+          	//任务查询
+          	case 'taskQuery':
+                require.ensure([], () => {
+	                const TaskQuery = require('./task/taskQuery').default;
+	                this.setState({
+	                    component:<TaskQuery ApiUrl={''}/>,	                    	                  
+	                });
+          	    });
+          	    break;
+          	//任务派单
+          	case 'taskAssignment':
+                require.ensure([], () => {
+	                const TaskAssignment = require('./task/taskAssignment').default;
+	                this.setState({
+	                    component:<TaskAssignment ApiUrl={''}/>,	                    	                  
+	                });
+          	    });
+          	    break;
+          	//我的任务    
+          	case 'myTask':
+                require.ensure([], () => {
+	                const MyTask = require('./task/myTask').default;
+	                this.setState({
+	                    component:<MyTask ApiUrl={''}/>,	                    	                  
+	                });
+          	    });
+          	    break;
+          	//任务统计
+          	case 'taskCount':
+                require.ensure([], () => {
+	                const TaskCount = require('./task/taskCount').default;
+	                this.setState({
+	                    component:<TaskCount ApiUrl={''}/>,	                    	                  
+	                });
+          	    });
+          	    break;
+      	    default:
+            require.ensure([], () => {
+                const Module = require('../module').default;
+                this.setState({
+                    component:<Module ApiUrl={''}/>	    
+                	});
+                });  
+           
+           
+                
+        };
+        window.location.hash = key;
+    }
+    render() {
+        return (
+            <div className="manage-content">
+                <LeftTab handlekey={this.getKey.bind(this)} />
+                <div className="content-right">
+                   {this.state.component}
+                </div>
+            </div>
+        )
+    }
+}
+
+export default Content;

+ 0 - 0
js/component/manageCenter/project/project/projectAssignment.jsx


+ 0 - 0
js/component/manageCenter/project/project/projectQuery.jsx


+ 0 - 0
js/component/manageCenter/project/task/myTask.jsx


+ 0 - 0
js/component/manageCenter/project/task/taskAssignment.jsx


+ 0 - 0
js/component/manageCenter/project/task/taskCount.jsx


+ 0 - 0
js/component/manageCenter/project/task/taskQuery.jsx


+ 5 - 4
js/component/manageCenter/servicesManage/projectOrder/projectManagement/projectManageDetaile.jsx

@@ -35,6 +35,7 @@ const MySettlementDetaile = Form.create()(React.createClass({
                              commodityName:thisdata.commodityName, 
                              commodityQuantity:thisdata.commodityQuantity, 
                              technicianName:thisdata.technicianName, 
+                             technicianMobile:thisdata.technicianMobile, 
                              taskStatus:thisdata.taskStatus, 
                              deleteSign:thisdata.deleteSign, 
                              taskComment:thisdata.taskComment, 
@@ -72,14 +73,14 @@ const MySettlementDetaile = Form.create()(React.createClass({
                     title: '任务名称',
                     dataIndex: 'commodityName',
                     key: 'commodityName'
-                },{
-                    title: '任务数量',
-                    dataIndex: 'commodityQuantity',
-                    key: 'commodityQuantity'
                 }, {
                     title: '任务负责人',
                     dataIndex: 'technicianName',
                     key: 'technicianName'
+                },{
+                    title: '负责人联系方式',
+                    dataIndex: 'technicianMobile',
+                    key: 'technicianMobile'
                 }, {
                     title: '任务状态',
                     dataIndex: 'taskStatus',

+ 6 - 0
webpack.config.js

@@ -250,6 +250,12 @@ module.exports = (function () {
             template: './template/template.html',
             chunks: ['admin/operate', 'vendors']
         }),
+        new HtmlWebpackPlugin({
+            title: '管理员-项目管理',
+            filename: 'admin/project.html',
+            template: './template/template.html',
+            chunks: ['admin/project', 'vendors']
+        }),
         //portal 门户
         // new HtmlWebpackPlugin({
         //     title: '主页-需求搜索',

+ 5 - 0
webpack/entry.config.js

@@ -36,6 +36,7 @@ module.exports = {
     'admin/userOrder': './js/admin/userOrder.js',
     'admin/order': './js/admin/order.js',
     'admin/operate': './js/admin/operate.js',
+    'admin/project': './js/admin/project.js',
     //portal  门户
     // 'portal/search/demand': './js/portal/search/demand.js',
     // 'portal/search/achievement': './js/portal/search/achievement.js',
@@ -137,6 +138,10 @@ module.exports = {
       'webpack/hot/only-dev-server',
       './js/admin/operate.js'
     ],
+    'admin/peoject': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
+      'webpack/hot/only-dev-server',
+      './js/admin/peoject.js'
+    ],
     //admin-servicesManage
     'admin/servicesManage/contract': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',