Browse Source

会员端科技服务

yee 8 years ago
parent
commit
3b6e8ae4a2
70 changed files with 4803 additions and 3070 deletions
  1. 20 3
      build/admin/index.html
  2. 32 0
      build/admin/login.html
  3. 1 0
      build/admin/login.js
  4. 1 0
      build/admin/servicesManage/patent.css
  5. 32 0
      build/admin/servicesManage/patent.html
  6. 19 0
      build/admin/servicesManage/patent.js
  7. 32 0
      build/admin/userManage.html
  8. 1 0
      build/admin/userManage.js
  9. 1 1
      build/user/account/index.css
  10. 20 3
      build/user/account/index.html
  11. 6 5
      build/user/account/index.js
  12. 1 1
      build/user/account/services.css
  13. 20 3
      build/user/account/services.html
  14. 5 5
      build/user/account/services.js
  15. 1 1
      build/user/account/set.css
  16. 20 3
      build/user/account/set.html
  17. 24 24
      build/user/account/set.js
  18. 20 3
      build/user/index.html
  19. 1 1
      build/user/index.js
  20. 1 1
      build/user/login.css
  21. 20 3
      build/user/login.html
  22. 8 7
      build/user/login.js
  23. 1 1
      build/user/signIn.css
  24. 20 3
      build/user/signIn.html
  25. 9 9
      build/user/signIn.js
  26. 3 3
      build/vendors.js
  27. 9 0
      js/admin/login.js
  28. 16 0
      js/admin/servicesManage/patent.js
  29. 9 0
      js/admin/userManage.js
  30. 2 2
      js/component/account/leftTab.less
  31. 6 15
      js/component/account/services/content.jsx
  32. 14 17
      js/component/account/services/leftTab.jsx
  33. 196 0
      js/component/account/services/patent.jsx
  34. 109 0
      js/component/account/services/patent.less
  35. 258 0
      js/component/account/services/patentAdd.jsx
  36. 92 0
      js/component/account/services/patentDesc.jsx
  37. 1 2
      js/component/account/set/base.jsx
  38. 16 8
      js/component/account/set/changeMobile.jsx
  39. 1 1
      js/component/account/set/changeModal.less
  40. 4 9
      js/component/account/set/company.jsx
  41. 1 1
      js/component/account/set/content.jsx
  42. 2 377
      js/component/account/set/eduPfsSelect.jsx
  43. 1 5
      js/component/account/set/pfs.jsx
  44. 2 1320
      js/component/account/set/techSelect.jsx
  45. 5 5
      js/component/account/topTab.jsx
  46. 2891 0
      js/component/dataDic.js
  47. 164 0
      js/component/login/forgetPw.jsx
  48. 4 1
      js/component/login/loginForm.jsx
  49. 15 0
      js/component/manageCenter/bottom.jsx
  50. 11 0
      js/component/manageCenter/bottom.less
  51. 20 0
      js/component/manageCenter/content.less
  52. 25 0
      js/component/manageCenter/leftTab.less
  53. 57 0
      js/component/manageCenter/servicesManage/leftTab.jsx
  54. 20 0
      js/component/manageCenter/servicesManage/patent/applyFee.jsx
  55. 20 0
      js/component/manageCenter/servicesManage/patent/comprehensive.jsx
  56. 51 0
      js/component/manageCenter/servicesManage/patent/content.jsx
  57. 20 0
      js/component/manageCenter/servicesManage/patent/correction.jsx
  58. 20 0
      js/component/manageCenter/servicesManage/patent/express.jsx
  59. 20 0
      js/component/manageCenter/servicesManage/patent/payment.jsx
  60. 52 0
      js/component/manageCenter/topTab.jsx
  61. 88 0
      js/component/manageCenter/topTab.less
  62. 51 0
      js/component/manageCenter/userManage/content.jsx
  63. 57 0
      js/component/manageCenter/userManage/leftTab.jsx
  64. 1 1
      js/component/sign/account.jsx
  65. 1 1
      js/component/sign/groupAccount.jsx
  66. 1 1139
      js/component/tools.js
  67. 1 1
      js/user/index.js
  68. 20 3
      template/template.html
  69. 75 51
      webpack.config.js
  70. 55 31
      webpack.config.pro.js

+ 20 - 3
build/admin/index.html

@@ -1,15 +1,32 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
     <meta charset="utf-8">
-    <title>admin_index</title>
+    <title>
+        管理员-首页
+    </title>
     <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
         window.globalConfig = {
-	  		context: "//aft.hnzhiming.com:8080/aft"
-	  	}
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
     </script>
 </head>
+
 <body>
     <div id="root"></div>
 <script type="text/javascript" src="../vendors.js"></script><script type="text/javascript" src="../admin/index.js"></script></body>
+
 </html>

+ 32 - 0
build/admin/login.html

@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <title>
+        管理员-登录
+    </title>
+    <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
+        window.globalConfig = {
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
+    </script>
+</head>
+
+<body>
+    <div id="root"></div>
+<script type="text/javascript" src="../vendors.js"></script><script type="text/javascript" src="../admin/login.js"></script></body>
+
+</html>

+ 1 - 0
build/admin/login.js

@@ -0,0 +1 @@
+webpackJsonp([1],[function(e,t,n){"use strict";function l(e){return e&&e.__esModule?e:{default:e}}var u=n(1),a=l(u),d=n(28),r=l(d);r.default.render(a.default.createElement("div",null,a.default.createElement("span",null,"this is admin_login")),document.getElementById("root"))}]);

File diff suppressed because it is too large
+ 1 - 0
build/admin/servicesManage/patent.css


+ 32 - 0
build/admin/servicesManage/patent.html

@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <title>
+        管理员-科技服务管理-专利
+    </title>
+    <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
+        window.globalConfig = {
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
+    </script>
+<link href="../../admin/servicesManage/patent.css" rel="stylesheet"></head>
+
+<body>
+    <div id="root"></div>
+<script type="text/javascript" src="../../vendors.js"></script><script type="text/javascript" src="../../admin/servicesManage/patent.js"></script></body>
+
+</html>

File diff suppressed because it is too large
+ 19 - 0
build/admin/servicesManage/patent.js


+ 32 - 0
build/admin/userManage.html

@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <title>
+        管理员-用户管理
+    </title>
+    <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
+        window.globalConfig = {
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
+    </script>
+</head>
+
+<body>
+    <div id="root"></div>
+<script type="text/javascript" src="../vendors.js"></script><script type="text/javascript" src="../admin/userManage.js"></script></body>
+
+</html>

+ 1 - 0
build/admin/userManage.js

@@ -0,0 +1 @@
+webpackJsonp([3],[function(e,t,n){"use strict";function u(e){return e&&e.__esModule?e:{default:e}}var a=n(1),l=u(a),d=n(28),r=u(d);r.default.render(l.default.createElement("div",null,l.default.createElement("span",null,"this is admin-userManage")),document.getElementById("root"))}]);

File diff suppressed because it is too large
+ 1 - 1
build/user/account/index.css


+ 20 - 3
build/user/account/index.html

@@ -1,15 +1,32 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
     <meta charset="utf-8">
-    <title>用户中心-首页</title>
+    <title>
+        用户中心-首页
+    </title>
     <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
         window.globalConfig = {
-	  		context: "//aft.hnzhiming.com:8080/aft"
-	  	}
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
     </script>
 <link href="../../user/account/index.css" rel="stylesheet"></head>
+
 <body>
     <div id="root"></div>
 <script type="text/javascript" src="../../vendors.js"></script><script type="text/javascript" src="../../user/account/index.js"></script></body>
+
 </html>

File diff suppressed because it is too large
+ 6 - 5
build/user/account/index.js


File diff suppressed because it is too large
+ 1 - 1
build/user/account/services.css


+ 20 - 3
build/user/account/services.html

@@ -1,15 +1,32 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
     <meta charset="utf-8">
-    <title>用户中心-科技服务</title>
+    <title>
+        用户中心-科技服务
+    </title>
     <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
         window.globalConfig = {
-	  		context: "//aft.hnzhiming.com:8080/aft"
-	  	}
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
     </script>
 <link href="../../user/account/services.css" rel="stylesheet"></head>
+
 <body>
     <div id="root"></div>
 <script type="text/javascript" src="../../vendors.js"></script><script type="text/javascript" src="../../user/account/services.js"></script></body>
+
 </html>

File diff suppressed because it is too large
+ 5 - 5
build/user/account/services.js


File diff suppressed because it is too large
+ 1 - 1
build/user/account/set.css


+ 20 - 3
build/user/account/set.html

@@ -1,15 +1,32 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
     <meta charset="utf-8">
-    <title>用户中心-设置</title>
+    <title>
+        用户中心-设置
+    </title>
     <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
         window.globalConfig = {
-	  		context: "//aft.hnzhiming.com:8080/aft"
-	  	}
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
     </script>
 <link href="../../user/account/set.css" rel="stylesheet"></head>
+
 <body>
     <div id="root"></div>
 <script type="text/javascript" src="../../vendors.js"></script><script type="text/javascript" src="../../user/account/set.js"></script></body>
+
 </html>

File diff suppressed because it is too large
+ 24 - 24
build/user/account/set.js


+ 20 - 3
build/user/index.html

@@ -1,15 +1,32 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
     <meta charset="utf-8">
-    <title>用户首页</title>
+    <title>
+        用户首页
+    </title>
     <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
         window.globalConfig = {
-	  		context: "//aft.hnzhiming.com:8080/aft"
-	  	}
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
     </script>
 </head>
+
 <body>
     <div id="root"></div>
 <script type="text/javascript" src="../vendors.js"></script><script type="text/javascript" src="../user/index.js"></script></body>
+
 </html>

+ 1 - 1
build/user/index.js

@@ -1 +1 @@
-webpackJsonp([4],[function(e,t,n){"use strict";function l(e){return e&&e.__esModule?e:{default:e}}var u=n(1),d=l(u),a=n(28),r=l(a);r.default.render(d.default.createElement("div",null,d.default.createElement("span",null,"this is index")),document.getElementById("root"))}]);
+webpackJsonp([7],[function(e,t,n){"use strict";function u(e){return e&&e.__esModule?e:{default:e}}var l=n(1),d=u(l),r=n(28),a=u(r);a.default.render(d.default.createElement("div",null,d.default.createElement("span",null,"this is user-index")),document.getElementById("root"))}]);

File diff suppressed because it is too large
+ 1 - 1
build/user/login.css


+ 20 - 3
build/user/login.html

@@ -1,15 +1,32 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
     <meta charset="utf-8">
-    <title>用户登录</title>
+    <title>
+        用户登录
+    </title>
     <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
         window.globalConfig = {
-	  		context: "//aft.hnzhiming.com:8080/aft"
-	  	}
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
     </script>
 <link href="../user/login.css" rel="stylesheet"></head>
+
 <body>
     <div id="root"></div>
 <script type="text/javascript" src="../vendors.js"></script><script type="text/javascript" src="../user/login.js"></script></body>
+
 </html>

File diff suppressed because it is too large
+ 8 - 7
build/user/login.js


File diff suppressed because it is too large
+ 1 - 1
build/user/signIn.css


+ 20 - 3
build/user/signIn.html

@@ -1,15 +1,32 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
     <meta charset="utf-8">
-    <title>用户注册</title>
+    <title>
+        用户注册
+    </title>
     <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
         window.globalConfig = {
-	  		context: "//aft.hnzhiming.com:8080/aft"
-	  	}
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
     </script>
 <link href="../user/signIn.css" rel="stylesheet"></head>
+
 <body>
     <div id="root"></div>
 <script type="text/javascript" src="../vendors.js"></script><script type="text/javascript" src="../user/signIn.js"></script></body>
+
 </html>

File diff suppressed because it is too large
+ 9 - 9
build/user/signIn.js


File diff suppressed because it is too large
+ 3 - 3
build/vendors.js


+ 9 - 0
js/admin/login.js

@@ -0,0 +1,9 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+
+ReactDOM.render(
+    <div>
+        <span>this is admin_login</span>
+    </div>,
+    document.getElementById('root')
+)

+ 16 - 0
js/admin/servicesManage/patent.js

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

+ 9 - 0
js/admin/userManage.js

@@ -0,0 +1,9 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+
+ReactDOM.render(
+    <div>
+        <span>this is admin-userManage</span>
+    </div>,
+    document.getElementById('root')
+)

+ 2 - 2
js/component/account/leftTab.less

@@ -14,8 +14,8 @@
             font-size: 16px;
             color: #4466bf;
             background: #d5e4f7;
-            border-top:1px solid #f2f8fd;
-            border-bottom:1px solid #c0d2e4;
+            border-top: 1px solid #f2f8fd;
+            border-bottom: 1px solid #c0d2e4;
         }
         .ant-menu-item-selected {
             background: #fff;

+ 6 - 15
js/component/account/services/content.jsx

@@ -2,12 +2,13 @@ import React from 'react';
 import '../content.less';
 import LeftTab from './leftTab.jsx';
 
+import Patent from './patent.jsx';
 
 const Content = React.createClass({
     getInitialState() {
         return {
             loading: false,
-            leftKey: 'base',
+            leftKey: 'patent',
             userType: '0'
         };
     },
@@ -16,25 +17,15 @@ const Content = React.createClass({
             leftKey: key,
         });
     },
-    componentWillMount() {
-    },
     render() {
         return (
             <div className="acc-content">
-                <LeftTab handlekey={this.handlekey} />;
+                <LeftTab handlekey={this.handlekey} />
                 <div className="content-right">
                     {(() => {
                         switch (this.state.leftKey) {
-                            case 'base':
-                                return <div>专利综合管理</div>;
-                            case 'person':
-                                return <div>待缴费专利管理</div>;
-                            case 'edu':
-                                return <div>补正审查通知管理</div>;
-                            case 'pfs':
-                                return <div>专利纸件收发登记</div>;
-                            case 'ablt':
-                                return <div>专利申请费用管理</div>;
+                            case 'patent':
+                                return <Patent />;
                         };
                     })()}
                 </div>
@@ -43,4 +34,4 @@ const Content = React.createClass({
     }
 });
 
-export default Content;
+export default Content;

+ 14 - 17
js/component/account/services/leftTab.jsx

@@ -8,7 +8,7 @@ const MenuItemGroup = Menu.ItemGroup;
 const LeftTab = React.createClass({
     getInitialState() {
         return {
-            current: 'base',
+            current: 'patent',
         };
     },
     handleClick(e) {
@@ -24,24 +24,21 @@ const LeftTab = React.createClass({
                 mode="vertical"
                 className="account-left"
                 >
-                <Menu.Item key="base">
-                    专利综合管理
-                </Menu.Item>
-                <Menu.Item key="person">
-                    待缴费专利管理
-                </Menu.Item>
-                <Menu.Item key="edu">
-                    补正审查通知管理
-                </Menu.Item>
-                <Menu.Item key="pfs">
-                    专利纸件收发登记
-                </Menu.Item>
-                <Menu.Item key="ablt">
-                    专利申请费用管理
-                </Menu.Item>
+                    <Menu.Item key="patent">
+                        专利申请
+                    </Menu.Item>
+                    <Menu.Item key="software">
+                        软著申请
+                    </Menu.Item>
+                    <Menu.Item key="company">
+                        高企认定
+                    </Menu.Item>
+                    <Menu.Item key="technology">
+                        科技项目申报
+                    </Menu.Item>
             </Menu>
         );
-    },
+    }
 });
 
 export default LeftTab;

+ 196 - 0
js/component/account/services/patent.jsx

@@ -0,0 +1,196 @@
+import React from 'react';
+import { Icon, Alert, Button, Input, Select, Spin, Table } from 'antd';
+import { patentType, patentState } from '../../dataDic.js';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+import './patent.less';
+import PatentAdd from './patentAdd.jsx';
+import PatentDesc from './patentDesc.jsx';
+
+const Patent = React.createClass({
+    loadData(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/techservice/patent/clientApplyList",
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+                patentNumber: this.state.patentNumber,
+                patentName: this.state.patentName,
+                patentCatagory: this.state.patentType,
+                patentState: this.state.patentState
+            },
+            success: function (data) {
+                if (data.error.length || !data.data || !data.data.list) {
+                    return;
+                }
+                for (let i = 0; i < data.data.list.length; i++) {
+                    let thisdata = data.data.list[i];
+                    this.state.data.push({
+                        key: i,
+                        number: thisdata.serialNumber,
+                        patentNum: thisdata.patentNumber,
+                        patentName: thisdata.patentName,
+                        patentType: thisdata.patentCatagory,
+                        patentState: thisdata.patentState,
+                        patentField: thisdata.patentField,
+                        patentDes: thisdata.patentDes,
+                        patentProryStatementUrl: thisdata.patentProryStatementUrl, //专利代理委托书
+                        patentWritingUrl: thisdata.patentWritingUrl, //专利稿件
+                        authorizationNoticeUrl: thisdata.authorizationNoticeUrl, //授权通知书
+                        patentCertificateUrl: thisdata.patentCertificateUrl, //专利证书
+                        startTime: thisdata.patentApplicationDate,
+                        firstInventorName: thisdata.firstInventorName,
+                        firstInventorNationality: thisdata.firstInventorNationality, //国籍
+                        firstInventorIdNumber: thisdata.firstInventorIdNumber,   //id
+                        firstInventorIsPublish: thisdata.firstInventorIsPublish, //是否公布
+                        secondInventorName: thisdata.secondInventorName,
+                        secondInventorNationality: thisdata.secondInventorNationality,
+                        secondInventorIsPublish: thisdata.secondInventorIsPublish,
+                        thirdInventorName: thisdata.thirdInventorName,
+                        thirdInventorNationality: thisdata.thirdInventorNationality,
+                        thirdInventorIsPublish: thisdata.thirdInventorIsPublish,
+                        createTime: thisdata.createTime,   //派单日
+                        author: thisdata.author, //撰写人
+                        office: thisdata.office, //事务所
+                        principal: thisdata.principal //负责人
+                    });
+                };
+                this.state.pagination.current = data.data.pageNo;
+                this.state.pagination.total = data.data.totalCount;
+                this.setState({
+                    dataSource: this.state.data,
+                    pagination: this.state.pagination
+                });
+                console.log(this.state.data);
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            warningText: 'warning text! warning text! warning text!',
+            AlertDis: 'block',
+            patentTypeOption: [],
+            patentStateOption: [],
+            data: [],
+            //dataSource: [],
+            download: globalConfig.context + '/api/warningreports/download',
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '编号',
+                    dataIndex: 'number',
+                    key: 'number',
+                }, {
+                    title: '申请号专利号',
+                    dataIndex: 'patentNum',
+                    key: 'patentNum',
+                }, {
+                    title: '专利类型',
+                    dataIndex: 'patentType',
+                    key: 'patentType',
+                }, {
+                    title: '专利名称',
+                    dataIndex: 'patentName',
+                    key: 'patentName',
+                }, {
+                    title: '专利状态',
+                    dataIndex: 'patentState',
+                    key: 'patentState',
+                }, {
+                    title: '申请日',
+                    dataIndex: 'startTime',
+                    key: 'startTime',
+                }, {
+                    title: '授权缴费截止日',
+                    dataIndex: 'endTime',
+                    key: 'endTime',
+                }
+            ],
+            dataSource: []
+        };
+    },
+    componentWillMount() {
+        let _me = this;
+        patentType.map(function (item) {
+            _me.state.patentTypeOption.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        patentState.map(function (item) {
+            _me.state.patentStateOption.push(
+                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
+            )
+        });
+        this.loadData();
+    },
+    alertClose(e) {
+        console.log(e);
+    },
+    tableRowClick(record, index) {
+        this.state.RowData = record;
+        this.setState({
+            showDesc:true
+        });
+    },
+    closeDesc(e){
+            this.state.showDesc = e;
+    },
+    render() {
+        return (
+            <div className="patent-content" >
+                <div className="content-title">
+                    <span>专利申请管理</span>
+                    <PatentAdd />
+                </div>
+                <Alert style={{ display: this.state.AlertDis }} className="patent-alert" message={this.state.warningText}
+                    type="info"
+                    showIcon={true}
+                    closable
+                    onClose={this.alertClose}
+                    />
+                <div className="patent-query">
+                    <Input placeholder="专利号" />
+                    <Input placeholder="专利名称" />
+                    <Select style={{ width: 200 }}>{this.state.patentTypeOption}</Select>
+                    <Select style={{ width: 200 }}>{this.state.patentStateOption}</Select>
+                    <Button type="primary">搜索</Button>
+                    <Button type="ghost">重置</Button>
+                </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>
+                <PatentDesc data={this.state.RowData} showDesc={this.state.showDesc} closeDesc={this.closeDesc}/>
+            </div >
+        );
+    }
+});
+
+export default Patent;

+ 109 - 0
js/component/account/services/patent.less

@@ -0,0 +1,109 @@
+.patent-content {
+    padding: 20px;
+    background: #fff;
+    .content-title {
+        height: 32px;
+        margin-bottom: 10px;
+        >span {
+            color: #333;
+            font-size: 16px;
+            margin-bottom: 10px;
+        }
+        .patent-addNew {
+            float: right;
+            button {
+                background: #ea0862;
+                color: #fff;
+                border: none;
+                border-radius: 4px;
+                padding: 6px 10px;
+            }
+        }
+    }
+    .patent-alert {
+        font-size: 14px;
+        padding: 8px 48px;
+        >i {
+            font-size: 19px;
+            top: 8px;
+        }
+    }
+    .patent-query {
+        margin-bottom: 10px;
+        >input {
+            width: 240px;
+            margin-right: 30px;
+        }
+        >div {
+            margin-right: 30px;
+        }
+        >button {
+            margin-left: 30px;
+        }
+    }
+}
+
+.ant-modal-content {
+    .ant-modal-header {
+        padding: 10px 16px;
+        background: #2d2d2d;
+        .ant-modal-title {
+            color: #fff;
+            font-size: 16px;
+            font-weight: 400;
+        }
+    }
+    .ant-modal-body {
+        padding:16px 26px;
+        .ant-form-item-label {
+            text-align: left;
+        }
+       .ant-form-item-control  {
+           .mini-input {
+               width: 50%;
+           }
+           .ant-checkbox-wrapper {
+               margin-left: 60px;
+               span {
+                   vertical-align: middle;
+               }
+           }
+       }
+       .ant-form-item {
+           margin-bottom: 12px;
+       } 
+    }
+    .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;
+    }
+}
+.patent-desc-content {
+    .ant-modal-body{
+        > div {
+            color: #333;
+            margin-bottom: 20px;
+            .widthHalf {
+                display:inline-block;
+                width: 50%;
+            }
+            span {
+                color: #666;
+            }
+        }
+    }
+}

+ 258 - 0
js/component/account/services/patentAdd.jsx

@@ -0,0 +1,258 @@
+import React from 'react';
+import { Icon, Modal, Button, Form, Upload, message, Input, Spin, Checkbox } from 'antd';
+import './patent.less';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+
+function getBase64(img, callback) {
+    const reader = new FileReader();
+    reader.addEventListener('load', () => callback(reader.result));
+    reader.readAsDataURL(img);
+};
+
+function beforeUpload(file) {
+    const isJPG = file.type === 'image/jpeg';
+    if (!isJPG) {
+        message.error('You can only upload JPG file!');
+    }
+    const isLt2M = file.size / 1024 / 1024 < 2;
+    if (!isLt2M) {
+        message.error('Image must smaller than 2MB!');
+    }
+    return isJPG && isLt2M;
+};
+
+class Avatar extends React.Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            imageUrl: ''
+        }
+    }
+    handleChange(info) {
+        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 + "/api/user/patent/upload"}
+                data={{ 'sign': this.props.name }}
+                beforeUpload={beforeUpload}
+                onChange={this.handleChange.bind(this)}
+                >
+                {
+                    imageUrl ?
+                        <img src={imageUrl} role="presentation" className="avatar" /> :
+                        <Icon type="plus" className="avatar-uploader-trigger" />
+                }
+            </Upload>
+        );
+    }
+};
+
+const PatentAddFrom = Form.create()(React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            firstCheck:0,
+            secondCheck:0,
+            thirdCheck:0
+
+        };
+    },
+    handleSubmit(e) {
+        e.preventDefault();
+        this.props.form.validateFields((err, values) => {
+            if (!err) {
+                this.props.spinState(true);
+                $.ajax({
+                    method: "POST",
+                    dataType: "json",
+                    crossDomain: false,
+                    url: globalConfig.context + "/techservice/patent/clientApplyPatent",
+                    data: {
+                        '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
+                    }
+                }).done(function (data) {
+                    if (!data.error.length) {
+                        message.success('保存成功!');
+                    } else {
+                        message.warning(data.error[0].message);
+                    }
+                }.bind(this)).always(function () {
+                    this.props.spinState(false);
+                }.bind(this));
+            }
+        });
+    },
+    firstInventorCheck(e) {
+        if ( e.target.checked == true ) {
+            this.state.firstCheck = 1;
+        } else if ( e.target.checked == false ) {
+            this.state.firstCheck = 0;
+        }
+    },
+    secondInventorCheck(e) {
+        if ( e.target.checked == true ) {
+            this.state.secondCheck = 1;
+        } else if ( e.target.checked == false ) {
+            this.state.secondCheck = 0;
+        };
+    },
+    thirdInventorCheck(e) {
+        if ( e.target.checked == true ) {
+            this.state.thirdCheck = 1;
+        } else if ( e.target.checked == false ) {
+            this.state.thirdCheck = 0;
+        };
+    },
+    avatarUrl(e){
+        this.state.avatarUrl = e;
+    },
+    render() {
+        const FormItem = Form.Item;
+        const { getFieldDecorator } = this.props.form;
+        const formItemLayout = {
+            labelCol: { span: 3 },
+            wrapperCol: { span: 12 },
+        };
+        const _me = this;
+        return (
+            <Form horizontal onSubmit={this.handleSubmit} className="person-form">
+                <FormItem
+                    labelCol={{ span: 24 }}
+                    wrapperCol={{ span: 18 }}
+                    label="专利简要描述"
+                    >
+                    {getFieldDecorator('intro', {
+                        initialValue: this.state.intro || null
+                    })(
+                        <Input type="textarea"
+                            placeholder="多行"
+                            rows={6} />
+                        )}
+                </FormItem>
+                <p>第一发明人</p>
+                <FormItem
+                    {...formItemLayout}
+                    label="姓名"
+                    >
+                    {getFieldDecorator('firstInventorName', {
+                        rules: [{ required: true, message: 'Please input name!' }]
+                    })(
+                        <Input className="mini-input"/>
+                        )}
+                    <Checkbox onChange={this.firstInventorCheck}>是否公布</Checkbox>
+                </FormItem>
+                <FormItem
+                    {...formItemLayout}
+                    label="身份证"
+                    >
+                    {getFieldDecorator('firstInventorID', {
+                        rules: [{ required: true, message: 'Please input ID!' }]
+                    })(
+                        <Input className="mini-input"/>
+                        )}
+                </FormItem>
+                <p>第二发明人</p>
+                <FormItem
+                    {...formItemLayout}
+                    label="姓名"
+                    >
+                    {getFieldDecorator('secondInventorName')(
+                        <Input className="mini-input"/>
+                        )}
+                    <Checkbox onChange={this.secondInventorCheck}>是否公布</Checkbox>
+                </FormItem>
+                <p>第三发明人</p>
+                <FormItem
+                    {...formItemLayout}
+                    label="姓名"
+                    >
+                    {getFieldDecorator('thirdInventorName')(
+                        <Input className="mini-input"/>
+                        )}
+                    <Checkbox onChange={this.thirdInventorCheck}>是否公布</Checkbox>
+                </FormItem>
+                <FormItem
+                    {...formItemLayout}
+                    label="上传代理委托书"
+                    labelCol={{ span: 24 }}
+                    wrapperCol={{ span: 12 }}
+                    >
+                    {getFieldDecorator('avatar')(
+                        <Avatar urlData={this.avatarUrl} name='patent_prory_statement' />
+                    )}
+                    <span>请上传专利代理委托书</span><a href="">模板下载</a>
+                </FormItem>
+                <FormItem>
+                    <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
+                    <Button type="ghost" style={{marginLeft:'20px'}} onClick={this.props.closeBtn}>取消</Button>
+                </FormItem>
+            </Form >
+        );
+    },
+}));
+
+
+const PatentAdd = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false
+        };
+    },
+    showModal() {
+        this.setState({
+            visible: true,
+        });
+    },
+    handleOk() {
+        this.setState({
+            visible: false,
+        });
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+    },
+    spinChange(e) {
+        this.setState({
+            loading: e
+        });
+    },
+    render() {
+        return (
+            <div className="patent-addNew">
+                <Button className="patent-addNew" type="primary" onClick={this.showModal}>申请新专利<Icon type="plus" /></Button>
+                <Spin spinning={this.state.loading} className='spin-box'>
+                    <Modal title="新专利申请" visible={this.state.visible}
+                        onOk={this.handleOk} onCancel={this.handleCancel}
+                        width='800px'
+                        footer=''
+                        >
+                        <PatentAddFrom spinState={this.spinChange} closeBtn={this.handleCancel}/>
+                    </Modal>
+                </Spin>
+            </div>
+        );
+    },
+});
+export default PatentAdd;

+ 92 - 0
js/component/account/services/patentDesc.jsx

@@ -0,0 +1,92 @@
+import React from 'react';
+import { Icon, Modal, message, Spin, } from 'antd';
+import './patent.less';
+
+const PatentDesc = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false
+        };
+    },
+    showModal() {
+        this.setState({
+            visible: true,
+        });
+    },
+    handleOk() {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    componentWillReceiveProps(nextProps) {
+        this.state.visible = nextProps.showDesc
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    render() {
+        let theData = this.props.data;
+        if (this.props.data) {
+            return (
+                <div className="patent-desc">
+                    <Spin spinning={this.state.loading} className='spin-box'>
+                        <Modal title="专利详情" visible={this.state.visible}
+                            onOk={this.handleOk} onCancel={this.handleCancel}
+                            width='800px'
+                            footer=''
+                            className="patent-desc-content">
+                            <div>
+                                <p className="widthHalf"><span>编号:</span>{theData.number}</p>
+                                <p className="widthHalf"><span>申请号/专利号:</span>{theData.patentNum}</p>
+                            </div>
+                            <div>
+                                <p className="widthHalf"><span>专利名称:</span>{theData.patentName}</p>
+                                <p className="widthHalf"><span>专利类型:</span>{theData.patentType}</p>
+                            </div>
+                            <div>
+                                <p className="widthHalf"><span>专利状态:</span>{theData.patentState}</p>
+                                <p className="widthHalf"><span>专利领域:</span>{theData.patentField}</p>
+                            </div>
+                            <div>
+                                <span>简介:</span>{theData.patentDes}
+                        </div>
+                            <div>
+                                <span>专利相关材料:</span>{theData.number}
+                        </div>
+                            <div>
+                                <span>专利申请日:</span>{theData.number}
+                        </div>
+                            <div>
+                                <span>专利授权日:</span>{theData.number}
+                        </div>
+                            <div>
+                                <span>每年年费缴费截止日:</span>{theData.number}
+                        </div>
+                            <div>
+                                <p>第一发明人:</p>
+                                <p><span>姓名:</span>{theData.firstInventorName}</p>
+                                <p><span>身份证:</span>{theData.firstInventorIdNumber}</p>
+                            </div>
+                            <div style={theData.secondInventorName === '' ? { display: 'none' } : {}}>
+                                <p>第二发明人:</p>
+                                <p><span>姓名:</span>{theData.secondInventorName}</p>
+                            </div>
+                            <div style={theData.thirdInventorName === '' ? { display: 'none' } : {}}>
+                                <p>第三发明人:</p>
+                                <p><span>姓名:</span>{theData.thirdInventorName}</p>
+                            </div>
+                        </Modal>
+                    </Spin>
+                </div>
+            );
+        } else {
+            return <div></div>
+        }
+    },
+});
+export default PatentDesc;

+ 1 - 2
js/component/account/set/base.jsx

@@ -1,5 +1,5 @@
 import React from 'react';
-import { Input, Button, Select, Form, Radio, Upload, Icon, DatePicker, Spin, message } from 'antd';
+import { Input, Button, Form, Radio, Upload, Icon, DatePicker, Spin, message } from 'antd';
 import moment from 'moment';
 import './base.less';
 import ajax from 'jquery/src/ajax/xhr.js'
@@ -9,7 +9,6 @@ import ChangePw from './changePassword.jsx';
 import ChangeMobile from './changeMobile.jsx';
 
 const FormItem = Form.Item;
-const Option = Select.Option;
 const RadioGroup = Radio.Group;
 const { MonthPicker, RangePicker } = DatePicker
 

+ 16 - 8
js/component/account/set/changeMobile.jsx

@@ -9,7 +9,7 @@ const ChangePw = React.createClass({
         return {
             visible: false,
             getCodeButton: false,
-            checkMobile:false
+            checkMobile: false
         };
     },
     showModal() {
@@ -18,9 +18,9 @@ const ChangePw = React.createClass({
         });
     },
     handleOk() {
-        if ( !this.state.checkMobile ) {
+        if (!this.state.checkMobile) {
             message.warning('请输入正确的手机号码!');
-        } else if ( this.state.checkMobile ) {
+        } else if (this.state.checkMobile) {
             $.ajax({
                 method: "POST",
                 dataType: "json",
@@ -32,10 +32,20 @@ const ChangePw = React.createClass({
                 }
             }).done(function (data) {
                 if (!data.error.length) {
-                    message.success('修改成功!');
                     this.setState({
                         visible: false,
                     });
+                    message.success('修改成功!马上跳转到登录页面,请重新登录!');
+                    setInterval(function () {
+                        $.ajax({
+                            method: "POST",
+                            dataType: "json",
+                            url: globalConfig.context + "/login",
+                        }).done(function (data) {
+                            window.location.href = "../login.html"
+                        });
+                        clearInterval(interval);
+                    }, 3000);
                 } else {
                     message.warning(data.error[0].message);
                 }
@@ -57,11 +67,9 @@ const ChangePw = React.createClass({
         this.state.mcode = e.target.value;
     },
     getMCode() {
-        debugger
-        if (!this.state.checkMobile ) {
+        if (!this.state.checkMobile) {
             message.warning('请输入正确的手机号码!');
         } else if (this.state.checkMobile) {
-            debugger
             $.ajax({
                 method: "get",
                 dataType: "json",
@@ -82,7 +90,7 @@ const ChangePw = React.createClass({
                             clearInterval(interval);
                         }, 60000);
                     } else {
-                        message.warning(data.error[0]);
+                        message.warning(data.error[0].message);
                     }
                 }.bind(this),
             });

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

@@ -18,7 +18,7 @@
                 text-align: right;
                 padding-right: 6px;
                 display: inline-block;
-                width: 30%;
+                width: 24%;
             }
             input {
                 width:70%;

+ 4 - 9
js/component/account/set/company.jsx

@@ -1,10 +1,10 @@
 import React from 'react';
-import { Input, Button, Form, Select, Upload, Icon, Spin, message, InputNumber,Modal } from 'antd';
+import { Input, Button, Form, Select, Upload, Icon, Spin, message, InputNumber, Modal } from 'antd';
 import './person.less';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
 
-import { addressInit ,splitUrl} from '../../tools.js';
+import { addressInit, splitUrl, edulvlArr, zizhiArr, schoolArr } from '../../tools.js';
 
 
 function getBase64(img, callback) {
@@ -87,7 +87,7 @@ class PicturesWall extends React.Component {
         this.props.fileList(fileList);
     }
     componentWillReceiveProps(nextProps) {
-        if ( nextProps.lifePhotoList && this.state.propsbool) {
+        if (nextProps.lifePhotoList && this.state.propsbool) {
             this.state.fileList = nextProps.lifePhotoList;
             this.state.propsbool = false;
         }
@@ -270,7 +270,7 @@ const PersonFrom = Form.create()(React.createClass({
         }
     },
     downloadPic(type) {
-        window.open(globalConfig.context + "/open/downLoadPicture?path="+type)
+        window.open(globalConfig.context + "/open/downLoadPicture?path=" + type)
     },
     companyLogoUrl(e) {
         this.state.companyLogoUrl = e;
@@ -285,11 +285,6 @@ const PersonFrom = Form.create()(React.createClass({
     render() {
         const FormItem = Form.Item;
         const Option = Select.Option;
-
-        const edulvlArr = ["企业", "院校", "研究机构", "政府部门", "非法人团体"];
-        const zizhiArr = ["高新技术型企业", "创新型企业", "双软企业", "小心微利企业", "科技部认定示范企业", "其他"];
-        const schoolArr = ["普通本科院校", "高职专科院校", "独立学院", "中央部署院校", "地方所属院校", "211工程院校", "985工程院校"];
-
         const { getFieldDecorator } = this.props.form;
         const formItemLayout = {
             labelCol: { span: 3 },

+ 1 - 1
js/component/account/set/content.jsx

@@ -16,7 +16,7 @@ const Content = React.createClass({
     getInitialState() {
         return {
             loading: false,
-            leftKey: 'person',
+            leftKey: 'base',
             userType: '0'
         };
     },

+ 2 - 377
js/component/account/set/eduPfsSelect.jsx

@@ -1,381 +1,6 @@
 import React from 'react';
 import { Cascader } from 'antd';
-
-var DataObject = [{
-    value: 1,
-    label: "数理科学",
-    children: [{
-        value: 2,
-        label: "数学"
-    }, {
-        value: 3,
-        label: "力学"
-    }, {
-        value: 4,
-        label: "天文学"
-    }, {
-        value: 5,
-        label: "物理学"
-    }]
-}, {
-    value: 6,
-    label: "化学科学",
-    children: [{
-        value: 7,
-        label: "无机化学"
-    }, {
-        value: 8,
-        label: "有机化学"
-    }, {
-        value: 9,
-        label: "物理化学"
-    }, {
-        value: 10,
-        label: "高分子科学"
-    }, {
-        value: 11,
-        label: "分析化学"
-    }, {
-        value: 12,
-        label: "化学工程及工业化学"
-    }, {
-        value: 13,
-        label: "环境化学"
-    }]
-}, {
-    value: 14,
-    label: "生命科学",
-    children: [{
-        value: 15,
-        label: "微生物学"
-    }, {
-        value: 16,
-        label: "植物学"
-    }, {
-        value: 17,
-        label: "生态学"
-    }, {
-        value: 18,
-        label: "动物学"
-    }, {
-        value: 19,
-        label: "生物物理、生物化学与分子生物学"
-    }, {
-        value: 20,
-        label: "遗传学与生物信息学"
-    }, {
-        value: 21,
-        label: "细胞生物学"
-    }, {
-        value: 22,
-        label: "免疫学"
-    }, {
-        value: 23,
-        label: "神经科学、认知科学与心理学"
-    }, {
-        value: 24,
-        label: "生物力学与组织工程学"
-    }, {
-        value: 25,
-        label: "生理学与整合生物学"
-    }, {
-        value: 26,
-        label: "发育生物学与生殖生物学"
-    }, {
-        value: 27,
-        label: "农学基础与作物学"
-    }, {
-        value: 28,
-        label: "植物保护学"
-    }, {
-        value: 29,
-        label: "园艺学与植物营养学"
-    }, {
-        value: 30,
-        label: "林学"
-    }, {
-        value: 31,
-        label: "畜牧学与草地科学"
-    }, {
-        value: 32,
-        label: "兽医学"
-    }, {
-        value: 33,
-        label: "水产学"
-    }, {
-        value: 34,
-        label: "食品科学"
-    }]
-}, {
-    value: 35,
-    label: "地球科学",
-    children: [{
-        value: 36,
-        label: "地理学"
-    }, {
-        value: 37,
-        label: "地质学"
-    }, {
-        value: 38,
-        label: "地球化学"
-    }, {
-        value: 39,
-        label: "地球物理学和空间物理学"
-    }, {
-        value: 40,
-        label: "大气科学"
-    }, {
-        value: 41,
-        label: "海洋科学"
-    }]
-}, {
-    value: 42,
-    label: "工程材料",
-    children: [{
-        value: 43,
-        label: "金属材料"
-    }, {
-        value: 44,
-        label: "无机非金属材料"
-    }, {
-        value: 45,
-        label: "有机高分子材料"
-    }, {
-        value: 46,
-        label: "冶金与矿业"
-    }, {
-        value: 47,
-        label: "机械工程"
-    }, {
-        value: 48,
-        label: "工程热物理与能源利用"
-    }, {
-        value: 49,
-        label: "电气科学与工程"
-    }, {
-        value: 50,
-        label: "建筑环境与结构工程"
-    }, {
-        value: 51,
-        label: "水利科学与海洋工程"
-    }]
-}, {
-    value: 52,
-    label: "信息科学",
-    children: [{
-        value: 53,
-        label: "电子学与信息系统"
-    }, {
-        value: 54,
-        label: "计算机科学"
-    }, {
-        value: 55,
-        label: "自动化"
-    }, {
-        value: 56,
-        label: "半导体科学与信息器件"
-    }, {
-        value: 57,
-        label: "光学和光电子学"
-    }]
-}, {
-    value: 58,
-    label: "医学科学",
-    children: [{
-        value: 59,
-        label: "呼吸系统"
-    }, {
-        value: 60,
-        label: "循环系统"
-    }, {
-        value: 61,
-        label: "消化系统"
-    }, {
-        value: 62,
-        label: "生殖系统/围生医学/新生儿"
-    }, {
-        value: 63,
-        label: "泌尿系统"
-    }, {
-        value: 64,
-        label: "运动系统"
-    }, {
-        value: 65,
-        label: "内分泌系统/代谢和营养支持"
-    }, {
-        value: 66,
-        label: "血液系统"
-    }, {
-        value: 67,
-        label: "神经系统和精神疾病"
-    }, {
-        value: 68,
-        label: "医学免疫学"
-    }, {
-        value: 69,
-        label: "皮肤及其附属器"
-    }, {
-        value: 70,
-        label: "眼科学"
-    }, {
-        value: 71,
-        label: "耳鼻咽喉头颈科学"
-    }, {
-        value: 72,
-        label: "口腔颅颌面科学"
-    }, {
-        value: 73,
-        label: "急重症医学/创伤/烧伤/整形"
-    }, {
-        value: 74,
-        label: "肿瘤学"
-    }, {
-        value: 75,
-        label: "康复医学"
-    }, {
-        value: 76,
-        label: "影像医学与生物医学工程"
-    }, {
-        value: 77,
-        label: "医学病原微生物与感染"
-    }, {
-        value: 78,
-        label: "检验医学"
-    }, {
-        value: 79,
-        label: "特种医学"
-    }, {
-        value: 80,
-        label: "放射医学"
-    }, {
-        value: 81,
-        label: "法医学"
-    }, {
-        value: 82,
-        label: "地方病学/职业病学"
-    }, {
-        value: 83,
-        label: "老年医学"
-    }, {
-        value: 84,
-        label: "预防医学"
-    }, {
-        value: 85,
-        label: "中医学"
-    }, {
-        value: 86,
-        label: "中药学"
-    }, {
-        value: 87,
-        label: "中西医结合"
-    }, {
-        value: 88,
-        label: "药物学"
-    }, {
-        value: 89,
-        label: "药理学"
-    }]
-}, {
-    value: 90,
-    label: "人文学科",
-    children: [{
-        value: 91,
-        label: "哲学 "
-    }, {
-        value: 92,
-        label: "中国语言文学 "
-    }, {
-        value: 93,
-        label: "外国语言文学 "
-    }, {
-        value: 94,
-        label: "新闻传播学 "
-    }, {
-        value: 95,
-        label: "艺术学 "
-    }, {
-        value: 96,
-        label: "历史学 "
-    }]
-}, {
-    value: 97,
-    label: "社会科学 ",
-    children: [{
-        value: 98,
-        label: "经济学 "
-    }, {
-        value: 99,
-        label: "法学 "
-    }, {
-        value: 100,
-        label: "政治学 "
-    }, {
-        value: 101,
-        label: "社会学 "
-    }, {
-        value: 102,
-        label: "民族学 "
-    }, {
-        value: 103,
-        label: "马克思主义理论 "
-    }, {
-        value: 104,
-        label: "教育学 "
-    }, {
-        value: 105,
-        label: "心理学( 可授教育学、 理学学位) "
-    }, {
-        value: 106,
-        label: "体育学 "
-    }]
-}, {
-    value: 107,
-    label: "军事科学 ",
-    children: [{
-        value: 108,
-        label: "军事思想及军事历史 "
-    }, {
-        value: 109,
-        label: "战略学 "
-    }, {
-        value: 110,
-        label: "战役学 "
-    }, {
-        value: 111,
-        label: "战术学 "
-    }, {
-        value: 112,
-        label: "军队指挥学 "
-    }, {
-        value: 113,
-        label: "军制学 "
-    }, {
-        value: 114,
-        label: "军队政治工作学 "
-    }, {
-        value: 115,
-        label: "军事后勤学与军事装备学 "
-    }]
-}, {
-    value: 116,
-    label: "管理科学 ",
-    children: [{
-        value: 117,
-        label: "管理科学与工程(可授管理学、 工学学位)"
-    }, {
-        value: 118,
-        label: "工商管理 "
-    }, {
-        value: 119,
-        label: "农林经济管理 "
-    }, {
-        value: 120,
-        label: "公共管理 "
-    }, {
-        value: 121,
-        label: "图书馆报与档案管理 "
-    }]
-}];
+import {eduPfsList} from '../../dataDic.js';
 
 const eduPfsSelect = React.createClass({
     getInitialState() {
@@ -398,7 +23,7 @@ const eduPfsSelect = React.createClass({
     },
     render() {
         return (
-            <Cascader value={this.state.value} options={DataObject} onChange={this.onChange} />
+            <Cascader value={this.state.value} options={eduPfsList} onChange={this.onChange} />
         )
     }
 });

File diff suppressed because it is too large
+ 1 - 5
js/component/account/set/pfs.jsx


File diff suppressed because it is too large
+ 2 - 1320
js/component/account/set/techSelect.jsx


+ 5 - 5
js/component/account/topTab.jsx

@@ -37,11 +37,11 @@ const TopTab = React.createClass({
                 </div>
                 <div className="acc-top-tab">
                     <Row>
-                        <Col className={this.props.active === 'set' ? 'active' : ''} span={3}><a href="./set.html">用户管理</a></Col>
-                        <Col className={this.props.active === 'services' ? 'active' : ''} span={3}><a href="./services.html">科技服务管理</a></Col>
-                        <Col className={this.props.active === 'achievement' ? 'active' : ''} span={3}><a href="./set.html">科技成果管理</a></Col>
-                        <Col className={this.props.active === 'demand' ? 'active' : ''} span={3}><a href="./set.html">科技需求管理</a></Col>
-                        <Col className={this.props.active === 'idea' ? 'active' : ''} span={3}><a href="./set.html">科技思想管理</a></Col>
+                        <Col className={this.props.active === 'set' ? 'active' : ''} span={3}><a href="./set.html">账号设置</a></Col>
+                        <Col className={this.props.active === 'services' ? 'active' : ''} span={3}><a href="./services.html">科技服务</a></Col>
+                        <Col className={this.props.active === 'achievement' ? 'active' : ''} span={3}><a href="./set.html">科技成果</a></Col>
+                        <Col className={this.props.active === 'demand' ? 'active' : ''} span={3}><a href="./set.html">科技需求</a></Col>
+                        <Col className={this.props.active === 'idea' ? 'active' : ''} span={3}><a href="./set.html">科技思想</a></Col>
                     </Row>
                 </div>
             </div >

File diff suppressed because it is too large
+ 2891 - 0
js/component/dataDic.js


+ 164 - 0
js/component/login/forgetPw.jsx

@@ -0,0 +1,164 @@
+import React from 'react';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+import { Modal, Button, Icon, Input, message } from 'antd';
+import '../account/set/changeModal.less';
+
+const ChangePw = React.createClass({
+    getInitialState() {
+        return {
+            forgetPw: false,
+            setPw: false,
+            getCodeButton: false,
+            checkMobile: false
+        };
+    },
+    showModal() {
+        this.setState({
+            forgetPw: true,
+        });
+    },
+    forgetPwOk() {
+        if (!this.state.checkMobile) {
+            message.warning('请输入正确的手机号码!');
+        } else if (this.state.checkMobile) {
+            $.ajax({
+                method: "POST",
+                dataType: "json",
+                crossDomain: false,
+                url: globalConfig.context + "/api/user/checkMCode",
+                data: {
+                    "mobile": this.state.mobile,
+                    "mobileCode": this.state.mcode
+                }
+            }).done(function (data) {
+                if (!data.error.length) {
+                    this.setState({
+                        forgetPw: false,
+                        setPw: true,
+                    });
+                } else {
+                    message.warning(data.error[0].message);
+                }
+            }.bind(this));
+        };
+    },
+    setPwOk() {
+        if (this.state.newPw.length < 6 || this.state.newPw.length > 20) {
+            message.warning('请使用长度为6-20位的密码!');
+        } else if (this.state.confirmPw !== this.state.newPw) {
+            message.warning('两次密码输入不相同!');
+        } else if (this.state.confirmPw === this.state.newPw) {
+            $.ajax({
+                method: "POST",
+                dataType: "json",
+                crossDomain: false,
+                url: globalConfig.context + "/api/user/pwd",
+                data: {
+                    "mobile": this.state.mobile,
+                    "type": this.props.theType,
+                    "newPwd": this.state.newPw,
+                    "resetCode": this.state.uuid
+                }
+            }).done(function (data) {
+                if (!data.error.length) {
+                    message.success('修改成功!');
+                    this.handleCancel;
+                } else {
+                    message.warning(data.error[0].message);
+                }
+            }.bind(this));
+        };
+    },
+    handleCancel(e) {
+        this.setState({
+            forgetPw: false,
+            setPw: false,
+        });
+    },
+    newMobileChange(e) {
+        this.state.mobile = e.target.value;
+        if (/^1[34578]\d{9}$/.test(this.state.mobile)) {
+            this.state.checkMobile = true
+        }
+    },
+    mcodeChange(e) {
+        this.state.mcode = e.target.value;
+    },
+    newPwChange(e) {
+        this.state.newPw = e.target.value;
+    },
+    confirmPwChange(e) {
+        this.state.confirmPw = e.target.value;
+    },
+    getMCode() {
+        let _me = this;
+        if (!this.state.checkMobile) {
+            message.warning('请输入正确的手机号码!');
+        } else if (this.state.checkMobile) {
+            $.ajax({
+                method: "get",
+                dataType: "json",
+                url: globalConfig.context + "/open/getMCode",
+                data: {
+                    "mobile": this.state.mobile,
+                    "type": this.props.theType,
+                    "sign": true
+                },
+                success: function (data) {
+                    if (data.error.length == 0) {
+                        message.success('验证码发送成功!');
+                        this.state.uuid = data.data;
+                        this.setState({
+                            getCodeButton: true
+                        });
+                        let interval = setInterval(function () {
+                            _me.setState({
+                                getCodeButton: false
+                            });
+                            clearInterval(interval);
+                        }, 60000);
+                    } else {
+                        message.warning(data.error[0].message);
+                    }
+                }.bind(this),
+            });
+        }
+    },
+    render() {
+        return (
+            <div style={{ 'float': 'right', 'marginTop': '0' }}>
+                <a className="login-form-forgot" onClick={this.showModal}>忘记密码</a>
+                <Modal key='1' className="change-modal" title="忘记密码" visible={this.state.forgetPw}
+                    onOk={this.forgetPwOk} onCancel={this.handleCancel}
+                    width={360}
+                    footer={[
+                        <Button key="submit" type="primary" size="large" loading={this.state.loading} onClick={this.forgetPwOk}>确认</Button>,
+                        <Button key="back" type="ghost" size="large" onClick={this.handleCancel}>取消</Button>
+                    ]}
+                    >
+                    <p><span>手机号码:</span><Input onChange={this.newMobileChange} /></p>
+                    <p>
+                        <span>验证码:</span>
+                        <Input className="mixwidth" onChange={this.mcodeChange} />
+                        <Button key="getCodeBtn" onClick={this.getMCode} disabled={this.state.getCodeButton}>获取验证码</Button>
+                    </p>
+                </Modal>
+                <Modal key='2' className="change-modal" title="设置新密码" visible={this.state.setPw}
+                    onOk={this.setPwOk} onCancel={this.handleCancel}
+                    width={360}
+                    footer={[
+                        <Button key="submit" type="primary" size="large" loading={this.state.loading} onClick={this.setPwOk}>确认</Button>,
+                        <Button key="back" type="ghost" size="large" onClick={this.handleCancel}>取消</Button>
+                    ]}
+                    >
+                    <p className="modal-intro"><Icon type="info-circle" />密码长度为6-20个字符,区分大小写</p>
+                    <p><span>新密码:</span><Input type="password" onChange={this.newPwChange} /></p>
+                    <p><span>确认密码:</span><Input type="password" onChange={this.confirmPwChange} /></p>
+                </Modal>
+            </div>
+        );
+    },
+});
+
+export default ChangePw;

+ 4 - 1
js/component/login/loginForm.jsx

@@ -3,6 +3,9 @@ import { Form, Icon, Input, Button, Checkbox, Spin,message } from 'antd';
 import './login.less';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
+
+import ForgetPw from './forgetPw.jsx';
+
 const FormItem = Form.Item;
 
 const LoginForm = Form.create()(React.createClass({
@@ -63,7 +66,7 @@ const LoginForm = Form.create()(React.createClass({
                         })(
                             <Checkbox>记住我</Checkbox>
                             )}
-                        <a className="login-form-forgot">忘记密码</a>
+                        <ForgetPw theType={this.props.loginProp}/>
                         <Button type="primary" htmlType="submit" className="login-form-button">
                             登录
                     </Button>

+ 15 - 0
js/component/manageCenter/bottom.jsx

@@ -0,0 +1,15 @@
+import React from 'react';
+import './bottom.less';
+
+const Bottom = React.createClass({
+    render() {
+        return (
+            <div className="account-bottom">
+                <p>公司地址   联系方式公司地址  公司地址   联系方式 公司地址 公司地址   联系方式 公司地址</p>
+                <p>公司地址   联系方式公司地址 公司地址   联系方式公司地址</p>
+            </div>
+        )
+    }
+});
+
+export default Bottom;

+ 11 - 0
js/component/manageCenter/bottom.less

@@ -0,0 +1,11 @@
+    .account-bottom {
+        width: 100%;
+        color: #d5e4f7;
+        background: #212831;
+        position: absolute;
+        bottom: 0;
+        left: 0;
+        z-index: 1;
+        text-align: center;
+        padding: 6px 0;
+    }

+ 20 - 0
js/component/manageCenter/content.less

@@ -0,0 +1,20 @@
+.acc-content {
+    height: 100%;
+    width: 100%;
+    padding-top: 84px;
+    padding-bottom: 40px;
+    background: #f0f0f0;
+    .content-right {
+        width: 84%;
+        height: 100%;
+        float:left;
+        overflow-y:auto;
+        padding: 20px;
+        .ant-spin-nested-loading {
+            height: 100%;
+            .ant-spin-container{
+                height: 100%;
+            }
+        }
+    }
+}

+ 25 - 0
js/component/manageCenter/leftTab.less

@@ -0,0 +1,25 @@
+.acc-content {
+    .account-left {
+        width: 16%;
+        height: 100%;
+        padding-top: 40px;
+        float: left;
+        border-right: none;
+        background: #e8f2fc;
+        .ant-menu-item {
+            padding: 0;
+            margin: 0;
+            border-right: none;
+            text-align: center;
+            font-size: 16px;
+            color: #4466bf;
+            background: #d5e4f7;
+            border-top: 1px solid #f2f8fd;
+            border-bottom: 1px solid #c0d2e4;
+        }
+        .ant-menu-item-selected {
+            background: #fff;
+            border-left: 3px solid #58a3ff;
+        }
+    }
+}

+ 57 - 0
js/component/manageCenter/servicesManage/leftTab.jsx

@@ -0,0 +1,57 @@
+import React from 'react';
+import { Menu, Icon } from 'antd';
+import '../leftTab.less';
+const SubMenu = Menu.SubMenu;
+const MenuItemGroup = Menu.ItemGroup;
+
+
+const LeftTab = React.createClass({
+    getInitialState() {
+        return {
+            current: 'comprehensive',
+        };
+    },
+    handleClick(e) {
+        this.props.handlekey(e.key);
+        this.setState({
+            current: e.key,
+        });
+    },
+    render() {
+        return (
+            <Menu onClick={this.handleClick}
+                selectedKeys={[this.state.current]}
+                defaultOpenKeys={['sub1']}
+                mode="vertical"
+                className="account-left"
+                mode="inline"
+                >
+                <SubMenu key="sub1" title={<span>专利申请管理</span>}>
+                    <Menu.Item key="comprehensive">
+                        专利综合管理
+                    </Menu.Item>
+                    <Menu.Item key="payment">
+                        待缴费专利管理
+                    </Menu.Item>
+                    <Menu.Item key="correction">
+                        补正审查通知管理
+                    </Menu.Item>
+                    <Menu.Item key="express">
+                        专利纸件收发登记
+                    </Menu.Item>
+                    <Menu.Item key="applyFee">
+                        专利申请费用管理
+                    </Menu.Item>
+                </SubMenu>
+                <SubMenu key="sub2" title={<span>软著申请管理</span>}>
+                </SubMenu>
+                <SubMenu key="sub3" title={<span>高企认定管理</span>}>
+                </SubMenu>
+                <SubMenu key="sub4" title={<span>科技项目申报管理</span>}>
+                </SubMenu>
+            </Menu>
+        );
+    }
+});
+
+export default LeftTab;

+ 20 - 0
js/component/manageCenter/servicesManage/patent/applyFee.jsx

@@ -0,0 +1,20 @@
+import React from 'react';
+
+const Component = React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            leftKey: 'base',
+            userType: '0'
+        };
+    },
+    render() {
+        return (
+            <div>
+                专利申请费用管理
+            </div>
+        )
+    }
+});
+
+export default Component;

+ 20 - 0
js/component/manageCenter/servicesManage/patent/comprehensive.jsx

@@ -0,0 +1,20 @@
+import React from 'react';
+
+const Component = React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            leftKey: 'base',
+            userType: '0'
+        };
+    },
+    render() {
+        return (
+            <div>
+                专利综合管理
+            </div>
+        )
+    }
+});
+
+export default Component;

+ 51 - 0
js/component/manageCenter/servicesManage/patent/content.jsx

@@ -0,0 +1,51 @@
+import React, { Component } from 'react';
+import '../../content.less';
+import LeftTab from '../leftTab.jsx';
+
+import Comprehensive from './comprehensive.jsx';
+import Payment from './payment.jsx';
+import Correction from './correction.jsx';
+import Express from './express.jsx';
+import ApplyFee from './applyFee.jsx';
+
+
+class Content extends Component {
+    constructor() {
+        super();
+        this.state = {
+            loading: false,
+            leftKey: <Comprehensive />,
+        };
+    }
+
+    handlekey(key) {
+        this.setState({
+            leftKey: key,
+        });
+    }
+    render() {
+        return (
+            <div className="acc-content">
+                <LeftTab handlekey={this.handlekey} />
+                <div className="content-right">
+                    {(() => {
+                        switch (this.state.leftKey) {
+                            case 'comprehensive':
+                                return <Comprehensive />;
+                            case 'payment':
+                                return <Payment />;
+                            case 'correction':
+                                return <Correction />;
+                            case 'express':
+                                return <Express />;
+                            case 'applyFee':
+                                return <ApplyFee />;
+                        };
+                    })()}
+                </div>
+            </div>
+        )
+    }
+}
+
+export default Content;

+ 20 - 0
js/component/manageCenter/servicesManage/patent/correction.jsx

@@ -0,0 +1,20 @@
+import React from 'react';
+
+const Component = React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            leftKey: 'base',
+            userType: '0'
+        };
+    },
+    render() {
+        return (
+            <div>
+                补正审查通知管理
+            </div>
+        )
+    }
+});
+
+export default Component;

+ 20 - 0
js/component/manageCenter/servicesManage/patent/express.jsx

@@ -0,0 +1,20 @@
+import React from 'react';
+
+const Component = React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            leftKey: 'base',
+            userType: '0'
+        };
+    },
+    render() {
+        return (
+            <div>
+                专利纸件收发登记
+            </div>
+        )
+    }
+});
+
+export default Component;

+ 20 - 0
js/component/manageCenter/servicesManage/patent/payment.jsx

@@ -0,0 +1,20 @@
+import React from 'react';
+
+const Component = React.createClass({
+    getInitialState() {
+        return {
+            loading: false,
+            leftKey: 'base',
+            userType: '0'
+        };
+    },
+    render() {
+        return (
+            <div>
+                待缴费专利管理
+            </div>
+        )
+    }
+});
+
+export default Component;

+ 52 - 0
js/component/manageCenter/topTab.jsx

@@ -0,0 +1,52 @@
+import React from 'react';
+import { Row, Col } from 'antd';
+import './topTab.less';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+
+
+import logo from '../../../image/acc-logo.png';
+
+const TopTab = React.createClass({
+    getInitialState() {
+        return {
+            username: 'username',
+        };
+    },
+    logOut() {
+        $.ajax({
+            method: "POST",
+            dataType: "json",
+            url: globalConfig.context + "/login",
+        }).done(function (data) {
+                window.location.href = "./login.html"
+        });
+    },
+    render() {
+        return (
+            <div className="account-top" >
+                <div className="acc-top-user">
+                    <span className="acc-top-user-name">欢迎您, { userData.nickname || userData.number || this.state.username} <a onClick={this.logOut}>[ 退出 ]</a></span>
+                    <span className="acc-top-user-toindex"><a href="./index.html">返回首页</a></span>
+                </div>
+                <div className="acc-index">
+                    <div className="acc-index-imgbox">
+                        <img src={logo} alt="" />
+                    </div>
+                    <span><a href="./index.html">管理中心首页</a></span>
+                </div>
+                <div className="acc-top-tab">
+                    <Row>
+                        <Col className={this.props.active === 'set' ? 'active' : ''} span={3}><a href="./userManage.html">用户管理</a></Col>
+                        <Col className={this.props.active === 'services' ? 'active' : ''} span={3}><a href="./servicesManage/patent.html">科技服务管理</a></Col>
+                        <Col className={this.props.active === 'achievement' ? 'active' : ''} span={3}><a href="">科技成果管理</a></Col>
+                        <Col className={this.props.active === 'demand' ? 'active' : ''} span={3}><a href="">科技需求管理</a></Col>
+                        <Col className={this.props.active === 'idea' ? 'active' : ''} span={3}><a href="">科技思想管理</a></Col>
+                    </Row>
+                </div>
+            </div >
+        )
+    }
+});
+
+export default TopTab;

+ 88 - 0
js/component/manageCenter/topTab.less

@@ -0,0 +1,88 @@
+    .account-top {
+        width: 100%;
+        height: 84px;
+        border-bottom: 1px solid #eee;
+        background: #fff;
+        position: absolute;
+        top: 0;
+        left: 0;
+        z-index: 1;
+        .acc-top-user {
+            height: 34px;
+            line-height: 34px;
+            background: #f8f8f8;
+            .acc-top-user-name {
+                margin-left: 10px;
+            }
+            .acc-top-user-toindex {
+                float: right;
+                margin-right: 10px;
+            }
+        }
+        .acc-index {
+            height: 90px;
+            width: 16%;
+            position: absolute;
+            top: 34px;
+            left: 0;
+            color: #fff;
+            background: #4665bf;
+            padding:27px 10px;
+            .acc-index-imgbox{
+                width: 36px;
+                height: 36px;
+                padding-top: 36px;
+                position: relative;
+                overflow: hidden;
+                float: left;
+                img {
+                    position: absolute;
+                    top: 0;
+                    left: 0;
+                    height: 36px;
+                    width: auto;
+                }
+            }
+            span {
+                margin-left: 10px;
+                font-size: 20px;
+                line-height: 36px;
+                a {
+                    color:#fff;
+                }
+            }
+        }
+        .acc-top-tab {
+            margin-left: 16%;
+            height: 50px;
+            line-height: 50px;
+            font-size: 16px;
+            text-align: center;
+            background: #4665bf;
+            color: #fff;
+            border-left: 1px solid #344c8f;
+            .ant-row {
+                padding-left: 20px;
+                border-left: 1px solid #6b84cc;
+                div {
+                    margin:0 10px;
+                    a {
+                        color:#fff;
+                    }
+                }
+                .active {
+                    font-size: 18px;
+                    &:after {
+                        content: '';
+                        position: absolute;
+                        left: 0;
+                        bottom: 0;
+                        display: block;
+                        width: 100%;
+                        height: 3px;
+                        background: #58a3ff;
+                    }
+                }
+            }
+        }
+    }

+ 51 - 0
js/component/manageCenter/userManage/content.jsx

@@ -0,0 +1,51 @@
+import React, { Component } from 'react';
+import '../../content.less';
+import LeftTab from '../leftTab.jsx';
+
+import Comprehensive from './comprehensive.jsx';
+import Payment from './payment.jsx';
+import Correction from './correction.jsx';
+import Express from './express.jsx';
+import ApplyFee from './applyFee.jsx';
+
+
+class Content extends Component {
+    constructor() {
+        super();
+        this.state = {
+            loading: false,
+            leftKey: <Comprehensive />,
+        };
+    }
+
+    handlekey(key) {
+        this.setState({
+            leftKey: key,
+        });
+    }
+    render() {
+        return (
+            <div className="acc-content">
+                <LeftTab handlekey={this.handlekey} />
+                <div className="content-right">
+                    {(() => {
+                        switch (this.state.leftKey) {
+                            case 'comprehensive':
+                                return <Comprehensive />;
+                            case 'payment':
+                                return <Payment />;
+                            case 'correction':
+                                return <Correction />;
+                            case 'express':
+                                return <Express />;
+                            case 'applyFee':
+                                return <ApplyFee />;
+                        };
+                    })()}
+                </div>
+            </div>
+        )
+    }
+}
+
+export default Content;

+ 57 - 0
js/component/manageCenter/userManage/leftTab.jsx

@@ -0,0 +1,57 @@
+import React from 'react';
+import { Menu, Icon } from 'antd';
+import '../leftTab.less';
+const SubMenu = Menu.SubMenu;
+const MenuItemGroup = Menu.ItemGroup;
+
+
+const LeftTab = React.createClass({
+    getInitialState() {
+        return {
+            current: 'comprehensive',
+        };
+    },
+    handleClick(e) {
+        this.props.handlekey(e.key);
+        this.setState({
+            current: e.key,
+        });
+    },
+    render() {
+        return (
+            <Menu onClick={this.handleClick}
+                selectedKeys={[this.state.current]}
+                defaultOpenKeys={['sub1']}
+                mode="vertical"
+                className="account-left"
+                mode="inline"
+                >
+                <SubMenu key="sub1" title={<span>专利申请管理</span>}>
+                    <Menu.Item key="comprehensive">
+                        专利综合管理
+                    </Menu.Item>
+                    <Menu.Item key="payment">
+                        待缴费专利管理
+                    </Menu.Item>
+                    <Menu.Item key="correction">
+                        补正审查通知管理
+                    </Menu.Item>
+                    <Menu.Item key="express">
+                        专利纸件收发登记
+                    </Menu.Item>
+                    <Menu.Item key="applyFee">
+                        专利申请费用管理
+                    </Menu.Item>
+                </SubMenu>
+                <SubMenu key="sub2" title={<span>软著申请管理</span>}>
+                </SubMenu>
+                <SubMenu key="sub3" title={<span>高企认定管理</span>}>
+                </SubMenu>
+                <SubMenu key="sub4" title={<span>科技项目申报管理</span>}>
+                </SubMenu>
+            </Menu>
+        );
+    }
+});
+
+export default LeftTab;

+ 1 - 1
js/component/sign/account.jsx

@@ -104,7 +104,7 @@ const LoginContent = Form.create()(React.createClass({
                         clearInterval(interval);
                     }, 60000);
                 } else {
-                    message.warning(data.error[0]);
+                    message.warning(data.error[0].message);
                 }
             }.bind(this),
         }).always(function () {

+ 1 - 1
js/component/sign/groupAccount.jsx

@@ -76,7 +76,7 @@ const Group = Form.create()(React.createClass({
                         clearInterval(interval);
                     }, 60000);
                 } else {
-                    message.warning(data.error[0]);
+                    message.warning(data.error[0].message);
                 }
             }.bind(this),
         }).always(function () {

File diff suppressed because it is too large
+ 1 - 1139
js/component/tools.js


+ 1 - 1
js/user/index.js

@@ -3,7 +3,7 @@ import ReactDOM from 'react-dom';
 
 ReactDOM.render(
     <div>
-        <span>this is index</span>
+        <span>this is user-index</span>
     </div>,
     document.getElementById('root')
 )

+ 20 - 3
template/template.html

@@ -1,15 +1,32 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
     <meta charset="utf-8">
-    <title><%= htmlWebpackPlugin.options.title %></title>
+    <title>
+        <%= htmlWebpackPlugin.options.title %>
+    </title>
     <script>
+        window.userData = {
+            mobile: "13600000000",
+            nickname: "Lina",
+            number: "80000",
+            type: "0",
+            email: "test@aft.com",
+            createTime: "123456789000",
+            lvl: "0"
+        }
         window.globalConfig = {
-	  		context: "//aft.hnzhiming.com:8080/aft"
-	  	}
+            context: "//aft.hnzhiming.com:8080/aft",
+            staticHost: "//aft.hnzhiming.com",
+            uploadPath: "/data/wwwroot/aft/upload",
+            uploadPrivatePath: "/data/upload"
+        }
     </script>
 </head>
+
 <body>
     <div id="root"></div>
 </body>
+
 </html>

+ 75 - 51
webpack.config.js

@@ -2,6 +2,8 @@ const webpack = require('webpack');
 const path = require('path');
 const ExtractTextPlugin = require("extract-text-webpack-plugin");
 const HtmlWebpackPlugin = require('html-webpack-plugin');
+const WebpackDevServer = require('webpack-dev-server');
+
 
 let theme = {
     '@primary-color': '#58a3ff',
@@ -10,44 +12,44 @@ let theme = {
 
 module.exports = {
     entry: {
-        'user/index': ['webpack-dev-server/client?http://0.0.0.0:80', // WebpackDevServer host and port
+        'user/index': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
             'webpack/hot/only-dev-server',
             './js/user/index.js'
         ],
-        'user/login': ['webpack-dev-server/client?http://0.0.0.0:80', // WebpackDevServer host and port
-                'webpack/hot/only-dev-server',
-                './js/user/login.js'
+        'user/login': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
+            'webpack/hot/only-dev-server',
+            './js/user/login.js'
         ],
-        'user/signIn': ['webpack-dev-server/client?http://0.0.0.0:80', // WebpackDevServer host and port
-                'webpack/hot/only-dev-server',
-                './js/user/signIn.js'
+        'user/signIn': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
+            'webpack/hot/only-dev-server',
+            './js/user/signIn.js'
         ],
         //user-account
-            'user/account/index': ['webpack-dev-server/client?http://0.0.0.0:80', // WebpackDevServer host and port
-                    'webpack/hot/only-dev-server',
-                    './js/user/account/index.js'
-            ],
-            'user/account/set': ['webpack-dev-server/client?http://0.0.0.0:80', // WebpackDevServer host and port
-                    'webpack/hot/only-dev-server',
-                    './js/user/account/set.js'
-            ],
-            'user/account/services': ['webpack-dev-server/client?http://0.0.0.0:80', // WebpackDevServer host and port
-                    'webpack/hot/only-dev-server',
-                    './js/user/account/services.js'
-            ],
+        'user/account/index': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
+            'webpack/hot/only-dev-server',
+            './js/user/account/index.js'
+        ],
+        'user/account/set': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
+            'webpack/hot/only-dev-server',
+            './js/user/account/set.js'
+        ],
+        'user/account/services': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
+            'webpack/hot/only-dev-server',
+            './js/user/account/services.js'
+        ],
 
 
         //admin
-        'admin/index': ['webpack-dev-server/client?http://0.0.0.0:80', // WebpackDevServer host and port
-                'webpack/hot/only-dev-server',
-                './js/admin/index.js'
+        'admin/index': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
+            'webpack/hot/only-dev-server',
+            './js/admin/index.js'
         ]
-            //vendors: ['jquery','antd']
-            //path.resolve(__dirname, './js/index.js'),
+        //vendors: ['jquery','antd']
+        //path.resolve(__dirname, './js/index.js'),
     },
     output: {
         path: path.resolve(__dirname, './build'),
-        filename: '[name].js',
+        filename: '[name].js'
     },
     module: {
         loaders: [{
@@ -65,8 +67,8 @@ module.exports = {
                 //loaders: ['babel-loader?presets[]=es2015,presets[]=react'] 
             },
             //{
-                //test: /\.module\.less$/,
-                //loader: 'style!css!less?{"modifyVars":{"@primary-color": "#1DA57A"}}'
+            //test: /\.module\.less$/,
+            //loader: 'style!css!less?{"modifyVars":{"@primary-color": "#1DA57A"}}'
             //}, 
             {
                 test: /\.css$/,
@@ -94,47 +96,69 @@ module.exports = {
             title: '用户首页',
             filename: 'user/index.html',
             template: './template/template.html',
-            chunks:['user/index','vendors']
+            chunks: ['user/index', 'vendors']
         }),
         new HtmlWebpackPlugin({
             title: '用户登录',
             filename: 'user/login.html',
             template: './template/template.html',
-            chunks:['user/login','vendors']
+            chunks: ['user/login', 'vendors']
         }),
         new HtmlWebpackPlugin({
             title: '用户注册',
             filename: 'user/signIn.html',
             template: './template/template.html',
-            chunks:['user/signIn','vendors']
+            chunks: ['user/signIn', 'vendors']
         }),
         //user-account
-            new HtmlWebpackPlugin({
-                title: '用户中心-首页',
-                filename: 'user/account/index.html',
-                template: './template/template.html',
-                chunks:['user/account/index','vendors']
-            }),
-            new HtmlWebpackPlugin({
-                title: '用户中心-设置',
-                filename: 'user/account/set.html',
-                template: './template/template.html',
-                chunks:['user/account/set','vendors']
-            }),
-            new HtmlWebpackPlugin({
-                title: '用户中心-科技服务',
-                filename: 'user/account/services.html',
-                template: './template/template.html',
-                chunks:['user/account/services','vendors']
-            }),
+        new HtmlWebpackPlugin({
+            title: '用户中心-首页',
+            filename: 'user/account/index.html',
+            template: './template/template.html',
+            chunks: ['user/account/index', 'vendors']
+        }),
+        new HtmlWebpackPlugin({
+            title: '用户中心-设置',
+            filename: 'user/account/set.html',
+            template: './template/template.html',
+            chunks: ['user/account/set', 'vendors']
+        }),
+        new HtmlWebpackPlugin({
+            title: '用户中心-科技服务',
+            filename: 'user/account/services.html',
+            template: './template/template.html',
+            chunks: ['user/account/services', 'vendors']
+        }),
+
 
         //admin
         new HtmlWebpackPlugin({
-            title: 'admin_index',
+            title: '管理员-首页',
             filename: 'admin/index.html',
             template: './template/template.html',
-            chunks:['admin/index','vendors']
-        })
+            chunks: ['admin/index', 'vendors']
+        }),
+        new HtmlWebpackPlugin({
+            title: '管理员-登录',
+            filename: 'admin/login.html',
+            template: './template/template.html',
+            chunks: ['admin/login', 'vendors']
+        }),
+        new HtmlWebpackPlugin({
+            title: '管理员-用户管理',
+            filename: 'admin/userManage.html',
+            template: './template/template.html',
+            chunks: ['admin/userManage', 'vendors']
+        }),
+        //admin-servicesManage
+        new HtmlWebpackPlugin({
+            title: '管理员-科技服务管理-专利',
+            filename: 'admin/servicesManage/patent.html',
+            template: './template/template.html',
+            chunks: ['admin/servicesManage/patent', 'vendors']
+        }),
+
+
 
         //这个使用uglifyJs压缩你的js代码
         //new webpack.optimize.UglifyJsPlugin({minimize: true}),

+ 55 - 31
webpack.config.pro.js

@@ -14,13 +14,18 @@ module.exports = {
         'user/index': './js/user/index.js',
         'user/login': './js/user/login.js',
         'user/signIn': './js/user/signIn.js',
-        //usre-account
-            'user/account/index': './js/user/account/index.js',
-            'user/account/set': './js/user/account/set.js',
-            'user/account/services': './js/user/account/services.js',
+        //user-account
+        'user/account/index': './js/user/account/index.js',
+        'user/account/set': './js/user/account/set.js',
+        'user/account/services': './js/user/account/services.js',
 
         //admin
-        'admin/index':'./js/admin/index.js',
+        'admin/index': './js/admin/index.js',
+        'admin/login': './js/admin/login.js',
+        'admin/userManage': './js/admin/userManage.js',
+        //admin-servicesManage
+        'admin/servicesManage/patent': './js/admin/servicesManage/patent.js',
+
         vendors: ['jquery']
     },
     output: {
@@ -64,8 +69,8 @@ module.exports = {
             }
         }),
         new webpack.DefinePlugin({
-            "process.env": { 
-                NODE_ENV: JSON.stringify("production") 
+            "process.env": {
+                NODE_ENV: JSON.stringify("production")
             }
         }),
         new ExtractTextPlugin('[name].css', {
@@ -79,47 +84,66 @@ module.exports = {
             title: '用户首页',
             filename: 'user/index.html',
             template: './template/template.html',
-            chunks:['user/index','vendors']
+            chunks: ['user/index', 'vendors']
         }),
         new HtmlWebpackPlugin({
             title: '用户登录',
             filename: 'user/login.html',
             template: './template/template.html',
-            chunks:['user/login','vendors']
+            chunks: ['user/login', 'vendors']
         }),
         new HtmlWebpackPlugin({
             title: '用户注册',
             filename: 'user/signIn.html',
             template: './template/template.html',
-            chunks:['user/signIn','vendors']
+            chunks: ['user/signIn', 'vendors']
         }),
         //user-account
-            new HtmlWebpackPlugin({
-                title: '用户中心-首页',
-                filename: 'user/account/index.html',
-                template: './template/template.html',
-                chunks:['user/account/index','vendors']
-            }),
-            new HtmlWebpackPlugin({
-                title: '用户中心-设置',
-                filename: 'user/account/set.html',
-                template: './template/template.html',
-                chunks:['user/account/set','vendors']
-            }),
-            new HtmlWebpackPlugin({
-                title: '用户中心-科技服务',
-                filename: 'user/account/services.html',
-                template: './template/template.html',
-                chunks:['user/account/services','vendors']
-            }),
-
+        new HtmlWebpackPlugin({
+            title: '用户中心-首页',
+            filename: 'user/account/index.html',
+            template: './template/template.html',
+            chunks: ['user/account/index', 'vendors']
+        }),
+        new HtmlWebpackPlugin({
+            title: '用户中心-设置',
+            filename: 'user/account/set.html',
+            template: './template/template.html',
+            chunks: ['user/account/set', 'vendors']
+        }),
+        //user-account-services-patent
+        new HtmlWebpackPlugin({
+            title: '用户中心-科技服务',
+            filename: 'user/account/services.html',
+            template: './template/template.html',
+            chunks: ['user/account/services', 'vendors']
+        }),
 
         //admin
         new HtmlWebpackPlugin({
-            title: 'admin_index',
+            title: '管理员-首页',
             filename: 'admin/index.html',
             template: './template/template.html',
-            chunks:['admin/index','vendors']
+            chunks: ['admin/index', 'vendors']
+        }),
+        new HtmlWebpackPlugin({
+            title: '管理员-登录',
+            filename: 'admin/login.html',
+            template: './template/template.html',
+            chunks: ['admin/login', 'vendors']
+        }),
+        new HtmlWebpackPlugin({
+            title: '管理员-用户管理',
+            filename: 'admin/userManage.html',
+            template: './template/template.html',
+            chunks: ['admin/userManage', 'vendors']
+        }),
+        //admin-servicesManage
+        new HtmlWebpackPlugin({
+            title: '管理员-科技服务管理-专利',
+            filename: 'admin/servicesManage/patent.html',
+            template: './template/template.html',
+            chunks: ['admin/servicesManage/patent', 'vendors']
         })
     ]
 };