Browse Source

科技管理修改

wubb 8 years ago
parent
commit
8da509550e

+ 4 - 1
js/component/account/services/content.jsx

@@ -15,7 +15,8 @@ import HonorList from './honorList';
 import OrgTechCenter from './orgTechCenter';
 import AnnualReport from './annualReport';
 import Cognizance from './cognizance';
-import Copyright from './copyright/copyright'
+import Copyright from './copyright/copyright';
+import Technology from './technology'
 
 const Content = React.createClass({
     getInitialState() {
@@ -71,6 +72,8 @@ const Content = React.createClass({
                                 return <Cognizance />;
                             case 'copyright':
                                 return <Copyright />;
+                            case 'technology':
+                                return <Technology />;
                         };
                     })()}
                 </div>

+ 4 - 1
js/component/account/services/leftTab.jsx

@@ -13,7 +13,7 @@ const LeftTab = React.createClass({
             keyList: [
                 { key: 'sub1', value: ['patent', 'copyright', 'intellectual'] },
                 { key: 'sub2', value: ['standard', 'activity', 'activityCostList', 'orgTechCenter', 'techProduct', 'ratepay', 'finance', 'achievement', 'honorList','annualReport','cognizance'] },
-                { key: 'sub3', value: [] }
+                { key: 'sub3', value: ['technology'] }
             ]
         };
     },
@@ -93,6 +93,9 @@ const LeftTab = React.createClass({
                     </Menu.Item>
                 </SubMenu>
                 <SubMenu key="sub3" title={<span>科技项目申报</span>}>
+                    <Menu.Item key="technology">
+                        申报管理
+                    </Menu.Item>
                 </SubMenu>
             </Menu>
         );

+ 264 - 0
js/component/account/services/technology.jsx

@@ -0,0 +1,264 @@
+import React from 'react';
+import { Icon, Button, Select, Spin, Table, message } from 'antd';
+import { companySearch, getTechnologyState } from '../../tools.js';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+import './technology.less';
+
+import ApplyAdd from './technologyAdd.jsx';
+import ApplyChange from './technologyChange.jsx';
+
+
+const Technology = React.createClass({
+    loadData(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/techproject/listClientTechProject",
+            success: function (data) {
+                if (data.error.length || !data.data || !data.data.list) {
+                    message.warning(data.error[0].message);
+                    return;
+                }
+                for (let i = 0; i < data.data.list.length; i++) {
+                    let thisdata = data.data.list[i];
+                    switch (thisdata.contacts){
+                    	case 1:
+                    		thisdata.contacts = thisdata.firstContacts;
+                    		break;
+                    	case 2:
+                    		thisdata.contacts = thisdata.secondContacts;
+                    		break;
+                    	case 3:
+                    		thisdata.contacts = thisdata.thirdContacts;
+                    		break;
+                    }
+                    this.state.data.push({
+                        key: i,
+                        pid: thisdata.id,
+                        uid: thisdata.uid,
+                        serialNumber: thisdata.serialNumber,
+                        province: thisdata.province,
+                        unitName: thisdata.unitName,
+                        contacts: thisdata.contacts,
+                        projectName: thisdata.projectName,
+                        projectCatagory: thisdata.projectCatagory,
+                        techField: thisdata.techField,
+                        state: thisdata.state,
+                        createTime: thisdata.createTimeFormattedDate,
+                        website: thisdata.website,
+                        accountNumber: thisdata.accountNumber,
+                        password: thisdata.password,
+                        consultant: thisdata.consultant
+                    });
+                };
+                this.state.pagination.current = data.data.pageNo;
+                this.state.pagination.total = data.data.totalCount;
+                this.setState({
+                    dataSource: this.state.data,
+                    pagination: this.state.pagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getAuthorList() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/patent/getAdmin",
+            success: function (data) {
+                if (data.error.length || !data.data) {
+                    return;
+                };
+                let _me = this;
+                for (var item in data.data) {
+                    _me.state.authorOption.push(
+                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
+                    )
+                };
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            authorOption: [],
+            selectedRows: [],
+            loading: false,
+            showAdd: false,
+            showDesc: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '编号',
+                    dataIndex: 'serialNumber',
+                    key: 'serialNumber'
+                }, {
+                    title: '省份',
+                    dataIndex: 'province',
+                    key: 'province'
+                }, {
+                    title: '公司',
+                    dataIndex: 'unitName',
+                    key: 'unitName'
+                }, {
+                    title: '联系方式',
+                    dataIndex: 'contacts',
+                    key: 'contacts'
+                }, {
+                    title: '项目名称',
+                    dataIndex: 'projectName',
+                    key: 'projectName'
+                }, {
+                    title: '项目类型',
+                    dataIndex: 'projectCatagory',
+                    key: 'projectCatagory'
+                },{
+                    title: '技术领域',
+                    dataIndex: 'techField',
+                    key: 'techField'
+                }, {
+                    title: '项目情况',
+                    dataIndex: 'state',
+                    key: 'state',
+                    render: text => { return getTechnologyState(text) },
+                },{
+                    title: '派单日',
+                    dataIndex: 'createTime',
+                    key: 'createTime'
+                }, {
+                    title: '网址',
+                    dataIndex: 'website',
+                    key: 'website'
+                }, {
+                    title: '用户名',
+                    dataIndex: 'accountNumber',
+                    key: 'accountNumber'
+                }, {
+                    title: '密码',
+                    dataIndex: 'password',
+                    key: 'password'
+                }, {
+                    title: '咨询师',
+                    dataIndex: 'consultant',
+                    key: 'consultant'
+                }
+            ],
+            dataSource: []
+        };
+    },
+    componentWillMount() {
+        this.loadData();
+        this.getAuthorList();
+        //        this.getContactsList();
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        this.setState({
+            showDesc: true
+        });
+    },
+    addClick() {
+        this.setState({
+            showAdd: true
+        });
+    },
+    delectRow() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            }
+        }
+
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/cognizance/deleteCognizance",
+            data: {
+                ids: deletedIds
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.setState({
+                    loading: false,
+                });
+            } else {
+                message.warning(data.error[0].message);
+            };
+            this.loadData();
+        }.bind(this));
+    },
+    closeDesc(e) {
+        this.state.showDesc = e;
+        this.loadData();
+    },
+    closeAdd(e) {
+        this.state.showAdd = e;
+        this.loadData();
+    },
+    render() {
+        return (
+            <div className="foster-content" >
+                <div className="content-title">
+                    <span>科技项目申报管理</span>
+                    <div className="foster-query" style={{ float: "right" }}>
+	                    <div>
+	                        <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
+	                            onClick={this.addClick}>申请新科技项目<Icon type="plus" /></Button>
+	                    </div>
+	                </div>
+                </div>
+                <div className="patent-table">
+                    <Spin spinning={this.state.loading}>
+                        <Table columns={this.state.columns}
+                            dataSource={this.state.dataSource}
+                            pagination={this.state.pagination}
+                            onRowClick={this.tableRowClick} />
+                    </Spin>
+                </div>
+                <ApplyChange
+                    data={this.state.RowData}
+                    authorOption={this.state.authorOption}
+                    showDesc={this.state.showDesc}
+                    closeDesc={this.closeDesc} />
+                <ApplyAdd
+                    authorOption={this.state.authorOption}
+                    showAdd={this.state.showAdd}
+                    closeAdd={this.closeAdd} />
+            </div >
+        );
+    }
+});
+
+export default Technology;

+ 102 - 0
js/component/account/services/technology.less

@@ -0,0 +1,102 @@
+.foster-content {
+    padding: 20px;
+    background: #fff;
+    .content-title {
+        height: 32px;
+        margin-bottom: 10px;
+        >span {
+            color: #333;
+            font-size: 16px;
+            margin-bottom: 10px;
+        }
+    }
+    .foster-query {
+        margin-bottom: 10px;
+        >input {
+            width: 180px;
+            margin-right: 20px;
+        }
+        >div {
+            margin-right: 20px;
+        }
+        button {
+            margin-right: 20px;
+        }
+        >span {
+            margin-left: 20px;
+            >span {
+                margin-left: 10px;
+            }
+        }
+    }
+}
+
+.ant-modal-body {
+    .half-item {
+        float: left;
+        width: 50%;
+        height: 36px;
+        margin-bottom: 10px;
+    }
+    .third-item {
+        float: left;
+        width: 33%;
+        height: 36px;
+        margin-bottom: 10px;
+        >p {
+            line-height: 30px;
+        }
+    }
+    .item-title {
+        line-height: 30px;
+        font-size: 14px;
+        color: #666;
+        min-width: 100px;
+        display: inline-block;
+    }
+    .form-title {
+        font-size: 16px;
+        color: #333;
+    }
+}
+
+#highTechApply-form {
+    >div {
+        margin-bottom: 10px;
+    }
+    .ant-form-item {
+        .ant-form-item-label {
+            text-align: left;
+            >label {
+                font-size: 14px;
+                color: #666;
+            }
+        }
+    }
+    .ant-form-item-required {
+        &:before {
+            display: none;
+        }
+    }
+}
+
+.avatar-uploader,
+    .avatar-uploader-trigger,
+    .avatar {
+        width: 150px;
+        height: 150px;
+    }
+    .avatar-uploader {
+        display: block;
+        border: 1px dashed #d9d9d9;
+        border-radius: 6px;
+        cursor: pointer;
+    }
+    .avatar-uploader-trigger {
+        display: table-cell;
+        vertical-align: middle;
+        font-size: 28px;
+        color: #999;
+    }
+    
+textarea{margin-bottom: 10px;}

+ 235 - 0
js/component/account/services/technologyAdd.jsx

@@ -0,0 +1,235 @@
+import React from 'react';
+import { Button, Input, Select, message, Modal, Checkbox } from 'antd';
+import { companySearch } from '../../tools.js';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+const ApplyAdd = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false
+        };
+    },
+    getContactsList() {
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/user/getContacts",
+            success: function (data) {
+                let theOption = [];
+                if (data.error.length || !data.data) {
+                    return;
+                };
+                for (let item in data.data) {
+                    let theData = data.data[item];
+                    theOption.push(
+                        <Select.Option value={item} key={item}>{theData}</Select.Option>
+                    );
+                };
+                this.setState({
+                    contactsOption: theOption
+                });
+            }.bind(this),
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/user/getDepartment",
+            success: function (data) {
+                if (data.error.length || !data.data) {
+                    message.warning(data.error[0].message);
+                    return;
+                };
+                let theOption = [];
+                for (var item in data.data) {
+                    theOption.push(
+                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
+                    );
+                };
+                this.setState({
+                    departmentOption: theOption
+                })
+                
+            }.bind(this),
+        });
+    },
+    componentWillReceiveProps(nextProps) {
+        this.state.visible = nextProps.showAdd;
+        this.getContactsList();
+    },
+    showModal() {
+        this.setState({
+            visible: true,
+        });
+    },
+    handleOk() {
+        this.setState({
+            loading: true
+        });
+        if (!this.state.contacts) {
+            message.warning('请选择一个联系人!');
+            this.setState({
+                loading: false
+            });
+            return;
+        };
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/techproject/applyTechProject",
+            data: {
+                contacts: this.state.contacts,
+                department: this.state.department,
+                dispatchInfo: this.state.dispatchInfo,
+                projectName: this.state.projectName,
+                projectCatagory: this.state.projectCatagory,
+                techField: this.state.techField,
+                projectDes: this.state.projectDes,
+                projectMode: this.state.projectMode,
+                projectApproval: this.state.projectApproval,
+                subsidy: this.state.subsidy,
+                consultant: this.state.consultant,
+            }
+        }).done(function (data) {
+            if (!data.error.length) {
+                message.success('保存成功!');
+                this.setState({
+                    visible: false
+                });
+                this.props.closeAdd(false);
+            } else {
+                message.warning(data.error[0].message);
+                this.setState({
+                    loading: false
+                });
+            }
+        }.bind(this));
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeAdd(false);
+    },
+    spinChange(e) {
+        this.setState({
+            loading: e
+        });
+    },
+    projectEstablishmentCheck(e) {
+        if (e.target.checked == true) {
+            this.state.projectMode = 1;
+        } else if (e.target.checked == false) {
+            this.state.projectMode = 0;
+        };
+    },
+    subsidyCheck(e) {
+        if (e.target.checked == true) {
+            this.state.subsidy = 1;
+        } else if (e.target.checked == false) {
+            this.state.subsidy = 0;
+        };
+    },
+    render() {
+        return (
+            <div className="cognizance-add">
+                <Modal title="新科技项目申请" visible={this.state.visible}
+                    onOk={this.handleOk} onCancel={this.handleCancel}
+                    width='800px'
+                    footer={[
+                        <Button key="submit" type="primary" loading={this.state.loading} onClick={this.handleOk}>
+                            确认
+                            </Button>,
+                        <Button key="back" onClick={this.handleCancel}>
+                            取消
+                            </Button>,
+                    ]}
+                >
+                    <div className="clearfix" style={{ marginBottom: '10px' }}>
+                        <div className="half-item">
+                            <span className="item-title">选择联系人:  </span>
+                            <Select placeholder="请选择联系人" style={{ width: 200 }}
+                                onSelect={(e, n) => { this.state.contacts = e }}>
+                                {this.state.contactsOption}
+                            </Select>
+                        </div>
+                        
+                    </div>
+                    <div className="clearfix">
+                        <div className="half-item">
+                            <span className="item-title">选择申报科技部门:  </span>
+                            <Select 
+                                placeholder="请选择申报部门" 
+                                style={{ width: 200 }}
+                                onSelect={(e, n) => { this.state.department = e; }}>
+                                {this.state.departmentOption}
+                            </Select>
+                        </div>
+                    </div>
+                    <div className="clearfix">
+                    	<div>
+                            <span className="item-title">派单信息:  </span>
+                        </div>
+                        <Input type="textarea" rows={6} onChange={(e) => { this.state.dispatchInfo = e.target.value; }} />
+                    </div>
+                    <div className="clearfix">
+	                 	<div className="half-item">
+	                   		<span className="item-title">项目名称:  </span>
+	                     	<Input  style={{ width: 200 }} onChange={(e) => { this.state.projectName = e.target.value; }} />
+	                	</div>
+                    </div>
+                    <div className="clearfix">
+                    	<div className="half-item">
+	                   		<span className="item-title">项目类型:  </span>
+	                     	<Input  style={{ width: 200 }} onChange={(e) => { this.state.projectCatagory = e.target.value; }} />
+	                	</div>
+	                </div>
+	                <div className="clearfix">
+                    	<div className="half-item">
+	                   		<span className="item-title">技术领域:  </span>
+	                     	<Input  style={{ width: 200 }} onChange={(e) => { this.state.techField = e.target.value; }} />
+	                	</div>
+	                </div>
+	                <div className="clearfix">
+                    	<div>
+                            <span className="item-title">项目介绍:  </span>
+                        </div>
+                        <Input type="textarea" rows={6} onChange={(e) => { this.state.projectDes = e.target.value; }} />
+                    </div>
+                    
+                    <div className="clearfix">
+                        <div className="half-item">
+                            <span className="item-title">是否立项: </span>
+                            <Checkbox onChange={this.projectEstablishmentCheck}></Checkbox>
+                        </div>
+                        <div className="half-item">
+                        	<span className="item-title">立项金额: </span>
+                            <Input style={{ width: 200 }} onChange={(e) => { this.state.projectApproval = e.target.value; }}  />
+                        </div>
+                    </div>
+                    <div className="clearfix">
+                        <div className="half-item">
+                            <span className="item-title">是否后补助: </span>
+                            <Checkbox onChange={this.subsidyCheck}></Checkbox>
+                        </div>
+                    </div>
+                    <div className="clearfix">
+                    	<div className="half-item">
+                            <span className="item-title">选择咨询师:  </span>
+                            <Select placeholder="请选择咨询师" style={{ width: 200 }}
+                                onSelect={(e, n) => { this.state.consultant = e }}>
+                                {this.props.authorOption}
+                            </Select>
+                        </div>
+                    </div>
+                </Modal>
+            </div>
+        );
+    }
+});
+
+export default ApplyAdd;

+ 529 - 0
js/component/account/services/technologyChange.jsx

@@ -0,0 +1,529 @@
+import React from 'react';
+import { Icon, Form, Button, Input, Select, Spin, Table, DatePicker, message, Modal, Checkbox, Upload } from 'antd';
+import { cognizanceStateList } from '../../dataDic.js';
+import { getCognizanceState, beforeUpload, getBase64, beforeUploadFile, downloadFile } from '../../tools.js';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+const ApplyChangeFrom = Form.create()(React.createClass({
+    loadData() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admintechproject/techProjectDetial",
+            data: {
+                pid: this.props.data.pid
+            },
+            success: function (data) {
+ 
+                if (data.error.length || !data.data) {
+                    message.warning(data.error[0].message);
+                    return;
+                };
+                this.state.data = data.data;
+
+                if (data.data.projectMode == 1) {
+                    this.state.projectMode = data.data.projectMode;
+                    this.setState({projectModeState:true});
+                }
+                if (data.data.subsidy == 1) {
+                    this.state.subsidy = data.data.subsidy;
+                    this.setState({subsidyState:true});
+                }
+                this.getDepartmentList();
+                this.getContactsList();
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getStateData() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/techproject/techProjectLog",
+            data: {
+                pid: this.props.data.pid
+            },
+            success: function (data) {
+                if (data.error.length || !data.data) {
+                    message.warning(data.error[0].message);
+                    return;
+                };
+                var myDate = new Date();
+                this.state.stateTable = [];
+                for (let i = 0; i < data.data.length; i++) {
+                    this.state.stateTable.push({
+                        key: i,
+                        state: data.data[i].state,
+                        recordTime: myDate.toLocaleDateString(data.data[i].recordTime),
+                        principal: data.data[i].principal,
+                        comment: data.data[i].comment
+                    });
+                };
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getDepartmentList () {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/user/getDepartment",
+            success: function (data) {
+                if (data.error.length || !data.data) {
+                    message.warning(data.error[0].message);
+                    return;
+                };
+                for (var item in data.data) {
+                    this.state.departmentOption.push(
+                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
+                    )
+                };
+                this.setState({department:data.data[this.state.data.department]});
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getContactsList() {
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/getContacts",
+            data: {
+                uid: this.props.data.uid,
+            },
+            success: function (data) {
+                let theOption = [];
+                if (data.error.length || !data.data) {
+                    return;
+                };
+                for (let item in data.data) {
+                    let theData = data.data[item];
+                    theOption.push(
+                        <Select.Option value={item} key={item}>{theData}</Select.Option>
+                    );
+                };
+                this.setState({
+                    contactsOption: theOption,
+                    contacts: data.data[this.state.data.contacts]
+                });
+            }.bind(this),
+        });
+    },
+    getInitialState() {
+        return {
+            loading: false,
+            stateOption: [],
+            departmentOption: [],
+            projectDes:'',
+            projectMode: 0,
+            subsidy: 0,
+            projectModeState: false,
+            subsidyState: false,
+            stateColumns: [{
+                title: '专利状态',
+                dataIndex: 'state',
+                key: 'state',
+                render: (text) => { return getCognizanceState(text) }
+            }, {
+                title: '处理时间',
+                dataIndex: 'recordTime',
+                key: 'recordTime'
+            }, {
+                title: '负责人',
+                dataIndex: 'principal',
+                key: 'principal',
+            }, {
+                title: '备注',
+                dataIndex: 'comment',
+                key: 'comment',
+            }],
+            stateTable: []
+        };
+    },
+    componentWillMount() {
+        let _me = this;
+        cognizanceStateList.map(function (item) {
+            _me.state.stateOption.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        this.loadData();
+        this.getStateData();
+        
+    },
+    handleSubmit(e) {
+        e.preventDefault();
+        this.props.form.validateFields((err, values) => {
+            if (values.state || values.principal || values.recordTime || values.comment) {
+                if (!values.state && !values.principal && !values.recordTime) {
+                    message.warning("请填写完整的状态流转信息!");
+                    return;
+                };
+            };
+            if (!err) {
+                this.props.spinState(true);
+                let contacts = !isNaN(values.contacts) ? values.contacts : this.state.data.contacts;
+                $.ajax({
+                    method: "POST",
+                    dataType: "json",
+                    crossDomain: false,
+                    url: globalConfig.context + "/api/admintechproject/updateTechProject",
+                    data: {
+                        id: this.props.data.pid,
+                        uid: this.props.data.uid,
+                        contacts: contacts,
+                        department: values.department,
+                        projectName: values.projectName,
+                        projectCatagory: values.projectCatagory,
+                        techField: values.techField,
+                        projectDes: values.projectDes,
+                        projectMode: this.state.projectMode,
+                        projectApproval: values.projectApproval,
+                        subsidy: this.state.subsidy,
+                        approvalUrl: this.state.approvalUrl,
+                        
+                        recordTimeFormattedDate: values.recordTime ? values.recordTime.format("YYYY-MM-DD") : undefined,
+                        state: values.state,
+                        principal: values.principal,
+                        comment: values.comment,
+                    }
+                }).done(function (data) {
+                    if (!data.error.length) {
+                        message.success('保存成功!');
+                        this.props.closeModal();
+                        this.props.form.resetFields();
+                        this.props.spinState(false);
+                    } else {
+                        message.warning(data.error[0].message);
+                        this.props.spinState(false);
+                    }
+                }.bind(this));
+            }
+        });
+    },
+    componentWillReceiveProps(nextProps) {
+        if (!this.props.visible && nextProps.visible) {
+            this.getStateData();
+            this.loadData();
+        };
+        if (nextProps.data) {
+            this.state.pid = nextProps.data.pid;
+        }
+    },
+    projectEstablishmentCheck(e) {
+        if (e.target.checked == true) {
+            this.setState({projectModeState:true})
+            this.state.projectMode = 1;
+        } else if (e.target.checked == false) {
+            this.setState({projectModeState:false})
+            this.state.projectMode = 0;
+        };
+    },
+    subsidyCheck(e) {
+        if (e.target.checked == true) {
+            this.setState({subsidyState:true})
+            this.state.subsidy = 1;
+        } else if (e.target.checked == false) {
+            this.setState({subsidyState:false})
+            this.state.subsidy = 0;
+        };
+    },
+    render() {
+        const FormItem = Form.Item;
+        const { getFieldDecorator } = this.props.form;
+        const theData = this.state.data;
+        const formItemLayout = {
+            labelCol: { span: 6 },
+            wrapperCol: { span: 12 },
+        };
+        const _me = this;
+        if (this.state.data) {
+            return (
+                <Form onSubmit={this.handleSubmit} id="highTechApply-form">
+                    <div className="clearfix">
+                        <div className="half-item">
+                            <span className="item-title">公司名称: </span>
+                            <span>{theData.unitName}</span>
+                        </div>
+                        <div className="half-item">
+                            <span className="item-title">公司组织机构代码: </span>
+                            <span>{theData.orgCode}</span>
+                        </div>
+                        <div className="half-item">
+                            <span className="item-title">公司地址: </span>
+                            <span>{theData.province+' '+theData.city+' '+theData.area}</span>
+                        </div>
+                        <div className="half-item">
+                            <FormItem 
+                                labelCol={{ span: 4 }}
+                                wrapperCol={{ span: 10 }}
+                                label="联系人:"
+                            >
+                                {getFieldDecorator('contacts', {
+                                    initialValue: this.state.contacts
+                                    })(
+                                        <Select>{this.state.contactsOption}</Select>
+                                    )}      
+                            </FormItem>
+                        </div>
+                    </div>
+                    <div className="clearfix">
+                        <FormItem className="third-item"
+                            {...formItemLayout}
+	                            label="科技部门"
+	                        >
+                                {getFieldDecorator('department', {
+                                    initialValue: this.state.department
+                                    })(
+                                        <Select>{this.state.departmentOption}</Select>
+                                    )}
+	                 	</FormItem>
+                    </div>
+                    <div className="clearfix">
+                        <div className="half-item">
+                            <span className="item-title">派单信息: </span>
+                            <span>{theData.dispatchInfo}</span>
+                        </div>
+                    </div>
+                    <div className="clearfix">
+                    	<div className="half-item">
+	                        <FormItem
+		                        labelCol={{ span: 4 }}
+                        		wrapperCol={{ span: 12 }}
+		                        label="项目名称"
+		                    >
+                                {getFieldDecorator('projectName', {
+                                    initialValue: theData.projectName
+                                    })(
+                                        <Input />
+                                    )}
+		                    </FormItem>
+	                    </div>
+                    </div>
+                    <div className="clearfix">
+                    	<div className="half-item">
+	                        <FormItem
+		                        labelCol={{ span: 4 }}
+	                        	wrapperCol={{ span: 12 }}
+		                        label="项目类型"
+		                    >
+                                {getFieldDecorator('projectCatagory', {
+                                    initialValue: theData.projectCatagory
+                                    })(
+                                        <Input />
+                                    )}
+		                    </FormItem>
+	                    </div>
+                    </div>
+                    <div className="clearfix">
+                    	<div className="half-item">
+	                        <FormItem
+		                        labelCol={{ span: 4 }}
+	                        	wrapperCol={{ span: 12 }}
+		                        label="技术领域"
+		                    >
+                                {getFieldDecorator('techField', {
+                                    initialValue: theData.techField
+                                    })(
+                                        <Input />
+                                    )}
+		                    </FormItem>
+		                </div>
+                    </div>
+                    <div className="clearfix">
+                     	<span className="item-title">项目简介: </span>
+                            {getFieldDecorator('projectDes', {
+                                initialValue: theData.projectDes
+                                })(
+                                    <Input type="textarea"
+                          	            placeholder="多行输入"
+                                        rows={6} />
+                                )}
+                    </div>
+                    <div className="clearfix">
+                        <div className="half-item">
+                            <span className="item-title">是否立项: </span>
+                            <Checkbox 
+                                onChange={this.projectEstablishmentCheck}
+                                checked={this.state.projectModeState}
+                                >
+                            </Checkbox>
+                        </div>
+                        <div className="half-item">
+                            <FormItem
+			                    {...formItemLayout}
+			                    label="立项金额"
+			                >
+                                {getFieldDecorator('projectApproval', {
+                                    initialValue: theData.projectApproval
+                                })(
+                                    <Input />
+                                )}
+			                </FormItem>
+                        </div>
+                    </div>
+                    <div className="clearfix">
+                        <div className="half-item">
+                            <span className="item-title">是否后补助: </span>
+                            <Checkbox 
+                                onChange={this.subsidyCheck}
+                                checked={this.state.subsidyState}
+                                >
+                            </Checkbox>
+                        </div>
+                    </div>
+                    <div className="hrSituation-roster">
+                        <Upload
+                            name="avatar"
+                            action={globalConfig.context + "/api/techproject/upload"}
+                            data={{ 'uid': this.props.data.uid }}
+                            beforeUpload={beforeUploadFile}
+                            showUploadList={false}
+                            onChange={(info) => {
+                                if (info.file.status !== 'uploading') {
+                                    console.log(info.file, info.fileList);
+                                }
+                                if (info.file.status === 'done') {
+                                    if (!info.file.response.error.length) {
+                                        message.success(`${info.file.name} 文件上传成功!`);
+                                    } else {
+                                        message.warning(info.file.response.error[0].message);
+                                        return;
+                                    };
+                                    this.state.approvalUrl = info.file.response.data;
+                                } else if (info.file.status === 'error') {
+                                    message.error(`${info.file.name} 文件上传失败。`);
+                                }
+                            }}
+                        >
+                            <Button><Icon type="upload" /> 项目材料上传 </Button>
+                        </Upload>
+                        <p style={{ marginTop: '10px' }}>{theData.approvalUrl ? <a onClick={downloadFile.bind(null, theData.approvalUrl, theData.approvalDownloadFileName)}>{theData.approvalDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    </div>
+                    <div className="form-title">状态流转记录: </div>
+                    <Table pagination={false} dataSource={this.state.stateTable} columns={this.state.stateColumns} />
+                    <div className="clearfix">
+                        <FormItem className="third-item"
+                            {...formItemLayout}
+                            label="状态流转"
+                        >
+                            {getFieldDecorator('state')(
+                                <Select placeholder="选择一个状态">{this.state.stateOption}</Select>
+                            )}
+                        </FormItem>
+                        <FormItem className="third-item"
+                            labelCol={{ span: 6 }}
+                            wrapperCol={{ span: 12 }}
+                            label="处理时间"
+                        >
+                            {getFieldDecorator('recordTime')(
+                                <DatePicker />
+                            )}
+                        </FormItem>
+                        <FormItem className="third-item"
+                            {...formItemLayout}
+                            label="负责人"
+                        >
+                            {getFieldDecorator('principal')(
+                                <Select placeholder="选择负责人">{this.props.authorOption}</Select>
+                            )}
+                        </FormItem>
+                    </div>
+                    <FormItem
+                        labelCol={{ span: 2 }}
+                        wrapperCol={{ span: 12 }}
+                        label="备注"
+                    >
+                        {getFieldDecorator('comment')(
+                            <Input />
+                        )}
+                    </FormItem>
+                    <FormItem style={{ marginTop: '20px' }}>
+                        <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
+                        <Button type="ghost" style={{ marginLeft: '20px' }} onClick={this.props.closeModal}>取消</Button>
+                    </FormItem>
+                </Form >
+            );
+        } else {
+            return (<div></div>)
+        };
+    },
+}));
+
+const ApplyChange = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false
+        };
+    },
+    componentWillReceiveProps(nextProps) {
+        this.state.visible = nextProps.showDesc
+    },
+    showModal() {
+        this.setState({
+            visible: true,
+        });
+    },
+    handleOk() {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    spinChange(e) {
+        this.setState({
+            loading: e
+        });
+    },
+    render() {
+        return (
+            <div className="patent-addNew">
+                <Spin spinning={this.state.loading} className='spin-box'>
+                    <Modal title="编辑科技项目" visible={this.state.visible}
+                        onOk={this.handleOk} onCancel={this.handleCancel}
+                        width='1000px'
+                        footer=''
+                    >
+                        <ApplyChangeFrom
+                            visible={this.state.visible}
+                            authorOption={this.props.authorOption}
+                            data={this.props.data}
+                            spinState={this.spinChange} closeModal={this.handleCancel} />
+                    </Modal>
+                </Spin>
+            </div>
+        );
+    }
+});
+
+export default ApplyChange;

+ 1 - 1
js/component/manageCenter/servicesManage/technology/applyAdd.jsx

@@ -171,7 +171,7 @@ const ApplyAdd = React.createClass({
                                 showSearch
                                 filterOption={companySearch}
                                 onSelect={(e, n) => { this.state.uid = e; this.getContactsList(e); }}>
-                                {this.props.companyOption}
+                                {this.props.companyAddOption}
                             </Select>
                         </div>
                         <div className="half-item">

+ 9 - 11
js/component/manageCenter/servicesManage/technology/applyChange.jsx

@@ -6,7 +6,7 @@ import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 
 const ApplyChangeFrom = Form.create()(React.createClass({
-    loadData() {
+    loadData(id) {
         this.setState({
             loading: true
         });
@@ -16,7 +16,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             crossDomain: false,
             url: globalConfig.context + "/api/admintechproject/techProjectDetial",
             data: {
-                pid: this.props.data.pid
+                pid: id || this.props.data.pid
             },
             success: function (data) {
  
@@ -43,7 +43,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             });
         }.bind(this));
     },
-    getStateData() {
+    getStateData(id) {
         this.setState({
             loading: true
         });
@@ -53,7 +53,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             crossDomain: false,
             url: globalConfig.context + "/api/admintechproject/techProjectLog",
             data: {
-                pid: this.props.data.pid
+                pid: id || this.props.data.pid
             },
             success: function (data) {
                 if (data.error.length || !data.data) {
@@ -125,7 +125,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                 for (let item in data.data) {
                     let theData = data.data[item];
                     theOption.push(
-                        <Select.Option value={theData} key={theData}>{theData}</Select.Option>
+                        <Select.Option value={item} key={item}>{theData}</Select.Option>
                     );
                 };
                 this.setState({
@@ -188,6 +188,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             };
             if (!err) {
                 this.props.spinState(true);
+                let contacts = !isNaN(values.contacts) ? values.contacts : this.state.data.contacts;
                 $.ajax({
                     method: "POST",
                     dataType: "json",
@@ -196,7 +197,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                     data: {
                         id: this.props.data.pid,
                         uid: this.props.data.uid,
-                        contacts: values.contacts,
+                        contacts: contacts,
                         department: values.department,
                         projectName: values.projectName,
                         projectCatagory: values.projectCatagory,
@@ -228,12 +229,9 @@ const ApplyChangeFrom = Form.create()(React.createClass({
     },
     componentWillReceiveProps(nextProps) {
         if (!this.props.visible && nextProps.visible) {
-            this.getStateData();
-            this.loadData();
+            this.loadData(nextProps.data.pid);
+            this.getStateData(nextProps.data.pid);
         };
-        if (nextProps.data) {
-            this.state.pid = nextProps.data.pid;
-        }
     },
     projectEstablishmentCheck(e) {
         if (e.target.checked == true) {

+ 22 - 3
js/component/manageCenter/servicesManage/technology/applyManage.jsx

@@ -119,6 +119,9 @@ const ApplyManage = React.createClass({
                 let _me = this;
                 for (var item in data.data) {
                     _me.state.companyOption.push(
+                        <Select.Option value={data.data[item]} key={data.data[item]}>{data.data[item]}</Select.Option>
+                    )
+                    _me.state.companyAddOption.push(
                         <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
                     )
                 };
@@ -133,8 +136,10 @@ const ApplyManage = React.createClass({
         return {
             provinceOption: [],
             companyOption: [],
+            companyAddOption: [],
             authorOption: [],
             selectedRows: [],
+            selectedRowKeys: [],
             loading: false,
             showAdd: false,
             showDesc: false,
@@ -240,12 +245,15 @@ const ApplyManage = React.createClass({
                 deletedIds.push(rowItem.id)
             }
         }
-
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
         $.ajax({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteCognizance",
+            url: globalConfig.context + "/api/admintechproject/deleteTechProject",
             data: {
                 ids: deletedIds
             }
@@ -278,6 +286,16 @@ const ApplyManage = React.createClass({
         this.loadData();
     },
     render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows,
+                    selectedRowKeys: selectedRowKeys
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
         return (
             <div className="foster-content" >
                 <div className="content-title">
@@ -314,6 +332,7 @@ const ApplyManage = React.createClass({
                 <div className="patent-table">
                     <Spin spinning={this.state.loading}>
                         <Table columns={this.state.columns}
+                            rowSelection={rowSelection}
                             dataSource={this.state.dataSource}
                             pagination={this.state.pagination}
                             onRowClick={this.tableRowClick} />
@@ -326,7 +345,7 @@ const ApplyManage = React.createClass({
                     closeDesc={this.closeDesc} />
                 <ApplyAdd
                     authorOption={this.state.authorOption}
-                    companyOption={this.state.companyOption}
+                    companyAddOption={this.state.companyAddOption}
                     showAdd={this.state.showAdd}
                     closeAdd={this.closeAdd} />
             </div >

+ 1 - 1
js/component/manageCenter/servicesManage/technology/websiteAdd.jsx

@@ -92,7 +92,7 @@ const WebsiteAdd = React.createClass({
                                 showSearch
                                 filterOption={companySearch}
                                 onChange={(e)=>{ this.state.unitName = e;}}>
-                                {this.props.companyOption}
+                                {this.props.companyAddOption}
                             </Select>
                         </div>
                     </div>

+ 47 - 51
js/component/manageCenter/servicesManage/technology/websiteChange.jsx

@@ -7,7 +7,7 @@ import $ from 'jquery/src/ajax';
 
 
 const WebsiteChangeFrom = Form.create()(React.createClass({
-    loadData() {
+    loadData(id) {
         this.setState({
             loading: true
         });
@@ -17,7 +17,7 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
             crossDomain: false,
             url: globalConfig.context + "/api/admintechproject/techWebsiteDetail",
             data: {
-                id: this.props.data.id
+                id: id || this.props.data.id
             },
             success: function (data) {
                 this.state.data = data.data;
@@ -28,7 +28,7 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
             });
         }.bind(this));
     },
-    getDepartmentList () {
+    getDepartmentList() {
         this.setState({
             loading: true
         });
@@ -62,7 +62,7 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
             loading: false,
             stateOption: [],
             departmentOption: [],
-            introduce:'',
+            introduce: '',
             projectCheck: 0,
             subsidy: 0,
             stateTable: []
@@ -114,7 +114,7 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
     },
     componentWillReceiveProps(nextProps) {
         if (!this.props.visible && nextProps.visible) {
-            this.loadData();
+            this.loadData(nextProps.data.id);
         };
     },
     projectEstablishmentCheck(e) {
@@ -144,65 +144,61 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
             return (
                 <Form onSubmit={this.handleSubmit} id="highTechApply-form">
                     <div className="half-item">
-                        <FormItem 
+                        <FormItem
                             labelCol={{ span: 8 }}
-	                        wrapperCol={{ span: 12 }}
-	                        label="选择公司:"
-	                    >
-                            {getFieldDecorator('unitName', {
-                                initialValue: theData.unitName
-                                })(
-                                    <Select>{this.props.companyOption}</Select>
-                                )}      
-	                 	</FormItem>
+                            wrapperCol={{ span: 12 }}
+                            label="选择公司:"
+                        >
+                            <span>{theData.unitName}</span>
+                        </FormItem>
                     </div>
                     <div className="clearfix">
-                        <FormItem 
+                        <FormItem
                             {...formItemLayout}
-	                            label="科技部门名称:"
-	                        >
-                                {getFieldDecorator('department', {
-                                    initialValue: theData.department
-                                    })(
-                                        <Select>{this.state.departmentOption}</Select>
-                                    )}
-	                 	</FormItem>
+                            label="科技部门名称:"
+                        >
+                            {getFieldDecorator('department', {
+                                initialValue: theData.department
+                            })(
+                                <Select>{this.state.departmentOption}</Select>
+                                )}
+                        </FormItem>
                     </div>
                     <div className="clearfix">
-                        <FormItem 
+                        <FormItem
                             {...formItemLayout}
-	                            label="网址:"
-	                        >
-                                {getFieldDecorator('website', {
-                                    initialValue: theData.website
-                                    })(
-                                        <Input />
-                                    )}
-	                 	</FormItem>
+                            label="网址:"
+                        >
+                            {getFieldDecorator('website', {
+                                initialValue: theData.website
+                            })(
+                                <Input />
+                                )}
+                        </FormItem>
                     </div>
                     <div className="clearfix">
-                        <FormItem 
+                        <FormItem
                             {...formItemLayout}
-	                            label="账号:"
-	                        >
-                                {getFieldDecorator('accountNumber', {
-                                    initialValue: theData.accountNumber
-                                    })(
-                                        <Input />
-                                    )}
-	                 	</FormItem>
+                            label="账号:"
+                        >
+                            {getFieldDecorator('accountNumber', {
+                                initialValue: theData.accountNumber
+                            })(
+                                <Input />
+                                )}
+                        </FormItem>
                     </div>
                     <div className="clearfix">
-                        <FormItem 
+                        <FormItem
                             {...formItemLayout}
-	                            label="密码:"
-	                        >
-                                {getFieldDecorator('password', {
-                                    initialValue: theData.password
-                                    })(
-                                        <Input />
-                                    )}
-	                 	</FormItem>
+                            label="密码:"
+                        >
+                            {getFieldDecorator('password', {
+                                initialValue: theData.password
+                            })(
+                                <Input />
+                                )}
+                        </FormItem>
                     </div>
                     <FormItem style={{ marginTop: '20px' }}>
                         <Button className="set-submit" type="primary" htmlType="submit">保存</Button>

+ 27 - 5
js/component/manageCenter/servicesManage/technology/websiteManage.jsx

@@ -24,7 +24,7 @@ const Cognizance = React.createClass({
                 pageNo: pageNo || 1,
                 pageSize: this.state.pagination.pageSize,
                 province: this.state.province,
-                uid: this.state.unitName,
+                unitName: this.state.unitName,
             },
             success: function (data) {
                 if (data.error.length || !data.data || !data.data.list) {
@@ -73,6 +73,9 @@ const Cognizance = React.createClass({
                 let _me = this;
                 for (var item in data.data) {
                     _me.state.companyOption.push(
+                        <Select.Option value={data.data[item]} key={data.data[item]}>{data.data[item]}</Select.Option>
+                    )
+                    _me.state.companyAddOption.push(
                         <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
                     )
                 };
@@ -87,8 +90,10 @@ const Cognizance = React.createClass({
         return {
             provinceOption: [],
             companyOption: [],
+            companyAddOption: [],
             authorOption: [],
             selectedRows: [],
+            selectedRowKeys: [],
             loading: false,
             showAdd: false,
             showDesc: false,
@@ -160,12 +165,15 @@ const Cognizance = React.createClass({
                 deletedIds.push(rowItem.id)
             }
         }
-
+        this.setState({
+            selectedRowKeys: [],
+            loading: deletedIds.length > 0
+        });
         $.ajax({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteCognizance",
+            url: globalConfig.context + "/api/admintechproject/deleteTechWebsite",
             data: {
                 ids: deletedIds
             }
@@ -198,6 +206,16 @@ const Cognizance = React.createClass({
         this.loadData();
     },
     render() {
+        const rowSelection = {
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows,
+                    selectedRowKeys: selectedRowKeys
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
         return (
             <div className="foster-content" >
                 <div className="content-title">
@@ -229,11 +247,15 @@ const Cognizance = React.createClass({
                     </Select>
                     <Button type="primary" onClick={this.search}>搜索</Button>
                     <Button onClick={this.reset}>重置</Button>
+                    <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                            disabled={!hasSelected}
+                            onClick={this.delectRow}>删除<Icon type="minus" /></Button>
                 </div>
                 
                 <div className="patent-table">
                     <Spin spinning={this.state.loading}>
                         <Table columns={this.state.columns}
+                            rowSelection={rowSelection}
                             dataSource={this.state.dataSource}
                             pagination={this.state.pagination}
                             onRowClick={this.tableRowClick} />
@@ -241,11 +263,11 @@ const Cognizance = React.createClass({
                 </div>
                 <WebsiteChange
                     data={this.state.RowData}
-                    companyOption={this.state.companyOption}
+                    companyAddOption={this.state.companyAddOption}
                     showDesc={this.state.showDesc}
                     closeDesc={this.closeDesc} />
                 <WebsiteAdd
-                    companyOption={this.state.companyOption}
+                    companyAddOption={this.state.companyAddOption}
                     showAdd={this.state.showAdd}
                     closeAdd={this.closeAdd} />
             </div >