Browse Source

Accept Merge Request #18 v1.0.11 merge : (master -> test)

Merge Request: v1.0.11 merge
Created By: @seirios
Accepted By: @seirios
URL: https://coding.net/t/aft/p/AFT-WEB/git/merge/18
seirios 8 years ago
parent
commit
b0a67673d8
33 changed files with 2308 additions and 792 deletions
  1. 30 0
      .gitignore.gitignore
  2. 4 1
      js/component/account/services/content.jsx
  3. 54 60
      js/component/account/services/copyright/comPatentAdd.jsx
  4. 105 68
      js/component/account/services/copyright/comPatentChange.jsx
  5. 6 0
      js/component/account/services/copyright/comprehensive.less
  6. 179 55
      js/component/account/services/copyright/copyright.jsx
  7. 8 22
      js/component/account/services/copyright/copyright.less
  8. 4 1
      js/component/account/services/leftTab.jsx
  9. 2 2
      js/component/account/services/patent.less
  10. 264 0
      js/component/account/services/technology.jsx
  11. 102 0
      js/component/account/services/technology.less
  12. 235 0
      js/component/account/services/technologyAdd.jsx
  13. 529 0
      js/component/account/services/technologyChange.jsx
  14. 2 2
      js/component/account/set/changeModal.less
  15. 11 9
      js/component/dataDic.js
  16. 54 60
      js/component/manageCenter/servicesManage/copyright/comPatentAdd.jsx
  17. 166 70
      js/component/manageCenter/servicesManage/copyright/comPatentChange.jsx
  18. 6 0
      js/component/manageCenter/servicesManage/copyright/comprehensive.less
  19. 98 33
      js/component/manageCenter/servicesManage/copyright/copyright.jsx
  20. 8 22
      js/component/manageCenter/servicesManage/copyright/copyright.less
  21. 1 1
      js/component/manageCenter/servicesManage/highTech/fosterDesc/content.less
  22. 3 3
      js/component/manageCenter/servicesManage/highTech/fosterDesc/hrSituation.jsx
  23. 6 2
      js/component/manageCenter/servicesManage/patent/comPatentAdd.jsx
  24. 2 2
      js/component/manageCenter/servicesManage/patent/comprehensive.less
  25. 69 34
      js/component/manageCenter/servicesManage/technology/applyAdd.jsx
  26. 191 132
      js/component/manageCenter/servicesManage/technology/applyChange.jsx
  27. 23 4
      js/component/manageCenter/servicesManage/technology/applyManage.jsx
  28. 1 1
      js/component/manageCenter/servicesManage/technology/websiteAdd.jsx
  29. 79 160
      js/component/manageCenter/servicesManage/technology/websiteChange.jsx
  30. 28 34
      js/component/manageCenter/servicesManage/technology/websiteManage.jsx
  31. 13 11
      js/component/manageCenter/userManage/orgList.jsx
  32. 24 2
      js/component/tools.js
  33. 1 1
      package.json

+ 30 - 0
.gitignore.gitignore

@@ -0,0 +1,30 @@
+# Logs
+logs
+*.log
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directory
+# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
+node_modules
+clean.sh
+build
+.project

+ 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>

+ 54 - 60
js/component/account/services/copyright/comPatentAdd.jsx

@@ -13,7 +13,7 @@ const PatentAddFrom = Form.create()(React.createClass({
             crossDomain: false,
             url: globalConfig.context + "/api/admin/getContacts",
             data: {
-                uid: theUid
+                uid: theUid || this.state.uid
             },
             success: function (data) {
                 let theOption = [];
@@ -36,9 +36,6 @@ const PatentAddFrom = Form.create()(React.createClass({
         return {
             loading: false,
             companyOption: [],
-            firstCheck: 0,
-            secondCheck: 0,
-            thirdCheck: 0,
             accelerated: 0,
             acceleratedDate: 0,
             visible: "visible"
@@ -46,40 +43,40 @@ const PatentAddFrom = Form.create()(React.createClass({
     },
     handleSubmit(e) {
         e.preventDefault();
-        if (!this.state.companyName || this.state.companyName === "") {
-            message.warning('请先选择公司!');
-            return;
-        };
         this.props.form.validateFields((err, values) => {
+            if (!values.uid || values.uid === "") {
+                message.warning('请先选择公司!');
+                return;
+            };
             if (!err) {
                 this.props.spinState(true);
                 $.ajax({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/techservice/patent/manageApplyPatent",
+                    url: globalConfig.context + "/api/admin/copyright/apply",
                     data: {
-                        'uid': this.state.companyName,
-                        'firstInventorIdNumber': values.firstInventorID,
-                        'firstInventorName': values.firstInventorName,
-                        'patentDes': values.intro,
-                        'secondInventorName': values.secondInventorName,
-                        'thirdInventorName': values.thirdInventorName,
-                        'firstInventorIsPublish': this.state.firstCheck,
-                        'secondInventorIsPublish': this.state.secondCheck,
-                        'thirdInventorIsPublish': this.state.thirdCheck,
-                        'patentProryStatementUrl': this.state.avatarUrl
+                        "uid": values.uid, // 公司用户id,size 0-36, required
+                        "contact": values.contact, // 联系人, 1,2,3
+                        //"copyrightInfo": values.copyrightInfo, // 软著简介,size 0-255
+                        //"copyrightName": values.copyrightName, // 软著名称, size 0-60
+                        "outsource": values.outsource, // 外包公司, size 0-60
+                        "workIssue": values.workIssue, // 派单信息, size 0-128
+                        "inUrgent": values.inUrgent, //  加急天数,
+                        //"comment": values.comment, // 备注 size 0-128
+                        "principal": values.principal // 负责人id
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
                         message.success('保存成功!');
+                        this.props.okClick();
+                        this.props.closeModal();
+                        this.props.form.resetFields();
                     } else {
                         message.warning(data.error[0].message);
                     }
                 }.bind(this)).always(function () {
                     this.props.spinState(false);
-                    this.props.okClick();
-                    this.props.form.resetFields();
                 }.bind(this));
             }
         });
@@ -93,9 +90,6 @@ const PatentAddFrom = Form.create()(React.createClass({
             this.setState({ visible: "visible" });
         }
     },
-    acceleratedSelect(value) {
-        this.state.acceleratedDate = value;
-    },
     render() {
         const FormItem = Form.Item;
         const { getFieldDecorator } = this.props.form;
@@ -105,47 +99,43 @@ const PatentAddFrom = Form.create()(React.createClass({
         };
         const _me = this;
         return (
-            <Form horizontal onSubmit={this.handleSubmit} className="person-form">
-                <FormItem
-                    wrapperCol={{ span: 24 }}
-                >
-                    <Row>
-                        <Col span={12}>
-                            <span>选择公司:  </span>
+            <Form horizontal onSubmit={this.handleSubmit} id="CopyrightDesc-form">
+                <Row>
+                    <Col span={12}>
+                        <span>选择公司:  </span>
+                        {getFieldDecorator('uid')(
                             <Select
                                 placeholder="请选择公司"
                                 notFoundContent="未找到公司"
                                 style={{ width: 200 }}
                                 showSearch
                                 filterOption={companySearch}
-                                value={this.state.uid}
-                                onSelect={(e, n) => { this.setState({ uid: e }); this.getContactsList(e); }}>
+                                onSelect={(e, n) => { this.getContactsList(e); }}>
                                 {this.props.companyOption}
                             </Select>
-                        </Col>
-                        <Col span={12}>
-                            <span>选择联系人:  </span>
+                        )}
+                    </Col>
+                    <Col span={12}>
+                        <span>选择联系人:  </span>
+                        {getFieldDecorator('contact')(
                             <Select placeholder="请选择联系人" style={{ width: 200 }}
                                 notFoundContent="未获取到联系人列表"
-                                value={this.state.contacts}
-                                onSelect={(e, n) => { this.setState({ contacts: e }); }}>
+                                onSelect={(e, n) => { this.setState({ contact: e }); }}>
                                 {this.state.contactsOption}
                             </Select>
-                        </Col>
-                    </Row>
-                </FormItem>
+                        )}
+                    </Col>
+                </Row>
                 <FormItem
                     labelCol={{ span: 24 }}
                     wrapperCol={{ span: 18 }}
                     label="派单信息"
                 >
-                    {getFieldDecorator('intro', {
-                        initialValue: this.state.intro || null
-                    })(
+                    {getFieldDecorator('workIssue')(
                         <Input type="textarea"
                             placeholder="多行输入"
                             rows={6} />
-                        )}
+                    )}
                 </FormItem>
                 <FormItem
                     labelCol={{ span: 0 }}
@@ -153,32 +143,35 @@ const PatentAddFrom = Form.create()(React.createClass({
                 >
                     <span>是否加急:</span>
                     <Checkbox onChange={this.acceleratedCheck}></Checkbox>
-                    <Select className={this.state.visible} placeholder="请选择加急时间" style={{ width: 120 }} onChange={this.acceleratedSelect}>
-                        <Select.Option value="3">3天</Select.Option>
-                        <Select.Option value="5">5天</Select.Option>
-                        <Select.Option value="10">10天</Select.Option>
-                        <Select.Option value="20">20天</Select.Option>
-                    </Select>
+                    {getFieldDecorator('inUrgent')(
+                        <Select className={this.state.visible}
+                            placeholder="请选择加急时间"
+                            style={{ width: 120 }}>
+                            <Select.Option value="3">3天</Select.Option>
+                            <Select.Option value="5">5天</Select.Option>
+                            <Select.Option value="10">10天</Select.Option>
+                            <Select.Option value="20">20天</Select.Option>
+                        </Select>
+                    )}
                 </FormItem>
                 <FormItem
                     {...formItemLayout}
                     label="选择咨询师"
                 >
-                    <Select placeholder="请选择咨询师" style={{ width: 200 }}
-                        value={this.state.consultant}
-                        onSelect={(e, n) => { this.setState({ consultant: e }); }}>
-                        {this.props.authorOption}
-                    </Select>
+                    {getFieldDecorator('principal')(
+                        <Select placeholder="请选择咨询师" style={{ width: 200 }}
+                            onSelect={(e, n) => { this.setState({ principal: e }); }}>
+                            {this.props.authorOption}
+                        </Select>
+                    )}
                 </FormItem>
                 <FormItem
                     {...formItemLayout}
                     label="外包公司"
                 >
-                    {getFieldDecorator('intro', {
-                        initialValue: this.state.intro || null
-                    })(
+                    {getFieldDecorator('outsource')(
                         <Input placeholder="输入外包公司" />
-                        )}
+                    )}
                 </FormItem>
                 <FormItem>
                     <Button className="set-submit" type="primary" htmlType="submit">确认</Button>
@@ -227,6 +220,7 @@ const PatentAdd = React.createClass({
                     >
                         <PatentAddFrom
                             spinState={this.spinChange}
+                            closeModal={this.handleCancel}
                             okClick={() => { this.props.closeAdd(false, true) }}
                             companyOption={this.props.companyOption}
                             authorOption={this.props.authorOption} />

+ 105 - 68
js/component/account/services/copyright/comPatentChange.jsx

@@ -12,11 +12,12 @@ const CopyrightDescForm = Form.create()(React.createClass({
             visible: false,
             loading: false,
             stateOption: [],
+            stateTable: [],
             contactsOption: [],
             stateColumns: [{
                 title: '申请状态',
-                dataIndex: 'state',
-                key: 'state',
+                dataIndex: 'status',
+                key: 'status',
                 render: (text) => { return getCopyrightState(text) }
             }, {
                 title: '处理时间',
@@ -44,66 +45,104 @@ const CopyrightDescForm = Form.create()(React.createClass({
                 <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
             )
         });
+        this.loadData();
     },
-    loadData(uid, cid, year) {
+    loadData(uid, id) {
         this.setState({
             loading: true
         });
         $.when($.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/cognizanceLog",
+            cache: false,
+            url: globalConfig.context + "/api/admin/copyright/logs",
             data: {
-                pid: this.state.xid
+                id: id || this.props.data.id
             }
         }), $.ajax({
-            method: "get",
+            method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/getContacts"
+            cache: false,
+            url: globalConfig.context + "/api/admin/getContacts",
+            data: {
+                uid: uid || this.props.data.uid
+            }
         }), $.ajax({
             method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/getContacts",
+            cache: false,
+            url: globalConfig.context + "/api/admin/copyright/detail",
+            data: {
+                id: id || this.props.data.id
+            }
         })).done((data1, data2, data3) => {
+            let _me = this;
             //状态流转table
-            if (data1[0].error.length) {
+            if (data1[0].error && data1[0].error.length) {
                 message.warning(data1[0].error[0].message);
                 return;
             };
-            let _me = this;
             this.state.stateTable = [];
-            data1[0].data.map(function (item) {
-                this.state.stateTable.push({
+            data1[0].data.map(function (item, i) {
+                _me.state.stateTable.push({
                     key: i,
                     recordTimeFormattedDate: item.recordTimeFormattedDate,
-                    state: item.state,
+                    status: item.status,
                     principal: item.principal,
                     operator: item.operator,
                     comment: item.comment
                 });
             });
             //获取联系人
-            if (data2[0].error.length) {
+            if (data2[0].error && data2[0].error.length) {
                 message.warning(data2[0].error[0].message);
                 return;
             };
             this.state.contactsOption = [];
             for (let item in data2[0].data) {
                 let theData = data2[0].data[item];
-                contactsOption.push(
+                _me.state.contactsOption.push(
                     <Select.Option value={item} key={theData}>{theData}</Select.Option>
                 );
             };
             //获取详细数据
-            if (data3[0].error.length || !data3[0].data) {
+            if (!data3[0].data && data3[0].error && data3[0].error.length) {
+                message.warning(data3[0].error[0].message);
                 return;
             };
-            let thisdata = data3[0].data;
+            let detailData = data3[0].data;
             this.setState({
-
+                id: detailData.id,
+                province: detailData.province,
+                unitName: detailData.unitName,
+                serialNumber: detailData.serialNumber,
+                createTime: detailData.createTime,
+                acceptTime: detailData.acceptTime,
+                principal: detailData.principal,
+                contact: detailData.contact,
+                copyrightName: detailData.copyrightName,
+                status: detailData.status,
+                comment: detailData.comment,
+                workIssue: detailData.workIssue,
+                outsource: detailData.outsource,
+                inUrgent: detailData.inUrgent,
+                authorizedDate: detailData.authorizedDate,
+                fisrtContact: detailData.fisrtContact,
+                secondContact: detailData.secondContact,
+                thirdContact: detailData.thirdContact,
+                city: detailData.city,
+                area: detailData.area,
+                postcode: detailData.postcode,
+                certificateUrl: detailData.certificateUrl,
+                applicationUrl: detailData.applicationUrl,
+                certificateUrlDownloadFileName: detailData.certificateUrlDownloadFileName,
+                applicationUrlDownloadFileName: detailData.applicationUrlDownloadFileName,
+                authorizedDateFormattedDate: detailData.authorizedDateFormattedDate,
+                createTimeFormattedDate: detailData.createTimeFormattedDate,
+                acceptTimeFormattedDate: detailData.acceptTimeFormattedDate,
             });
         }).always(function () {
             this.setState({
@@ -112,10 +151,9 @@ const CopyrightDescForm = Form.create()(React.createClass({
         }.bind(this));
     },
     componentWillReceiveProps(nextProps) {
-        if (!this.state.visible && nextProps.showDesc) {
-            this.loadData();
+        if (!this.props.visible && nextProps.visible) {
+            this.loadData(nextProps.data.uid, nextProps.data.id);
         };
-        this.state.visible = nextProps.showDesc;
     },
     handleSubmit(e) {
         e.preventDefault();
@@ -132,29 +170,25 @@ const CopyrightDescForm = Form.create()(React.createClass({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/api/admin/disposeCognizanceDetail",
+                    url: globalConfig.context + "/api/admin/copyright/modify",
                     data: {
-                        id: this.props.data.cid,
-                        uid: this.props.data.uid,
-                        technicalField1: values.technicalField[0],
-                        technicalField2: values.technicalField[1],
-                        technicalField3: values.technicalField[2],
-                        basicResearchCost: values.basicResearchCost,
-                        contacts: values.contacts,
-                        accident: values.accident,
-                        certificateNumber: values.certificateNumber,
-                        recordTimeFormattedDate: values.recordTime ? values.recordTime.format("YYYY-MM-DD") : undefined,
-                        state: values.state,
-                        principal: values.principal,
-                        comment: values.comment,
+                        "id": this.props.data.id,
+                        "contact": values.contact, // 联系人, 1,2,3
+                        //"copyrightInfo": values.copyrightInfo, // 软著简介,size 0-255
+                        "copyrightName": values.copyrightName, // 软著名称, size 0-60
+                        "outsource": values.outsource, // 外包公司, size 0-60
+                        "workIssue": values.workIssue, // 派单信息, size 0-128
+                        "inUrgent": values.inUrgent, //  加急天数,
+                        "status": values.status, // 状态
+                        "comment": values.comment, // 备注 size 0-128
+                        "recordTime": values.recordTime ? values.recordTime.format("YYYY-MM-DD HH:mm:ss") : undefined, // 状态修改时间 yyyy-MM-dd HH:mm:ss
+                        "principal": values.principal // 负责人id
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
                         message.success('保存成功!');
                         this.props.clickOk();
                         this.props.form.resetFields();
-                        this.state.targetKeys = [];
-                        this.state.selectedKeys = [];
                         this.props.spinState(false);
                     } else {
                         message.warning(data.error[0].message);
@@ -167,8 +201,7 @@ const CopyrightDescForm = Form.create()(React.createClass({
     render() {
         const FormItem = Form.Item;
         const { getFieldDecorator } = this.props.form;
-        //const theData = this.state.data;
-        const theData = {};
+        const theData = this.state;
         const formItemLayout = {
             labelCol: { span: 6 },
             wrapperCol: { span: 12 },
@@ -178,18 +211,18 @@ const CopyrightDescForm = Form.create()(React.createClass({
             <Form onSubmit={this.handleSubmit} id="CopyrightDesc-form">
                 <Row className="express-desc-row">
                     <Col span={4}>公司名称</Col>
-                    <Col span={4}>{theData.nuitName}</Col>
+                    <Col span={4}>{theData.unitName}</Col>
                     <Col span={4}>公司组织机构代码</Col>
                     <Col span={4}>{theData.unitNumber}</Col>
                 </Row>
                 <Row className="express-desc-row">
                     <Col span={4}>公司地址</Col>
-                    <Col span={4}>{theData.address}</Col>
+                    <Col span={4}>{theData.province}/{theData.city}/{theData.area}</Col>
                     <Col span={4}>联系人</Col>
                     <Col span={4}>
-                        {getFieldDecorator('contacts', {
+                        {getFieldDecorator('contact', {
                             rules: [{ required: true, message: '此项为必填项!' }],
-                            initialValue: theData.contacts
+                            initialValue: theData.contact
                         })(
                             <Select
                                 style={{ display: 'inline-block', width: '200px' }}
@@ -201,11 +234,11 @@ const CopyrightDescForm = Form.create()(React.createClass({
                 </Row>
                 <Row className="express-desc-row">
                     <Col span={4}>编号</Col>
-                    <Col span={4}>xxxxxx</Col>
+                    <Col span={4}>{theData.serialNumber}</Col>
                     <Col span={4}>外包公司</Col>
                     <Col span={4}>
-                        {getFieldDecorator('contacts', {
-                            initialValue: theData.contacts
+                        {getFieldDecorator('outsource', {
+                            initialValue: theData.outsource
                         })(
                             <Input placeholder="请输入外包公司" />
                             )}
@@ -214,20 +247,8 @@ const CopyrightDescForm = Form.create()(React.createClass({
                 <Row className="express-desc-row">
                     <Col span={3}>派单详情</Col>
                     <Col span={16}>
-                        {getFieldDecorator('contacts', {
-                            initialValue: theData.contacts
-                        })(
-                            <Input type="textarea"
-                                placeholder="多行输入"
-                                rows={6} />
-                            )}
-                    </Col>
-                </Row>
-                <Row className="express-desc-row">
-                    <Col span={3}>备注</Col>
-                    <Col span={16}>
-                        {getFieldDecorator('contacts', {
-                            initialValue: theData.contacts
+                        {getFieldDecorator('workIssue', {
+                            initialValue: theData.workIssue
                         })(
                             <Input type="textarea"
                                 placeholder="多行输入"
@@ -238,23 +259,39 @@ const CopyrightDescForm = Form.create()(React.createClass({
                 <Row className="express-desc-row">
                     <Col span={3}>软著名称</Col>
                     <Col span={6}>
-                        {getFieldDecorator('contacts', {
-                            initialValue: theData.contacts
+                        {getFieldDecorator('copyrightName', {
+                            initialValue: theData.copyrightName
                         })(
                             <Input placeholder="请输入软著名称" />
                             )}
                     </Col>
                 </Row>
                 <Row className="express-desc-row">
-                    <Col span={3}>下证时间(预计)</Col>
+                    <Col span={3}>加急天数</Col>
                     <Col span={6}>
-                        {getFieldDecorator('contacts', {
-                            initialValue: theData.contacts
+                        {getFieldDecorator('inUrgent', {
+                            initialValue: theData.inUrgent ? String(theData.inUrgent) : undefined
                         })(
-                            <DatePicker />
+                            <Select
+                                placeholder="请选择加急时间"
+                                style={{ width: 120 }}>
+                                <Select.Option value="0">不加急</Select.Option>
+                                <Select.Option value="3">3天</Select.Option>
+                                <Select.Option value="5">5天</Select.Option>
+                                <Select.Option value="10">10天</Select.Option>
+                                <Select.Option value="20">20天</Select.Option>
+                            </Select>
                             )}
                     </Col>
                 </Row>
+                {theData.authorizedDateFormattedDate ? <Row className="express-desc-row">
+                    <Col span={3}>下证时间</Col>
+                    <Col span={6}>{theData.authorizedDateFormattedDate}</Col>
+                </Row> :
+                    <Row className="express-desc-row">
+                        <Col span={3}>下证时间(预计)</Col>
+                        <Col span={6}>{theData.authorizedDateFormattedDate}</Col>
+                    </Row>}
                 <p>状态流转记录: </p>
                 <Table style={{ margin: '10px 0' }}
                     pagination={false}
@@ -265,7 +302,7 @@ const CopyrightDescForm = Form.create()(React.createClass({
                         {...formItemLayout}
                         label="状态流转"
                     >
-                        {getFieldDecorator('state')(
+                        {getFieldDecorator('status')(
                             <Select placeholder="选择一个状态">{this.state.stateOption}</Select>
                         )}
                     </FormItem>

+ 6 - 0
js/component/account/services/copyright/comprehensive.less

@@ -4,6 +4,12 @@
         line-height: 30px;
         margin-bottom: 10px;
     }
+    .ant-form-item-control {
+        .ant-checkbox-wrapper {
+            margin-left: 34px;
+            margin-right: 20px;
+        }
+    }
 }
 
 .ant-modal-body {

+ 179 - 55
js/component/account/services/copyright/copyright.jsx

@@ -1,12 +1,13 @@
 import React from 'react';
-import { Icon, Button, Input, Select, Spin, Table, DatePicker, message } from 'antd';
-import { copyrightStateList } from '../../../dataDic.js';
-import { getTime, getCopyrightState } from '../../../tools.js';
+import { Icon, Button, Input, Select, Spin, Table, DatePicker, message, Cascader, Switch } from 'antd';
+import { provinceArr } from '../../../dataDic.js';
+import { getTime, companySearch, getCopyrightState, getInUrgentTime } from '../../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 import PatentAdd from './comPatentAdd.jsx';
 import PatentChange from './comPatentChange.jsx';
 
+import moment from 'moment';
 import './copyright.less';
 
 const copyright = React.createClass({
@@ -16,26 +17,59 @@ const copyright = React.createClass({
             loading: true
         });
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/managePatentList",
+            url: globalConfig.context + "/api/admin/copyright/list",
             data: {
                 pageNo: pageNo || 1,
                 pageSize: this.state.pagination.pageSize,
                 locationProvince: this.state.province,
                 unitName: this.state.unitName,
+                copyrightName: this.state.copyrightName,
+                status: this.state.status,
+                createTime: this.state.createTime,
+                acceptTime: this.state.acceptTime,
+                authTime: this.state.authTime
             },
             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];
+                    this.state.data.push({
+                        key: i,
+                        id: thisdata.id,
+                        uid: thisdata.uid,
+                        province: thisdata.province,
+                        unitName: thisdata.unitName,
+                        serialNumber: thisdata.serialNumber,
+                        createTime: thisdata.createTime,
+                        acceptTime: thisdata.acceptTime,
+                        principal: thisdata.principal,
+                        contact: thisdata.contact,
+                        copyrightName: thisdata.copyrightName,
+                        status: thisdata.status,
+                        comment: thisdata.comment,
+                        workIssue: thisdata.workIssue,
+                        outsource: thisdata.outsource,
+                        inUrgent: thisdata.inUrgent,
+                        expectTime: [moment(thisdata.acceptTime), thisdata.inUrgent],
+                        authorizedDate: thisdata.authorizedDate,
+                        fisrtContact: thisdata.fisrtContact,
+                        secondContact: thisdata.secondContact,
+                        thirdContact: thisdata.thirdContact,
+                        authorizedDateFormattedDate: thisdata.authorizedDateFormattedDate,
+                        createTimeFormattedDate: thisdata.createTimeFormattedDate,
+                        acceptTimeFormattedDate: thisdata.acceptTimeFormattedDate
+                    });
+                };
                 this.state.pagination.defaultCurrent = data.data.pageNo;
                 this.state.pagination.total = data.data.totalCount;
                 this.setState({
-                    dataSource: data.data.list,
+                    dataSource: this.state.data,
                     pagination: this.state.pagination
                 });
             }.bind(this),
@@ -53,20 +87,42 @@ const copyright = React.createClass({
             method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/getContacts",
+            url: globalConfig.context + "/techservice/patent/getAdmin",
             success: function (data) {
-                if (!data.data) {
-                    if (data.error && data.error.length) {
-                        message.warning(data.error[0].message);
-                        return;
-                    };
+                if (data.error.length || !data.data) {
+                    return;
                 };
-                this.state.contactsOption = [];
-                for (let item in data.data) {
-                    let theData = data.data[item];
-                    contactsOption.push(
-                        <Select.Option value={item} key={theData}>{theData}</Select.Option>
-                    );
+                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));
+    },
+    getCompanyList() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/patent/getUnitNames",
+            success: function (data) {
+                if (data.error.length || !data.data) {
+                    return;
+                };
+                let _me = this;
+                for (var item in data.data) {
+                    _me.state.companyOption.push(
+                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
+                    )
                 };
             }.bind(this),
         }).always(function () {
@@ -78,13 +134,19 @@ const copyright = React.createClass({
     getInitialState() {
         return {
             visible: false,
-            stateOption: [],
+            provinceOption: [],
+            companyOption: [],
+            authorOption: [],
             data: [],
             selectedRowKeys: [],
             selectedRows: [],
             loading: false,
             showAdd: false,
             showDesc: false,
+            searchMore: true,
+            createTime: [],
+            acceptTime: [],
+            authTime: [],
             pagination: {
                 defaultCurrent: 1,
                 defaultPageSize: 10,
@@ -100,40 +162,58 @@ const copyright = React.createClass({
             columns: [
                 {
                     title: '编号',
-                    dataIndex: 'number',
-                    key: 'number',
+                    dataIndex: 'serialNumber',
+                    key: 'serialNumber',
+                }, {
+                    title: '省份',
+                    dataIndex: 'province',
+                    key: 'province',
+                }, {
+                    title: '外包公司',
+                    dataIndex: 'outsource',
+                    key: 'outsource',
+                }, {
+                    title: '公司名称',
+                    dataIndex: 'unitName',
+                    key: 'unitName',
+                }, {
+                    title: '认证状态',
+                    dataIndex: 'status',
+                    key: 'status',
+                    render: (text) => { return getCopyrightState(text) }
+                }, {
+                    title: '派单信息',
+                    dataIndex: 'workIssue',
+                    key: 'workIssue',
                 }, {
                     title: '软著名称',
                     dataIndex: 'copyrightName',
                     key: 'copyrightName',
                 }, {
-                    title: '加急',
-                    dataIndex: 'urgent',
-                    key: 'urgent',
+                    title: '加急天数',
+                    dataIndex: 'inUrgent',
+                    key: 'inUrgent',
                 }, {
                     title: '咨询师',
-                    dataIndex: 'consultant',
-                    key: 'consultant',
+                    dataIndex: 'principal',
+                    key: 'principal',
                 }, {
                     title: '派单日',
-                    dataIndex: 'createTime',
-                    key: 'createTime',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate',
                 }, {
                     title: '受理日',
-                    dataIndex: 'acceptanceTime',
-                    key: 'acceptanceTime',
+                    dataIndex: 'acceptTimeFormattedDate',
+                    key: 'acceptTimeFormattedDate',
                 }, {
                     title: '(预计)下证时间',
-                    dataIndex: 'endTime',
-                    key: 'endTime',
-                }, {
-                    title: '派单信息',
-                    dataIndex: 'createInfo',
-                    key: 'createInfo',
+                    dataIndex: 'expectTime',
+                    key: 'expectTime',
+                    render: (text) => { return getTime(getInUrgentTime(text[0], text[1])) }
                 }, {
                     title: '备注',
-                    dataIndex: 'explain',
-                    key: 'explain',
+                    dataIndex: 'comment',
+                    key: 'comment',
                 }
             ],
             dataSource: []
@@ -141,13 +221,15 @@ const copyright = React.createClass({
     },
     componentWillMount() {
         let _me = this;
-        copyrightStateList.map(function (item) {
-            _me.state.stateOption.push(
-                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+        provinceArr.map(function (item) {
+            _me.state.provinceOption.push(
+                <Select.Option value={item} key={item}>{item}</Select.Option>
             )
         });
+        //console.log(this.state.pagination.total);
         this.loadData();
         this.getAuthorList();
+        this.getCompanyList();
     },
     tableRowClick(record, index) {
         this.state.RowData = record;
@@ -159,8 +241,8 @@ const copyright = React.createClass({
         let deletedIds = [];
         for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
             let rowItem = this.state.selectedRows[idx];
-            if (rowItem.cid) {
-                deletedIds.push(rowItem.cid)
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
             }
         }
         this.setState({
@@ -171,9 +253,9 @@ const copyright = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/deleteCognizance",
+            url: globalConfig.context + "/api/admin/copyright/delete",
             data: {
-                ids: deletedIds
+                id: deletedIds
             }
         }).done(function (data) {
             if (!data.error.length) {
@@ -204,13 +286,20 @@ const copyright = React.createClass({
             this.loadData();
         };
     },
+    searchSwitch() {
+        this.setState({
+            searchMore: !this.state.searchMore
+        });
+    },
     search() {
         this.loadData();
     },
     reset() {
-        this.state.searchNumber = undefined;
-        this.state.searchName = undefined;
-        this.state.searchState = undefined;
+        this.state.province = undefined;
+        this.state.unitName = undefined;
+        this.state.createTime = [];
+        this.state.acceptTime = [];
+        this.state.authTime = [];
         this.loadData();
     },
     render() {
@@ -224,29 +313,63 @@ const copyright = React.createClass({
             }
         };
         const hasSelected = this.state.selectedRowKeys.length > 0;
+        const { MonthPicker, RangePicker } = DatePicker;
         return (
             <div className="foster-box">
                 <div className="foster-content">
                     <div className="content-title">
                         <span>软著申请管理</span>
                         <PatentAdd
+                            companyOption={this.state.companyOption}
+                            authorOption={this.state.authorOption}
                             onClick={this.addClick}
                             closeAdd={this.closeAdd} />
                     </div>
                     <div className="foster-query">
-                        <Input placeholder="软著编号" value={this.state.searchNumber} onChange={(e) => { this.setState({ searchNumber: e.target.value }); }} />
-                        <Input placeholder="软著名称" value={this.state.searchName} onChange={(e) => { this.setState({ searchName: e.target.value }); }} />
-                        <Select placeholder="软著状态" value={this.state.searchState} style={{ width: 200 }} onChange={(e) => { this.setState({ searchState: e }); }}>{this.state.stateOption}</Select>
+                        <Select placeholder="选择省份"
+                            style={{ width: 200 }}
+                            value={this.state.province}
+                            showSearch
+                            filterOption={companySearch}
+                            onChange={(e) => { this.setState({ province: e }) }}>
+                            {this.state.provinceOption}
+                        </Select>
+                        <Select placeholder="选择公司"
+                            style={{ width: 200 }}
+                            value={this.state.unitName}
+                            showSearch
+                            filterOption={companySearch}
+                            onChange={(e) => { this.setState({ unitName: e }) }}>
+                            {this.state.companyOption}
+                        </Select>
+                        <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>
                         <Button type="primary" onClick={this.search}>搜索</Button>
                         <Button onClick={this.reset}>重置</Button>
-                        <Button style={{ background: "#3fcf9e", border: "none", color: "#fff", display: 'none' }}
+                        <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
                             disabled={!hasSelected}
                             onClick={this.delectRow}>删除<Icon type="minus" /></Button>
+                        <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
+                            <span>派单时间:</span>
+                            <RangePicker style={{ width: '240px' }}
+                                allowClear={false}
+                                value={[moment(this.state.createTime[0]), moment(this.state.createTime[1])]}
+                                onChange={(date, dateString) => { this.setState({ createTime: dateString }) }} />
+                            <span>受理时间:</span>
+                            <RangePicker style={{ width: '240px' }}
+                                allowClear={false}
+                                value={[moment(this.state.acceptTime[0]), moment(this.state.acceptTime[1])]}
+                                onChange={(date, dateString) => { this.setState({ acceptTime: dateString }) }} />
+                            <span>下证时间:</span>
+                            <RangePicker style={{ width: '240px' }}
+                                allowClear={false}
+                                value={[moment(this.state.authTime[0]), moment(this.state.authTime[1])]}
+                                onChange={(date, dateString) => { this.setState({ authTime: dateString }) }} />
+                        </div>
                     </div>
                     <div className="foster-table">
                         <Spin spinning={this.state.loading}>
                             <Table columns={this.state.columns}
-                                //rowSelection={rowSelection}
+                                rowSelection={rowSelection}
                                 dataSource={this.state.dataSource}
                                 pagination={this.state.pagination}
                                 onRowClick={this.tableRowClick} />
@@ -254,6 +377,7 @@ const copyright = React.createClass({
                     </div>
                     <PatentChange
                         data={this.state.RowData}
+                        authorOption={this.state.authorOption}
                         showDesc={this.state.showDesc}
                         closeDesc={this.closeDesc} />
                 </div >

+ 8 - 22
js/component/account/services/copyright/copyright.less

@@ -28,6 +28,12 @@
                 margin-left: 10px;
             }
         }
+        .search-more {
+            >span {
+                margin-top: 10px;
+                margin-right: 10px;
+            }
+        }
     }
 }
 .patent-addNew {
@@ -46,26 +52,6 @@
     }
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 .patent-content {
     padding: 20px;
     background: #fff;
@@ -135,9 +121,9 @@
 .ant-modal-content {
     .ant-modal-header {
         padding: 10px 16px;
-        background: #2d2d2d;
+        //background: #2d2d2d;
         .ant-modal-title {
-            color: #fff;
+            //color: #fff;
             font-size: 16px;
             font-weight: 400;
         }

+ 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>
         );

+ 2 - 2
js/component/account/services/patent.less

@@ -47,9 +47,9 @@
 .ant-modal-content {
     .ant-modal-header {
         padding: 10px 16px;
-        background: #2d2d2d;
+        //background: #2d2d2d;
         .ant-modal-title {
-            color: #fff;
+            //color: #fff;
             font-size: 16px;
             font-weight: 400;
         }

+ 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;

+ 2 - 2
js/component/account/set/changeModal.less

@@ -5,8 +5,8 @@
         }
     }
     .ant-modal-header {
-        background: #000;
-        color: #fff;
+        //background: #000;
+        //color: #fff;
         font-size: 18px;
     }
     .ant-modal-body {

File diff suppressed because it is too large
+ 11 - 9
js/component/dataDic.js


+ 54 - 60
js/component/manageCenter/servicesManage/copyright/comPatentAdd.jsx

@@ -13,7 +13,7 @@ const PatentAddFrom = Form.create()(React.createClass({
             crossDomain: false,
             url: globalConfig.context + "/api/admin/getContacts",
             data: {
-                uid: theUid
+                uid: theUid || this.state.uid
             },
             success: function (data) {
                 let theOption = [];
@@ -36,9 +36,6 @@ const PatentAddFrom = Form.create()(React.createClass({
         return {
             loading: false,
             companyOption: [],
-            firstCheck: 0,
-            secondCheck: 0,
-            thirdCheck: 0,
             accelerated: 0,
             acceleratedDate: 0,
             visible: "visible"
@@ -46,40 +43,40 @@ const PatentAddFrom = Form.create()(React.createClass({
     },
     handleSubmit(e) {
         e.preventDefault();
-        if (!this.state.companyName || this.state.companyName === "") {
-            message.warning('请先选择公司!');
-            return;
-        };
         this.props.form.validateFields((err, values) => {
+            if (!values.uid || values.uid === "") {
+                message.warning('请先选择公司!');
+                return;
+            };
             if (!err) {
                 this.props.spinState(true);
                 $.ajax({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/techservice/patent/manageApplyPatent",
+                    url: globalConfig.context + "/api/admin/copyright/apply",
                     data: {
-                        'uid': this.state.companyName,
-                        'firstInventorIdNumber': values.firstInventorID,
-                        'firstInventorName': values.firstInventorName,
-                        'patentDes': values.intro,
-                        'secondInventorName': values.secondInventorName,
-                        'thirdInventorName': values.thirdInventorName,
-                        'firstInventorIsPublish': this.state.firstCheck,
-                        'secondInventorIsPublish': this.state.secondCheck,
-                        'thirdInventorIsPublish': this.state.thirdCheck,
-                        'patentProryStatementUrl': this.state.avatarUrl
+                        "uid": values.uid, // 公司用户id,size 0-36, required
+                        "contact": values.contact, // 联系人, 1,2,3
+                        //"copyrightInfo": values.copyrightInfo, // 软著简介,size 0-255
+                        //"copyrightName": values.copyrightName, // 软著名称, size 0-60
+                        "outsource": values.outsource, // 外包公司, size 0-60
+                        "workIssue": values.workIssue, // 派单信息, size 0-128
+                        "inUrgent": values.inUrgent, //  加急天数,
+                        //"comment": values.comment, // 备注 size 0-128
+                        "principal": values.principal // 负责人id
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
                         message.success('保存成功!');
+                        this.props.okClick();
+                        this.props.closeModal();
+                        this.props.form.resetFields();
                     } else {
                         message.warning(data.error[0].message);
                     }
                 }.bind(this)).always(function () {
                     this.props.spinState(false);
-                    this.props.okClick();
-                    this.props.form.resetFields();
                 }.bind(this));
             }
         });
@@ -93,9 +90,6 @@ const PatentAddFrom = Form.create()(React.createClass({
             this.setState({ visible: "visible" });
         }
     },
-    acceleratedSelect(value) {
-        this.state.acceleratedDate = value;
-    },
     render() {
         const FormItem = Form.Item;
         const { getFieldDecorator } = this.props.form;
@@ -105,47 +99,43 @@ const PatentAddFrom = Form.create()(React.createClass({
         };
         const _me = this;
         return (
-            <Form horizontal onSubmit={this.handleSubmit} className="person-form">
-                <FormItem
-                    wrapperCol={{ span: 24 }}
-                >
-                    <Row>
-                        <Col span={12}>
-                            <span>选择公司:  </span>
+            <Form horizontal onSubmit={this.handleSubmit} id="CopyrightDesc-form">
+                <Row>
+                    <Col span={12}>
+                        <span>选择公司:  </span>
+                        {getFieldDecorator('uid')(
                             <Select
                                 placeholder="请选择公司"
                                 notFoundContent="未找到公司"
                                 style={{ width: 200 }}
                                 showSearch
                                 filterOption={companySearch}
-                                value={this.state.uid}
-                                onSelect={(e, n) => { this.setState({ uid: e }); this.getContactsList(e); }}>
+                                onSelect={(e, n) => { this.getContactsList(e); }}>
                                 {this.props.companyOption}
                             </Select>
-                        </Col>
-                        <Col span={12}>
-                            <span>选择联系人:  </span>
+                        )}
+                    </Col>
+                    <Col span={12}>
+                        <span>选择联系人:  </span>
+                        {getFieldDecorator('contact')(
                             <Select placeholder="请选择联系人" style={{ width: 200 }}
                                 notFoundContent="未获取到联系人列表"
-                                value={this.state.contacts}
-                                onSelect={(e, n) => { this.setState({ contacts: e }); }}>
+                                onSelect={(e, n) => { this.setState({ contact: e }); }}>
                                 {this.state.contactsOption}
                             </Select>
-                        </Col>
-                    </Row>
-                </FormItem>
+                        )}
+                    </Col>
+                </Row>
                 <FormItem
                     labelCol={{ span: 24 }}
                     wrapperCol={{ span: 18 }}
                     label="派单信息"
                 >
-                    {getFieldDecorator('intro', {
-                        initialValue: this.state.intro || null
-                    })(
+                    {getFieldDecorator('workIssue')(
                         <Input type="textarea"
                             placeholder="多行输入"
                             rows={6} />
-                        )}
+                    )}
                 </FormItem>
                 <FormItem
                     labelCol={{ span: 0 }}
@@ -153,32 +143,35 @@ const PatentAddFrom = Form.create()(React.createClass({
                 >
                     <span>是否加急:</span>
                     <Checkbox onChange={this.acceleratedCheck}></Checkbox>
-                    <Select className={this.state.visible} placeholder="请选择加急时间" style={{ width: 120 }} onChange={this.acceleratedSelect}>
-                        <Select.Option value="3">3天</Select.Option>
-                        <Select.Option value="5">5天</Select.Option>
-                        <Select.Option value="10">10天</Select.Option>
-                        <Select.Option value="20">20天</Select.Option>
-                    </Select>
+                    {getFieldDecorator('inUrgent')(
+                        <Select className={this.state.visible}
+                            placeholder="请选择加急时间"
+                            style={{ width: 120 }}>
+                            <Select.Option value="3">3天</Select.Option>
+                            <Select.Option value="5">5天</Select.Option>
+                            <Select.Option value="10">10天</Select.Option>
+                            <Select.Option value="20">20天</Select.Option>
+                        </Select>
+                    )}
                 </FormItem>
                 <FormItem
                     {...formItemLayout}
                     label="选择咨询师"
                 >
-                    <Select placeholder="请选择咨询师" style={{ width: 200 }}
-                        value={this.state.consultant}
-                        onSelect={(e, n) => { this.setState({ consultant: e }); }}>
-                        {this.props.authorOption}
-                    </Select>
+                    {getFieldDecorator('principal')(
+                        <Select placeholder="请选择咨询师" style={{ width: 200 }}
+                            onSelect={(e, n) => { this.setState({ principal: e }); }}>
+                            {this.props.authorOption}
+                        </Select>
+                    )}
                 </FormItem>
                 <FormItem
                     {...formItemLayout}
                     label="外包公司"
                 >
-                    {getFieldDecorator('intro', {
-                        initialValue: this.state.intro || null
-                    })(
+                    {getFieldDecorator('outsource')(
                         <Input placeholder="输入外包公司" />
-                        )}
+                    )}
                 </FormItem>
                 <FormItem>
                     <Button className="set-submit" type="primary" htmlType="submit">确认</Button>
@@ -227,6 +220,7 @@ const PatentAdd = React.createClass({
                     >
                         <PatentAddFrom
                             spinState={this.spinChange}
+                            closeModal={this.handleCancel}
                             okClick={() => { this.props.closeAdd(false, true) }}
                             companyOption={this.props.companyOption}
                             authorOption={this.props.authorOption} />

+ 166 - 70
js/component/manageCenter/servicesManage/copyright/comPatentChange.jsx

@@ -1,10 +1,10 @@
 import React from 'react';
-import { Icon, Modal, message, Spin, Input, Select, DatePicker, Button, Row, Col, Table, Form } from 'antd';
+import { Icon, Modal, message, Spin, Input, Select, DatePicker, Button, Row, Col, Table, Form, Upload } from 'antd';
 import './comprehensive.less';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 import { copyrightStateList } from '../../../dataDic.js';
-import { getCopyrightState, getTime } from '../../../tools.js';
+import { getCopyrightState, getTime, downloadFile, beforeUploadFile } from '../../../tools.js';
 
 const CopyrightDescForm = Form.create()(React.createClass({
     getInitialState() {
@@ -12,11 +12,12 @@ const CopyrightDescForm = Form.create()(React.createClass({
             visible: false,
             loading: false,
             stateOption: [],
+            stateTable: [],
             contactsOption: [],
             stateColumns: [{
                 title: '申请状态',
-                dataIndex: 'state',
-                key: 'state',
+                dataIndex: 'status',
+                key: 'status',
                 render: (text) => { return getCopyrightState(text) }
             }, {
                 title: '处理时间',
@@ -44,66 +45,105 @@ const CopyrightDescForm = Form.create()(React.createClass({
                 <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
             )
         });
+        this.loadData();
     },
-    loadData(uid, cid, year) {
+    loadData(uid, id) {
+        debugger
         this.setState({
             loading: true
         });
         $.when($.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/cognizanceLog",
+            cache: false,
+            url: globalConfig.context + "/api/admin/copyright/logs",
             data: {
-                pid: this.state.xid
+                id: id || this.props.data.id
             }
         }), $.ajax({
-            method: "get",
+            method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/getContacts"
+            cache: false,
+            url: globalConfig.context + "/api/admin/getContacts",
+            data: {
+                uid: uid || this.props.data.uid
+            }
         }), $.ajax({
             method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/getContacts",
+            cache: false,
+            url: globalConfig.context + "/api/admin/copyright/detail",
+            data: {
+                id: id || this.props.data.id
+            }
         })).done((data1, data2, data3) => {
+            let _me = this;
             //状态流转table
-            if (data1[0].error.length) {
+            if (data1[0].error && data1[0].error.length) {
                 message.warning(data1[0].error[0].message);
                 return;
             };
-            let _me = this;
             this.state.stateTable = [];
-            data1[0].data.map(function (item) {
-                this.state.stateTable.push({
+            data1[0].data.map(function (item, i) {
+                _me.state.stateTable.push({
                     key: i,
                     recordTimeFormattedDate: item.recordTimeFormattedDate,
-                    state: item.state,
+                    status: item.status,
                     principal: item.principal,
                     operator: item.operator,
                     comment: item.comment
                 });
             });
             //获取联系人
-            if (data2[0].error.length) {
+            if (data2[0].error && data2[0].error.length) {
                 message.warning(data2[0].error[0].message);
                 return;
             };
             this.state.contactsOption = [];
             for (let item in data2[0].data) {
                 let theData = data2[0].data[item];
-                contactsOption.push(
+                _me.state.contactsOption.push(
                     <Select.Option value={item} key={theData}>{theData}</Select.Option>
                 );
             };
             //获取详细数据
-            if (data3[0].error.length || !data3[0].data) {
+            if (!data3[0].data && data3[0].error && data3[0].error.length) {
+                message.warning(data3[0].error[0].message);
                 return;
             };
-            let thisdata = data3[0].data;
+            let detailData = data3[0].data;
             this.setState({
-
+                id: detailData.id,
+                province: detailData.province,
+                unitName: detailData.unitName,
+                serialNumber: detailData.serialNumber,
+                createTime: detailData.createTime,
+                acceptTime: detailData.acceptTime,
+                principal: detailData.principal,
+                contact: detailData.contact,
+                copyrightName: detailData.copyrightName,
+                status: detailData.status,
+                comment: detailData.comment,
+                workIssue: detailData.workIssue,
+                outsource: detailData.outsource,
+                inUrgent: detailData.inUrgent,
+                authorizedDate: detailData.authorizedDate,
+                fisrtContact: detailData.fisrtContact,
+                secondContact: detailData.secondContact,
+                thirdContact: detailData.thirdContact,
+                city: detailData.city,
+                area: detailData.area,
+                postcode: detailData.postcode,
+                certificateUrl: detailData.certificateUrl,
+                applicationUrl: detailData.applicationUrl,
+                certificateUrlDownloadFileName: detailData.certificateUrlDownloadFileName,
+                applicationUrlDownloadFileName: detailData.applicationUrlDownloadFileName,
+                authorizedDateFormattedDate: detailData.authorizedDateFormattedDate,
+                createTimeFormattedDate: detailData.createTimeFormattedDate,
+                acceptTimeFormattedDate: detailData.acceptTimeFormattedDate,
             });
         }).always(function () {
             this.setState({
@@ -112,10 +152,9 @@ const CopyrightDescForm = Form.create()(React.createClass({
         }.bind(this));
     },
     componentWillReceiveProps(nextProps) {
-        if (!this.state.visible && nextProps.showDesc) {
-            this.loadData();
+        if (!this.props.visible && nextProps.visible) {
+            this.loadData(nextProps.data.uid, nextProps.data.id);
         };
-        this.state.visible = nextProps.showDesc;
     },
     handleSubmit(e) {
         e.preventDefault();
@@ -132,29 +171,27 @@ const CopyrightDescForm = Form.create()(React.createClass({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/api/admin/disposeCognizanceDetail",
+                    url: globalConfig.context + "/api/admin/copyright/modify",
                     data: {
-                        id: this.props.data.cid,
-                        uid: this.props.data.uid,
-                        technicalField1: values.technicalField[0],
-                        technicalField2: values.technicalField[1],
-                        technicalField3: values.technicalField[2],
-                        basicResearchCost: values.basicResearchCost,
-                        contacts: values.contacts,
-                        accident: values.accident,
-                        certificateNumber: values.certificateNumber,
-                        recordTimeFormattedDate: values.recordTime ? values.recordTime.format("YYYY-MM-DD") : undefined,
-                        state: values.state,
-                        principal: values.principal,
-                        comment: values.comment,
+                        "id": this.props.data.id,
+                        "contact": values.contact, // 联系人, 1,2,3
+                        //"copyrightInfo": values.copyrightInfo, // 软著简介,size 0-255
+                        "copyrightName": values.copyrightName, // 软著名称, size 0-60
+                        "outsource": values.outsource, // 外包公司, size 0-60
+                        "workIssue": values.workIssue, // 派单信息, size 0-128
+                        "inUrgent": values.inUrgent, //  加急天数,
+                        "status": values.status, // 状态
+                        "comment": values.comment, // 备注 size 0-128
+                        "recordTime": values.recordTime ? values.recordTime.format("YYYY-MM-DD HH:mm:ss") : undefined, // 状态修改时间 yyyy-MM-dd HH:mm:ss
+                        "principal": values.principal, // 负责人id
+                        "": this.state.copyrightApplyUrl,  //申请书
+                        "": this.state.copyrightAuthUrl //证书
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
                         message.success('保存成功!');
                         this.props.clickOk();
                         this.props.form.resetFields();
-                        this.state.targetKeys = [];
-                        this.state.selectedKeys = [];
                         this.props.spinState(false);
                     } else {
                         message.warning(data.error[0].message);
@@ -167,8 +204,7 @@ const CopyrightDescForm = Form.create()(React.createClass({
     render() {
         const FormItem = Form.Item;
         const { getFieldDecorator } = this.props.form;
-        //const theData = this.state.data;
-        const theData = {};
+        const theData = this.state;
         const formItemLayout = {
             labelCol: { span: 6 },
             wrapperCol: { span: 12 },
@@ -178,18 +214,18 @@ const CopyrightDescForm = Form.create()(React.createClass({
             <Form onSubmit={this.handleSubmit} id="CopyrightDesc-form">
                 <Row className="express-desc-row">
                     <Col span={4}>公司名称</Col>
-                    <Col span={4}>{theData.nuitName}</Col>
+                    <Col span={4}>{theData.unitName}</Col>
                     <Col span={4}>公司组织机构代码</Col>
                     <Col span={4}>{theData.unitNumber}</Col>
                 </Row>
                 <Row className="express-desc-row">
                     <Col span={4}>公司地址</Col>
-                    <Col span={4}>{theData.address}</Col>
+                    <Col span={4}>{theData.province}/{theData.city}/{theData.area}</Col>
                     <Col span={4}>联系人</Col>
                     <Col span={4}>
-                        {getFieldDecorator('contacts', {
+                        {getFieldDecorator('contact', {
                             rules: [{ required: true, message: '此项为必填项!' }],
-                            initialValue: theData.contacts
+                            initialValue: theData.contact
                         })(
                             <Select
                                 style={{ display: 'inline-block', width: '200px' }}
@@ -201,11 +237,11 @@ const CopyrightDescForm = Form.create()(React.createClass({
                 </Row>
                 <Row className="express-desc-row">
                     <Col span={4}>编号</Col>
-                    <Col span={4}>xxxxxx</Col>
+                    <Col span={4}>{theData.serialNumber}</Col>
                     <Col span={4}>外包公司</Col>
                     <Col span={4}>
-                        {getFieldDecorator('contacts', {
-                            initialValue: theData.contacts
+                        {getFieldDecorator('outsource', {
+                            initialValue: theData.outsource
                         })(
                             <Input placeholder="请输入外包公司" />
                             )}
@@ -214,20 +250,8 @@ const CopyrightDescForm = Form.create()(React.createClass({
                 <Row className="express-desc-row">
                     <Col span={3}>派单详情</Col>
                     <Col span={16}>
-                        {getFieldDecorator('contacts', {
-                            initialValue: theData.contacts
-                        })(
-                            <Input type="textarea"
-                                placeholder="多行输入"
-                                rows={6} />
-                            )}
-                    </Col>
-                </Row>
-                <Row className="express-desc-row">
-                    <Col span={3}>备注</Col>
-                    <Col span={16}>
-                        {getFieldDecorator('contacts', {
-                            initialValue: theData.contacts
+                        {getFieldDecorator('workIssue', {
+                            initialValue: theData.workIssue
                         })(
                             <Input type="textarea"
                                 placeholder="多行输入"
@@ -238,23 +262,95 @@ const CopyrightDescForm = Form.create()(React.createClass({
                 <Row className="express-desc-row">
                     <Col span={3}>软著名称</Col>
                     <Col span={6}>
-                        {getFieldDecorator('contacts', {
-                            initialValue: theData.contacts
+                        {getFieldDecorator('copyrightName', {
+                            initialValue: theData.copyrightName
                         })(
                             <Input placeholder="请输入软著名称" />
                             )}
                     </Col>
                 </Row>
                 <Row className="express-desc-row">
-                    <Col span={3}>下证时间(预计)</Col>
+                    <Col span={3}>加急天数</Col>
                     <Col span={6}>
-                        {getFieldDecorator('contacts', {
-                            initialValue: theData.contacts
+                        {getFieldDecorator('inUrgent', {
+                            initialValue: theData.inUrgent ? String(theData.inUrgent) : undefined
                         })(
-                            <DatePicker />
+                            <Select
+                                placeholder="请选择加急时间"
+                                style={{ width: 120 }}>
+                                <Select.Option value="0">不加急</Select.Option>
+                                <Select.Option value="3">3天</Select.Option>
+                                <Select.Option value="5">5天</Select.Option>
+                                <Select.Option value="10">10天</Select.Option>
+                                <Select.Option value="20">20天</Select.Option>
+                            </Select>
                             )}
                     </Col>
                 </Row>
+                {theData.authorizedDateFormattedDate ? <Row className="express-desc-row">
+                    <Col span={3}>下证时间</Col>
+                    <Col span={6}>{theData.authorizedDateFormattedDate}</Col>
+                </Row> :
+                    <Row className="express-desc-row">
+                        <Col span={3}>下证时间(预计)</Col>
+                        <Col span={6}>{theData.authorizedDateFormattedDate}</Col>
+                    </Row>}
+                <div className="hrSituation-roster">
+                    <Upload
+                        name="copyright_apply"
+                        action={globalConfig.context + "/api/admin/copyright/upload"}
+                        data={{ 'sign': 'copyright_apply', id: this.props.data.id }}
+                        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.copyrightApplyUrl = info.file.response.data;
+                            } else if (info.file.status === 'error') {
+                                message.error(`${info.file.name} 文件上传失败。`);
+                            }
+                        }}
+                    >
+                        <Button><Icon type="upload" /> 上传软著申请书 </Button>
+                    </Upload>
+                    <p style={{ margin: '10px 0' }}>{theData.applicationUrl ? <a onClick={downloadFile.bind(null, theData.applicationUrl, theData.applicationUrlDownloadFileName)}>{theData.applicationUrlDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                </div>
+                <div className="hrSituation-roster">
+                    <Upload
+                        name="copyright_auth"
+                        action={globalConfig.context + "/api/admin/copyright/upload"}
+                        data={{ 'sign': 'copyright_auth', id: this.props.data.id }}
+                        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.copyrightAuthUrl = info.file.response.data;
+                            } else if (info.file.status === 'error') {
+                                message.error(`${info.file.name} 文件上传失败。`);
+                            }
+                        }}
+                    >
+                        <Button><Icon type="upload" /> 上传软著证书 </Button>
+                    </Upload>
+                    <p style={{ margin: '10px 0' }}>{theData.certificateUrl ? <a onClick={downloadFile.bind(null, theData.certificateUrl, theData.certificateUrlDownloadFileName)}>{theData.certificateUrlDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                </div>
                 <p>状态流转记录: </p>
                 <Table style={{ margin: '10px 0' }}
                     pagination={false}
@@ -265,7 +361,7 @@ const CopyrightDescForm = Form.create()(React.createClass({
                         {...formItemLayout}
                         label="状态流转"
                     >
-                        {getFieldDecorator('state')(
+                        {getFieldDecorator('status')(
                             <Select placeholder="选择一个状态">{this.state.stateOption}</Select>
                         )}
                     </FormItem>

+ 6 - 0
js/component/manageCenter/servicesManage/copyright/comprehensive.less

@@ -4,6 +4,12 @@
         line-height: 30px;
         margin-bottom: 10px;
     }
+    .ant-form-item-control {
+        .ant-checkbox-wrapper {
+            margin-left: 34px;
+            margin-right: 20px;
+        }
+    }
 }
 
 .ant-modal-body {

+ 98 - 33
js/component/manageCenter/servicesManage/copyright/copyright.jsx

@@ -1,14 +1,13 @@
 import React from 'react';
-import { Icon, Button, Input, Select, Spin, Table, DatePicker, message, Cascader } from 'antd';
+import { Icon, Button, Input, Select, Spin, Table, DatePicker, message, Cascader, Switch } from 'antd';
 import { provinceArr } from '../../../dataDic.js';
-import { getTime, getPatentState, companySearch } from '../../../tools.js';
+import { getTime, companySearch, getCopyrightState, getInUrgentTime } from '../../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 import PatentAdd from './comPatentAdd.jsx';
 import PatentChange from './comPatentChange.jsx';
 
-//import PatentDesc from '../patent/comPatentDesc.jsx';
-
+import moment from 'moment';
 import './copyright.less';
 
 const copyright = React.createClass({
@@ -18,26 +17,59 @@ const copyright = React.createClass({
             loading: true
         });
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/managePatentList",
+            url: globalConfig.context + "/api/admin/copyright/list",
             data: {
                 pageNo: pageNo || 1,
                 pageSize: this.state.pagination.pageSize,
                 locationProvince: this.state.province,
                 unitName: this.state.unitName,
+                copyrightName: this.state.copyrightName,
+                status: this.state.status,
+                createTime: this.state.createTime,
+                acceptTime: this.state.acceptTime,
+                authTime: this.state.authTime
             },
             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];
+                    this.state.data.push({
+                        key: i,
+                        id: thisdata.id,
+                        uid: thisdata.uid,
+                        province: thisdata.province,
+                        unitName: thisdata.unitName,
+                        serialNumber: thisdata.serialNumber,
+                        createTime: thisdata.createTime,
+                        acceptTime: thisdata.acceptTime,
+                        principal: thisdata.principal,
+                        contact: thisdata.contact,
+                        copyrightName: thisdata.copyrightName,
+                        status: thisdata.status,
+                        comment: thisdata.comment,
+                        workIssue: thisdata.workIssue,
+                        outsource: thisdata.outsource,
+                        inUrgent: thisdata.inUrgent,
+                        expectTime: [moment(thisdata.acceptTime), thisdata.inUrgent],
+                        authorizedDate: thisdata.authorizedDate,
+                        fisrtContact: thisdata.fisrtContact,
+                        secondContact: thisdata.secondContact,
+                        thirdContact: thisdata.thirdContact,
+                        authorizedDateFormattedDate: thisdata.authorizedDateFormattedDate,
+                        createTimeFormattedDate: thisdata.createTimeFormattedDate,
+                        acceptTimeFormattedDate: thisdata.acceptTimeFormattedDate
+                    });
+                };
                 this.state.pagination.defaultCurrent = data.data.pageNo;
                 this.state.pagination.total = data.data.totalCount;
                 this.setState({
-                    dataSource: data.data.list,
+                    dataSource: this.state.data,
                     pagination: this.state.pagination
                 });
             }.bind(this),
@@ -111,6 +143,10 @@ const copyright = React.createClass({
             loading: false,
             showAdd: false,
             showDesc: false,
+            searchMore: true,
+            createTime: [],
+            acceptTime: [],
+            authTime: [],
             pagination: {
                 defaultCurrent: 1,
                 defaultPageSize: 10,
@@ -126,8 +162,8 @@ const copyright = React.createClass({
             columns: [
                 {
                     title: '编号',
-                    dataIndex: 'number',
-                    key: 'number',
+                    dataIndex: 'serialNumber',
+                    key: 'serialNumber',
                 }, {
                     title: '省份',
                     dataIndex: 'province',
@@ -141,41 +177,43 @@ const copyright = React.createClass({
                     dataIndex: 'unitName',
                     key: 'unitName',
                 }, {
-                    title: '联系方式',
-                    dataIndex: 'contacts',
-                    key: 'contacts',
+                    title: '认证状态',
+                    dataIndex: 'status',
+                    key: 'status',
+                    render: (text) => { return getCopyrightState(text) }
                 }, {
                     title: '派单信息',
-                    dataIndex: 'createInfo',
-                    key: 'createInfo',
+                    dataIndex: 'workIssue',
+                    key: 'workIssue',
                 }, {
                     title: '软著名称',
                     dataIndex: 'copyrightName',
                     key: 'copyrightName',
                 }, {
-                    title: '加急',
-                    dataIndex: 'urgent',
-                    key: 'urgent',
+                    title: '加急天数',
+                    dataIndex: 'inUrgent',
+                    key: 'inUrgent',
                 }, {
                     title: '咨询师',
-                    dataIndex: 'consultant',
-                    key: 'consultant',
+                    dataIndex: 'principal',
+                    key: 'principal',
                 }, {
                     title: '派单日',
-                    dataIndex: 'createTime',
-                    key: 'createTime',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate',
                 }, {
                     title: '受理日',
-                    dataIndex: 'acceptanceTime',
-                    key: 'acceptanceTime',
+                    dataIndex: 'acceptTimeFormattedDate',
+                    key: 'acceptTimeFormattedDate',
                 }, {
                     title: '(预计)下证时间',
-                    dataIndex: 'endTime',
-                    key: 'endTime',
+                    dataIndex: 'expectTime',
+                    key: 'expectTime',
+                    render: (text) => { return getTime(getInUrgentTime(text[0], text[1])) }
                 }, {
                     title: '备注',
-                    dataIndex: 'explain',
-                    key: 'explain',
+                    dataIndex: 'comment',
+                    key: 'comment',
                 }
             ],
             dataSource: []
@@ -203,8 +241,8 @@ const copyright = React.createClass({
         let deletedIds = [];
         for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
             let rowItem = this.state.selectedRows[idx];
-            if (rowItem.cid) {
-                deletedIds.push(rowItem.cid)
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
             }
         }
         this.setState({
@@ -215,9 +253,9 @@ const copyright = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/deleteCognizance",
+            url: globalConfig.context + "/api/admin/copyright/delete",
             data: {
-                ids: deletedIds
+                id: deletedIds
             }
         }).done(function (data) {
             if (!data.error.length) {
@@ -248,12 +286,20 @@ const copyright = React.createClass({
             this.loadData();
         };
     },
+    searchSwitch() {
+        this.setState({
+            searchMore: !this.state.searchMore
+        });
+    },
     search() {
         this.loadData();
     },
     reset() {
         this.state.province = undefined;
         this.state.unitName = undefined;
+        this.state.createTime = [];
+        this.state.acceptTime = [];
+        this.state.authTime = [];
         this.loadData();
     },
     render() {
@@ -267,6 +313,7 @@ const copyright = React.createClass({
             }
         };
         const hasSelected = this.state.selectedRowKeys.length > 0;
+        const { MonthPicker, RangePicker } = DatePicker;
         return (
             <div className="foster-box">
                 <div className="foster-content">
@@ -295,11 +342,29 @@ const copyright = React.createClass({
                             onChange={(e) => { this.setState({ unitName: e }) }}>
                             {this.state.companyOption}
                         </Select>
+                        <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>
                         <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 className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
+                            <span>派单时间:</span>
+                            <RangePicker style={{ width: '240px' }}
+                                allowClear={false}
+                                value={[moment(this.state.createTime[0]), moment(this.state.createTime[1])]}
+                                onChange={(date, dateString) => { this.setState({ createTime: dateString }) }} />
+                            <span>受理时间:</span>
+                            <RangePicker style={{ width: '240px' }}
+                                allowClear={false}
+                                value={[moment(this.state.acceptTime[0]), moment(this.state.acceptTime[1])]}
+                                onChange={(date, dateString) => { this.setState({ acceptTime: dateString }) }} />
+                            <span>下证时间:</span>
+                            <RangePicker style={{ width: '240px' }}
+                                allowClear={false}
+                                value={[moment(this.state.authTime[0]), moment(this.state.authTime[1])]}
+                                onChange={(date, dateString) => { this.setState({ authTime: dateString }) }} />
+                        </div>
                     </div>
                     <div className="foster-table">
                         <Spin spinning={this.state.loading}>

+ 8 - 22
js/component/manageCenter/servicesManage/copyright/copyright.less

@@ -28,6 +28,12 @@
                 margin-left: 10px;
             }
         }
+        .search-more {
+            >span {
+                margin-top: 10px;
+                margin-right: 10px;
+            }
+        }
     }
 }
 .patent-addNew {
@@ -46,26 +52,6 @@
     }
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 .patent-content {
     padding: 20px;
     background: #fff;
@@ -135,9 +121,9 @@
 .ant-modal-content {
     .ant-modal-header {
         padding: 10px 16px;
-        background: #2d2d2d;
+        //background: #2d2d2d;
         .ant-modal-title {
-            color: #fff;
+            //color: #fff;
             font-size: 16px;
             font-weight: 400;
         }

+ 1 - 1
js/component/manageCenter/servicesManage/highTech/fosterDesc/content.less

@@ -59,12 +59,12 @@
         color: #333;
     }
     .user-search {
-        margin: 20px 0;
         input {
             width: 200px;
         }
         >* {
             margin-right: 20px;
+            margin-top: 20px;
         }
         p {
             margin-top: 20px;

+ 3 - 3
js/component/manageCenter/servicesManage/highTech/fosterDesc/hrSituation.jsx

@@ -47,10 +47,10 @@ const HrSituationDescFrom = Form.create()(React.createClass({
                 message.warning("全体人员结构中年龄一栏人数总和小于等于职工人数!");
                 return;
             };
-            if (values.year) {
+            if (!this.state.year && !this.props.year) {
                 message.warning("请输入年份!");
                 return;
-            }
+            };
             if (!err) {
                 this.props.spinState(true);
                 $.ajax({
@@ -61,7 +61,7 @@ const HrSituationDescFrom = Form.create()(React.createClass({
                     data: {
                         id: this.props.data.id,
                         uid: this.props.uid,
-                        year: values.data.year,
+                        year: this.state.year || this.props.year,
                         aboveFifty: values.aboveFifty,
                         belowThirty: values.belowThirty,
                         college: values.college,

+ 6 - 2
js/component/manageCenter/servicesManage/patent/comPatentAdd.jsx

@@ -109,12 +109,13 @@ const PatentAddFrom = Form.create()(React.createClass({
                 }).done(function (data) {
                     if (!data.error.length) {
                         message.success('保存成功!');
+                        this.props.okClick();
+                        this.props.closeModal();
                     } else {
                         message.warning(data.error[0].message);
                     }
                 }.bind(this)).always(function () {
                     this.props.spinState(false);
-                    this.props.clickOk();
                     this.props.form.resetFields();
                 }.bind(this));
             }
@@ -275,7 +276,10 @@ const PatentAdd = React.createClass({
                         width='800px'
                         footer=''
                     >
-                        <PatentAddFrom spinState={this.spinChange} closeModal={this.handleCancel} clickOk={this.handleOk} />
+                        <PatentAddFrom
+                            spinState={this.spinChange}
+                            closeModal={this.handleCancel}
+                            okClick={() => { this.props.closeDesc(false, true) }} />
                     </Modal>
                 </Spin>
             </div>

+ 2 - 2
js/component/manageCenter/servicesManage/patent/comprehensive.less

@@ -67,9 +67,9 @@
 .ant-modal-content {
     .ant-modal-header {
         padding: 10px 16px;
-        background: #2d2d2d;
+        //background: #2d2d2d;
         .ant-modal-title {
-            color: #fff;
+            //color: #fff;
             font-size: 16px;
             font-weight: 400;
         }

+ 69 - 34
js/component/manageCenter/servicesManage/technology/applyAdd.jsx

@@ -8,8 +8,7 @@ const ApplyAdd = React.createClass({
     getInitialState() {
         return {
             visible: false,
-            loading: false,
-            yearOption: []
+            loading: false
         };
     },
     getContactsList(theUid) {
@@ -29,7 +28,7 @@ const ApplyAdd = 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({
@@ -37,21 +36,35 @@ const ApplyAdd = React.createClass({
                 });
             }.bind(this),
         });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/user/getDepartment",
+            data: {
+                uid: theUid
+            },
+            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
     },
-    componentWillMount() {
-        let d = new Date();
-        let _me = this;
-        d = d.getFullYear() - 1;
-        this.state.thisYear = d;
-        for (let i = d; i < d + 20; i++) {
-            _me.state.yearOption.push(
-                <Select.Option value={i.toString()} key={i}>{i}</Select.Option>
-            )
-        };
-    },
     showModal() {
         this.setState({
             visible: true,
@@ -61,13 +74,13 @@ const ApplyAdd = React.createClass({
         this.setState({
             loading: true
         });
-        if (!this.state.year) {
-            message.warning('请选择年份!');
-            this.setState({
+        if (!this.state.uid) {
+             message.warning('请选择公司!');
+             this.setState({
                 loading: false
             });
             return;
-        };
+        }
         if (!this.state.contacts) {
             message.warning('请选择一个联系人!');
             this.setState({
@@ -79,14 +92,20 @@ const ApplyAdd = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/applyCognizance",
+            url: globalConfig.context + "/api/admintechproject/applyTechProject",
             data: {
-                year: this.state.year,
+                uid: this.state.uid,
                 contacts: this.state.contacts,
-                comment: this.state.comment,
+                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,
-                uid: this.state.uid,
-                state: this.state.year == this.state.thisYear ? 0 : 7
             }
         }).done(function (data) {
             if (!data.error.length) {
@@ -114,6 +133,20 @@ const ApplyAdd = React.createClass({
             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">
@@ -138,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">
@@ -153,9 +186,11 @@ const ApplyAdd = React.createClass({
                     <div className="clearfix">
                         <div className="half-item">
                             <span className="item-title">选择申报科技部门:  </span>
-                            <Select placeholder="请选择年份" style={{ width: 200 }}
-                                onSelect={(e, n) => { this.state.year = e }}>
-                                {this.state.yearOption}
+                            <Select 
+                                placeholder="请选择申报部门" 
+                                style={{ width: 200 }}
+                                onSelect={(e, n) => { this.state.department = e; }}>
+                                {this.state.departmentOption}
                             </Select>
                         </div>
                     </div>
@@ -163,41 +198,41 @@ const ApplyAdd = React.createClass({
                     	<div>
                             <span className="item-title">派单信息:  </span>
                         </div>
-                        <Input type="textarea" rows={6} onChange={(e) => { this.state.comment = e.target.value; }} />
+                        <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 }} />
+	                     	<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 }} />
+	                     	<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 }} />
+	                     	<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} />
+                        <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 ></Checkbox>
+                            <Checkbox onChange={this.projectEstablishmentCheck}></Checkbox>
                         </div>
                         <div className="half-item">
                         	<span className="item-title">立项金额: </span>
-                            <Input style={{ width: 200 }}  />
+                            <Input style={{ width: 200 }} onChange={(e) => { this.state.projectApproval = e.target.value; }}  />
                         </div>
                     </div>
                     <div className="clearfix">

+ 191 - 132
js/component/manageCenter/servicesManage/technology/applyChange.jsx

@@ -1,53 +1,12 @@
 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 } from '../../../tools.js';
+import { getCognizanceState, beforeUpload, getBase64, beforeUploadFile, downloadFile } from '../../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 
-class Avatar extends React.Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            imageUrl: ''
-        }
-    }
-    handleChange(info) {
-        if (!this.props.oid || this.props.oid === "") {
-            message.warning('请先选择公司!');
-            return;
-        };
-        if (info.file.status === 'done') {
-            // Get this url from response in real world.
-            getBase64(info.file.originFileObj, imageUrl => this.setState({ imageUrl }));
-            this.props.urlData(info.file.response.data);
-        }
-    }
-    render() {
-        const imageUrl = this.state.imageUrl;
-        return (
-            <Upload
-                className="avatar-uploader"
-                name="avatar"
-                showUploadList={false}
-                action={globalConfig.context + "/techservice/patent/patentFile"}
-                data={{ 'sign': this.props.name, 'oid': this.props.oid }}
-                beforeUpload={beforeUpload}
-                onChange={this.handleChange.bind(this)}
-            >
-                {
-                    imageUrl ?
-                        <img src={imageUrl} role="presentation" className="avatar" /> :
-                        <Icon type="plus" className="avatar-uploader-trigger" />
-                }
-            </Upload>
-        );
-    }
-};
-
-
 const ApplyChangeFrom = Form.create()(React.createClass({
-    loadData() {
+    loadData(id) {
         this.setState({
             loading: true
         });
@@ -55,38 +14,28 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/cognizanceDetail",
+            url: globalConfig.context + "/api/admintechproject/techProjectDetial",
             data: {
-                cid: this.props.data.cid,
-                uid: this.props.data.uid,
-                year: this.props.data.year
+                pid: id || 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;
-                this.state.cid = this.props.data.cid;
-                this.state.moneyTable = [{
-                    key: 1,
-                    year: '第一年',
-                    netAsset: data.data.netAsset1,
-                    salesRevenue: data.data.salesRevenue1,
-                    grossProfit: data.data.grossProfit1
-                }, {
-                    key: 2,
-                    year: '第二年',
-                    netAsset: data.data.netAsset2,
-                    salesRevenue: data.data.salesRevenue2,
-                    grossProfit: data.data.grossProfit2
-                }, {
-                    key: 3,
-                    year: '第三年',
-                    netAsset: data.data.netAsset3,
-                    salesRevenue: data.data.salesRevenue3,
-                    grossProfit: data.data.grossProfit3
-                }];
+
+                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({
@@ -94,7 +43,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             });
         }.bind(this));
     },
-    getStateData() {
+    getStateData(id) {
         this.setState({
             loading: true
         });
@@ -102,21 +51,22 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/cognizanceLog",
+            url: globalConfig.context + "/api/admintechproject/techProjectLog",
             data: {
-                cid: this.props.data.cid
+                pid: id || 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,
-                        recordTimeFormattedDate: data.data[i].recordTimeFormattedDate,
                         state: data.data[i].state,
+                        recordTime: myDate.toLocaleDateString(data.data[i].recordTime),
                         principal: data.data[i].principal,
                         comment: data.data[i].comment
                     });
@@ -128,13 +78,73 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             });
         }.bind(this));
     },
+    getDepartmentList () {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/user/getDepartment",
+            data: {
+                uid: this.props.data.uid,
+            },
+            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: [],
-            introduce:'',
-            projectCheck: 0,
+            departmentOption: [],
+            projectDes:'',
+            projectMode: 0,
             subsidy: 0,
+            projectModeState: false,
+            subsidyState: false,
             stateColumns: [{
                 title: '专利状态',
                 dataIndex: 'state',
@@ -142,8 +152,8 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                 render: (text) => { return getCognizanceState(text) }
             }, {
                 title: '处理时间',
-                dataIndex: 'recordTimeFormattedDate',
-                key: 'recordTimeFormattedDate',
+                dataIndex: 'recordTime',
+                key: 'recordTime'
             }, {
                 title: '负责人',
                 dataIndex: 'principal',
@@ -165,6 +175,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
         });
         this.loadData();
         this.getStateData();
+        
     },
     handleSubmit(e) {
         e.preventDefault();
@@ -177,17 +188,26 @@ 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",
                     crossDomain: false,
-                    url: globalConfig.context + "/api/admin/disposeCognizanceDetail",
+                    url: globalConfig.context + "/api/admintechproject/updateTechProject",
                     data: {
-                        id: this.props.data.cid,
-                        technicalField: values.technicalField,
-                        basicResearchCost: values.basicResearchCost,
-                        accident: values.accident,
-
+                        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,
@@ -198,8 +218,6 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                         message.success('保存成功!');
                         this.props.closeModal();
                         this.props.form.resetFields();
-                        this.state.targetKeys = [];
-                        this.state.selectedKeys = [];
                         this.props.spinState(false);
                     } else {
                         message.warning(data.error[0].message);
@@ -211,30 +229,28 @@ 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.xid = nextProps.data.pid;
-        }
     },
     projectEstablishmentCheck(e) {
         if (e.target.checked == true) {
-            this.state.projectCheck = 1;
+            this.setState({projectModeState:true})
+            this.state.projectMode = 1;
         } else if (e.target.checked == false) {
-            this.state.projectCheck = 0;
+            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;
         };
     },
-    avatarUrl(e) {
-        this.state.avatarUrl = e;
-    },
     render() {
         const FormItem = Form.Item;
         const { getFieldDecorator } = this.props.form;
@@ -258,28 +274,38 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                         </div>
                         <div className="half-item">
                             <span className="item-title">公司地址: </span>
-                            <span>{theData.postalAddress}</span>
+                            <span>{theData.province+' '+theData.city+' '+theData.area}</span>
                         </div>
                         <div className="half-item">
-                            <span className="item-title">联系人: </span>
-                            <span>{theData.contacts}</span>
+                            <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('technicalDepartment')(
-	                                <Select placeholder="选择科技部门">{this.props.authorOption}</Select>
-	                            )}
+                                {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.firmTotal}</span>
+                            <span>{theData.dispatchInfo}</span>
                         </div>
                     </div>
                     <div className="clearfix">
@@ -289,9 +315,11 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                         		wrapperCol={{ span: 12 }}
 		                        label="项目名称"
 		                    >
-		                        {getFieldDecorator('projectName')(
-		                            <Input />
-		                        )}
+                                {getFieldDecorator('projectName', {
+                                    initialValue: theData.projectName
+                                    })(
+                                        <Input />
+                                    )}
 		                    </FormItem>
 	                    </div>
                     </div>
@@ -302,9 +330,11 @@ const ApplyChangeFrom = Form.create()(React.createClass({
 	                        	wrapperCol={{ span: 12 }}
 		                        label="项目类型"
 		                    >
-		                        {getFieldDecorator('projectType')(
-		                            <Input />
-		                        )}
+                                {getFieldDecorator('projectCatagory', {
+                                    initialValue: theData.projectCatagory
+                                    })(
+                                        <Input />
+                                    )}
 		                    </FormItem>
 	                    </div>
                     </div>
@@ -315,55 +345,84 @@ const ApplyChangeFrom = Form.create()(React.createClass({
 	                        	wrapperCol={{ span: 12 }}
 		                        label="技术领域"
 		                    >
-		                        {getFieldDecorator('technicalField')(
-		                            <Input />
-		                        )}
+                                {getFieldDecorator('techField', {
+                                    initialValue: theData.techField
+                                    })(
+                                        <Input />
+                                    )}
 		                    </FormItem>
 		                </div>
                     </div>
                     <div className="clearfix">
                      	<span className="item-title">项目简介: </span>
-                      	<Input type="textarea"
-                          	placeholder="多行输入"
-                         	value={this.state.introduce}
-                          	onChange={(e) => { this.setState({ introduce: e.target.value }); } }
-                          	rows={6} />
+                            {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}></Checkbox>
+                            <Checkbox 
+                                onChange={this.projectEstablishmentCheck}
+                                checked={this.state.projectModeState}
+                                >
+                            </Checkbox>
                         </div>
                         <div className="half-item">
                             <FormItem
 			                    {...formItemLayout}
 			                    label="立项金额"
 			                >
-			                    {getFieldDecorator('projectAmounts')(
-			                        <Input className="mini-input" />
-			                    )}
+                                {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}></Checkbox>
+                            <Checkbox 
+                                onChange={this.subsidyCheck}
+                                checked={this.state.subsidyState}
+                                >
+                            </Checkbox>
                         </div>
                     </div>
-                    <div>
-                    	<FormItem
-			             	{...formItemLayout}
-			              	label="项目材料上传"
-			             	labelCol={{ span: 24 }}
-			           		wrapperCol={{ span: 12 }}
-			          	>
-			           		{getFieldDecorator('avatar')(
-			                 	<Avatar urlData={this.avatarUrl} name='patent_prory_statement' oid={theData.unitName} />
-			            	)}
-			          	</FormItem>
+                    <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">

+ 23 - 4
js/component/manageCenter/servicesManage/technology/applyManage.jsx

@@ -45,9 +45,9 @@ const ApplyManage = React.createClass({
                     		thisdata.contacts = thisdata.thirdContacts;
                     		break;
                     }
-                    console.log(thisdata.contacts);
                     this.state.data.push({
                         key: i,
+                        pid: thisdata.id,
                         uid: thisdata.uid,
                         serialNumber: thisdata.serialNumber,
                         province: thisdata.province,
@@ -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>

+ 79 - 160
js/component/manageCenter/servicesManage/technology/websiteChange.jsx

@@ -5,49 +5,9 @@ import { getCognizanceState, beforeUpload, getBase64 } from '../../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 
-class Avatar extends React.Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            imageUrl: ''
-        }
-    }
-    handleChange(info) {
-        if (!this.props.oid || this.props.oid === "") {
-            message.warning('请先选择公司!');
-            return;
-        };
-        if (info.file.status === 'done') {
-            // Get this url from response in real world.
-            getBase64(info.file.originFileObj, imageUrl => this.setState({ imageUrl }));
-            this.props.urlData(info.file.response.data);
-        }
-    }
-    render() {
-        const imageUrl = this.state.imageUrl;
-        return (
-            <Upload
-                className="avatar-uploader"
-                name="avatar"
-                showUploadList={false}
-                action={globalConfig.context + "/techservice/patent/patentFile"}
-                data={{ 'sign': this.props.name, 'oid': this.props.oid }}
-                beforeUpload={beforeUpload}
-                onChange={this.handleChange.bind(this)}
-            >
-                {
-                    imageUrl ?
-                        <img src={imageUrl} role="presentation" className="avatar" /> :
-                        <Icon type="plus" className="avatar-uploader-trigger" />
-                }
-            </Upload>
-        );
-    }
-};
-
 
 const WebsiteChangeFrom = Form.create()(React.createClass({
-    loadData() {
+    loadData(id) {
         this.setState({
             loading: true
         });
@@ -55,38 +15,12 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admintechproject/",
+            url: globalConfig.context + "/api/admintechproject/techWebsiteDetail",
             data: {
-                cid: this.props.data.cid,
-                uid: this.props.data.uid,
-                year: this.props.data.year
+                id: id || this.props.data.id
             },
             success: function (data) {
-                if (data.error.length || !data.data) {
-                    message.warning(data.error[0].message);
-                    return;
-                };
                 this.state.data = data.data;
-                this.state.cid = this.props.data.cid;
-                this.state.moneyTable = [{
-                    key: 1,
-                    year: '第一年',
-                    netAsset: data.data.netAsset1,
-                    salesRevenue: data.data.salesRevenue1,
-                    grossProfit: data.data.grossProfit1
-                }, {
-                    key: 2,
-                    year: '第二年',
-                    netAsset: data.data.netAsset2,
-                    salesRevenue: data.data.salesRevenue2,
-                    grossProfit: data.data.grossProfit2
-                }, {
-                    key: 3,
-                    year: '第三年',
-                    netAsset: data.data.netAsset3,
-                    salesRevenue: data.data.salesRevenue3,
-                    grossProfit: data.data.grossProfit3
-                }];
             }.bind(this),
         }).always(function () {
             this.setState({
@@ -94,7 +28,7 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
             });
         }.bind(this));
     },
-    getStateData() {
+    getDepartmentList() {
         this.setState({
             loading: true
         });
@@ -102,24 +36,19 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/cognizanceLog",
+            url: globalConfig.context + "/api/user/getDepartment",
             data: {
-                cid: this.props.data
+                uid: this.props.data.uid,
             },
             success: function (data) {
                 if (data.error.length || !data.data) {
                     message.warning(data.error[0].message);
                     return;
                 };
-                this.state.stateTable = [];
-                for (let i = 0; i < data.data.length; i++) {
-                    this.state.stateTable.push({
-                        key: i,
-                        recordTimeFormattedDate: data.data[i].recordTimeFormattedDate,
-                        state: data.data[i].state,
-                        principal: data.data[i].principal,
-                        comment: data.data[i].comment
-                    });
+                for (var item in data.data) {
+                    this.state.departmentOption.push(
+                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
+                    )
                 };
             }.bind(this),
         }).always(function () {
@@ -132,27 +61,10 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
         return {
             loading: false,
             stateOption: [],
-            introduce:'',
+            departmentOption: [],
+            introduce: '',
             projectCheck: 0,
             subsidy: 0,
-            stateColumns: [{
-                title: '专利状态',
-                dataIndex: 'state',
-                key: 'state',
-                render: (text) => { return getCognizanceState(text) }
-            }, {
-                title: '处理时间',
-                dataIndex: 'recordTimeFormattedDate',
-                key: 'recordTimeFormattedDate',
-            }, {
-                title: '负责人',
-                dataIndex: 'principal',
-                key: 'principal',
-            }, {
-                title: '备注',
-                dataIndex: 'comment',
-                key: 'comment',
-            }],
             stateTable: []
         };
     },
@@ -164,34 +76,25 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
             )
         });
         this.loadData();
-        this.getStateData();
+        this.getDepartmentList();
     },
     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);
                 $.ajax({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/api/admin/disposeCognizanceDetail",
+                    url: globalConfig.context + "/api/admintechproject/disposeTechWebsite",
                     data: {
-                        id: this.props.data.cid,
-                        technicalField: values.technicalField,
-                        basicResearchCost: values.basicResearchCost,
-                        accident: values.accident,
-
-                        recordTimeFormattedDate: values.recordTime ? values.recordTime.format("YYYY-MM-DD") : undefined,
-                        state: values.state,
-                        principal: values.principal,
-                        comment: values.comment,
+                        id: this.state.data.id,
+                        uid: this.state.data.uid,
+                        department: values.department,
+                        website: values.website,
+                        accountNumber: values.accountNumber,
+                        password: values.password,
                     }
                 }).done(function (data) {
                     if (!data.error.length) {
@@ -211,8 +114,7 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
     },
     componentWillReceiveProps(nextProps) {
         if (!this.props.visible && nextProps.visible) {
-            this.getStateData();
-            this.loadData();
+            this.loadData(nextProps.data.id);
         };
     },
     projectEstablishmentCheck(e) {
@@ -229,62 +131,79 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
             this.state.subsidy = 0;
         };
     },
-    avatarUrl(e) {
-        this.state.avatarUrl = e;
-    },
     render() {
         const FormItem = Form.Item;
         const { getFieldDecorator } = this.props.form;
         const theData = this.state.data;
         const formItemLayout = {
-            labelCol: { span: 6 },
-            wrapperCol: { span: 12 },
+            labelCol: { span: 4 },
+            wrapperCol: { span: 6 },
         };
         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>
-                            <Select
-                                placeholder="请选择公司"
-                                style={{ width: 200 }}
-                                showSearch
-                                onChange={(e)=>{ this.state.unitName = e;}}>
-                                {this.props.companyOption}
-                            </Select>
-                        </div>
+                    <div className="half-item">
+                        <FormItem
+                            labelCol={{ span: 8 }}
+                            wrapperCol={{ span: 12 }}
+                            label="选择公司:"
+                        >
+                            <span>{theData.unitName}</span>
+                        </FormItem>
                     </div>
                     <div className="clearfix">
-                    	<div className="half-item">
-                            <span className="item-title">科技部门名称:  </span>
-                            <Input value={this.state.department} onChange={(e) => { this.setState({ department: e.target.value }); }} style={{ width: 200 }} />
-                        </div>
+                        <FormItem
+                            {...formItemLayout}
+                            label="科技部门名称:"
+                        >
+                            {getFieldDecorator('department', {
+                                initialValue: theData.department
+                            })(
+                                <Select>{this.state.departmentOption}</Select>
+                                )}
+                        </FormItem>
                     </div>
-
                     <div className="clearfix">
-	                 	<div className="half-item">
-	                   		<span className="item-title">网址:  </span>
-	                     	<Input value={this.state.website} onChange={(e) => { this.setState({ website: e.target.value }); }} style={{ width: 200 }} />
-	                	</div>
+                        <FormItem
+                            {...formItemLayout}
+                            label="网址:"
+                        >
+                            {getFieldDecorator('website', {
+                                initialValue: theData.website
+                            })(
+                                <Input />
+                                )}
+                        </FormItem>
                     </div>
                     <div className="clearfix">
-                    	<div className="half-item">
-	                   		<span className="item-title">账号:  </span>
-	                     	<Input value={this.state.accountNumber} onChange={(e) => { this.setState({ accountNumber: e.target.value }); }} style={{ width: 200 }} />
-	                	</div>
-	                </div>
-	                <div className="clearfix">
-                    	<div className="half-item">
-	                   		<span className="item-title">密码:  </span>
-	                     	<Input value={this.state.password} onChange={(e) => { this.setState({ password: e.target.value }); }} style={{ width: 200 }} />
-	                	</div>
-	                </div>
-	                
-	                
-                    
+                        <FormItem
+                            {...formItemLayout}
+                            label="账号:"
+                        >
+                            {getFieldDecorator('accountNumber', {
+                                initialValue: theData.accountNumber
+                            })(
+                                <Input />
+                                )}
+                        </FormItem>
+                    </div>
+                    <div className="clearfix">
+                        <FormItem
+                            {...formItemLayout}
+                            label="密码:"
+                        >
+                            {getFieldDecorator('password', {
+                                initialValue: theData.password
+                            })(
+                                <Input />
+                                )}
+                        </FormItem>
+                    </div>
+                    <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 {
@@ -336,7 +255,7 @@ const WebsiteChange = React.createClass({
                     >
                         <WebsiteChangeFrom
                             visible={this.state.visible}
-                            authorOption={this.props.authorOption}
+                            companyOption={this.props.companyOption}
                             data={this.props.data}
                             spinState={this.spinChange} closeModal={this.handleCancel} />
                     </Modal>

+ 28 - 34
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) {
@@ -35,6 +35,7 @@ const Cognizance = React.createClass({
                     let thisdata = data.data.list[i];
                     this.state.data.push({
                         key: i,
+                        id: thisdata.id,
                         uid: thisdata.uid,
                         unitName: thisdata.unitName,
 						department: thisdata.department,
@@ -56,32 +57,6 @@ const Cognizance = React.createClass({
             });
         }.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));
-    },
     getCompanyList() {
         this.setState({
             loading: true
@@ -98,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>
                     )
                 };
@@ -112,8 +90,10 @@ const Cognizance = React.createClass({
         return {
             provinceOption: [],
             companyOption: [],
+            companyAddOption: [],
             authorOption: [],
             selectedRows: [],
+            selectedRowKeys: [],
             loading: false,
             showAdd: false,
             showDesc: false,
@@ -163,7 +143,6 @@ const Cognizance = React.createClass({
             )
         });
         this.loadData();
-        this.getAuthorList();
         this.getCompanyList();
         //        this.getContactsList();
     },
@@ -186,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
             }
@@ -224,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">
@@ -255,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} />
@@ -267,13 +263,11 @@ const Cognizance = React.createClass({
                 </div>
                 <WebsiteChange
                     data={this.state.RowData}
-                    authorOption={this.state.authorOption}
-                    companyOption={this.state.companyOption}
+                    companyAddOption={this.state.companyAddOption}
                     showDesc={this.state.showDesc}
                     closeDesc={this.closeDesc} />
                 <WebsiteAdd
-                    authorOption={this.state.authorOption}
-                    companyOption={this.state.companyOption}
+                    companyAddOption={this.state.companyAddOption}
                     showAdd={this.state.showAdd}
                     closeAdd={this.closeAdd} />
             </div >

+ 13 - 11
js/component/manageCenter/userManage/orgList.jsx

@@ -71,7 +71,7 @@ const OrgAdd = React.createClass({
                         <span>用户手机号码:</span>
                         <Input
                             value={this.state.mobile}
-                            onChange={(e) => { this.setState({ mobile : e.target.value }); }} />
+                            onChange={(e) => { this.setState({ mobile: e.target.value }); }} />
                     </div>
                     <div className='orgAdd-input'>
                         <span>公司名称:</span>
@@ -103,7 +103,7 @@ const OrgList = React.createClass({
                 email: this.state.searchEmail,
                 createTime: this.state.searchTime,
                 number: this.state.searchAftId, //阿凡提号
-                aftUsername: this.state.searchAftUsername,
+                unitName: this.state.searchUnitName,
                 auditStatus: this.state.searchAuditStatus
             },
             success: function (data) {
@@ -231,12 +231,12 @@ const OrgList = React.createClass({
         this.loadData();
     },
     reset() {
-        this.state.searchAftId = "";
-        this.state.searchLoginId = "";
-        this.state.searchAuditStatus = "";
-        this.state.searchAftUsername = "";
-        this.state.searchEmail = "";
-        this.state.searchTime = [,];
+        this.state.searchAftId = undefined;
+        this.state.searchLoginId = undefined;
+        this.state.searchAuditStatus = undefined;
+        this.state.searchUnitName = undefined;
+        this.state.searchEmail = undefined;
+        this.state.searchTime = [];
         this.loadData();
     },
     searchSwitch() {
@@ -269,8 +269,8 @@ const OrgList = React.createClass({
                             })
                         }
                     </Select>
-                    <Input placeholder="认证名称" value={this.state.searchAftUsername}
-                        onChange={(e) => { this.setState({ searchAftUsername: e.target.value }); }} />
+                    <Input placeholder="公司名称" value={this.state.searchUnitName}
+                        onChange={(e) => { this.setState({ searchUnitName: e.target.value }); }} />
                     <Input placeholder="联系方式" value={this.state.searchEmail}
                         onChange={(e) => { this.setState({ searchEmail: e.target.value }); }} />
                     <Button type="primary" onClick={this.search}>搜索</Button>
@@ -279,7 +279,9 @@ const OrgList = React.createClass({
                     <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
                         <p>
                             <span>注册时间:</span>
-                            <RangePicker value={[moment(this.state.searchTime[0]), moment(this.state.searchTime[1])]}
+                            <RangePicker
+                                allowClear={false}
+                                value={[moment(this.state.searchTime[0]), moment(this.state.searchTime[1])]}
                                 onChange={(data, dataString) => { this.setState({ searchTime: dataString }); }} />
                         </p>
                     </div>

+ 24 - 2
js/component/tools.js

@@ -14,7 +14,8 @@ import {
     annualReportStateList,
     cognizanceStateList,
     technologyStateList,
-    copyrightStateList
+    copyrightStateList,
+    vocations
 } from './dataDic.js';
 
 module.exports = {
@@ -119,7 +120,9 @@ module.exports = {
     getTime: function (e, t) {
         if (e && !t) {
             var d = new Date(e);
-            d = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + " ";
+            d = d.getFullYear() + "-" +
+                ((d.getMonth() + 1) < 9 ? '0' + (d.getMonth() + 1) : (d.getMonth() + 1)) + "-" +
+                (d.getDate() < 9 ? '0' + d.getDate() : d.getDate()) + " ";
             // + (d.getHours() < 10 ? "0" + d.getHours() : d.getHours()) + ":" +
             // (d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes()) + ":" +
             // (d.getSeconds() < 10 ? "0" + d.getSeconds() : d.getSeconds());
@@ -305,5 +308,24 @@ module.exports = {
     companySearch(input, option) {
         return option.props.children.indexOf(input) >= 0
     },
+    getInUrgentTime(date, inUrgent) {
+        let now = new Date(date);
+        for (var i = 1; i <= inUrgent;) {
+            now.setDate(now.getDate() + 1);
+            if (!vocations[getKey(now)]) {
+                i++;
+            };
+        };
+        return now;
 
+        function getKey(date) {
+            var year = date.getFullYear(),
+                month = date.getMonth() + 1,
+                day = date.getDate();
+            year = "" + year;
+            month = (month > 9 ? "" : "0") + month;
+            day = (day > 9 ? "" : "0") + day;
+            return year + month + day;
+        }
+    }
 }

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "afanti",
-  "version": "1.0.10",
+  "version": "1.0.11",
   "description": "",
   "main": "index.js",
   "scripts": {