liting2017 6 years ago
parent
commit
1666463083

+ 4 - 0
js/admin/index/content.jsx

@@ -4,6 +4,8 @@ import DemandExamine from '@/administration/demand/demandExamine';
 import AdmianIndex from '@/administration/index/index';
 import AchievementExamine from '@/administration/achievement/achievementExamine';
 import AchievementLibrary from '@/administration/achievement/techAchievement';
+import BusinessCategory from '@/administration/business/businessCategory';
+import BusinessProject from '@/administration/business/businessProject';
 
 import {hashHistory,Route,Router,IndexRedirect} from 'react-router';
 import {Layout} from 'antd';
@@ -22,6 +24,8 @@ export default class ContentRouter extends React.Component {
             <Route path="/index" component={AdmianIndex} />
             <Route path="/achievementLibrary" component={AchievementLibrary} />
             <Route path="/achievementExamine" component={AchievementExamine} />
+            <Route path="/businessCategory" component={BusinessCategory} />
+            <Route path="/businessProject" component={BusinessProject} />
         </Router>
       </Content>
     )

+ 10 - 1
js/admin/menu.jsx

@@ -3,7 +3,7 @@ module.exports = {
       {
         name: '首页',
         url: 'sub1',
-        icon: 'usb',
+        icon: 'home',
         children: [
           { name: '消息中心', url: 'index' },
         ]
@@ -25,6 +25,15 @@ module.exports = {
           { name: '技术成果库', url: 'achievementLibrary' },
           { name: '成果发布审核', url: 'achievementExamine' },
         ]
+      },
+      {
+        name: '业务管理',
+        url: 'sub4',
+        icon: 'wallet',
+        children: [
+          { name: '业务分类管理', url: 'businessCategory' },
+          { name: '业务项目管理', url: 'businessProject' },
+        ]
       }
     ]
 }

+ 563 - 0
js/component/administration/business/businessCategory.jsx

@@ -0,0 +1,563 @@
+import React from 'react';
+import ReactDom from 'react-dom';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import { Form,Radio, Icon, Button, Input, Select, Spin, Table, Switch, message, DatePicker, Modal, Upload,Popconfirm,TimePicker } from 'antd';
+import {categoryState} from '@/dataDic.js';
+import {getCategoryState,splitUrl} from '@/tools.js';
+//图片组件
+const PicturesWall = React.createClass({
+	getInitialState() {
+		return {
+			previewVisible: false,
+			previewImage: '',
+			fileList: [],
+			tags: []
+		};
+	},
+	handleCancel() {
+		this.setState({ previewVisible: false });
+	},
+	handlePreview(file) {
+		this.setState({
+			previewImage: file.url || file.thumbUrl,
+			previewVisible: true
+		});
+	},
+	handleChange(info) {
+		let fileList = info.fileList;
+		this.setState({ fileList });
+		this.props.fileList(fileList);
+	},
+	componentWillReceiveProps(nextProps) {
+		this.state.fileList = nextProps.pictureUrl;
+	},
+	render() {
+		const { previewVisible, previewImage, fileList } = this.state;
+		const uploadButton = (
+			<div>
+				<Icon type="plus" />
+				<div className="ant-upload-text">点击上传</div>
+			</div>
+		);
+		return (
+			<div className="clearfix">
+				<Upload
+					action={globalConfig.context + '/api/admin/jtBusiness/uploadPicture'}
+					data={{ sign: 'jt_business_picture'}}
+					listType="picture-card"
+					fileList={fileList}
+					onPreview={this.handlePreview}
+					onChange={this.handleChange}
+				>
+					{fileList.length >=1 ? null : uploadButton}
+				</Upload>
+				<Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}>
+					<img alt="example" style={{ width: '100%' }} src={previewImage} />
+				</Modal>
+			</div>
+		);
+	}
+});
+const BusinessCategory=Form.create()(React.createClass({
+	loadData(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true,
+            page:pageNo,
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/jtBusiness/category/list',
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                name:this.state.nameSearch, //品类名称
+                layer:this.state.layerSearch,//组织层级
+            },
+            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
+                            sort:thisdata.sort,//品类序号
+                            number: thisdata.number,//品类编号
+                            name: thisdata.name,//品类名称
+                            layer:thisdata.layer,
+                            superId:thisdata.superId,
+                            layerName: thisdata.layerName,//品类层级
+                            superName: thisdata.superName,//上级品类
+                        });
+                    };
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
+                };
+                this.setState({
+                    dataSource: theArr,
+                    pagination: this.state.pagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            searchMore: true,
+            selectedRowKeys: [],
+            pictureUrl: [],
+            selectedRows: [],
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                    this.setState({
+                        selectedRowKeys: [],
+                    })
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '品类序号',
+                    dataIndex: 'sort',
+                    key: 'sort',
+                },{
+                    title: '品类编号',
+                    dataIndex: 'number',
+                    key: 'number',
+                }, {
+                    title: '品类名称',
+                    dataIndex: 'name',
+                    key: 'name',
+                },  {
+                    title: '品类层级',
+                    dataIndex: 'layerName',
+                    key: 'layerName'
+                }, {
+                    title: '上级品类',
+                    dataIndex: 'superName',
+                    key: 'superName',
+                },{
+                    title:'操作',
+                    dataIndex: 'superName1',
+                    key: 'superName1',
+                    render:(text,recard)=>{
+                        return (
+                            <div>
+                                 {recard.layer=='1'&&<Button onClick={(e)=>{e.stopPropagation();this.nextAdd(recard)}}>新建下级品类</Button>}
+                            </div>
+                         )
+                    }
+                    
+                }
+            ],
+            dataSource: [],
+        };
+    },
+    componentWillMount() {
+        this.loadData();
+    },
+    //新建下级
+    nextAdd(recard){
+        this.setState({
+            visible: true,
+            name:'',
+            addFirst:1,
+            superId:recard.id
+        });
+    },
+	//编辑保存
+    edithandleSubmit(e){
+        e.preventDefault();	
+        let thePictureUrl = [];
+        console.log(this.state.pictureUrl)
+        if (this.state.pictureUrl.length) {
+            let picArr = [];
+            this.state.pictureUrl.map(function (item) {
+                if ( item.response && item.response.data && item.response.data.length ){
+                    picArr.push(item.response.data);
+                }
+            });
+            thePictureUrl = picArr.join(",");
+		};
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/jtBusiness/category/update",
+            data: {
+                id: this.state.id,
+                name:this.state.name,
+                summary:this.state.summary,
+                imgUrl:thePictureUrl
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.setState({
+                    loading: false,
+                    editvisible:false
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData(this.state.page)
+        }.bind(this));
+    },
+    //整行删除
+    delectRow() {
+        let deletedIds = '';
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds=rowItem.id;
+            };
+        };
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/jtBusiness/category/delete",
+            data: {
+                id: deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('删除成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+           this.loadData(this.state.page)
+        }.bind(this));
+    },
+   
+    addClick() {
+        this.state.RowData = {};
+        this.setState({
+            visible: true,
+            addFirst:0,
+            name:'',
+            superId:'',
+        });
+    },
+    //新增保存
+    addhandleSubmit(e){
+        e.preventDefault();
+        this.setState({
+            loading:true
+        })
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/jtBusiness/category/apply",
+            data: {
+                name:this.state.name,
+                superId:this.state.superId,
+                layer:this.state.addFirst?'2':'1'
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('新增成功!');
+                this.setState({
+                    loading: false,
+                    visible:false
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData(this.state.page)
+        }.bind(this));
+
+    },
+    editClick() {
+        this.state.RowData = {};
+        this.setState({
+            editvisible: true
+        });
+    },
+    detailes(recard){
+        this.setState({
+            loading: true,
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/jtBusiness/category/detail',
+            data: {
+               id:recard.id
+            },
+            success: function (data) {
+                
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+                    let thisdata=data.data;
+                    this.setState({
+                        id:thisdata.id,//品类id
+                        name:thisdata.name,//品类名称
+                        createTime:thisdata.createTime?(new Date(thisdata.createTime)).toLocaleString():'',
+                        superId:thisdata.superId,//父类id
+                        pictureUrl: thisdata.imgUrl ? splitUrl(thisdata.imgUrl, ',', globalConfig.avatarHost + '/upload') : [],
+                    })
+                };
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+   	handleCancel() {
+        this.setState({ visible: false })
+    },
+    edithandleCancel() {
+        this.setState({ editvisible: false })
+    },
+    search() {
+        this.loadData();
+    },
+    reset() {
+        this.state.nameSearch = '';//品类名称清零
+        this.state.layerSearch = undefined;//品类层级清零
+        this.loadData();       
+    },
+    searchSwitch() {
+        this.setState({
+            searchMore: !this.state.searchMore
+        });
+    },
+    getPictureUrl(e) {
+        this.setState({ pictureUrl: e });
+    },
+    tableRowClick(record, index) {
+        this.setState({
+            editvisible: true,
+            visible:false,
+            theData:record
+        });
+        this.detailes(record)
+    },
+    render() {
+    	const FormItem = Form.Item
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows.slice(-1),
+                    selectedRowKeys: selectedRowKeys.slice(-1)
+                });
+            }
+        };
+         const formItemLayout = {
+            labelCol: { span: 8 },
+            wrapperCol: { span: 14 },
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        const { RangePicker } = DatePicker;
+        const theData =this.state.theData ||{};
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+	                <div className="user-search">
+	                    <Input placeholder="业务品类名称" style={{width:'150px',marginRight:'10px',marginBottom:'10px'}}
+	                        value={this.state.nameSearch}
+	                        onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />
+	                    <Select placeholder="品类层级"
+                            style={{ width:'200px',marginRight:'10px' }}
+                            value={this.state.layerSearch} onChange={(e)=>{this.setState({layerSearch:e})}}>
+                            <Select.Option value="1">一级</Select.Option>
+                            <Select.Option value="2">二级</Select.Option>
+		                </Select>
+	                    <Button type="primary" onClick={this.search} style={{marginRight:'10px'}}>搜索</Button>
+	                    <Button onClick={this.reset} style={{marginRight:'10px'}}>重置</Button>
+                        <Popconfirm title="是否删除?" onConfirm={this.delectRow} okText="是" cancelText="否">
+						     <Button style={{ background: "#ea0862", border: "none", color: "#fff",marginRight:'10px' ,marginLeft:'10px'}}
+	                   			 disabled={!hasSelected} 
+	                    		 >删除<Icon type="minus" />
+	           			     </Button>
+						</Popconfirm>
+						<Popconfirm title="是否停用?" onConfirm={this.blockRow} okText="是" cancelText="否">
+						     <Button style={{ background: "#ea0862", border: "none", color: "#fff",marginRight:'10px' ,marginLeft:'10px',display:'none'}}
+	                   			 disabled={!hasSelected} 
+	                    		 >停用<Icon type="minus" />
+	           			     </Button>
+						</Popconfirm>
+	                    <Button type="primary" className="addButton" onClick={this.addClick} style={{float:'right',marginRight:'200px'}}>新增品类<Icon type="plus" /></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>
+	             
+	                 <div className="patent-desc">
+	                    <Modal maskClosable={false} visible={this.state.visible}
+	                        onOk={this.checkPatentProcess} onCancel={this.handleCancel}
+	                        width='400px'
+	                        title='新增品类'                       
+	                        footer=''
+	                        className="admin-desc-content">
+	                         <Form layout="horizontal" onSubmit={(e)=>{this.addhandleSubmit(e,{})}} id="demand-form">
+				                <Spin spinning={this.state.loading}>
+				                    <div className="clearfix">
+				                    	<FormItem
+					                            labelCol={{ span: 7 }}
+					                        	wrapperCol={{ span: 12 }}
+					                            label="品类名称" >
+				                    	     <Input placeholder="品类名称" value={this.state.name} style={{width:'94%'}}
+				                                onChange={(e)=>{this.setState({name:e.target.value})}} required="required"/>
+				                           		<span className="mandatory" style={{color:'red',marginLeft:'5px'}}>*</span>
+					                    </FormItem>
+				                    </div>
+				                    <div className="clearfix">
+					                    <FormItem  
+					                    	labelCol={{ span: 7 }}
+					                        wrapperCol={{ span: 12 }}
+				                           label="上级品类"
+			                               > 
+			                               <span>超级管理员</span>
+			                   		    </FormItem>
+		                   		    </div>
+				                    <FormItem wrapperCol={{ span: 12, offset: 7 }}>
+				                        <Button className="set-submit" type="primary" htmlType="submit">保存</Button>  
+				                        <Button className="set-submit" type="ghost" onClick={this.handleCancel} style={{marginLeft:'15px'}}>取消</Button>
+				                    </FormItem> 
+				                </Spin>
+				            </Form >
+	                    </Modal>
+                	 </div>
+                	 
+                	 <div className="patent-desc">
+	                    <Modal maskClosable={false} visible={this.state.editvisible}
+	                        onOk={this.checkPatentProcess} onCancel={this.edithandleCancel}
+	                        width='600px'
+	                        title='编辑品类'                       
+	                        footer=''
+	                        className="admin-desc-content">
+	                         <Form layout='horizontal' onSubmit={this.edithandleSubmit} id="demand-form">
+				                <Spin spinning={this.state.loading}>
+				                    <div className="clearfix">
+				                    	<FormItem 
+					                            labelCol={{ span: 7 }}
+					                        	wrapperCol={{ span: 12 }}
+					                            label="品类名称" >
+				                                <Input placeholder="组织名称" value={this.state.name} 
+				                                onChange={(e)=>{this.setState({name:e.target.value})}}/>
+					                    </FormItem>
+				                    </div> 
+				                    <div className="clearfix">
+					                    <FormItem  
+					                    	labelCol={{ span: 7 }}
+					                        wrapperCol={{ span: 12 }}
+				                           label="上级品类"
+			                               > 
+			                               <span>{theData.superName}</span>
+			                   		    </FormItem>
+		                   		    </div>
+		                   		    <div className="clearfix">
+					                    <FormItem 
+					                        labelCol={{ span: 7 }}
+					                        wrapperCol={{ span: 12 }}
+					                        label="业务品类图标" >
+					                        <PicturesWall
+                                                fileList={this.getPictureUrl}
+                                                pictureUrl={this.state.pictureUrl}
+                                                visible={this.props.visible}
+                                            />
+					                    </FormItem>
+		                   		    </div>
+		                   		    <div className="clearfix">
+				                    	<FormItem 
+						                    labelCol={{ span: 7 }}
+						                    wrapperCol={{ span: 12 }}
+						                    label="品类序号"
+					                        >
+					                        <span>{theData.sort}</span>
+					                    </FormItem>
+					                </div>
+		                   		    <div className="clearfix">
+				                    	<FormItem 
+						                    labelCol={{ span: 7 }}
+						                    wrapperCol={{ span: 12 }}
+						                    label="品类层级"
+					                        >
+					                        <span>{theData.layerName}</span>
+					                    </FormItem>
+					                </div>
+					                <div className="clearfix">
+				                    	<FormItem 
+						                    labelCol={{ span: 7 }}
+						                    wrapperCol={{ span: 12 }}
+						                    label="品类编号"
+					                        >
+					                        <span>{theData.number}</span>
+					                    </FormItem>
+					                </div>
+					                <div className="clearfix" >
+				                    	<FormItem 
+						                    labelCol={{ span: 7 }}
+						                    wrapperCol={{ span: 12 }}
+						                    label="创建人"
+					                        >
+					                        <span>超级管理员</span>
+					                    </FormItem>
+					                </div>
+					                <div className="clearfix">
+				                    	<FormItem 
+						                    labelCol={{ span: 7 }}
+						                    wrapperCol={{ span: 12 }}
+						                    label="创建时间"
+					                        >
+					                        <span>{this.state.createTime}</span>
+					                    </FormItem>
+					                </div>
+				                    <FormItem wrapperCol={{ span: 12, offset: 7 }}>
+				                        <Button className="set-submit" type="primary" htmlType="submit">保存</Button>  
+				                        <Button className="set-submit" type="ghost" onClick={this.edithandleCancel} style={{marginLeft:'100px'}}>取消</Button>
+				                    </FormItem> 
+				                </Spin>
+				            </Form >
+	                    </Modal>
+                	 </div>
+                	 
+            	</div>
+            </div>
+        );
+    }
+}));
+
+export default BusinessCategory;

+ 784 - 0
js/component/administration/business/businessProject.jsx

@@ -0,0 +1,784 @@
+import React from 'react';
+import ReactDom from 'react-dom';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import { citySelect,provinceList,areaSelect,provinceSelect} from '@/NewDicProvinceListAll';
+import { Form,Radio, Icon, Button, Input,Tabs, Select, Spin, Table, Switch, message, DatePicker, Modal, Upload,Popconfirm,TimePicker,Cascader, InputNumber } from 'antd';
+import {categoryState,industry,conditionOrganization,gameState} from '@/dataDic.js';
+import {getCategoryState,getGameState,splitUrl,getprovince} from '@/tools.js';
+const TabPane = Tabs.TabPane;
+//图片组件
+const PicturesWall = React.createClass({
+    getInitialState() {
+        return {
+            previewVisible: false,
+            previewImage: '',
+            fileList: [],
+        }
+    },
+    handleCancel() {
+        this.setState({ previewVisible: false })
+    },
+    handlePreview(file) {
+        this.setState({
+            previewImage: file.url || file.thumbUrl,
+            previewVisible: true,
+        });
+    },
+    handleChange(info) {
+        let fileList = info.fileList;
+        this.setState({ fileList });
+        this.props.fileList(fileList);
+    },
+    componentWillReceiveProps(nextProps) {
+        this.state.fileList = nextProps.pictureUrl; 
+    },
+    render() {
+        const { previewVisible, previewImage, fileList } = this.state;
+        const uploadButton = (
+            <div>
+                <Icon type="plus" />
+                <div className="ant-upload-text">点击上传</div>
+            </div>
+        );
+        return (
+            <div style={{display:"inline-block"}}>
+                <Upload
+                    action={globalConfig.context + "/api/admin/jtBusiness/project/uploadPicture"}
+                    data={{ 'sign': 'jt_project_picture' }}
+                    listType="picture-card"
+                    fileList={fileList}
+                    onPreview={this.handlePreview}
+                    onChange={this.handleChange} >
+                    {fileList.length >= 1 ? null : uploadButton}
+                </Upload>
+                <Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}>
+                    <img alt="example" style={{ width: '100%' }} src={previewImage} />
+                </Modal>
+            </div>
+        );
+    }
+});
+//主体
+const BusinessProject=Form.create()(React.createClass({
+	loadData(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true,
+            page:pageNo,
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/portal/service/jtProject/list',
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                secondId:this.state.cid, 
+                name:this.state.nameSearch, 
+            },
+            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],
+							ProvinceCityArr = [],
+							cname='',superName='',
+							ProvinceS = thisdata.province, //getprovince
+							citys = thisdata.city,
+							Areas = thisdata.area;
+							ProvinceCityArr.push(ProvinceS, citys, Areas);
+							this.state.categoryList.map(item=>{
+								if(thisdata.categoryId==item.id){
+									cname=item.name;
+									superName=item.superName
+								}
+							})
+                        theArr.push({
+                            key: i,
+                            id:thisdata.id,//业务名称
+                            name: thisdata.name,//业务名称
+                            categoryId: thisdata.categoryId,//业务品类
+                            number:thisdata.number,
+							price: thisdata.price,//市场价
+							superName:superName,
+							cname:cname,
+							city:thisdata.city,
+                            activityPrice:thisdata.activityPrice,//最低折扣
+							memberPrice:thisdata.memberPrice,//会员价
+							offset:thisdata.offset,
+                            activityPrice:thisdata.activityPrice,//活动价
+                            activityFlag:thisdata.activityFlag,//活动生效标识
+                            status: thisdata.status,//项目状态
+							province:ProvinceCityArr,
+							introduce:thisdata.introduce,
+							createTime:thisdata.createTime?(new Date(thisdata.createTime)).toLocaleString():'',
+							value:thisdata.value,
+							applyConditions:thisdata.applyConditions
+						});
+                    };
+                    this.state.pagination.current = data.data.pageNo;
+                    this.state.pagination.total = data.data.totalCount;
+                };
+                this.setState({
+                    dataSource: theArr,
+                    pagination: this.state.pagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            searchMore: true,
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            orgCodeUrl: [],
+			companyLogoUrl: [],
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+					this.loadData(page);
+					this.setState({
+                        selectedRowKeys: [],
+                    })
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            formatPagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+			formatDataSource: [],
+            columns: [
+                {
+                    title: '项目名称',
+                    dataIndex: 'name',
+                    key: 'bname',
+                }, {
+                    title: '品类名称',
+                    dataIndex: 'cname',
+					key: 'cname'
+				},
+				{
+                    title: '上级品类',
+                    dataIndex: 'superName',
+					key: 'superName'
+                },  {
+                    title: '业务地区',
+                    dataIndex: 'area',
+                    key: 'area',
+                    render: (text,rocard) => { return <span>{getprovince(rocard.province)+'-'+getprovince(rocard.city)}</span> }
+				},
+				 {
+                    title: '市场价',
+                    dataIndex: 'price',
+                    key: 'price',
+                }, {
+                    title: '最低折扣',
+                    dataIndex: 'offset',
+                    key: 'offset',
+                }, {
+                    title: '会员价',
+                    dataIndex: 'memberPrice',
+                    key: 'memberPrice',
+                }, {
+                    title: '活动价',
+                    dataIndex: 'activityPrice',
+                    key: 'activityPrice',
+                }, {
+                    title: '活动生效标识',
+                    dataIndex: 'activityFlag',
+                    key: 'activityFlag',
+                    render: text => { return getGameState(text) }
+                }
+            ],
+            dataSource: [],
+        };
+	},
+	//业务品类列表获取
+	topLevel(){
+		$.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/jtBusiness/category/list',
+            data: {
+                pageNo:  1,
+                pageSize: 99999,
+            },
+            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,
+							name: thisdata.name,
+							superName:thisdata.superName//上级品类
+						});
+                    };
+                };
+                this.setState({
+                    categoryList: theArr,
+				});
+				this.loadData();
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+	},
+    componentWillMount() {
+	   this.topLevel()
+    },
+	//编辑部门,保存
+    edithandleSubmit(e){
+		e.preventDefault();
+        this.setState({
+            loading:true
+		})
+		let minPictureUrl = [];
+        if (this.state.orgCodeUrl.length) {
+            let picArr = [];
+            this.state.orgCodeUrl.map(function (item) {
+                if ( item.response && item.response.data && item.response.data.length ){
+                    picArr.push(item.response.data);
+                }
+            });
+            minPictureUrl = picArr.join(",");
+		};
+		let maxPictureUrl = [];
+        if (this.state.companyLogoUrl.length) {
+            let picArr = [];
+            this.state.companyLogoUrl.map(function (item) {
+                if ( item.response && item.response.data && item.response.data.length ){
+                    picArr.push(item.response.data);
+                }
+            });
+            maxPictureUrl = picArr.join(",");
+		};
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/jtBusiness/project/update",
+            data: {
+				id:this.state.id,//业务名称
+				name: this.state.name,//业务名称
+				categoryId: this.state.categoryId,//业务品类
+				price: this.state.price,//市场价
+				activityPrice:this.state.activityPrice,//最低折扣
+				memberPrice:this.state.memberPrice,//会员价
+				offset:this.state.offset,
+				activityPrice:this.state.activityPrice,//活动价
+				activityFlag:this.state.activityFlag,//活动生效标识
+				province:this.state.ProvinceCity?this.state.ProvinceCity[0]:'',//是否全国
+				city:this.state.ProvinceCity?this.state.ProvinceCity[1]:'',
+				introduce:this.state.introduce,
+				value:this.state.value,
+				minImgUrl:minPictureUrl,
+				maxImgUrl:maxPictureUrl,
+				applyConditions:this.state.applyConditions,
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.setState({
+                    loading: false,
+					editvisible:false
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData(this.state.page)
+        }.bind(this));
+    	
+	},
+	detailes(recard){
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/jtBusiness/project/detail',
+            data: {
+               id:recard.id
+            },
+            success: function (data) {
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                } else {
+					let thisdata=data.data;
+					let ProvinceCityArr=[];
+					ProvinceCityArr.push(thisdata.provice,thisdata.city)
+                    this.setState({
+						id:thisdata.id,//业务名称
+						name: thisdata.name,//业务名称
+						categoryId: thisdata.categoryId,//业务品类
+						number:thisdata.number,
+						price: thisdata.price,//市场价
+						activityPrice:thisdata.activityPrice,//最低折扣
+						memberPrice:thisdata.memberPrice,//会员价
+						offset:thisdata.offset,
+						activityPrice:thisdata.activityPrice,//活动价
+						activityFlag:thisdata.activityFlag?thisdata.activityFlag.toString():'',//活动生效标识
+						provinceCity:ProvinceCityArr,
+						introduce:thisdata.introduce,
+						createTime:thisdata.createTime?(new Date(thisdata.createTime)).toLocaleString():'',
+						value:thisdata.value,
+						applyConditions:thisdata.applyConditions,
+						orgCodeUrl: thisdata.minImgUrl ? splitUrl(thisdata.minImgUrl, ',', globalConfig.avatarHost + '/upload') : [],
+						companyLogoUrl:thisdata.maxImgUrl ? splitUrl(thisdata.maxImgUrl, ',', globalConfig.avatarHost + '/upload') : [],
+					})
+                };
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    //项目列表整行点击
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+		this.setState({
+			editvisible:true
+		})
+		this.detailes(record)
+    },
+    //左侧图片地址
+    getOrgCodeUrl(e) {
+		this.setState({ orgCodeUrl: e });
+	},
+	//右侧图片地址
+	getCompanyLogoUrl(e) {
+		this.setState({ companyLogoUrl: e });
+	},
+   
+    //新增一个项目,保存
+    addhandleSubmit(e){
+    	e.preventDefault();	
+    	if(!this.state.categoryName){
+    		message.warning('请输入项目名称');
+    		return false;
+    	}
+    	if(!this.state.addCid){
+    		message.warning('请选择项目品类');
+    		return false;
+    	}
+		this.setState({
+			loading: true
+		}); 
+		//上级组织字典
+		$.ajax({
+			method: "post",
+			dataType: "json",
+			crossDomain: false,
+			url:globalConfig.context + '/api/admin/jtBusiness/project/apply',
+			data:{
+					name:this.state.categoryName,//项目名称
+					categoryId:this.state.addCid,
+					province:this.state.ProvinceCity?this.state.ProvinceCity[0]:'',//是否全国
+					city:this.state.ProvinceCity?this.state.ProvinceCity[1]:''
+				}
+		}).done(function (data) { 
+			this.setState({
+				loading: false
+			});
+			if (!data.error.length) {
+				message.success('新增项目成功!'); 
+				this.handleCancel();
+				this.loadData(this.state.page);
+			} else {
+				message.warning(data.error[0].message);
+			}
+		}.bind(this));
+	},
+    //项目整行删除
+    delectRow() {
+        let deletedIds = '';
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds=rowItem.id;
+            };
+        };
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/jtBusiness/project/delete",
+            data: {
+                id:deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('删除成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData(this.state.page);
+        }.bind(this));
+    },
+    addClick() {
+        this.state.RowData = {};
+        this.setState({
+            visible: true
+        });
+        this.addReset();
+    },
+    editClick(e) {
+        this.state.RowData = {};
+        this.setState({
+            editvisible: true
+        });
+    },
+   	handleCancel() {
+        this.setState({ visible: false })
+    },
+    edithandleCancel(e) {
+        this.setState({ 
+        	editvisible: false 
+        });
+    },
+    search() {
+        this.loadData();
+    },
+    //搜索部分的清零
+    reset() {
+        this.state.nameSearch = '';//项目名称清零
+        this.state.cid = undefined;//品类名称清零
+        this.state.ressSearch= undefined;//省市区清零
+        this.state.activityFlag = undefined;//活动生效清零
+        this.state.status = undefined;//项目状态清零
+        this.loadData(); 
+    },
+    //新增部分的清零
+    addReset(){
+    	this.state.categoryName='';//项目名称清零
+    	this.state.ProvinceCity=undefined;
+    	this.state.addCid=undefined;
+    	this.state.boutique='';
+    },
+    //更多搜索的显示与否
+    searchSwitch() {
+        this.setState({
+            searchMore: !this.state.searchMore
+        });
+    },
+    render() {
+    	const FormItem = Form.Item
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows.slice(-1),
+                    selectedRowKeys: selectedRowKeys.slice(-1)
+                });
+            }
+        };
+         const formItemLayout = {
+            labelCol: { span: 8 },
+            wrapperCol: { span: 14 },
+       };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+		const { RangePicker } = DatePicker;
+		const categoryList = this.state.categoryList ||[];
+		
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+	                <div className="user-search">
+	                    <Button type="primary" className="addButton" onClick={this.addClick} style={{float:'right',marginRight:'50px'}}>新增项目<Icon type="plus" /></Button>
+	                    <Input placeholder="业务项目名称" style={{width:'150px',marginRight:'10px',marginBottom:'10px'}}
+	                        value={this.state.nameSearch}
+	                        onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />
+	                     <Select placeholder="业务品类"
+                            style={{ width:'200px',marginRight:'10px' }}
+                            value={this.state.cid}
+                            onChange={(e) => { this.setState({ cid: e }) }} notFoundContent="未获取到上级品类列表">
+                          	 {
+								categoryList.map(function (item) {
+										return <Select.Option key={item.id} >{item.name}</Select.Option>
+								})
+							}
+		                </Select> 
+	                    <Button type="primary" onClick={this.search} style={{marginRight:'10px'}}>搜索</Button>
+	                    <Button onClick={this.reset} style={{marginRight:'10px'}}>重置</Button>
+                        <Popconfirm title="是否删除?" onConfirm={this.delectRow} okText="是" cancelText="否">
+						     <Button style={{ background: "#ea0862", border: "none", color: "#fff",marginRight:'10px' ,marginLeft:'10px'}}
+	                   			 disabled={!hasSelected} 
+	                    		 >删除<Icon type="minus" />
+	           			     </Button>
+						</Popconfirm>
+	                </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} 
+	                            current={this.state.aa}/>
+	                    </Spin>
+	                </div>
+	                 <div className="patent-desc">
+	                    <Modal maskClosable={false} visible={this.state.visible}
+	                        onOk={this.checkPatentProcess} onCancel={this.handleCancel}
+	                        width='400px'
+	                        title='新增业务项目'                       
+	                        footer=''
+	                        className="admin-desc-content">
+	                         <Form layout="horizontal" onSubmit={this.addhandleSubmit} id="demand-form">
+				                <Spin spinning={this.state.loading}>
+				                    <div className="clearfix">
+				                    	<FormItem
+					                            labelCol={{ span: 7 }}
+					                        	wrapperCol={{ span: 12 }}
+					                            label="业务项目名称" >
+				                    	     <Input placeholder="业务项目名称" value={this.state.categoryName} style={{width:'94%'}}
+				                                onChange={(e)=>{this.setState({categoryName:e.target.value})}} required="required"/>
+				                           		<span className="mandatory" style={{color:'red',marginLeft:'5px'}}>*</span>
+					                    </FormItem>
+				                    </div>
+				                    <div className="clearfix">
+					                   <FormItem  
+					                    	labelCol={{ span: 7 }}
+					                        wrapperCol={{ span: 12 }}
+				                           label="业务品类"
+			                               > 
+			                                <Select placeholder="请选择业务品类" value={this.state.addCid} onChange={(e)=>{this.setState({addCid:e})}}
+				                                notFoundContent="未获取到业务品类列表" style={{width:'94%'}} required="required">
+				                                {
+													categoryList.map(function (item) {
+															return <Select.Option key={item.id} >{item.name}</Select.Option>
+													})
+												}
+				                            </Select> 
+				                            <span className="mandatory" style={{color:'red',marginLeft:'5px'}}>*</span>
+			                   		    </FormItem> 
+		                   		    </div>
+						            <div className="clearfix">
+			                   		    <FormItem 
+					                           labelCol={{ span: 7 }}
+					                           wrapperCol={{ span: 12 }}
+					                           label="省-市"
+					                          > 
+					                            <Cascader options={citySelect()}  value={this.state.ProvinceCity} placeholder="选择市" style={{width:'94%'}}
+												onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} />
+												<span style={{color:'red',marginLeft:'5px'}}>*</span>
+							            </FormItem>
+						             </div>
+				                    <FormItem wrapperCol={{ span: 12, offset: 7 }}>
+				                        <Button className="set-submit" type="primary" htmlType="submit">保存</Button>  
+				                        <Button className="set-submit" type="ghost" onClick={this.handleCancel} style={{marginLeft:'15px'}}>取消</Button>
+				                    </FormItem> 
+				                </Spin>
+				            </Form >
+	                    </Modal>
+                	 </div>
+                	
+            		 <div className="patent-desc">
+                 	  <Modal	
+				      className="customeDetails"				      
+			          title="业务项目"
+			          width='1000px'
+			          visible={this.state.editvisible}
+			          onOk={this.edithandleCancel}
+			          onCancel={this.edithandleCancel}
+			          footer=''
+			        >				    
+				    
+					<Form layout="horizontal" onSubmit={this.edithandleSubmit} id="demand-form">
+						<Spin spinning={this.state.loading}>
+							<div className="clearfix" style={{paddingLeft:'60px'}}>
+								<FormItem className="half-item"
+										labelCol={{ span: 4 }}
+										wrapperCol={{ span: 12 }}
+										label="项目名称" >
+										<Input placeholder="项目名称" value={this.state.name} style={{width:'94%'}}
+										onChange={(e)=>{this.setState({name:e.target.value})}} required="required"/>
+										<span className="mandatory" style={{color:'red',marginLeft:'5px'}}>*</span>
+								</FormItem>
+								<FormItem  className="half-item"
+									labelCol={{ span: 4 }}
+									wrapperCol={{ span: 12 }}
+									label="业务品类"
+									> 
+									<Select placeholder="请选择业务品类" value={this.state.categoryId} onChange={(e)=>{this.setState({categoryId:e})}}
+										notFoundContent="未获取到业务品类列表" style={{width:'94%'}} required="required">
+										{
+											categoryList.map(function (item) {
+													return <Select.Option key={item.id} >{item.name}</Select.Option>
+											})
+										}
+									</Select> 
+									<span className="mandatory" style={{color:'red',marginLeft:'5px'}}>*</span>
+								</FormItem>
+							</div>
+							<div className="clearfix" style={{paddingLeft:'60px'}}>
+								<FormItem className="half-item" 
+										labelCol={{ span: 4 }}
+										wrapperCol={{ span: 12 }}
+										label="省-市"
+										> 
+										<Cascader options={citySelect()}  value={this.state.ProvinceCity} placeholder="选择市" style={{width:'94%'}}
+										onChange={(e,pre) => { this.setState({ ProvinceCity: e }) }} />
+										<span style={{color:'red',marginLeft:'5px'}}>*</span>
+								</FormItem>
+								</div>
+								<div className="clearfix" style={{paddingLeft:'60px'}}>
+									<FormItem className="half-item"
+										labelCol={{ span: 4 }}
+										wrapperCol={{ span: 12 }}
+											label={<span><strong style={{color:'red'}}>*</strong>市场价</span>}
+										>
+										<InputNumber placeholder="市场价" value={this.state.price} style={{width:120}}
+										onChange={(e)=>{this.setState({price:e.target.value})}} required="required"/>
+										<span style={{marginLeft:10}}>万元</span>
+									</FormItem>
+									<FormItem className="half-item"
+										labelCol={{ span: 4 }}
+										wrapperCol={{ span: 12 }}
+											label="活动价"
+									>
+									<InputNumber placeholder="活动价" value={this.state.activityPrice} style={{width:120}}
+										onChange={(e)=>{this.setState({activityPrice:e})}} min={0} max={999999} step={0.01}/>
+										<span style={{marginLeft:10}}>万元</span>
+									</FormItem>
+									<FormItem className="half-item"
+										labelCol={{ span: 4 }}
+										wrapperCol={{ span: 12 }}
+											label="最低折扣"
+									>
+									<InputNumber placeholder="最低折扣(如:0.5)" value={this.state.offset} style={{width:'50%'}}
+									onChange={(e)=>{this.setState({offset:e})}} min={0} max={1} step={0.01}/>
+									</FormItem>
+									<FormItem className="half-item"
+										labelCol={{ span: 4 }}
+										wrapperCol={{ span: 12 }}
+											label="会员价"
+									>
+									<InputNumber placeholder="会员价" value={this.state.memberPrice} style={{width:'120px'}}
+										onChange={(e)=>{this.setState({memberPrice:e})}} min={0} max={999999} step={0.01}/>
+										<span style={{marginLeft:10}}>万元</span>
+									</FormItem>
+									<FormItem  className="half-item"
+										labelCol={{ span: 4 }}
+										wrapperCol={{ span: 12 }}
+										label="活动生效"
+										> 
+										<Select placeholder="活动生效" value={this.state.activityFlag} style={{width:'94%'}}
+										onChange={(e)=>{this.setState({activityFlag:e})}}> 
+												<Select.Option key="0" >无效</Select.Option>
+												<Select.Option key='1' >有效</Select.Option>
+										</Select>
+									</FormItem>
+								<FormItem  className="half-item"
+									labelCol={{ span: 4 }}
+									wrapperCol={{ span: 12 }}
+									label="创建时间"
+									>
+									<span style={{width:'94%'}}>{this.state.createTime}</span>
+								</FormItem>
+							</div>
+							<div className="clearfix">
+								<FormItem
+									labelCol={{ span: 4 }}
+									wrapperCol={{ span: 12 }}
+									label="业务项目服务内容" >					                        
+									<Input type="textarea" rows={4} placeholder="业务项目服务内容" value={this.state.introduce}
+										onChange={(e) => { this.setState({ introduce: e.target.value }) }}/>					                           
+								</FormItem>
+							</div>   
+							<div className="clearfix">
+								<FormItem
+									labelCol={{ span: 4 }}
+									wrapperCol={{ span: 12 }}
+									label="业务项目价值及作用" >					                        
+									<Input type="textarea" rows={4} placeholder="业务项目价值及作用" value={this.state.value}
+										onChange={(e) => { this.setState({ value: e.target.value }) }}/>					                           
+								</FormItem>
+							</div>   
+							<div className="clearfix">
+								<FormItem
+									labelCol={{ span: 4 }}
+									wrapperCol={{ span: 12 }}
+									label="业务项目客户基本条件" >					                        
+									<Input type="textarea" rows={4} placeholder="业务项目客户基本条件" value={this.state.applyConditions}
+										onChange={(e) => { this.setState({ applyConditions: e.target.value }) }}/>					                           
+								</FormItem>
+							</div> 
+							<div className="clearfix pictures">
+								<FormItem className="half-item"
+									labelCol={{ span: 8 }}
+									wrapperCol={{ span: 10 }}
+									label="业务项目图标" >
+									<PicturesWall
+										pictureSign="business_project_min_picture"
+										fileList={this.getOrgCodeUrl}
+										pictureUrl={this.state.orgCodeUrl} />
+										<p>图片建议:图片要清晰。(35*35)</p>
+								</FormItem>
+								<FormItem className="half-item"
+									labelCol={{ span: 4 }}
+									wrapperCol={{ span: 12 }}
+									label="业务项目图标" > 
+									<PicturesWall
+										pictureSign="business_project_max_picture"
+										fileList={this.getCompanyLogoUrl}
+										pictureUrl={this.state.companyLogoUrl} />
+										<p>图片建议:图片要清晰。(200*200)</p>
+								</FormItem>
+							</div> 
+							<Button className="set-submit" type="primary" htmlType="submit" style={{marginLeft:'190px',marginBottom:'20px',marginTop:'20px'}}>保存</Button>  
+							<Button className="set-submit" type="ghost" onClick={this.edithandleCancel} style={{marginLeft:'100px',marginBottom:'20px'}}>取消</Button>
+						</Spin>
+					</Form>		
+                    </Modal>
+            	 </div>	 
+               </div>
+            </div>
+        );
+    }
+}));
+
+export default BusinessProject;

+ 2 - 2
js/component/dataDic.js

@@ -1461,10 +1461,10 @@ module.exports = {
     //品类状态
     gameState:[
 	    {
-	        value: "0",
+	        value: "1",
 	        key: "有效"
 	    }, {
-	        value: "1",
+	        value: "0",
 	        key: "无效"
 	    }
     ],

+ 5 - 7
js/component/tools.js

@@ -1030,11 +1030,10 @@ module.exports = {
 	},
 	//品类状态
 	 getGameState:function(index){
-	 	let e=index?index.toString():'';
-   		 if (e) {
+   		 if (index||index==0) {
             let theType = '';
             gameState.map(function (item) {
-                if (item.value == e) {
+                if (item.value == index) {
                     theType = item.key;
                 };
             });
@@ -1044,11 +1043,10 @@ module.exports = {
 	},
 	//消息类型
 	 getMessageType:function(index){
-	 	let e=index?index.toString():'';
-   		 if (e) {
+        if (index||index==0) {
             let theType = '';
-            messageType.map(function (item) {
-                if (item.value == e) {
+            gameState.map(function (item) {
+                if (item.value == index) {
                     theType = item.key;
                 };
             });