liting2017 6 years ago
parent
commit
35b9364480

+ 0 - 1
js/component/account/demand/techDemand.jsx

@@ -248,7 +248,6 @@ const DemandList = React.createClass({
         })
         let idArr=[];
         idArr.push(recard.id);
-        console.log(idArr)
         $.ajax({
             method: "POST",
             dataType: "json",

+ 6 - 14
js/component/administration/business/businessCategory.jsx

@@ -136,11 +136,7 @@ const BusinessCategory=Form.create()(React.createClass({
                 }
             },
             columns: [
-                {
-                    title: '品类序号',
-                    dataIndex: 'sort',
-                    key: 'sort',
-                },{
+               {
                     title: '品类编号',
                     dataIndex: 'number',
                     key: 'number',
@@ -179,6 +175,7 @@ const BusinessCategory=Form.create()(React.createClass({
     //新建下级
     nextAdd(recard){
         this.setState({
+            recrdAdd:recard,
             visible: true,
             name:'',
             addFirst:1,
@@ -255,7 +252,6 @@ const BusinessCategory=Form.create()(React.createClass({
            this.loadData(this.state.page)
         }.bind(this));
     },
-   
     addClick() {
         this.state.RowData = {};
         this.setState({
@@ -377,13 +373,9 @@ const BusinessCategory=Form.create()(React.createClass({
                 });
             }
         };
-         const formItemLayout = {
-            labelCol: { span: 8 },
-            wrapperCol: { span: 14 },
-        };
         const hasSelected = this.state.selectedRowKeys.length > 0;
-        const { RangePicker } = DatePicker;
         const theData =this.state.theData ||{};
+        const recrdAdd = this.state.recrdAdd ||{};
         return (
             <div className="user-content" >
                 <div className="content-title">
@@ -400,7 +392,7 @@ const BusinessCategory=Form.create()(React.createClass({
 	                    <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'}}
+						     <Button style={{marginRight:'10px' ,marginLeft:'10px'}} type="danger"
 	                   			 disabled={!hasSelected} 
 	                    		 >删除<Icon type="minus" />
 	           			     </Button>
@@ -448,7 +440,7 @@ const BusinessCategory=Form.create()(React.createClass({
 					                        wrapperCol={{ span: 12 }}
 				                           label="上级品类"
 			                               > 
-			                               <span>超级管理员</span>
+			                               <span>{this.state.addFirst?recrdAdd.name:'超级品类'}</span>
 			                   		    </FormItem>
 		                   		    </div>
 				                    <FormItem wrapperCol={{ span: 12, offset: 7 }}>
@@ -484,7 +476,7 @@ const BusinessCategory=Form.create()(React.createClass({
 					                        wrapperCol={{ span: 12 }}
 				                           label="上级品类"
 			                               > 
-			                               <span>{theData.superName}</span>
+			                               <span>{theData.superName?theData.superName:'超级品类'}</span>
 			                   		    </FormItem>
 		                   		    </div>
 		                   		    <div className="clearfix">

+ 0 - 2
js/component/administration/news/newDesc.jsx

@@ -47,7 +47,6 @@ class DemandDesc extends React.Component {
 									<NewDetaiel
 									closeDesc={this.handleCancel.bind(this)}
 									data={this.props.data}
-									demandTypeOption={this.props.demandTypeOption}
 									visible={this.state.visible}
 									handOk={this.handOk.bind(this)}
 									/>
@@ -55,7 +54,6 @@ class DemandDesc extends React.Component {
 									<NewForm 
 										closeDesc={this.handleCancel.bind(this)}
 										data={this.props.data}
-										demandTypeOption={this.props.demandTypeOption}
 										visible={this.state.visible}
 										handOk={this.handOk.bind(this)}
 										/>

+ 4 - 3
js/component/administration/news/newsList.jsx

@@ -119,7 +119,6 @@ const DemandList = React.createClass({
                     render:(text,recard) => {
                         return  <div className="btnRight">
                                    {recard.auditStatus!='1'&&recard.auditStatus!='2'&&<Button type="primary" style={{ background: "#3fcf9e", border: "none", color: "#fff" }} onClick={(e)=>{e.stopPropagation(),this.submission(recard)}}>发布</Button>}
-                                   <Button type="danger"  onClick={(e)=>{e.stopPropagation();this.delectRow(recard)}}>删除</Button>
                                    {recard.auditStatus!='1'&&recard.auditStatus=='2'&&<Button type="success" onClick={(e)=>{ e.stopPropagation(),this.updateFun(recard)}}>刷新发布</Button>}
                                    {recard.auditStatus!='1'&&recard.auditStatus=='2'&&<Button type="danger" onClick={(e)=>{e.stopPropagation(),this.revokeFun(recard)}}>撤销发布</Button>}
                                 </div>
@@ -223,13 +222,14 @@ const DemandList = React.createClass({
         this.setState({
             loading:true
         })
+        let ids = (this.state.selectedRows)[0].id;
         $.ajax({
             method: "POST",
             dataType: "json",
             crossDomain: false,
             url: globalConfig.context + "/api/admin/news/deleteById",
             data: {
-                id: recard.id
+                id: ids
             }
         }).done(function (data) {
             if (!data.error.length) {
@@ -281,6 +281,7 @@ const DemandList = React.createClass({
             }
         };
         const { RangePicker } = DatePicker;
+        const hasSelect = this.state.selectedRowKeys.length;
         return (
             <div className="user-content" >
                 <div className="content-title">
@@ -304,6 +305,7 @@ const DemandList = React.createClass({
                     </Select>
                     <Button type="primary" onClick={this.search}>搜索</Button>
                     <Button onClick={this.reset}>重置</Button>
+                    <Button type="danger" disabled={!hasSelect}  onClick={(e)=>{this.delectRow()}}>删除</Button>
                     <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>
                     <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
                         <span>发布时间 :</span>
@@ -324,7 +326,6 @@ const DemandList = React.createClass({
                 </div>
                 <NewDesc
                     data={this.state.RowData}
-                    demandTypeOption={this.state.demandTypeOption}
                     showDesc={this.state.showDesc}
                     closeDesc={this.closeDesc} />
             </div >

+ 69 - 0
js/component/administration/policy/policyDesc.jsx

@@ -0,0 +1,69 @@
+import React from 'react';
+import { Modal } from 'antd';
+import NewForm from '@/administration/policy/policyForm';
+import NewDetaiel from '@/administration/policy/policyDetails';
+
+class DemandDesc extends React.Component {
+	constructor(props) {
+		super(props);
+		this.state = {
+			loading: false,
+			pictureUrl: [],
+			showState:false
+		};
+	}
+	handleCancel() {
+		this.setState({
+			visible: false,
+		});
+		this.props.closeDesc(false, false);
+	}
+	handOk() {
+		this.setState({
+			visible: false,
+		});
+		this.props.closeDesc(false, true);
+	}
+	componentWillReceiveProps(nextProps) {
+		this.state.visible = nextProps.showDesc;
+	}
+	render() {
+		let data = this.props.data || [];
+		return (
+			<div className="patent-desc">
+				<Modal
+					maskClosable={false}
+					visible={this.state.visible}
+					onOk={this.handOk.bind(this)}
+					onCancel={this.handleCancel.bind(this)}
+					width="1000px"
+					title={!data.id ? '新建政策' : '政策详情'}
+					footer=""
+					className="admin-desc-content"
+				>
+					<div>
+						<div>
+								{data.auditStatus=='1'||data.auditStatus=='2'?
+									<NewDetaiel
+									closeDesc={this.handleCancel.bind(this)}
+									data={this.props.data}
+									visible={this.state.visible}
+									handOk={this.handOk.bind(this)}
+									/>
+									:
+									<NewForm 
+										closeDesc={this.handleCancel.bind(this)}
+										data={this.props.data}
+										visible={this.state.visible}
+										handOk={this.handOk.bind(this)}
+										/>
+								} 
+						</div>
+					</div>
+				</Modal>
+			</div>
+		);
+	}
+}
+
+export default DemandDesc;

+ 250 - 0
js/component/administration/policy/policyDetails.jsx

@@ -0,0 +1,250 @@
+import React from 'react';
+import $ from 'jquery/src/ajax';
+import {
+	Modal,
+	message,
+	Spin,
+	Upload,
+	Button,
+	Form,
+} from 'antd';
+import {getProvince} from '@/NewDicProvinceList';
+import {getReleaseStateList,getPolicyPosition,splitUrl} from '@/tools';
+const NewDetail = Form.create()(React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false,
+            auditStatus: 0,
+            textFileList: [],
+            videoFileList: [],
+            pictureUrl: [],
+        };
+    },
+    loadData(id) {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context +  '/api/admin/news/detail' ,
+            data: {
+                id: id
+            },
+            success: function (data) {
+                let thisData = data.data;
+                if (!thisData) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                    thisData = {};
+                };
+                document.querySelector('.txt').innerHTML='';
+                let publishPagesArr = [];
+                let pageList =  thisData.publishPages?(thisData.publishPages).split(','):[];
+                pageList.map(item=>{
+					publishPagesArr.push(item.publishPage)
+                });
+                let ProvinceS = thisData.provinceId,page=[], //getprovince
+                    ProvinceCity = getProvince(ProvinceS);
+                    let pages =thisData.newsPublishs ||[];
+                    pages.map(item=>{
+                        page.push(item.publishPage)
+                    })
+                    console.log(page)
+                    let eleDiv = document.createElement('div');
+                    eleDiv.innerHTML=thisData.content;
+                    console.log(eleDiv);
+                    document.querySelector('.txt').append(eleDiv);
+                this.setState({
+                    id:thisData.id,
+                    publishPagesArr:publishPagesArr,
+                    data: thisData,
+                    page:page,
+                    eleDiv:eleDiv,
+                    ProvinceCity:ProvinceCity,
+                    edit:{content:thisData.content},
+                    auditStatus:thisData.auditStatus,
+                    pictureUrl: thisData.titleImg ? splitUrl(thisData.titleImg, ',', globalConfig.avatarHost + '/upload') : []
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+   
+	cancelFun(){
+		this.props.closeDesc();
+    },
+    //刷新发布
+    updateFun(inex){
+        this.setState({
+            loading:true
+        })
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context +'/api/admin/news/updateStatus',
+            data: {
+                id: this.state.id,
+                auditStatus:this.state.auditStatus,
+                refresh:1
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('刷新成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.props.handOk();
+           
+        }.bind(this));
+    },
+    //撤销发布
+    revokeFun(){
+        this.setState({
+            loading:true
+        })
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context +  '/api/admin/news/updateStatus',
+            data: {
+                id: this.state.id,
+                auditStatus:4,
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('撤销成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.props.handOk();
+        }.bind(this));
+    },
+    componentWillMount() {
+        if (this.props.data.id) {
+            this.loadData(this.props.data.id);
+           
+        } else {
+            this.state.data = {};
+        };
+    },
+    componentWillReceiveProps(nextProps) {
+        if (!this.props.visible && nextProps.visible) {
+            this.state.textFileList = [];
+            this.state.videoFileList = [];
+            if (nextProps.data.id) {
+                this.loadData(nextProps.data.id);
+            } else {
+				this.state.data = {};
+                this.state.pictureUrl = [];
+            };
+            this.props.form.resetFields();
+        };
+    },
+    render() {
+        const theData = this.state.data || {};
+        const FormItem = Form.Item
+        const formItemLayout = {
+            labelCol: { span: 6 },
+            wrapperCol: { span: 12 },
+        };
+        return (
+			<div className='login'>
+			<Form layout="horizontal" id="demand-form">
+				<Spin spinning={this.state.loading}>
+					<div className="clearfix">
+                        <FormItem className="half-item" {...formItemLayout} label="政策标题">
+							<span>{theData.title}</span>
+						</FormItem>
+						<FormItem className="half-item" {...formItemLayout} label="热门">
+							<span>{theData.hot=='0'&&'否'}{theData.hot=='1'&&'是'}</span>
+						</FormItem>
+						<FormItem className="half-item" {...formItemLayout} label="政策来源">
+							<span>{theData.source}</span>
+						</FormItem>
+						<FormItem className="half-item" {...formItemLayout} label="来源链接">
+							<span>{theData.sourceUrl}</span>
+						</FormItem>
+                        <FormItem className="half-item" {...formItemLayout} label="省市区">
+							<span>{this.state.ProvinceCity}</span>
+						</FormItem>
+					</div>
+                    <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 18 }} label="政策图片">
+                        <div className="clearfix">
+                                <Upload className="demandDetailShow-upload"
+                                    listType="picture-card"
+                                    fileList={this.state.pictureUrl}                               
+                                    onPreview={(file) => {
+                                        this.setState({
+                                            previewImage: file.url || file.thumbUrl,
+                                            previewVisible: true,
+                                        });
+                                    }} >
+                                </Upload>
+                                <Modal maskClosable={false} footer={null}
+                                    visible={this.state.previewVisible}
+                                    onCancel={() => { this.setState({ previewVisible: false }) }}>
+                                    <img alt="" style={{ width: '100%' }} src={this.state.previewImage || ''} />
+                                </Modal>
+                            </div> 
+					</FormItem>
+                    <div className="clearfix">
+						<FormItem className="half-item" {...formItemLayout} label="发布状态">
+							<span>{getReleaseStateList(theData.auditStatus)}</span>
+						</FormItem>
+                       
+                        <FormItem className="half-item" {...formItemLayout} label="发布时间">
+                            <span>{theData.releaseDate?(new Date(theData.releaseDate)).toLocaleString():''}</span>
+                        </FormItem>
+					</div>
+                    <div className="clearfix">
+                        <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 18 }} label="发布位置">
+                                <span>{getPolicyPosition(this.state.page)}</span>
+						</FormItem>
+                    </div>
+                    <div className="clearfix">
+						<FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 18 }} label="政策简介">
+							<span>{theData.summary}</span>
+						</FormItem>
+                        <FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 18 }} label="政策正文">
+							<span className="txt"></span>
+						</FormItem>
+					</div>
+					<div className="clearfix">
+						{this.props.data.auditStatus=='2'&&<FormItem wrapperCol={{ span: 12, offset: 3 }}>
+							<Button className="set-submit" type="primary"  onClick={(e)=>{this.updateFun()}} >
+								刷新发布
+							</Button>
+							<Button type="danger" style={{marginRight:20}} onClick={(e)=>{this.revokeFun()}}>
+								撤销发布
+							</Button>
+							<Button className="set-submit" type="ghost" onClick={this.cancelFun}>
+								取消
+							</Button>
+						</FormItem>}
+					</div>
+				</Spin>
+			</Form>    
+		</div>
+        )
+    }
+}));
+export default NewDetail;
+
+
+
+

+ 366 - 0
js/component/administration/policy/policyForm.jsx

@@ -0,0 +1,366 @@
+import React from 'react';
+import $ from 'jquery/src/ajax';
+import {
+	Icon,
+	Modal,
+	message,
+	Spin,
+	Upload,
+	Input,
+	Button,
+	Radio,
+	Form,
+	Checkbox,
+	Cascader,
+    Row,
+    Col
+} from 'antd';
+import {  splitUrl} from '@/tools.js';
+import {provinceSelect } from '@/NewDicProvinceList';
+import Editors from '@/richTextEditors';
+
+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/user/demand/uploadPicture'}
+					data={{ sign: 'demand_picture'}}
+					listType="picture-card"
+					fileList={fileList}
+					onPreview={this.handlePreview}
+					onChange={this.handleChange}
+				>
+					{fileList.length >= 3 ? null : uploadButton}
+				</Upload>
+				<Modal maskClosable={false} visible={previewVisible} footer={null} onCancel={this.handleCancel}>
+					<img alt="example" style={{ width: '100%' }} src={previewImage} />
+				</Modal>
+			</div>
+		);
+	}
+});
+ 
+const NewDetailForm = Form.create()(React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false,
+            auditStatus: 0,
+            textFileList: [],
+            videoFileList: [],
+			pictureUrl: [],
+			tags:[],
+			edit:{}
+        };
+    },
+    loadData(id) {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context +  '/api/admin/news/detail' ,
+            data: {
+                id: id
+            },
+            success: function (data) {
+                let thisData = data.data,provice=[];
+                if (!thisData) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                    thisData = {};
+				};
+				let publishPagesArr = [];
+                let pageList =  thisData.newsPublishs
+                pageList.map(item=>{
+					publishPagesArr.push(item.publishPage)
+                });
+				provice.push(thisData.provinceId);
+                this.setState({
+					id:thisData.id,
+					data: thisData,
+					Province:provice,
+					publishPages:publishPagesArr,
+					auditStatus:thisData.auditStatus,
+					edit:{content:thisData.content},
+                    pictureUrl: thisData.titleImg ? splitUrl(thisData.titleImg, ',', globalConfig.avatarHost + '/upload') : []
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getPictureUrl(e) {
+        this.setState({ pictureUrl: e });
+    },
+    handleSubmit(e,index) {
+		e.preventDefault();
+		if((this.state.edit).content==undefined){
+			message.warning('请填写政策正文');
+			return false;
+		}
+        this.props.form.validateFields((err, values) => {
+            //url转化
+            let thePictureUrl = [];
+            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(",");
+			};
+            if (!err) {
+				let publishPages =(values.publishPages).join(',')
+                this.setState({
+                    loading: true
+                });
+                $.ajax({
+                    method: "post",
+					dataType: "json",
+					async:true,
+                    url: this.props.data.id ? globalConfig.context + '/api/admin/news/updateNews' : globalConfig.context + '/api/admin/news/apply',
+                    data: {
+						id: this.props.data.id,
+						type:0,
+						title: values.title,
+                        author: values.author,
+                        titleImg: thePictureUrl,
+						content:this.state.edit.content,
+						hot:values.hot,
+						source:values.source,
+						sourceUrl:values.sourceUrl,
+						auditStatus:index,
+                        summary: values.summary,
+						provinceId: (values.ProvinceCity)[0],
+						publishPages:publishPages
+                    }
+                }).done(function (data) {
+                    this.setState({
+                        loading: false
+					});
+
+                    if (!data.error.length) {
+                        message.success('操作成功!');
+                        this.setState({
+                            visible: false
+                        });
+                        this.props.handOk();
+                    } else {
+                        message.warning(data.error[0].message);
+                    }
+                }.bind(this));
+            }
+        });
+	},
+	cancelFun(){
+		this.props.closeDesc();
+	},
+    componentWillMount() {
+        if (this.props.data.id) {
+            this.loadData(this.props.data.id);
+        } else {
+			this.state.data = {};
+			this.state.edit={};
+			this.state.pictureUrl = [];
+			this.setState({
+				publishPages:['web_index','app_policy_index']
+			})
+        };
+    },
+    componentWillReceiveProps(nextProps) {
+        if (!this.props.visible && nextProps.visible) {
+            this.state.textFileList = [];
+            this.state.videoFileList = [];
+            if (nextProps.data.id) {
+                this.loadData(nextProps.data.id);
+            } else {
+				this.state.data = {};
+				this.state.edit={};
+				this.state.pictureUrl = [];
+				this.state.theData={};
+				this.setState({
+					publishPages:['web_index','app_policy_index']
+				})
+            };
+			this.props.form.resetFields();
+        };
+    },
+    render() {
+        const theData = this.state.data || {};
+        const { getFieldDecorator } = this.props.form;
+        const FormItem = Form.Item
+        const formItemLayout = {
+            labelCol: { span: 6 },
+            wrapperCol: { span: 12 },
+		};
+		
+        return (
+			<div className='login'>
+			<Form layout="horizontal" onSubmit={(e)=>{this.handleSubmit(e,0)}} id="demand-form">
+				<Spin spinning={this.state.loading}>
+					<div className="clearfix">
+						<FormItem className="half-item" {...formItemLayout} label="标题">
+							{getFieldDecorator('title', {
+								rules: [ { required: true, message: '此项为必填项!' } ],
+								initialValue: theData.title
+							})(<Input placeholder="请输入您的政策政策标题" />)}
+						</FormItem>
+					</div>
+					<div className="clearfix">
+					    <FormItem className="half-item" {...formItemLayout} label="热门">
+							{getFieldDecorator('hot', {
+								rules: [ { required: true, message: '此项为必填项!' } ],
+								initialValue: theData.hot
+							})(
+								<Radio.Group>
+									<Radio value={0}>否</Radio>
+									<Radio value={1}>是</Radio>
+								</Radio.Group>
+							)}
+						</FormItem>
+						<FormItem className="half-item" {...formItemLayout} label="政策来源">
+							{getFieldDecorator('source', {
+								rules: [ { required: true, message: '此项为必填项!' } ],
+								initialValue: theData.source
+							})(<Input placeholder="请输政策来源" />)}
+						</FormItem>
+						<FormItem className="half-item" {...formItemLayout} label="来源链接">
+							{getFieldDecorator('sourceUrl', {
+								initialValue: theData.sourceUrl
+							})(<Input placeholder="请输入政策来源链接" />)}
+						</FormItem>
+						<FormItem className="half-item" 
+							{...formItemLayout}
+							label="省-市-区"
+							> 
+							{getFieldDecorator('ProvinceCity', {
+								rules: [ { required: true, message: '此项为必填项!' } ],
+								initialValue: this.state.Province
+							})(
+							 <Cascader options={provinceSelect()}   placeholder="选择城市" />
+							 )}
+						</FormItem>
+					</div>
+					<div className="clearfix">
+						<FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 18 }} label="政策图片">
+							<PicturesWall
+								fileList={this.getPictureUrl}
+								pictureUrl={this.state.pictureUrl}
+								visible={this.props.visible}
+							/>
+						</FormItem>
+					</div>
+					<div className="clearfix">
+						<FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 18 }} label="政策简介">
+							{getFieldDecorator('summary', {
+								rules: [ { required: true, message: '此项为必填项!' } ],
+								initialValue: theData.summary
+							})(<Input type="textarea" rows={4} placeholder="输入政策简介" />)}
+						</FormItem>
+					</div>
+					<div className="clearfix">
+						<FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 18 }} label={<span><i style={{color:"red",fontSize:14}}> * </i>政策正文</span>}>
+							<Editors textContent={this.state.edit.content}
+								uploadUrl={'/api/user/demand/uploadPicture'}
+								uploadSign={'demand_picture'}
+								handleRichText={(value) => { this.state.edit.content = value; }}
+								visible={this.state.visible} />
+						</FormItem>
+					</div>
+					
+					{theData.createTime&&<div className="clearfix">
+						<FormItem labelCol={{ span: 3 }} wrapperCol={{ span: 18 }} label="是否发布">
+							<span>{theData.releaseStatus?'已发布':'未发布'}</span>
+						</FormItem>
+					</div>}
+					<div className="clearfix">
+						<FormItem className="full-item" 
+							labelCol={{ span: 3 }}
+							wrapperCol={{ span: 18 }} label="发布位置">
+							{getFieldDecorator('publishPages', {
+								rules: [ { required: false } ],
+								initialValue: this.state.publishPages
+							})(
+								<Checkbox.Group>
+									<Row>
+										<Col span={6}><Checkbox value="index" >网站首页</Checkbox></Col>
+										<Col span={6}><Checkbox value="web_index" disabled>网站政策首页</Checkbox></Col>
+										<Col span={6}><Checkbox value="web_tech_service_index">网站科技服务首页</Checkbox></Col>
+										<Col span={6}><Checkbox value="app_index">APP首页</Checkbox></Col>
+										<Col span={6}><Checkbox value="app_policy_index" disabled>app政策首页</Checkbox></Col>
+										<Col span={6}><Checkbox value="app_tech_service_index">APP科技服务首页</Checkbox></Col>
+									</Row>
+								</Checkbox.Group>
+							)}
+						</FormItem>
+					</div>
+					<div className="clearfix">
+						<FormItem wrapperCol={{ span: 12, offset: 3 }}>
+						{this.props.data&&!this.props.data.id&&<Button className="set-submit" type="primary" htmlType="submit">
+								保存草稿
+							</Button>}
+							<Button
+								className="set-submit"
+								type="ghost"
+								onClick={(e) => {
+										this.handleSubmit(e,2)
+								}}
+							>
+								发布政策
+							</Button>
+							<Button className="set-submit" type="ghost" onClick={this.cancelFun}>
+								取消
+							</Button>
+						</FormItem>
+					</div>
+				</Spin>
+			</Form>    
+		</div>
+        )
+    }
+}));
+export default NewDetailForm;
+
+
+
+

+ 339 - 11
js/component/administration/policy/policyList.jsx

@@ -1,13 +1,341 @@
-import React,{Component} from 'react';
+import React from 'react';
+import { Icon, Button, Input, Select, Spin, Table, Switch, message, DatePicker } from 'antd';
+import $ from 'jquery/src/ajax';
+import moment from 'moment';
+import '@/account/demand/techDemand.less';
+import NewDesc from '@/administration/policy/policyDesc';
+import '@/administration/news/news.less';
+import {  } from '@/dataDic.js';
+import {getReleaseStateList, } from '@/tools.js';
 
-class Policy extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {  }
-    }
-    render() { 
-        return ( <div>政策</div> )
+const PolicyList = React.createClass({
+    loadData(pageNo) {
+        
+        this.state.data = [];
+        this.setState({
+            page:pageNo,
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/news/list",
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                title: this.state.nameSearch, //需求名称
+                startCreateTime: this.state.releaseDate[0],
+                endCreateTime: this.state.releaseDate[1],
+                auditStatus:this.state.auditStatusSearch,
+            },
+            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,
+                            title: thisdata.title,
+                            author:thisdata.author,
+                            source: thisdata.source,
+                            auditStatus: thisdata.auditStatus, //审核状态
+                            releaseDate:thisdata.releaseDate?(new Date(thisdata.releaseDate)).toLocaleString():''
+                        });
+                    };
+                };
+                this.state.selectedRowKeys=[];
+                this.state.pagination.current = data.data.pageNo;
+                this.state.pagination.total = data.data.totalCount;
+                if(data.data&&data.data.list&&!data.data.list.length){
+					this.state.pagination.current=0
+					this.state.pagination.total=0
+				};
+                this.setState({
+                    dataSource: theArr,
+                    pagination: this.state.pagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            searchMore: true,
+            validityPeriodDate: [],
+            releaseDate: [],
+            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: 'title',
+                    key: 'title',
+                },  {
+                    title: '创建人',
+                    dataIndex: 'author',
+                    key: 'author',
+                    render:text=>{return <span>管理员</span>}
+                },
+                {
+                    title: '发布状态',
+                    dataIndex: 'auditStatus',
+                    key: 'auditStatus',
+                    render: text => { return getReleaseStateList(text) }
+                },
+                {
+                    title: '来源',
+                    dataIndex: 'source',
+                    key: 'source'
+                },
+                {
+                    title: '发布时间',
+                    dataIndex: 'releaseDate',
+                    key: 'releaseDate'
+                },
+                {
+                    title: '操作',
+                    dataIndex: 'caozuo',
+                    key: 'caozuo',
+                    render:(text,recard) => {
+                        return  <div className="btnRight">
+                                   {recard.auditStatus!='1'&&recard.auditStatus!='2'&&<Button type="primary" style={{ background: "#3fcf9e", border: "none", color: "#fff" }} onClick={(e)=>{e.stopPropagation(),this.submission(recard)}}>发布</Button>}
+                                  
+                                   {recard.auditStatus!='1'&&recard.auditStatus=='2'&&<Button type="success" onClick={(e)=>{ e.stopPropagation(),this.updateFun(recard)}}>刷新发布</Button>}
+                                   {recard.auditStatus!='1'&&recard.auditStatus=='2'&&<Button type="danger" onClick={(e)=>{e.stopPropagation(),this.revokeFun(recard)}}>撤销发布</Button>}
+                                </div>
+                    }
+                }
+            ],
+            dataSource: [],
+            searchTime: [,]
+        };
+    },
+    //发布
+    submission(record){
+        this.setState({
+            showDesc:false,
+            loading:true
+        });
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/news/updateStatus",
+            data: {
+                id:record.id,
+                auditStatus:2
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('发布成功.');
+                this.setState({
+                    loading: false,
+                });
+                this.loadData(this.state.page)
+            } else {
+                message.warning(data.error[0].message);
+            };
+        }.bind(this));
+    },
+    //刷新发布
+    updateFun(recard){
+        this.setState({
+            loading:true
+        })
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context +'/api/admin/news/updateStatus',
+            data: {
+                id: recard.id,
+                auditStatus:recard.auditStatus,
+                refresh:1
+            }
+        }).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));
+    },
+    //撤销发布
+    revokeFun(recard){
+        this.setState({
+            loading:true
+        })
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context +  '/api/admin/news/updateStatus',
+            data: {
+                id: recard.id,
+                auditStatus:4,
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('撤销成功!');
+                this.setState({
+                    loading: false,
+                });
+                this.loadData(this.state.page);
+            } else {
+                message.warning(data.error[0].message);
+            };
+        }.bind(this));
+    },
+    componentWillMount() {
+        this.loadData();
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        this.setState({
+            showDesc: true
+        });
+    },
+    delectRow() {
+        this.setState({
+            loading:true
+        })
+        let ids = (this.state.selectedRows)[0].id;
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/news/deleteById",
+            data: {
+                id: ids
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('删除成功!');
+                this.setState({
+                    loading: false
+                });
+                this.loadData(this.state.page);
+            } else {
+                message.warning(data.error[0].message);
+            };
+        }.bind(this));
+    },
+    addClick() {
+        this.state.RowData = {};
+        this.setState({
+            showDesc: true
+        });
+    },
+    closeDesc(e, s) {
+        this.state.showDesc = e;
+        if (s) {
+            this.loadData(this.state.page);
+        };
+    },
+    search() {
+        this.loadData();
+    },
+    reset() {
+        this.state.nameSearch = '';
+        this.state.releaseDate = [];
+        this.state.dataCategorySearch = undefined;
+        this.state.auditStatusSearch = undefined;
+        this.loadData();
+        
+    },
+    searchSwitch() {
+        this.setState({
+            searchMore: !this.state.searchMore
+        });
+    },
+    render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows.slice(-1),
+                    selectedRowKeys: selectedRowKeys.slice(-1)
+                });
+            }
+
+        };
+        const { RangePicker } = DatePicker;
+        const hasSelect = this.state.selectedRowKeys.length;
+        return (
+            <div className="user-content" >
+                <div className="content-title">
+                    <span>政策管理</span>
+                    <div className="patent-addNew">
+                        <Button type="primary" onClick={this.addClick}>发布政策<Icon type="plus" /></Button>
+                    </div>
+                </div>
+                <div className="user-search">
+                    <Input placeholder="政策名称"
+                        value={this.state.nameSearch}
+                        onChange={(e) => { this.setState({ nameSearch: e.target.value }); }} />
+                    <Select placeholder="发布状态" style={{ width: 120 }}
+                        value={this.state.auditStatusSearch}
+                        onChange={(e) => { this.setState({ auditStatusSearch: e }) }}>
+                        <Select.Option value="0" >草稿</Select.Option>
+                        <Select.Option value="1" >发布审核</Select.Option>
+                        <Select.Option value="2" >已发布</Select.Option>
+                        <Select.Option value="3" >发布失败</Select.Option>
+                        <Select.Option value="4" >已撤销</Select.Option>
+                    </Select>
+                    <Button type="primary" onClick={this.search}>搜索</Button>
+                    <Button onClick={this.reset}>重置</Button>
+                    <Button type="danger" disabled={!hasSelect}  onClick={(e)=>{this.delectRow()}}>删除</Button>
+                    <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>
+                    <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
+                        <span>发布时间 :</span>
+                        <RangePicker
+                            value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
+                            this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
+                            onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
+                    </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>
+                <NewDesc
+                    data={this.state.RowData}
+                    showDesc={this.state.showDesc}
+                    closeDesc={this.closeDesc} />
+            </div >
+        );
     }
-}
- 
-export default Policy;
+});
+
+export default PolicyList;

+ 21 - 0
js/component/dataDic.js

@@ -2241,6 +2241,27 @@ module.exports = {
 	        key: "APP科技服务首页"
 	    }
     ],
+    policyPosition:[
+        {
+	        value: "index",
+	        key: "网站首页"
+	    },{
+	        value: "web_index",
+	        key: "网站政策首页"
+	    },{
+	        value: "web_tech_service_index",
+	        key: "网站科技服务首页"
+	    },{
+	        value: "app_index",
+	        key: "app首页"
+	    },{
+	        value: "app_policy_index",
+	        key: "app政策首页"
+	    },{
+	        value: "app_tech_service_index",
+	        key: "APP科技服务首页"
+	    }
+    ],
     //成果类型
     achievementType:[
         {

+ 17 - 1
js/component/tools.js

@@ -79,7 +79,8 @@ import {
     achievementPosition,
     achievementType,
     transaction,
-    newsPosition
+    newsPosition,
+    policyPosition
 } from './dataDic.js';
 
 import { provinceList} from './NewDicProvinceList.js';
@@ -1403,6 +1404,20 @@ module.exports = {
          return theType.join(' - ');
         }
      },
+     //政策发布位置
+     getPolicyPosition:function(e=[]){
+        if (e) {
+            let theType = [];
+            e.map((item)=>{
+                policyPosition.map(function (atem) {
+                    if (atem.value == item) {
+                        theType.push(atem.key);
+                    };
+                });
+            })
+         return theType.join(' - ');
+        }
+     },
      //成果发布位置;
      getAchievementPosition:function(e=[]){
         if (e) {
@@ -1417,6 +1432,7 @@ module.exports = {
          return theType.join(' - ');
         }
      },
+     //新闻发布位置
      getNewPosition:function(e=[]){
         if (e) {
             let theType = [];