Просмотр исходного кода

Accept Merge Request #20 v1.0.14 merge : (master -> test)

Merge Request: v1.0.14 merge
Created By: @seirios
Accepted By: @seirios
URL: https://coding.net/t/aft/p/AFT-WEB/git/merge/20
seirios лет назад: 9
Родитель
Сommit
4fbc36407d
97 измененных файлов с 7201 добавлено и 4696 удалено
  1. 5 0
      entry.js
  2. 38 0
      html/css/highTech.css
  3. 47 0
      html/css/index.css
  4. 17 0
      html/css/style.css
  5. 141 0
      html/highTech.html
  6. BIN
      html/img/discount_ioc_1.png
  7. BIN
      html/img/discount_ioc_2.png
  8. BIN
      html/img/discount_ioc_3.png
  9. BIN
      html/img/discount_ioc_4.png
  10. BIN
      html/img/discount_ioc_5.png
  11. BIN
      html/img/flowChart.png
  12. BIN
      html/img/img1.jpg
  13. BIN
      html/img/li_ioc.png
  14. BIN
      html/img/logo.png
  15. BIN
      html/img/logo_sm.png
  16. BIN
      html/img/mx_img_1.png
  17. BIN
      html/img/mx_img_2.png
  18. BIN
      html/img/mx_img_3.png
  19. BIN
      html/img/mx_img_4.png
  20. BIN
      html/img/search_ioc.png
  21. BIN
      html/img/slide_img_1.png
  22. BIN
      html/img/slide_img_s_1.png
  23. BIN
      html/img/zc_img_1.png
  24. 345 0
      html/index.html
  25. 9 0
      html/js/public.js
  26. 16 0
      js/admin/set.js
  27. 1 1
      js/admin/userManage.js
  28. 377 0
      js/component/DicPfsList.js
  29. 1141 0
      js/component/DicProvinceList.js
  30. 1005 0
      js/component/DicTechFieldList.js
  31. 1698 0
      js/component/DicTechList.js
  32. 2 1
      js/component/account/services/activity.jsx
  33. 3 2
      js/component/account/services/cognizance.jsx
  34. 1 1
      js/component/account/services/intellectual.jsx
  35. 11 23
      js/component/account/services/patent.jsx
  36. 33 5
      js/component/account/services/patentAdd.jsx
  37. 11 39
      js/component/account/services/patentDesc.jsx
  38. 2 1
      js/component/account/services/techProduct.jsx
  39. 3 3
      js/component/account/set/company.jsx
  40. 1 2
      js/component/account/set/edu.jsx
  41. 4 4
      js/component/account/set/eduPfsSelect.jsx
  42. 0 1
      js/component/account/set/pfs.jsx
  43. 4 4
      js/component/account/set/techSelect.jsx
  44. 1 1
      js/component/account/topTab.jsx
  45. 2 2
      js/component/certify/top.jsx
  46. 74 3983
      js/component/dataDic.js
  47. 1 1
      js/component/groupCertify/top.jsx
  48. 1 1
      js/component/login/loginTop.jsx
  49. 9 9
      js/component/manageCenter/servicesManage/copyright/comPatentAdd.jsx
  50. 41 16
      js/component/manageCenter/servicesManage/copyright/comPatentChange.jsx
  51. 16 13
      js/component/manageCenter/servicesManage/copyright/copyright.jsx
  52. 8 20
      js/component/manageCenter/servicesManage/copyright/copyright.less
  53. 9 9
      js/component/manageCenter/servicesManage/highTech/fosterDesc/achievement.jsx
  54. 9 8
      js/component/manageCenter/servicesManage/highTech/fosterDesc/activity.jsx
  55. 6 6
      js/component/manageCenter/servicesManage/highTech/fosterDesc/activityCostList.jsx
  56. 1 1
      js/component/manageCenter/servicesManage/highTech/fosterDesc/content.jsx
  57. 3 0
      js/component/manageCenter/servicesManage/highTech/fosterDesc/content.less
  58. 8 7
      js/component/manageCenter/servicesManage/highTech/fosterDesc/finance.jsx
  59. 8 8
      js/component/manageCenter/servicesManage/highTech/fosterDesc/honorList.jsx
  60. 12 12
      js/component/manageCenter/servicesManage/highTech/fosterDesc/hrSituation.jsx
  61. 2 2
      js/component/manageCenter/servicesManage/highTech/fosterDesc/intellectual.jsx
  62. 4 4
      js/component/manageCenter/servicesManage/highTech/fosterDesc/intellectualDesc.jsx
  63. 32 27
      js/component/manageCenter/servicesManage/highTech/fosterDesc/orgTechCenter.jsx
  64. 9 9
      js/component/manageCenter/servicesManage/highTech/fosterDesc/ratepay.jsx
  65. 1 1
      js/component/manageCenter/servicesManage/highTech/fosterDesc/standard.jsx
  66. 6 5
      js/component/manageCenter/servicesManage/highTech/fosterDesc/techProduct.jsx
  67. 56 21
      js/component/manageCenter/servicesManage/highTech/highTechApply.jsx
  68. 1 1
      js/component/manageCenter/servicesManage/highTech/highTechFoster.jsx
  69. 8 9
      js/component/manageCenter/servicesManage/patent/applyFee.jsx
  70. 1 1
      js/component/manageCenter/servicesManage/patent/applyFeeDesc.jsx
  71. 65 15
      js/component/manageCenter/servicesManage/patent/comPatentAdd.jsx
  72. 155 61
      js/component/manageCenter/servicesManage/patent/comPatentDesc.jsx
  73. 48 57
      js/component/manageCenter/servicesManage/patent/comprehensive.jsx
  74. 2 1
      js/component/manageCenter/servicesManage/patent/correction.jsx
  75. 2 1
      js/component/manageCenter/servicesManage/patent/correctionDesc.jsx
  76. 4 6
      js/component/manageCenter/servicesManage/patent/express.jsx
  77. 1 1
      js/component/manageCenter/servicesManage/patent/expressDesc.jsx
  78. 8 8
      js/component/manageCenter/servicesManage/patent/payment.jsx
  79. 3 2
      js/component/manageCenter/servicesManage/patent/paymentDesc.jsx
  80. 44 81
      js/component/manageCenter/servicesManage/technology/applyAdd.jsx
  81. 118 146
      js/component/manageCenter/servicesManage/technology/applyChange.jsx
  82. 28 26
      js/component/manageCenter/servicesManage/technology/applyManage.jsx
  83. 1 1
      js/component/manageCenter/servicesManage/technology/websiteAdd.jsx
  84. 2 2
      js/component/manageCenter/servicesManage/technology/websiteChange.jsx
  85. 2 3
      js/component/manageCenter/servicesManage/technology/websiteManage.jsx
  86. 63 0
      js/component/manageCenter/set/content.jsx
  87. 34 0
      js/component/manageCenter/set/content.less
  88. 46 0
      js/component/manageCenter/set/leftTab.jsx
  89. 179 0
      js/component/manageCenter/set/member.jsx
  90. 175 0
      js/component/manageCenter/set/modal.jsx
  91. 166 0
      js/component/manageCenter/set/permission.jsx
  92. 264 0
      js/component/manageCenter/set/role.jsx
  93. 396 9
      js/component/manageCenter/topTab.jsx
  94. 41 5
      js/component/manageCenter/topTab.less
  95. 102 6
      js/component/tools.js
  96. 1 1
      package.json
  97. 7 0
      webpack.config.js

+ 5 - 0
entry.js

@@ -13,6 +13,7 @@ module.exports = {
     //admin
     'admin/index': './js/admin/index.js',
     'admin/login': './js/admin/login.js',
+    'admin/set': './js/admin/set.js',
     'admin/userManage': './js/admin/userManage.js',
     //admin-servicesManage
     'admin/servicesManage/patent': './js/admin/servicesManage/patent.js',
@@ -67,6 +68,10 @@ module.exports = {
       'webpack/hot/only-dev-server',
       './js/admin/userManage.js'
     ],
+    'admin/set': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
+      'webpack/hot/only-dev-server',
+      './js/admin/set.js'
+    ],
     'admin/servicesManage/patent': ['webpack-dev-server/client?http://127.0.0.1:80', // WebpackDevServer host and port
       'webpack/hot/only-dev-server',
       './js/admin/servicesManage/patent.js'

+ 38 - 0
html/css/highTech.css

@@ -0,0 +1,38 @@
+h4{margin: 0; padding: 0;}
+.header_search{height: 90px; line-height: 90px;}
+.logo img{height: 100%;}
+.search .form-control{margin-top: 28px;}
+.search input{border-radius: 20px 0 0 20px;background: url(../img/search_ioc.png) no-repeat;background-position: 12px 8px; padding-left: 40px;}
+.search button{padding: 5px 21px;border-radius: 0 20px 20px 0;font-size: 16px;
+	letter-spacing: 8px;background: #58a3ff;border-color: #58a3ff; color: #fff;outline:none;}
+.search button:hover{background: #58a3ff;border-color: #58a3ff; color: #fff;}
+.search button:active{background: #58a3ff;border-color: #58a3ff; color: #fff;outline: none;}
+.search button:focus{background: #58a3ff;border-color: #58a3ff; color: #fff;outline: none;}
+
+nav{border-bottom: 1px solid #ececec;background: #fafafa; overflow: auto; margin-bottom: 20px;}
+nav ul li{float: left;}
+nav ul li.active a{line-height: 36px!important;}
+nav a{height: 40px;line-height: 44px;display: inline-block;text-align: center; color: #333333; padding: 0 20px;}
+nav a:hover{color: #333333;}
+.active{background: #fff; border:1px solid #ececec; border-top:4px solid #58a3ff; border-bottom: none; color: #58a3ff}
+
+.content{padding: 20px; border: 1px solid #ececec; overflow: auto;}
+.content h4{padding-left: 10px; border-left: 4px solid #58a3ff; margin-bottom: 20px;}
+.discount{margin-bottom: 40px; overflow: auto;}
+.discount_content{width: 180px;height: 248px; padding: 10px; margin-right: 14px; border: 1px solid #d9eaff; float: left;}
+.clear_mg{margin-right: 0;}
+.discount_img{text-align: center;margin: 10px 0 20px 0;}
+.discount_info{font-size: 14px; }
+.discount_info span{font-size: 15px; margin-bottom: 15px; display: block;}
+.blue{color: #58a3ff;}
+.green{color: #8ce2c5;}
+.red{color: #ed2977;}
+.yellow{color: #ff8a33;}
+.purple{color: #9a53f2;}
+.discount_info p{line-height: 22px; color: #7a7a7a;}
+
+.flow_chart{margin: 20px 0 40px 0;text-align: center;}
+.advantage { padding: 10px 0 0 14px;}
+.advantage li {list-style-image: url(../img/li_ioc.png);}
+.advantage span{margin-bottom: 20px; display: block; color: #333333;font-weight: bold;}
+.advantage p{line-height: 28px;color: #666666; margin-bottom: 30px;}

+ 47 - 0
html/css/index.css

@@ -0,0 +1,47 @@
+.hot{margin-top: 20px; line-height: 14px;}
+.hot span{float: left;margin-right: 35px;font-size: 16px;color: #58a3ff;}
+.hot ul{float: left;}
+.hot li{margin-right: 30px; float: left;/*list-style-type:square;*/ line-height: 16px;}
+.hot li:last-child{margin-right:0 ;}
+
+.logo{height: 260px; line-height: 330px; text-align: center;}
+.search input{border-color: #58a3ff;border-radius: 0;}
+.search button{padding: 6px 30px;border-radius: 0;background: #58a3ff;color: #fff;border-color: #58a3ff;}
+.search button:hover{background: #58a3ff;color: #fff;border-color: #58a3ff;}
+.header_nav{margin-bottom: 20px;}
+
+.content_lt{width: 670px;margin-right: 20px;float: left;}
+.content_nav{border-bottom: 1px solid #ececec;background: #fafafa; overflow: auto;}
+.content_nav ul li{float: left;}
+.content_nav ul li.active a{line-height: 36px!important;}
+.content_nav a{width: 80px;height: 40px;line-height: 44px;display: inline-block;text-align: center; color: #333333;}
+.content_nav a:hover{/*line-height: 36px;background: #fff; border:1px solid #ececec; border-top:4px solid #58a3ff; border-bottom: none; color: #58a3ff!important;*/}
+.active{background: #fff; border:1px solid #ececec; border-top:4px solid #58a3ff; border-bottom: none; color: #58a3ff}
+
+.content_list{width: 670px; float: left;margin-top: 20px;}
+.content_list>div{border-top: none;}
+.info_img{float: left; width: 120px; height:96px;margin:0 20px;}
+.info_img img{width: 100%;height: 100%;}
+.content_info{float: left; padding: 20px 0; width: 100%; border-bottom: 1px solid #ececec;}
+.content_info:hover{background: #fafafa;}
+.info_act{background: #fafafa;}
+
+.info_txt{ width: 500px; float: left;font-size: 16px; line-height: 28px;color: #333333;}
+.info_txt>p{display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden;height: 56px;}
+
+.source{font-size: 14px;}
+.source span{margin-right: 25px;}
+.source i{padding: 6px 9px;margin-right: 12px;background: #f5f5f5; color: #999999;}
+.source .name{color: #4466bf;background: #f0f7ff;}
+
+.zc_info_txt{padding: 0 20px;font-size: 16px; color: #333333;}
+.zc_info_txt .source span{margin-right: 15px;color: #999999;}
+
+.content_rt{width: 310px;float: left;border: 1px solid #ececec;}
+
+.content_rt div{padding: 10px; border-bottom: 1px dashed #d9d9d9; overflow: auto;}
+.content_rt div:last-child{border: none;}
+.content_rt ul li{float: left;}
+.content_rt ul li a{padding: 3px 10px; border: 1px solid #c9c9c9; display: block; border-radius: 30px; font-size: 12px; margin: 0 10px 10px 0;}
+.content_rt ul li a:hover{color: #fff;background: #58a3ff;border-color: #58a3ff;}
+.content_rt h4{margin-bottom: 14px;}

+ 17 - 0
html/css/style.css

@@ -0,0 +1,17 @@
+body{color: #333333;font-family: "微软雅黑";}
+input{outline:none} 
+li{list-style-type: none;}
+ul,li{margin: 0;padding: 0;}
+i{font-style:normal}
+a{color: #a3a3a3}
+a:hover{text-decoration:none;color: #9bc8ff;}
+
+.container {
+    width: 1000px;
+}
+header{height: 35px; line-height: 35px; background-color: #F3F3F3;border-bottom:1px solid #eeeeee;font-size: 12px;color: #999999;}
+.lt{float: left;}
+.rt{float: right;}
+.rt a{padding: 0 5px; }
+.rt div{float: right;}
+.login{border-right: 2px solid #CFCFCF;}

+ 141 - 0
html/highTech.html

@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8" />
+		<title></title>
+		<!-- 新 Bootstrap 核心 CSS 文件 -->
+		<link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
+		<link href="css/style.css" rel="stylesheet"/>
+		<link href="css/highTech.css" rel="stylesheet"/>
+		<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
+		<script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
+		<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
+		<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
+	</head>
+	<body>
+		<header>
+			<div class="container">
+				<div class="lt">欢迎进入科技认知计算交易平台!</div>
+				<div class="rt">
+					<a href="#" class="login">登录</a>
+					<a href="#">注册</a>
+				</div>
+			</div>
+		</header>
+		<div class="container header_search">
+			<div class="row clearfix">
+				<div class="col-md-3 logo">
+					<img src="img/logo_sm.png" />
+				</div>
+				<div class="col-md-7 col-md-offset-2 search">
+					<div class="row clearfix">
+			        	<div class="input-group ">
+			            	<input type="text" class="form-control" placeholder="平台资源关键词搜索">
+			            	<span class="input-group-btn">
+			              		<button class="btn" type="button">搜索</button>
+			             	</span>
+			       		</div><!-- /input-group -->
+			       </div>
+				</div>
+			</div>
+		</div>
+		<div class="container">
+			<div class="row clearfix">
+				<nav>
+					<ul id="myTab">
+						<li class="active"><a href="#">高企自评</a></li>
+						<li><a href="#">高企申请</a></li>
+						<li><a href="#">在先咨询</a></li>
+						<li><a href="#">社交分享</a></li>
+						<li><a href="#">政策解读</a></li>
+					</ul>
+ 				</nav>
+ 				<div class="content">
+ 					<h4>高新技术企业认定有哪些好处?</h4>
+ 					<div class="discount">
+ 						<div class="discount_content">
+ 							<div class="discount_img">
+ 								<img src="img/discount_ioc_1.png"/>
+ 							</div>
+ 							<div class="discount_info">
+ 								<span class="blue">1.企业税收减免</span>
+ 								<p>高企所得税减免40%,同时可享受办理研发经费加计扣除。</p>
+ 							</div>
+ 						</div>
+ 						<div class="discount_content">
+ 							<div class="discount_img">
+ 								<img src="img/discount_ioc_2.png"/>
+ 							</div>
+ 							<div class="discount_info">
+ 								<span class="green">2.财政直接补贴</span>
+ 								<p>地区对新认定的高新技术企业资助均会高于5万元以上</p>
+ 							</div>
+ 						</div>
+ 						<div class="discount_content">
+ 							<div class="discount_img">
+ 								<img src="img/discount_ioc_3.png"/>
+ 							</div>
+ 							<div class="discount_info">
+ 								<span class="red">3.企业上市优先</span>
+ 								<p>吸引政策和资金扶持,推动企业产业化扩张,促进企业融资上市。</p>
+ 							</div>
+ 						</div>
+ 						<div class="discount_content">
+ 							<div class="discount_img">
+ 								<img src="img/discount_ioc_4.png"/>
+ 							</div>
+ 							<div class="discount_info">
+ 								<span class="yellow">4.政策资金倾斜</span>
+ 								<p>土地、电力、排污、节能、科研资金、税收等各项扶持政策。</p>
+ 							</div>
+ 						</div>
+ 						<div class="discount_content clear_mg">
+ 							<div class="discount_img">
+ 								<img src="img/discount_ioc_5.png"/>
+ 							</div>
+ 							<div class="discount_info">
+ 								<span class="purple">5.企业品牌提升</span>
+ 								<p>政府帮企业背书,大大提高了企业品牌知名度。</p>
+ 							</div>
+ 						</div>
+ 					</div>
+ 					<h4>高企认定流程:</h4>
+ 					<div class="flow_chart">
+ 						<img src="img/flowChart.png" />
+ 					</div>
+ 					<h4>我们的优势</h4>
+ 					<div class="advantage">
+ 						<ul>
+ 							<li>
+ 								<span>优势一</span>
+ 								<p>1、总部位于长沙,在全国有15家分(子)咨询机构。<br>
+ 								2、为各单位提供政策咨询、科技咨询、知识产权运营,企业上市服务等共22500项。<br>
+ 								3、协助各省市2860家单位获得各级政策扶持和资金支持12.4亿。
+ 								</p>
+ 							</li>
+ 							<li>
+ 								<span>优势二</span>
+ 								<p>1、借助各省科技咨询中心专家库平台和专业人脉优势。<br>
+								2、拥有遍布全国各地区的人脉网络。
+ 								</p>
+ 							</li>
+ 							<li>
+ 								<span>优势三</span>
+ 								<p>1、国家科技部认定的技术转移示范机构、国家工信部门认定的企业核心服务机构。<br>
+									2、是目前全国唯一将知识产权运营、科技咨询、金融服务整合在一起的咨询服务机构,可为企业成长提供一站式解决方案。
+ 								</p>
+ 							</li>
+ 							<li>
+ 								<span>优势四</span>
+ 								<p>1、获得国家科技部、财政部、工信委等相关部门的政策支持和肯定。<br>
+									2、由政府出资与省知识产权局、湘大知识产权学院共建了湖南省专利信息集成化平台。<br>
+									3、建立了专业的知识产权运营服务平台门户网站-GO阿凡提网。
+ 								</p>
+ 							</li>
+ 						</ul>
+ 					</div>
+ 				</div>
+			</div>
+		</div>
+	</body>
+</html>

BIN
html/img/discount_ioc_1.png


BIN
html/img/discount_ioc_2.png


BIN
html/img/discount_ioc_3.png


BIN
html/img/discount_ioc_4.png


BIN
html/img/discount_ioc_5.png


BIN
html/img/flowChart.png


BIN
html/img/img1.jpg


BIN
html/img/li_ioc.png


BIN
html/img/logo.png


BIN
html/img/logo_sm.png


BIN
html/img/mx_img_1.png


BIN
html/img/mx_img_2.png


BIN
html/img/mx_img_3.png


BIN
html/img/mx_img_4.png


BIN
html/img/search_ioc.png


BIN
html/img/slide_img_1.png


BIN
html/img/slide_img_s_1.png


BIN
html/img/zc_img_1.png


+ 345 - 0
html/index.html

@@ -0,0 +1,345 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8" />
+		<title></title>
+		<!-- 新 Bootstrap 核心 CSS 文件 -->
+		<link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
+		<link href="css/style.css" rel="stylesheet"/>
+		<link href="css/index.css" rel="stylesheet"/>
+		<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
+		<script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
+		<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
+		<script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
+		<script type="text/javascript" src="js/public.js" ></script>
+	</head>
+	<body>
+		<header>
+			<div class="container">
+				<div class="lt">欢迎进入科技认知计算交易平台!</div>
+				<div class="rt">
+					<a href="#" class="login">登录</a>
+					<a href="#">注册</a>
+				</div>
+			</div>
+		</header>
+		<div class="container header_nav">
+			<div class="row clearfix">
+				<div class="col-md-12 logo">
+					<img src="img/logo.png" />
+				</div>
+				
+			</div>
+			<div class="search">
+				<div class="row clearfix">
+					<div class="col-lg-8 col-md-offset-2">
+		                <div class="input-group ">
+		                    <input type="text" class="form-control">
+		                    <span class="input-group-btn">
+		                        <button class="btn btn-default" type="button">搜索</button>
+		                    </span>
+		                </div><!-- /input-group -->
+		            </div>
+		            <div class="col-lg-8 col-md-offset-2">
+		            	<div class="hot">
+		            		<ul>
+			                	<li><a href="#">科技交易</a></li>
+			                	<li><a href="#">网上创客</a></li>
+			                	<li><a href="#">趣科普</a></li>
+			                	<li><a href="#">科技金融</a></li>
+			                </ul>
+		            	</div>
+		                
+		            </div>
+		       </div>
+			</div>
+		</div>
+		<div class="container content">
+			<div class="row clearfix">
+				<div class="content_lt">
+					<div class="content_nav">
+						<ul id="myTab">
+							<li><a href="#tab1" data-toggle="tab">关注</a></li>
+							<li class="active"><a href="#tab2" data-toggle="tab">政策</a></li>
+							<li><a href="#tab3" data-toggle="tab">前沿</a></li>
+							<li><a href="#tab4" data-toggle="tab">明星</a></li>
+							<li><a href="#tab5" data-toggle="tab">活动</a></li>
+							<li><a href="#tab6" data-toggle="tab">VR</a></li>
+						</ul>
+
+					</div>
+					
+					<div id="myTabContent" class="content_list tab-content">
+						<div id="tab1" class="tab-pane">
+
+						</div>
+						<div id="tab2" class="tab-pane in active">
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>科技成果转化频发政策“红包”,甜头怎么尝</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>11:16</span>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>成果转化是从一种创新走向另一种创新</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>12:11</span>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>从“科技的春天”到“创新的春天”</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>13:26</span>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>专利战略在企业创新全过程中的应用</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>15:23</span>
+									</div>
+								</div>
+							</div>
+						</div>
+						<div id="tab3" class="tab-pane">
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>NASA新一代太空望远镜 届时将看到宇宙第一光芒</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>07:56</span>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>满满的黑科技 推不倒的自行车</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>08:06</span>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>最新3D全息投影技术 为可口可乐麦当劳服务</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>09:33</span>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>德国科学家发明新型化合物 属无机纳米晶体结构</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>12:36</span>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>中国首条空中自行车道试营 体验云端行走</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>17:25</span>
+									</div>
+								</div>
+							</div>
+						</div>
+						<div id="tab4" class="tab-pane">
+							<div class="content_info ">
+								<div class="info_img">
+									<img src="img/mx_img_1.png" />
+								</div>
+								<div class="info_txt">
+									<p>美国工程院院士,资深核能咨询顾问,美国能源部高级 顾问,美国国家研究委员会董事会能源与环境系统主席。</p>
+									<div class="source">
+										<span>中国网</span>
+										<i class="name">钱平 | Douglas M. Chapin</i>
+										<i>美国</i>
+										<i>能源与环境</i>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="info_img">
+									<img src="img/mx_img_2.png" />
+								</div>
+								<div class="info_txt">
+									<p>加拿大工程院院士,加拿大皇家学院院士,荣获英国国际名人传记中心颁发的的“信号处理研究及教育杰出贡献奖”。</p>
+									<div class="source">
+										<span>中国网</span>
+										<i class="name">黄干| Kon Max Wong</i>
+										<i>加拿大</i>
+										<i>信号处理</i>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="info_img">
+									<img src="img/mx_img_3.png" />
+								</div>
+								<div class="info_txt">
+									<p>英国皇家工程院院士,英国纽卡斯尔大学水利工程系教授,1995年获得欧洲地球物理学会金徽章奖。</p>
+									<div class="source">
+										<span>中国网</span>
+										<i class="name">康英达|Enda O'Connell</i>
+										<i>英  国</i>
+										<i>水利工程</i>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="info_img">
+									<img src="img/mx_img_4.png" />
+								</div>
+								<div class="info_txt">
+									<p>(杂交水稻之父、首届国家最高科学奖获得者
+										袁隆平是杂交水稻研究领域的开创者和带头人,致力于杂交水稻的研究,先后成功研发出“三系法”杂交 水稻、“两系法”杂交水稻、超级杂交稻一期、二期,与此同时,袁隆平提出并实施“种三产四丰产工程”,运用超级杂交稻的技术成果,[3]  出版中、英文专著6部,发表论文60余篇。
+										</p>
+									<div class="source">
+										<span>中国网</span>
+										<i class="name">袁隆平</i>
+										<i>中国</i>
+										<i>农业</i>
+									</div>
+								</div>
+							</div>
+						</div>
+						<div id="tab5" class="tab-pane">
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>港洽周科技交流对接会</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>09:16</span>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>中以美高端医疗产业高峰论坛会</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>11:15</span>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>2017年科技展览会</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>13:13</span>
+									</div>
+								</div>
+							</div>
+							<div class="content_info ">
+								<div class="zc_info_txt">
+									<p>2017中国科技展-北京科博会</p>
+									<div class="source">
+										<span>凤凰财经</span>
+										<span>04-01</span>
+										<span>16:23</span>
+									</div>
+								</div>
+							</div>
+						</div>
+						<div id="tab6" class="tab-pane">
+
+						</div>
+					</div>
+				</div>
+				<div class="content_rt">
+					<div>
+						<h4>科技交易</h4>
+						<ul>
+							<li><a href="#">成果</a></li>
+							<li><a href="#">专家</a></li>
+							<li><a href="#">技术集群</a></li>
+							<li><a href="#">经纪人</a></li>
+							<li><a href="#">创业项目</a></li>
+							<li><a href="#">职业科技人</a></li>
+						</ul>
+					</div>
+					<div>
+						<h4>科技咨询</h4>
+						<ul>
+							<li><a href="#">高企认定</a></li>
+							<li><a href="#">专利申请</a></li>
+							<li><a href="#">知识产权贯标</a></li>
+							<li><a href="#">ISO9001</a></li>
+							<li><a href="#">创新体系</a></li>
+						</ul>
+					</div>
+					<div>
+						<h4>科技思想</h4>
+						<ul>
+							<li><a href="#">科技明星</a></li>
+							<li><a href="#">前沿科技思想</a></li>
+						</ul>
+					</div>
+					<div>
+						<h4>科技金融</h4>
+						<ul>
+							<li><a href="#">投资机构</a></li>
+							<li><a href="#">金融项目</a></li>
+							<li><a href="#">网上创客</a></li>
+						</ul>
+					</div>
+					<div>
+						<h4>应用工具</h4>
+						<ul>
+							<li><a href="#">技术评估</a></li>
+							<li><a href="#">技术查新</a></li>
+							<li><a href="#">空间主页</a></li>
+							<li><a href="#">会员体系</a></li>
+						</ul>
+					</div>
+					<div>
+						<h4>社群百科</h4>
+						<ul>
+							<li><a href="#">科技活动</a></li>
+							<li><a href="#">技术社群</a></li>
+							<li><a href="#">科技百科</a></li>
+							<li><a href="#">趣科普</a></li>
+						</ul>
+					</div>
+					<div>
+						<h4>合作伙伴</h4>
+						<ul>
+							<li><a href="#">政府合作</a></li>
+							<li><a href="#">高校合作</a></li>
+							<li><a href="#">科研单位</a></li>
+							<li><a href="#">民间达人</a></li>
+						</ul>
+					</div>
+				</div>
+			</div>
+		</div>
+	</body>
+</html>

+ 9 - 0
html/js/public.js

@@ -0,0 +1,9 @@
+$(function(){
+//	$('div.dropdown').mouseover(function() {
+//	  	$(this).addClass('open');    
+//	}).mouseout(function() {        
+//		$(this).removeClass('open');    
+//	});
+//	$("#myCarousel").carousel('cycle');
+//	$("#myCarousel1").carousel('cycle');
+})

+ 16 - 0
js/admin/set.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/set/content.jsx';
+
+ReactDOM.render(
+    <div className="wrap clearfix">
+        <TopTab active={'system'}/>
+        <Content />
+        <Footer />
+    </div>,
+    document.getElementById('root')
+)

+ 1 - 1
js/admin/userManage.js

@@ -8,7 +8,7 @@ import Content from '../component/manageCenter/userManage/content.jsx';
 
 ReactDOM.render(
     <div className="wrap clearfix">
-        <TopTab active={'set'}/>
+        <TopTab active={'userManage'}/>
         <Content />
         <Footer />
     </div>,

+ 377 - 0
js/component/DicPfsList.js

@@ -0,0 +1,377 @@
+module.exports = {
+    eduPfsList: [{
+        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: "图书馆、情报与档案管理"
+        }]
+    }]
+}

Разница между файлами не показана из-за своего большого размера
+ 1141 - 0
js/component/DicProvinceList.js


Разница между файлами не показана из-за своего большого размера
+ 1005 - 0
js/component/DicTechFieldList.js


Разница между файлами не показана из-за своего большого размера
+ 1698 - 0
js/component/DicTechList.js


+ 2 - 1
js/component/account/services/activity.jsx

@@ -1,6 +1,7 @@
 import React from 'react';
 import { Icon, Button, Upload, Input, Spin, Table, message, Select, Modal, DatePicker, Cascader, Transfer, InputNumber } from 'antd';
-import { techFieldList, technicalSourceList } from '../../dataDic.js';
+import { technicalSourceList } from '../../dataDic.js';
+import { techFieldList } from '../../DicTechFieldList.js';
 import { getTechField, getTechnicalSource, beforeUploadFile, downloadFile } from '../../tools.js';
 import './activity.less';
 import moment from 'moment';

+ 3 - 2
js/component/account/services/cognizance.jsx

@@ -1,6 +1,7 @@
 import React from 'react';
 import { Icon, InputNumber, Form, Button, Input, Radio, Select, Spin, Table, message, Cascader, Modal } from 'antd';
-import { techFieldList, provinceArr, cognizanceStateList } from '../../dataDic.js';
+import { provinceArr, cognizanceStateList } from '../../dataDic.js';
+import { techFieldList } from '../../DicTechFieldList.js';
 import { getTime, getCognizanceState } from '../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
@@ -106,7 +107,7 @@ const CognizanceDescFrom = Form.create()(React.createClass({
                 dataIndex: 'salesRevenue',
                 key: 'salesRevenue',
             }, {
-                title: '利润总',
+                title: '利润总',
                 dataIndex: 'grossProfit',
                 key: 'grossProfit',
             }],

+ 1 - 1
js/component/account/services/intellectual.jsx

@@ -1,6 +1,6 @@
 import React from 'react';
 import { Icon, Button, Input, Spin, Table, message, Select, Modal, DatePicker } from 'antd';
-import { techFieldList, technicalSourceList } from '../../dataDic.js';
+import { technicalSourceList } from '../../dataDic.js';
 import { getCatagory, getIntellectualObtainWay } from '../../tools.js';
 import './intellectual.less';
 import moment from 'moment';

+ 11 - 23
js/component/account/services/patent.jsx

@@ -1,7 +1,7 @@
 import React from 'react';
-import { Icon, Alert, Button, Input, Select, Spin, Table, message } from 'antd';
+import { Icon, Button, Input, Select, Spin, Table, message } from 'antd';
 import { patentTypeList, patentStateList } from '../../dataDic.js';
-import { getPatentType, getPatentState, getTime } from '../../tools.js';
+import { getPatentType, getPatentState, getTime, setUserContactsList } from '../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
 import './patent.less';
@@ -14,19 +14,17 @@ const Patent = React.createClass({
         this.setState({
             loading: true
         });
+        let page = pageNo || 1,
+            pageSize = this.state.pagination.pageSize,
+            patentNumber = this.state.searchNum || '',
+            patentName = this.state.searchName || '',
+            patentCatagory = this.state.searchType || '',
+            patentState = this.state.searchState || '';
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/clientApplyList",
-            data: {
-                pageNo: pageNo || 1,
-                pageSize: this.state.pagination.pageSize,
-                patentNumber: this.state.searchNum,
-                patentName: this.state.searchName,
-                patentCatagory: this.state.searchType,
-                patentState: this.state.searchState
-            },
+            url: globalConfig.context + "/techservice/patent/clientApplyList?pageNo=" + page + "&pageSize=" + pageSize + "&patentNumber=" + patentNumber + "&patentName=" + patentName + "&patentCatagory=" + patentCatagory + "&patentState=" + patentState,
             success: function (data) {
                 if (!data.data) {
                     if (data.error && data.error.length) {
@@ -86,8 +84,6 @@ const Patent = React.createClass({
     },
     getInitialState() {
         return {
-            warningText: 'warning text! warning text! warning text!',
-            AlertDis: 'block',
             patentTypeOption: [],
             patentStateOption: [],
             data: [],
@@ -152,9 +148,7 @@ const Patent = React.createClass({
             )
         });
         this.loadData();
-    },
-    alertClose(e) {
-        console.log(e);
+        this.state.contactsOption = setUserContactsList();
     },
     tableRowClick(record, index) {
         this.state.RowData = record;
@@ -189,12 +183,6 @@ const Patent = React.createClass({
                     <span>专利申请管理</span>
                     {userData.type == '0' ? <span></span> : <PatentAdd ButtonDisabled={this.state.ButtonDisabled} closeDesc={this.closeDesc} />}
                 </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="专利号" value={this.state.searchNum} onChange={(e) => { this.setState({ searchNum: e.target.value }); }} />
                     <Input placeholder="专利名称" value={this.state.searchName} onChange={(e) => { this.setState({ searchName: e.target.value }); }} />

+ 33 - 5
js/component/account/services/patentAdd.jsx

@@ -1,6 +1,6 @@
 import React from 'react';
-import { Icon, Modal, Button, Form, Upload, message, Input, Spin, Checkbox } from 'antd';
-import { beforeUploadFile, downloadFile } from '../../tools.js';
+import { Icon, Modal, Button, Form, Upload, message, Input, Spin, Checkbox, Select } from 'antd';
+import { beforeUploadFile, downloadFile, setUserContactsList } from '../../tools.js';
 import './patent.less';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
@@ -12,9 +12,11 @@ const PatentAddFrom = Form.create()(React.createClass({
             firstCheck: 0,
             secondCheck: 0,
             thirdCheck: 0
-
         };
     },
+    componentWillMount() {
+        this.state.contactsOption = setUserContactsList();
+    },
     handleSubmit(e) {
         e.preventDefault();
         if (!this.state.patentProryStatementUrl) {
@@ -33,6 +35,8 @@ const PatentAddFrom = Form.create()(React.createClass({
                         'firstInventorIdNumber': values.firstInventorID,
                         'firstInventorName': values.firstInventorName,
                         'patentDes': values.intro,
+                        'patentName': values.patentName,
+                        'contacts': values.contacts,
                         'secondInventorName': values.secondInventorName,
                         'thirdInventorName': values.thirdInventorName,
                         'firstInventorIsPublish': this.state.firstCheck,
@@ -96,6 +100,30 @@ const PatentAddFrom = Form.create()(React.createClass({
         return (
             <Form horizontal onSubmit={this.handleSubmit} className="patent-form">
                 <FormItem
+                    {...formItemLayout}
+                    label="专利名称"
+                >
+                    {getFieldDecorator('patentName', {
+                        rules: [{ required: true, message: '请输入姓名!' }]
+                    })(
+                        <Input placeholder="请输入专利名称" style={{ width: 200 }} />
+                        )}
+                </FormItem>
+                <FormItem
+                    {...formItemLayout}
+                    label="选择联系人"
+                >
+                    {getFieldDecorator('contacts', {
+                        rules: [{ required: true, message: '请选择一个联系人!' }]
+                    })(
+                        <Select placeholder="请选择联系人" style={{ width: 200 }}
+                            notFoundContent="未获取到联系人列表"
+                            onSelect={(e, n) => { this.setState({ contacts: e }); }}>
+                            {this.state.contactsOption}
+                        </Select>
+                        )}
+                </FormItem>
+                <FormItem
                     labelCol={{ span: 24 }}
                     wrapperCol={{ span: 24 }}
                     label="专利简要描述"
@@ -176,8 +204,8 @@ const PatentAddFrom = Form.create()(React.createClass({
                     >
                         <Button><Icon type="upload" /> 上传专利代理委托书 </Button>
                     </Upload>
-                    <p style={{paddingLeft:'10px',marginTop:'10px'}}>
-                        <a onClick={() => { window.open(globalConfig.context + "/open/downloadTemplateFile?sign=patent_prory_statement") }}>专利代理委托书模板下载</a>
+                    <p style={{ paddingLeft: '10px', marginTop: '10px' }}>
+                        <a onClick={() => { window.open(globalConfig.context + "/techservice/patent/downloadTemplateFile?sign=patent_prory_statement") }}>专利代理委托书模板下载</a>
                     </p>
                 </div>
                 <FormItem style={{ marginTop: '20px' }}>

+ 11 - 39
js/component/account/services/patentDesc.jsx

@@ -1,8 +1,8 @@
 import React from 'react';
 import { Icon, Modal, message, Spin, Timeline, Button } from 'antd';
-import { getPatentType, getPatentState, getTime, getPatentField, downloadFile } from '../../tools.js';
+import { getPatentType, getPatentState, getTime, getPatentField, newDownloadFile, getStepList } from '../../tools.js';
 import './patent.less';
-import ajax from 'jquery/src/ajax/xhr.js'
+import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 
 const PatentDesc = React.createClass({
@@ -24,41 +24,12 @@ const PatentDesc = React.createClass({
         });
         this.props.closeDesc(false, true);
     },
-    getStepList(thepid) {
-        this.state.stepList = [];
-        $.ajax({
-            method: "post",
-            dataType: "json",
-            crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/patentProcess",
-            data: {
-                pid: thepid
-            },
-            success: function (data) {
-                if (data.error && data.error.length && !data.data) {
-                    return;
-                };
-                let _me = this;
-                for (var item in data.data) {
-                    _me.state.stepList.push(
-                        <Timeline.Item key={item}> <span>{getPatentState(data.data[item].state)}</span> {getTime(data.data[item].recordTime)}</Timeline.Item>
-                    )
-                };
-                this.setState({
-                    stepList: this.state.stepList
-                });
-            }.bind(this),
-        });
-    },
     getPatentInfo(thepid) {
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/clientPatentInfo",
-            data: {
-                pid: thepid
-            },
+            url: globalConfig.context + "/techservice/patent/clientPatentInfo?pid=" + thepid,
             success: function (data) {
                 let thisData = data.data;
                 if (!thisData) {
@@ -68,14 +39,15 @@ const PatentDesc = React.createClass({
                     thisData = {};
                 };
                 this.setState({
-                    patentInfoData: thisData
+                    patentInfoData: thisData,
+                    stepList: this.state.stepList
                 });
             }.bind(this),
         });
     },
     componentWillReceiveProps(nextProps) {
         if (nextProps.data && nextProps.data.pid !== null && !this.state.visible && nextProps.showDesc) {
-            this.getStepList(nextProps.data.pid);
+            this.state.stepList = getStepList(nextProps.data.pid, '/techservice/patent/patentProcess');
             this.getPatentInfo(nextProps.data.pid);
         };
         this.state.visible = nextProps.showDesc;
@@ -141,26 +113,26 @@ const PatentDesc = React.createClass({
                                 <span>专利相关材料:</span>
                                 {theData.patentWritingUrl !== null && theData.patentWritingUrl !== undefined && theData.patentWritingUrl !== '' ?
                                     <p className="download-file">
-                                        <a onClick={downloadFile.bind(this, theData.patentWritingUrl, theData.patentWritingDownloadFileName)}>{theData.patentWritingDownloadFileName}</a>
+                                        <a onClick={newDownloadFile.bind(this, theData.id, 'patent_writing', '/techservice/patent/download')}>{theData.patentWritingDownloadFileName}</a>
                                         {theData.confirmState == 0 ? <Button onClick={this.confirmButton}>确认稿件</Button> : <span></span>}
                                     </p> :
                                     <p><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />专利稿件未上传</p>
                                 }
                                 {theData.authorizationNoticeUrl !== null && theData.authorizationNoticeUrl !== undefined && theData.authorizationNoticeUrl !== '' ?
                                     <p className="download-file">
-                                        <a onClick={downloadFile.bind(this, theData.authorizationNoticeUrl, theData.authorizationNoticeDownloadFileName)}>{theData.authorizationNoticeDownloadFileName}</a>
+                                        <a onClick={newDownloadFile.bind(this, theData.id, 'authorization_notice', '/techservice/patent/download')}>{theData.authorizationNoticeDownloadFileName}</a>
                                     </p> :
                                     <p><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />授权通知书未上传</p>
                                 }
                                 {theData.patentCertificateUrl !== null && theData.patentCertificateUrl !== undefined && theData.patentCertificateUrl !== '' ?
                                     <p className="download-file">
-                                        <a onClick={downloadFile.bind(this, theData.patentCertificateUrl, theData.patentCertificateDownloadFileName)}>{theData.patentCertificateDownloadFileName}</a>
+                                        <a onClick={newDownloadFile.bind(this, theData.id, 'patent_certificate', '/techservice/patent/download')}>{theData.patentCertificateDownloadFileName}</a>
                                     </p> :
                                     <p><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />专利证书未上传</p>
                                 }
                                 {theData.patentProryStatementUrl !== null && theData.patentProryStatementUrl !== undefined && theData.patentProryStatementUrl !== '' ?
                                     <p className="download-file">
-                                        <a onClick={downloadFile.bind(this, theData.patentProryStatementUrl, theData.patentProryStatementDownloadFileName)}>{theData.patentProryStatementDownloadFileName}</a>
+                                        <a onClick={newDownloadFile.bind(this, theData.id, 'patent_prory_statement', '/techservice/patent/download')}>{theData.patentProryStatementDownloadFileName}</a>
                                     </p> :
                                     <p><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />专利代理委托书未上传</p>
                                 }

+ 2 - 1
js/component/account/services/techProduct.jsx

@@ -1,6 +1,7 @@
 import React from 'react';
 import { Icon, Upload, Form, Button, Radio, Input, Spin, Table, message, Select, Modal, DatePicker, Cascader, Transfer, InputNumber } from 'antd';
-import { techFieldList, technicalSourceList } from '../../dataDic.js';
+import { technicalSourceList } from '../../dataDic.js';
+import { techFieldList } from '../../DicTechFieldList.js';
 import { getTechField, getTechnicalSource, beforeUploadFile, downloadFile } from '../../tools.js';
 import './techProduct.less';
 import moment from 'moment';

+ 3 - 3
js/component/account/set/company.jsx

@@ -5,7 +5,7 @@ import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
 
 import { addressInit, splitUrl, } from '../../tools.js';
-import { edulvlArr, zizhiArr, schoolArr } from '../../dataDic.js';
+import { eduLevelList, zizhiArr, schoolArr } from '../../dataDic.js';
 
 
 function getBase64(img, callback) {
@@ -316,8 +316,8 @@ const PersonFrom = Form.create()(React.createClass({
                     })(
                         <Select className="acc-edu-lvl" onChange={this.idttTypeChange}>
                             {
-                                edulvlArr.map(function (item, i) {
-                                    return <Option key={i} value={item} >{item}</Option>
+                                eduLevelList.map(function (item, i) {
+                                    return <Option key={i} value={item.value} >{item.key}</Option>
                                 })
                             }
                         </Select>

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

@@ -1,6 +1,7 @@
 import React from 'react';
 import { Input, Button, Form, Select, Upload, Icon, Spin, message } from 'antd';
 import './edu.less';
+import { edulvlArr } from '../../dataDic.js';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
 
@@ -10,8 +11,6 @@ import YearSelect from '../../yearSelect.jsx';
 const FormItem = Form.Item;
 const Option = Select.Option;
 
-const edulvlArr = ["博士研究生", "硕士研究生", "本科", "大专及以下"];
-
 function getBase64(img, callback) {
     const reader = new FileReader();
     reader.addEventListener('load', () => callback(reader.result));

+ 4 - 4
js/component/account/set/eduPfsSelect.jsx

@@ -1,12 +1,12 @@
 import React from 'react';
 import { Cascader } from 'antd';
-import {eduPfsList} from '../../dataDic.js';
+import { eduPfsList } from '../../DicPfsList.js';
 
 const eduPfsSelect = React.createClass({
     getInitialState() {
         return {
             value: [],
-            propsbool:true
+            propsbool: true
         }
     },
     onChange(v, s) {
@@ -17,8 +17,8 @@ const eduPfsSelect = React.createClass({
     },
     componentWillReceiveProps(nextProps) {
         if (nextProps.defValue && this.state.propsbool) {
-                this.state.value = nextProps.defValue;
-                this.state.propsbool = false;
+            this.state.value = nextProps.defValue;
+            this.state.propsbool = false;
         };
     },
     render() {

+ 0 - 1
js/component/account/set/pfs.jsx

@@ -45,7 +45,6 @@ class Avatar extends React.Component {
         }
     }
     componentWillReceiveProps(nextProps) {
-        debugger
         if (nextProps.picUrl && this.state.propsbool) {
             this.state.imageUrl = globalConfig.avatarHost + "/upload" + nextProps.picUrl;
             this.state.propsbool = false;

+ 4 - 4
js/component/account/set/techSelect.jsx

@@ -1,12 +1,12 @@
 import React from 'react';
 import { Cascader } from 'antd';
-import {techList} from '../../dataDic.js';
+import { techList } from '../../DicTechList.js';
 
 
 const TechSelect = React.createClass({
-    onChange(value,s) {
-        if ( s.length > 0 ) {
-            this.props.techzone(s[0].label,s[1].label,s[2].label);
+    onChange(value, s) {
+        if (s.length > 0) {
+            this.props.techzone(s[0].label, s[1].label, s[2].label);
         }
     },
     render() {

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

@@ -27,7 +27,7 @@ const TopTab = React.createClass({
             <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={userData.type == 1 ? globalConfig.context + "/user/groupCertify.html" : globalConfig.context + "/user/certify.html" }>实名认证</a>&nbsp;&nbsp;&nbsp;<a href={globalConfig.context + "/user/index.html"}>返回首页</a></span>
+                    <span className="acc-top-user-toindex"><a href={userData.type == 1 ? globalConfig.context + "/user/groupCertify.html" : globalConfig.context + "/user/certify.html"}>实名认证</a>&nbsp;&nbsp;&nbsp;<a href={globalConfig.avatarHost + "/html/index.html"}>返回首页</a></span>
                 </div>
                 <div className="acc-index">
                     <div className="acc-index-imgbox">

+ 2 - 2
js/component/certify/top.jsx

@@ -12,8 +12,8 @@ const LoginTop = React.createClass({
                     <div className="certify-text">
                         <span className="text">实名认证</span>
                         <span className="alink">
-                            <a href="./index.html">返回首页</a>
-                            <a href="./account/index">尊敬的{ userData.nickname || userData.number || this.state.username}</a>
+                            <a href={globalConfig.avatarHost + "/html/index.html"}>返回首页</a>
+                            <a href="./account/index">尊敬的{userData.nickname || userData.number || this.state.username}</a>
                             <a href="./login.html">退出</a>
                             <a href="./index.html">交易管理中心</a>
                             <a href="./index.html">消息</a>

Разница между файлами не показана из-за своего большого размера
+ 74 - 3983
js/component/dataDic.js


+ 1 - 1
js/component/groupCertify/top.jsx

@@ -13,7 +13,7 @@ const LoginTop = React.createClass({
                     <div className="certify-text">
                         <span className="text">实名认证</span>
                         <span className="alink">
-                            <a href="./index.html">返回首页</a>
+                            <a href={globalConfig.avatarHost + "/html/index.html"}>返回首页</a>
                             <a href="./account/index.html">尊敬的{userData.nickname || userData.number || this.state.username}</a>
                             <a href="./login.html">退出</a>
                             <a href="./index.html">交易管理中心</a>

+ 1 - 1
js/component/login/loginTop.jsx

@@ -12,7 +12,7 @@ const LoginTop = React.createClass({
                     </div>
                     <div className="logo-text">
                         <span>科技交易认知计算平台</span>
-                        <span className="back"><a href="./index.html">返回首页</a></span>
+                        <span className="back"><a href={globalConfig.avatarHost + "/html/index.html"}>返回首页</a></span>
                     </div>
                 </div>
             </div>

+ 9 - 9
js/component/manageCenter/servicesManage/copyright/comPatentAdd.jsx

@@ -8,7 +8,7 @@ import $ from 'jquery/src/ajax';
 const PatentAddFrom = Form.create()(React.createClass({
     getContactsList(theUid) {
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
             url: globalConfig.context + "/api/admin/getContacts",
@@ -146,14 +146,14 @@ const PatentAddFrom = Form.create()(React.createClass({
                         <Select
                             placeholder="请选择加急时间"
                             style={{ width: 120 }}>
-                            <Select.Option value="0">不加急</Select.Option>
-                            <Select.Option value="3">3</Select.Option>
-                            <Select.Option value="5">5</Select.Option>
-                            <Select.Option value="10">6-10</Select.Option>
-                            <Select.Option value="15">11-15</Select.Option>
-                            <Select.Option value="20">16-20</Select.Option>
-                            <Select.Option value="25">21-25</Select.Option>
-                            <Select.Option value="30">26-30</Select.Option>
+                            <Select.Option value="0">不加急(45个工作日)</Select.Option>
+                            <Select.Option value="3">3个工作日</Select.Option>
+                            <Select.Option value="5">5个工作日</Select.Option>
+                            <Select.Option value="10">6-10个工作日</Select.Option>
+                            <Select.Option value="15">11-15个工作日</Select.Option>
+                            <Select.Option value="20">16-20个工作日</Select.Option>
+                            <Select.Option value="25">21-25个工作日</Select.Option>
+                            <Select.Option value="30">26-30个工作日</Select.Option>
                         </Select>
                     )}
                 </FormItem>

+ 41 - 16
js/component/manageCenter/servicesManage/copyright/comPatentChange.jsx

@@ -4,7 +4,7 @@ import './comprehensive.less';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 import { copyrightStateList } from '../../../dataDic.js';
-import { getCopyrightState, getTime, copyrightDownloadFile, beforeUploadFile } from '../../../tools.js';
+import { getCopyrightState, getTime, copyrightDownloadFile, beforeUploadFile, getInUrgentTime } from '../../../tools.js';
 
 const CopyrightDescForm = Form.create()(React.createClass({
     getInitialState() {
@@ -39,13 +39,38 @@ const CopyrightDescForm = Form.create()(React.createClass({
         };
     },
     componentWillMount() {
-        let _me = this;
-        copyrightStateList.map(function (item) {
-            _me.state.stateOption.push(
-                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
-            )
-        });
         this.loadData();
+        this.getOptionList();
+    },
+    getOptionList() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/copyright/status",
+            success: function (data) {
+                let _me = this;
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                        return;
+                    };
+                };
+                _me.state.stateOption = [];
+                for (var item in data.data) {
+                    _me.state.stateOption.push(
+                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
+                    )
+                };
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
     },
     loadData(uid, id) {
         this.setState({
@@ -61,7 +86,7 @@ const CopyrightDescForm = Form.create()(React.createClass({
                 id: id || this.props.data.id
             }
         }), $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
             cache: false,
@@ -286,14 +311,14 @@ const CopyrightDescForm = Form.create()(React.createClass({
                             <Select
                                 placeholder="请选择加急时间"
                                 style={{ width: 160 }}>
-                                <Select.Option value="0">不加急</Select.Option>
-                                <Select.Option value="3">3</Select.Option>
-                                <Select.Option value="5">5</Select.Option>
-                                <Select.Option value="10">6-10</Select.Option>
-                                <Select.Option value="15">11-15</Select.Option>
-                                <Select.Option value="20">16-20</Select.Option>
-                                <Select.Option value="25">21-25</Select.Option>
-                                <Select.Option value="30">26-30</Select.Option>
+                                <Select.Option value="0">不加急(45个工作日)</Select.Option>
+                                <Select.Option value="3">3个工作日</Select.Option>
+                                <Select.Option value="5">5个工作日</Select.Option>
+                                <Select.Option value="10">6-10个工作日</Select.Option>
+                                <Select.Option value="15">11-15个工作日</Select.Option>
+                                <Select.Option value="20">16-20个工作日</Select.Option>
+                                <Select.Option value="25">21-25个工作日</Select.Option>
+                                <Select.Option value="30">26-30个工作日</Select.Option>
                             </Select>
                             )}
                     </Col>

+ 16 - 13
js/component/manageCenter/servicesManage/copyright/copyright.jsx

@@ -114,7 +114,7 @@ const copyright = React.createClass({
             method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/getUnitNames",
+            url: globalConfig.context + "/api/admin/getUnitNames",
             success: function (data) {
                 if (data.error.length || !data.data) {
                     return;
@@ -187,6 +187,7 @@ const copyright = React.createClass({
                     title: '派单信息',
                     dataIndex: 'workIssue',
                     key: 'workIssue',
+                    width:'25%'
                 }, {
                     title: '软著名称',
                     dataIndex: 'copyrightName',
@@ -198,21 +199,21 @@ const copyright = React.createClass({
                     render: (text) => {
                         switch (text) {
                             case 0:
-                                return '不加急';
+                                return '不加急(45个工作日)';
                             case 3:
-                                return '3';
+                                return '3个工作日';
                             case 5:
-                                return '5';
+                                return '5个工作日';
                             case 10:
-                                return '6-10';
+                                return '6-10个工作日';
                             case 15:
-                                return '11-15';
+                                return '11-15个工作日';
                             case 20:
-                                return '16-20';
+                                return '16-20个工作日';
                             case 25:
-                                return '21-25';
+                                return '21-25个工作日';
                             case 30:
-                                return '26-30';
+                                return '26-30个工作日';
                         }
                     }
                 }, {
@@ -332,6 +333,8 @@ const copyright = React.createClass({
     reset() {
         this.state.province = undefined;
         this.state.unitName = undefined;
+        this.state.copyrightName = undefined;
+        thiss.state.status = undefined;
         this.state.createTime = [];
         this.state.acceptTime = [];
         this.state.authTime = [];
@@ -362,7 +365,7 @@ const copyright = React.createClass({
                     </div>
                     <div className="foster-query">
                         <Select placeholder="选择省份"
-                            style={{ width: 200 }}
+                            style={{ width: 100 }}
                             value={this.state.province}
                             showSearch
                             filterOption={companySearch}
@@ -377,15 +380,15 @@ const copyright = React.createClass({
                             onChange={(e) => { this.setState({ unitName: e }) }}>
                             {this.state.companyOption}
                         </Select>
-                        <Input style={{ width: '160px' }}
+                        <Input style={{ width: 160 }}
                             placeholder="请输入软著名称"
                             value={this.state.copyrightName}
                             onChange={(e) => { this.setState({ copyrightName: e.target.value }); }} />
-                        <Select style={{ width: '160px' }}
+                        <Select style={{ width: 120 }}
                             value={this.state.status}
                             onChange={(e) => { this.setState({ status: e }) }}
                             placeholder="选择一个状态">{this.state.stateOption}</Select>
-                        <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch} /></span>
+                        <span>更多搜索  <Switch defaultChecked={false} onChange={this.searchSwitch} /></span>
                         <Button type="primary" onClick={this.search}>搜索</Button>
                         <Button onClick={this.reset}>重置</Button>
                         <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}

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

@@ -2,8 +2,7 @@
     padding: 20px;
     background: #fff;
     .content-title {
-        height: 32px;
-        margin-bottom: 10px;
+        line-height: 32px;
         >span {
             color: #333;
             font-size: 16px;
@@ -12,23 +11,12 @@
     }
     .foster-query {
         margin-bottom: 10px;
-        >input {
-            width: 180px;
+        >* {
+            margin-top: 10px;
             margin-right: 20px;
         }
-        >div {
-            margin-right: 20px;
-        }
-        button {
-            margin-left: 20px;
-        }
-        >span {
-            margin-left: 20px;
-            >span {
-                margin-left: 10px;
-            }
-        }
         .search-more {
+            margin-top: 0;
             >span {
                 margin-top: 10px;
                 margin-right: 10px;
@@ -36,6 +24,7 @@
         }
     }
 }
+
 .patent-addNew {
     float: right;
     margin-left: 20px;
@@ -47,7 +36,7 @@
         padding: 6px 10px;
         margin-left: 20px;
     }
-    button:hover{
+    button:hover {
         background: #ea0862;
     }
 }
@@ -120,8 +109,7 @@
 
 .ant-modal-content {
     .ant-modal-header {
-        padding: 10px 16px;
-        //background: #2d2d2d;
+        padding: 10px 16px; //background: #2d2d2d;
         .ant-modal-title {
             //color: #fff;
             font-size: 16px;
@@ -270,4 +258,4 @@
             }
         }
     }
-}
+}

+ 9 - 9
js/component/manageCenter/servicesManage/highTech/fosterDesc/achievement.jsx

@@ -1,7 +1,7 @@
 import React from 'react';
 import { Icon, Form, Button, Input, Spin, Table, message, Select, Modal, InputNumber, Upload } from 'antd';
 import './techProduct.less';
-import { getConversionForm, beforeUploadFile, downloadFile } from '../../../../tools.js';
+import { getConversionForm, beforeUploadFile, newDownloadFile } from '../../../../tools.js';
 import { conversionFormList, technicalSourceList } from '../../../../dataDic.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
@@ -47,7 +47,7 @@ const AchievementDescFrom = Form.create()(React.createClass({
     },
     handleSubmit(e) {
         e.preventDefault();
-        if (!this.state.year) {
+        if (!this.state.year && !this.props.data.year) {
             message.warning("请选择一个年份!");
             return;
         };
@@ -66,7 +66,7 @@ const AchievementDescFrom = Form.create()(React.createClass({
                         source: values.source,
                         conversionForm: values.conversionForm,
                         conversionResult: values.conversionResult,
-                        year: this.state.year,
+                        year: this.state.year || this.props.data.year,
                         enclosureUrl: this.state.enclosureUrl
                     }
                 }).done(function (data) {
@@ -161,8 +161,8 @@ const AchievementDescFrom = Form.create()(React.createClass({
                 <div className="hrSituation-roster">
                     <Upload
                         name="ratepay"
-                        action={globalConfig.context + "/techservice/cognizance/upload"}
-                        data={{ 'sign': 'achievement' }}
+                        action={globalConfig.context + "/api/admin/uploadAchievement"}
+                        data={{ 'sign': 'achievement','uid': this.props.uid }}
                         beforeUpload={beforeUploadFile}
                         showUploadList={false}
                         onChange={(info) => {
@@ -184,7 +184,7 @@ const AchievementDescFrom = Form.create()(React.createClass({
                     >
                         <Button><Icon type="upload" /> 上传科技成果附件 </Button>
                     </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.enclosureUrl ? <a onClick={downloadFile.bind(null, theData.enclosureUrl, theData.enclosureDownloadFileName)}>{theData.enclosureDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    <p style={{ marginTop: '10px' }}>{theData.enclosureUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'achievement', '/api/admin/downloadAchievement')}>{theData.enclosureDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                 </div>
                 <FormItem style={{ marginTop: '20px' }}>
                     <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
@@ -297,7 +297,7 @@ const Achievement = React.createClass({
                     year: thisdata.year,
                     enclosureUrl: thisdata.enclosureUrl,
                     enclosureDownloadFileName: thisdata.enclosureDownloadFileName,
-                    enclosure: [thisdata.enclosureUrl, thisdata.enclosureDownloadFileName]
+                    enclosure: [thisdata.id, thisdata.enclosureDownloadFileName]
                 });
             };
             this.state.activityNumberList = activityNumber.data;
@@ -357,7 +357,7 @@ const Achievement = React.createClass({
                     dataIndex: 'enclosure',
                     key: 'enclosure',
                     render: (text) => {
-                        return <a onClick={downloadFile.bind(null, text[0], text[1])}>{text[1]}</a>
+                        return <a onClick={newDownloadFile.bind(null, text[0], 'achievement', '/api/admin/downloadAchievement')}>{text[1]}</a>
                     }
                 }
             ],
@@ -389,7 +389,7 @@ const Achievement = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteAchievement",
+            url: globalConfig.context + "/api/admin/deleteAchievement",
             data: {
                 ids: deletedIds
             }

+ 9 - 8
js/component/manageCenter/servicesManage/highTech/fosterDesc/activity.jsx

@@ -1,7 +1,8 @@
 import React from 'react';
 import { Icon, Button, Upload, Input, Spin, Table, message, Select, Modal, DatePicker, Cascader, Transfer, InputNumber } from 'antd';
-import { techFieldList, technicalSourceList } from '../../../../dataDic.js';
-import { getTechField, getTechnicalSource, beforeUploadFile, downloadFile } from '../../../../tools.js';
+import { technicalSourceList } from '../../../../dataDic.js';
+import { techFieldList } from '../../../../DicTechFieldList.js';
+import { getTechField, getTechnicalSource, beforeUploadFile, newDownloadFile } from '../../../../tools.js';
 import moment from 'moment';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
@@ -276,8 +277,8 @@ const ActivityDesc = React.createClass({
                         <div style={{ width: '50%' }}>
                             <Upload
                                 name="ratepay"
-                                action={globalConfig.context + "/techservice/cognizance/upload"}
-                                data={{ 'sign': 'proof' }}
+                                action={globalConfig.context + "/api/admin/uploadProof"}
+                                data={{ 'sign': 'proof', 'uid': this.props.uid }}
                                 beforeUpload={beforeUploadFile}
                                 showUploadList={false}
                                 onChange={(info) => {
@@ -299,7 +300,7 @@ const ActivityDesc = React.createClass({
                             >
                                 <Button><Icon type="upload" /> 上传立项证明材料 </Button>
                             </Upload>
-                            <p>{this.state.proofUrl ? <a onClick={downloadFile.bind(null, this.state.proofUrl, this.state.proofDownloadFileName)}>{this.state.proofDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                            <p>{this.state.proofUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'proof', '/api/admin/downloadProof')}>{this.state.proofDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                         </div>
                     </Modal>
                 </div>
@@ -492,10 +493,10 @@ const Activity = React.createClass({
             loading: deletedIds.length > 0
         });
         $.ajax({
-            method: "POST",
+            method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteActivity",
+            url: globalConfig.context + "/api/admin/deleteActivity",
             data: {
                 ids: deletedIds
             }
@@ -566,7 +567,7 @@ const Activity = React.createClass({
                             onClick={this.delectRow}>删除<Icon type="minus" /></Button>
                     </p>
                 </div>
-                <div className="patent-table">
+                <div className="patent-table" >
                     <Spin spinning={this.state.loading}>
                         <Table columns={this.state.columns}
                             dataSource={this.state.dataSource}

+ 6 - 6
js/component/manageCenter/servicesManage/highTech/fosterDesc/activityCostList.jsx

@@ -1,7 +1,7 @@
 import React from 'react';
 import { Icon, Form, Upload, Button, Input, Spin, Table, message, Select, Modal, DatePicker, InputNumber } from 'antd';
 import './activityCostList.less';
-import { beforeUploadFile, downloadFile } from '../../../../tools.js';
+import { beforeUploadFile, newDownloadFile } from '../../../../tools.js';
 import moment from 'moment';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
@@ -271,8 +271,8 @@ const ActivityDescFrom = Form.create()(React.createClass({
                 <div style={{ width: '50%', marginTop: '20px' }}>
                     <Upload
                         name="ratepay"
-                        action={globalConfig.context + "/techservice/cognizance/upload"}
-                        data={{ 'sign': 'activity_cost_account' }}
+                        action={globalConfig.context + "/api/admin/uploadActivityCost"}
+                        data={{ 'sign': 'activity_cost_account','uid': this.props.uid }}
                         beforeUpload={beforeUploadFile}
                         showUploadList={false}
                         onChange={(info) => {
@@ -294,7 +294,7 @@ const ActivityDescFrom = Form.create()(React.createClass({
                     >
                         <Button><Icon type="upload" /> 上传研发费用台账 </Button>
                     </Upload>
-                    <p style={{ marginTop: '20px' }}>{theData.accountUrl ? <a onClick={downloadFile.bind(null, theData.accountUrl, theData.accountDownloadFileName)}>{theData.accountDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    <p style={{ marginTop: '20px' }}>{theData.accountUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'activity_cost_account', '/api/admin/downloadActivityCost')}>{theData.accountDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                 </div>
                 <FormItem style={{ marginTop: '20px' }}>
                     <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
@@ -559,10 +559,10 @@ const Activity = React.createClass({
             loading: deletedIds.length > 0
         });
         $.ajax({
-            method: "POST",
+            method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteActivityCost",
+            url: globalConfig.context + "/api/admin/deleteActivityCost",
             data: {
                 ids: deletedIds
             }

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

@@ -161,7 +161,7 @@ const Content = React.createClass({
                                 <Radio.Button value="techProduct">高新技术产品</Radio.Button>
                                 <Radio.Button value="intellectual">知识产权</Radio.Button>
                                 <Radio.Button value="achievement">科技成果转化</Radio.Button>
-                                <Radio.Button value="ratepay">企业纳税申报</Radio.Button>
+                                <Radio.Button value="ratepay">企业所得税纳税申报</Radio.Button>
                                 <Radio.Button value="finance">财务报表</Radio.Button>
                                 <Radio.Button value="hrSituation">企业人员情况</Radio.Button>
                                 <Radio.Button value="honorList">企业荣誉及其他证明材料</Radio.Button>

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

@@ -92,6 +92,9 @@
             margin-bottom: 10px;
         }
     }
+    .patent-table {
+        margin-top: 20px;
+    }
 }
 
 .admin-desc-content {

+ 8 - 7
js/component/manageCenter/servicesManage/highTech/fosterDesc/finance.jsx

@@ -1,7 +1,7 @@
 import React from 'react';
 import { Icon, Form, Button, Input, Spin, Table, message, Select, Modal, InputNumber, Upload } from 'antd';
 import './techProduct.less';
-import { beforeUploadFile, downloadFile } from '../../../../tools.js';
+import { beforeUploadFile, newDownloadFile } from '../../../../tools.js';
 import moment from 'moment';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
@@ -218,8 +218,8 @@ const FinanceDescFrom = Form.create()(React.createClass({
                 <div className="hrSituation-roster">
                     <Upload
                         name="ratepay"
-                        action={globalConfig.context + "/techservice/cognizance/upload"}
-                        data={{ 'sign': 'finance' + ( this.state.year || theData.year ) }}
+                        action={globalConfig.context + "/api/admin/uploadFinance"}
+                        data={{ 'sign': 'finance','year': ( this.state.year || theData.year ),'uid': this.props.uid }}
                         beforeUpload={beforeUploadFile}
                         showUploadList={false}
                         onChange={(info) => {
@@ -241,7 +241,7 @@ const FinanceDescFrom = Form.create()(React.createClass({
                     >
                         <Button><Icon type="upload" /> 上传财务报表 </Button>
                     </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.financeUrl ? <a onClick={downloadFile.bind(null, theData.financeUrl, theData.financeDownloadFileName)}>{theData.financeDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    <p style={{ marginTop: '10px' }}>{theData.financeUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'finance', '/api/admin/downloadFinance')}>{theData.financeDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                 </div>
                 <FormItem style={{ marginTop: '20px' }}>
                     <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
@@ -326,6 +326,7 @@ const Finance = React.createClass({
                 message.warning(data.error[0].message);
                 return;
             };
+            this.state.data = [];
             for (let i = 0; i < data.data.list.length; i++) {
                 let thisdata = data.data.list[i];
                 this.state.data.push({
@@ -346,7 +347,7 @@ const Finance = React.createClass({
                     year: thisdata.year,
                     financeUrl: thisdata.financeUrl,
                     financeDownloadFileName: thisdata.financeDownloadFileName,
-                    finance: [thisdata.financeUrl, thisdata.financeDownloadFileName]
+                    finance: [thisdata.id, thisdata.financeDownloadFileName]
                 });
             };
             this.state.pagination.current = data.data.pageNo;
@@ -412,7 +413,7 @@ const Finance = React.createClass({
                     dataIndex: 'finance',
                     key: 'finance',
                     render: (text) => {
-                        return <a onClick={downloadFile.bind(null, text[0], text[1])}>{text[1]}</a>
+                        return <a onClick={newDownloadFile.bind(null, text[0], 'finance', '/api/admin/downloadFinance')}>{text[1]}</a>
                     }
                 }
             ],
@@ -444,7 +445,7 @@ const Finance = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteFinance",
+            url: globalConfig.context + "/api/admin/deleteFinance",
             data: {
                 ids: deletedIds
             }

+ 8 - 8
js/component/manageCenter/servicesManage/highTech/fosterDesc/honorList.jsx

@@ -1,7 +1,7 @@
 import React from 'react';
 import { Icon, Form, Button, Input, Spin, Table, message, Modal, Upload, DatePicker } from 'antd';
 import './techProduct.less';
-import { beforeUploadFile, downloadFile } from '../../../../tools.js';
+import { beforeUploadFile, newDownloadFile } from '../../../../tools.js';
 import moment from 'moment';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
@@ -98,8 +98,8 @@ const HonorListDescFrom = Form.create()(React.createClass({
                 <div className="hrSituation-roster">
                     <Upload
                         name="ratepay"
-                        action={globalConfig.context + "/techservice/cognizance/upload"}
-                        data={{ 'sign': 'achievement' }}
+                        action={globalConfig.context + "/api/admin/uploadHonor"}
+                        data={{ 'sign': 'honor','uid': this.props.uid }}
                         beforeUpload={beforeUploadFile}
                         showUploadList={false}
                         onChange={(info) => {
@@ -119,9 +119,9 @@ const HonorListDescFrom = Form.create()(React.createClass({
                             }
                         }}
                     >
-                        <Button><Icon type="upload" /> 上传科技成果附件 </Button>
+                        <Button><Icon type="upload" /> 上传企业相关资质证书 </Button>
                     </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.enclosureUrl ? <a onClick={downloadFile.bind(null, theData.enclosureUrl, theData.enclosureDownloadFileName)}>{theData.enclosureDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    <p style={{ marginTop: '10px' }}>{theData.enclosureUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'honor', '/api/admin/downloadHonor')}>{theData.enclosureDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                 </div>
                 <FormItem style={{ marginTop: '20px' }}>
                     <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
@@ -218,7 +218,7 @@ const HonorList = React.createClass({
                     issuingTime: thisdata.issuingTime,
                     enclosureUrl: thisdata.enclosureUrl,
                     enclosureDownloadFileName: thisdata.enclosureDownloadFileName,
-                    enclosure: [thisdata.enclosureUrl, thisdata.enclosureDownloadFileName],
+                    enclosure: [thisdata.id, thisdata.enclosureDownloadFileName],
                     issuingTimeFormattedDate: thisdata.issuingTimeFormattedDate,
                     issuingMechanism: thisdata.issuingMechanism
                 });
@@ -270,7 +270,7 @@ const HonorList = React.createClass({
                     dataIndex: 'enclosure',
                     key: 'enclosure',
                     render: (text) => {
-                        return <a onClick={downloadFile.bind(null, text[0], text[1])}>{text[1]}</a>
+                        return <a onClick={newDownloadFile.bind(null, text[0], 'honor', '/api/admin/downloadHonor')}>{text[1]}</a>
                     }
                 }
             ],
@@ -302,7 +302,7 @@ const HonorList = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteHonor",
+            url: globalConfig.context + "/api/admin/deleteHonor",
             data: {
                 ids: deletedIds
             }

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

@@ -1,6 +1,6 @@
 import React from 'react';
 import { Input, InputNumber, Button, Form, Icon, Spin, message, Table, Modal, Upload, Select } from 'antd';
-import { beforeUploadFile, downloadFile } from '../../../../tools.js';
+import { beforeUploadFile, newDownloadFile } from '../../../../tools.js';
 import './hrSituation.less'
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
@@ -47,7 +47,7 @@ const HrSituationDescFrom = Form.create()(React.createClass({
                 message.warning("全体人员结构中年龄一栏人数总和小于等于职工人数!");
                 return;
             };
-            if (!this.state.year && !this.props.year) {
+            if (!this.state.year && !this.props.data.year) {
                 message.warning("请输入年份!");
                 return;
             };
@@ -61,7 +61,7 @@ const HrSituationDescFrom = Form.create()(React.createClass({
                     data: {
                         id: this.props.data.id,
                         uid: this.props.uid,
-                        year: this.state.year || this.props.year,
+                        year: this.state.year || this.props.data.year,
                         aboveFifty: values.aboveFifty,
                         belowThirty: values.belowThirty,
                         college: values.college,
@@ -451,8 +451,8 @@ const HrSituationDescFrom = Form.create()(React.createClass({
                 <div className="hrSituation-roster">
                     <Upload
                         name="ratepay"
-                        action={globalConfig.context + "/techservice/cognizance/upload"}
-                        data={{ 'sign': 'roster_' + (this.state.year || theData.year) }}
+                        action={globalConfig.context + "/api/admin/uploadRoster"}
+                        data={{ 'sign': 'roster','year': (this.state.year || theData.year),'uid': this.props.uid }}
                         beforeUpload={beforeUploadFile}
                         showUploadList={false}
                         onChange={(info) => {
@@ -474,13 +474,13 @@ const HrSituationDescFrom = Form.create()(React.createClass({
                     >
                         <Button><Icon type="upload" /> 上传花名册 </Button>
                     </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.rosterUrl ? <a onClick={downloadFile.bind(null, theData.rosterUrl, theData.rosterDownloadFileName)}>{theData.rosterDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    <p style={{ marginTop: '10px' }}>{theData.rosterUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'roster', '/api/admin/downloadHumanResource')}>{theData.rosterDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                 </div>
                 <div className="hrSituation-roster">
                     <Upload
                         name="ratepay"
-                        action={globalConfig.context + "/techservice/cognizance/upload"}
-                        data={{ 'sign': 'social_security_' + (this.state.year || theData.year) }}
+                        action={globalConfig.context + "/api/admin/uploadSocialSecurity"}
+                        data={{ 'sign': 'social_security','year': (this.state.year || theData.year),'uid': this.props.uid }}
                         beforeUpload={beforeUploadFile}
                         showUploadList={false}
                         onChange={(info) => {
@@ -502,7 +502,7 @@ const HrSituationDescFrom = Form.create()(React.createClass({
                     >
                         <Button><Icon type="upload" /> 上传社保情况 </Button>
                     </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.socialSecurityUrl ? <a onClick={downloadFile.bind(null, theData.socialSecurityUrl, theData.socialSecurityDownloadFileName)}>{theData.socialSecurityDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    <p style={{ marginTop: '10px' }}>{theData.socialSecurityUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'social_security', '/api/admin/downloadHumanResource')}>{theData.socialSecurityDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                 </div>
                 <div>
                     <span style={{ color: "red" }}>提示</span>
@@ -633,7 +633,7 @@ const HrSituation = React.createClass({
                     socialSecurityUrl: thisdata.socialSecurityUrl,
                     socialSecurityDownloadFileName: thisdata.socialSecurityDownloadFileName,
 
-                    attachment: [thisdata.rosterUrl, thisdata.rosterDownloadFileName, thisdata.socialSecurityUrl, thisdata.socialSecurityDownloadFileName],
+                    attachment: [thisdata.id, thisdata.rosterDownloadFileName, thisdata.socialSecurityDownloadFileName],
 
                     newEmployment: thisdata.newEmployment,
                     graduateNumber: thisdata.graduateNumber
@@ -699,8 +699,8 @@ const HrSituation = React.createClass({
                     key: 'attachment',
                     render: (text) => {
                         return <div>
-                            <a style={{ marginRight: '10px' }} onClick={downloadFile.bind(null, text[0], text[1])}>{text[1]}</a>
-                            <a onClick={downloadFile.bind(null, text[2], text[3])}>{text[3]}</a>
+                            <a style={{ marginRight: '10px' }} onClick={newDownloadFile.bind(null, text[0], 'roster', '/api/admin/downloadHumanResource')}>{text[1]}</a>
+                            <a onClick={newDownloadFile.bind(null, text[0], 'social_security', '/api/admin/downloadHumanResource')}>{text[2]}</a>
                         </div>
                     }
                 }

+ 2 - 2
js/component/manageCenter/servicesManage/highTech/fosterDesc/intellectual.jsx

@@ -1,6 +1,6 @@
 import React from 'react';
 import { Icon, Button, Input, Spin, Table, message, Select, Modal, DatePicker } from 'antd';
-import { techFieldList, technicalSourceList } from '../../../../dataDic.js';
+import { technicalSourceList } from '../../../../dataDic.js';
 import { getCatagory, getIntellectualObtainWay } from '../../../../tools.js';
 import moment from 'moment';
 import ajax from 'jquery/src/ajax/xhr.js';
@@ -139,7 +139,7 @@ const Intellectual = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteIntellectual",
+            url: globalConfig.context + "/api/admin/deleteIntellectual",
             data: {
                 ids: deletedIds
             }

+ 4 - 4
js/component/manageCenter/servicesManage/highTech/fosterDesc/intellectualDesc.jsx

@@ -1,7 +1,7 @@
 import React from 'react';
 import { Icon, Modal, Button, Form, message, Input, Spin, Select, DatePicker, Upload } from 'antd';
 import { intellectualGetList, catagoryList } from '../../../../dataDic.js';
-import { beforeUploadFile, downloadFile } from '../../../../tools.js';
+import { beforeUploadFile, newDownloadFile } from '../../../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
 import moment from 'moment';
@@ -173,8 +173,8 @@ const IntellectualDescFrom = Form.create()(React.createClass({
                 <div className="hrSituation-roster">
                     <Upload
                         name="ratepay"
-                        action={globalConfig.context + "/techservice/cognizance/upload"}
-                        data={{ 'sign': 'property_ritht' }}
+                        action={globalConfig.context + "/api/admin/uploadPropertyRight"}
+                        data={{ 'sign': 'property_right','uid': this.props.uid }}
                         beforeUpload={beforeUploadFile}
                         showUploadList={false}
                         onChange={(info) => {
@@ -196,7 +196,7 @@ const IntellectualDescFrom = Form.create()(React.createClass({
                     >
                         <Button><Icon type="upload" /> 上传知识产权证书 </Button>
                     </Upload>
-                    <p style={{ margin: '10px 0' }}>{theData.propertyRightUrl ? <a onClick={downloadFile.bind(null, theData.propertyRightUrl, theData.propertyRightDownloadFileName)}>{theData.propertyRightDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    <p style={{ margin: '10px 0' }}>{theData.propertyRightUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'property_right', '/api/admin/downloadPropertyRight')}>{theData.propertyRightDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                 </div>
                 <FormItem>
                     <Button className="set-submit" type="primary" htmlType="submit">保存</Button>

+ 32 - 27
js/component/manageCenter/servicesManage/highTech/fosterDesc/orgTechCenter.jsx

@@ -1,7 +1,7 @@
 import React from 'react';
 import { Icon, Form, Button, Input, Spin, Table, message, Modal, Upload, DatePicker } from 'antd';
 import './techProduct.less';
-import { beforeUploadFile, downloadFile } from '../../../../tools.js';
+import { beforeUploadFile, newDownloadFile } from '../../../../tools.js';
 import moment from 'moment';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
@@ -21,14 +21,15 @@ const CenterListDescFrom = Form.create()(React.createClass({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/techservice/cognizance/disposeCenterDetail",
+                    url: globalConfig.context + "/api/admin/disposeCenterDetail",
                     data: {
                         id: this.props.data.id,
                         cid: this.props.cid,
                         projectName: values.projectName,
                         projectTimeFormattedDate: values.projectTimeFormattedDate.format("YYYY-MM-DD"),
                         institution: values.institution,
-                        termTimeFormattedDate: values.termTimeFormattedDate.format("YYYY-MM-DD"),
+                        termStartTimeFormattedDate: values.termTimeFormattedDate[0].format("YYYY-MM-DD"),
+                        termEndTimeFormattedDate: values.termTimeFormattedDate[1].format("YYYY-MM-DD"),
                         protocolUrl: this.state.protocolUrl
                     }
                 }).done(function (data) {
@@ -48,6 +49,7 @@ const CenterListDescFrom = Form.create()(React.createClass({
     render() {
         const FormItem = Form.Item;
         const { getFieldDecorator } = this.props.form;
+        const { RangePicker } = DatePicker;
         const theData = this.props.data;
         const formItemLayout = {
             labelCol: { span: 6 },
@@ -84,15 +86,15 @@ const CenterListDescFrom = Form.create()(React.createClass({
                         label="期限"
                     >
                         {getFieldDecorator('termTimeFormattedDate', {
-                            rules: [{ type: 'object', required: true, message: '此项为必填项!' }],
-                            initialValue: theData.termTimeFormattedDate ? moment(theData.termTimeFormattedDate) : null
+                            rules: [{ type: 'array', required: true, message: '此项为必填项!' }],
+                            initialValue: theData.termStartTimeFormattedDate && theData.termEndTimeFormattedDate ? [moment(theData.termStartTimeFormattedDate), moment(theData.termEndTimeFormattedDate)] : [null, null]
                         })(
-                            <DatePicker />
+                            <RangePicker />
                             )}
                     </FormItem>
                     <FormItem className="half-item"
                         {...formItemLayout}
-                        label="大学机构"
+                        label="科研院所"
                     >
                         {getFieldDecorator('institution', {
                             rules: [{ required: true, message: '此项为必填项!' }],
@@ -105,8 +107,8 @@ const CenterListDescFrom = Form.create()(React.createClass({
                 <div className="hrSituation-roster">
                     <Upload
                         name="ratepay"
-                        action={globalConfig.context + "/techservice/cognizance/upload"}
-                        data={{ 'sign': 'protocol' }}
+                        action={globalConfig.context + "/api/admin/uploadProtocol"}
+                        data={{ 'sign': 'protocol', 'uid': this.props.uid }}
                         beforeUpload={beforeUploadFile}
                         showUploadList={false}
                         onChange={(info) => {
@@ -128,7 +130,7 @@ const CenterListDescFrom = Form.create()(React.createClass({
                     >
                         <Button><Icon type="upload" /> 上传协议附件 </Button>
                     </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.protocolUrl ? <a onClick={downloadFile.bind(null, theData.protocolUrl, theData.protocolDownloadFileName)}>{theData.protocolDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    <p style={{ marginTop: '10px' }}>{theData.protocolUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'protocol', '/api/admin/downloadProtocol')}>{theData.protocolDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                 </div>
                 <FormItem style={{ marginTop: '20px' }}>
                     <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
@@ -182,6 +184,7 @@ const CenterListDesc = React.createClass({
                     >
                         <CenterListDescFrom
                             cid={this.props.cid}
+                            uid={this.props.uid}
                             data={this.props.data}
                             spinState={this.spinChange}
                             closeModal={this.handleCancel}
@@ -234,16 +237,14 @@ const CenterList = React.createClass({
         this.setState({
             loading: true
         });
+        let page = pageNo || 1,
+            pageSize = this.state.pagination.pageSize,
+            cid = this.state.cid;
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/centerDetail",
-            data: {
-                pageNo: pageNo || 1,
-                pageSize: this.state.pagination.pageSize,
-                cid: this.state.cid,
-            }
+            url: globalConfig.context + "/api/admin/centerDetail?pageNo=" + page + "&pageSize=" + pageSize + "&cid=" + cid,
         }).done((data) => {
             if (!data.data || !data.data.list) {
                 if (data.error.length) {
@@ -261,9 +262,9 @@ const CenterList = React.createClass({
                     projectName: thisdata.projectName,
                     protocolDownloadFileName: thisdata.protocolDownloadFileName,
                     protocolUrl: thisdata.protocolUrl,
-                    protocol: [thisdata.protocolUrl, thisdata.protocolDownloadFileName],
+                    protocol: [thisdata.id, thisdata.protocolDownloadFileName],
                     institution: thisdata.institution,
-                    termTimeFormattedDate: thisdata.termTimeFormattedDate
+                    termTimeFormattedDate: [thisdata.termStartTimeFormattedDate, thisdata.termEndTimeFormattedDate]
                 });
             };
             this.state.pagination.current = data.data.pageNo;
@@ -301,15 +302,18 @@ const CenterList = React.createClass({
                     dataIndex: 'projectTimeFormattedDate',
                     key: 'projectTimeFormattedDate'
                 }, {
-                    title: '名称',
+                    title: '项目名称',
                     dataIndex: 'projectName',
                     key: 'projectName'
                 }, {
                     title: '期限',
                     dataIndex: 'termTimeFormattedDate',
-                    key: 'termTimeFormattedDate'
+                    key: 'termTimeFormattedDate',
+                    render: (text) => {
+                        return text[0] + ' - ' + text[1];
+                    }
                 }, {
-                    title: '大学机构',
+                    title: '科研院所',
                     dataIndex: 'institution',
                     key: 'institution'
                 }, {
@@ -317,7 +321,7 @@ const CenterList = React.createClass({
                     dataIndex: 'protocol',
                     key: 'protocol',
                     render: (text) => {
-                        return <a onClick={downloadFile.bind(null, text[0], text[1])}>{text[1]}</a>
+                        return <a onClick={newDownloadFile.bind(null, text[0], 'protocol', '/api/admin/downloadProtocol')}>{text[1]}</a>
                     }
                 }
             ],
@@ -354,7 +358,7 @@ const CenterList = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteOrgTechCenterDetail",
+            url: globalConfig.context + "/api/admin/deleteOrgTechCenterDetail",
             data: {
                 ids: deletedIds
             }
@@ -462,8 +466,8 @@ const CenterList = React.createClass({
                     <div style={{ margin: '10px 0' }}>
                         <Upload
                             name="ratepay"
-                            action={globalConfig.context + "/techservice/cognizance/upload"}
-                            data={{ 'sign': 'institution' }}
+                            action={globalConfig.context + "/api/admin/uploadInstitution"}
+                            data={{ 'sign': 'institution', 'uid': this.props.data.uid }}
                             beforeUpload={beforeUploadFile}
                             showUploadList={false}
                             onChange={(info) => {
@@ -485,7 +489,7 @@ const CenterList = React.createClass({
                         >
                             <Button><Icon type="upload" /> 上传研发部门制度 </Button>
                         </Upload>
-                        <p style={{ marginTop: '10px' }}>{this.state.systemUrl ? <a onClick={downloadFile.bind(null, this.state.systemUrl, this.state.systemDownloadFileName)}>{this.state.systemDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                        <p style={{ marginTop: '10px' }}>{this.state.systemUrl ? <a onClick={newDownloadFile.bind(null, this.state.cid, 'institution', '/api/admin/downloadInstitution')}>{this.state.systemDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                     </div>
                 </div>
                 <Button type='primary' onClick={this.saveCenterDetail} style={{ marginBottom: '10px' }}>保存</Button>
@@ -512,6 +516,7 @@ const CenterList = React.createClass({
                 </div>
                 <CenterListDesc
                     cid={this.state.cid}
+                    uid={this.props.data.uid}
                     data={this.state.RowData}
                     showDesc={this.state.showDesc}
                     closeDesc={this.closeDesc} />

+ 9 - 9
js/component/manageCenter/servicesManage/highTech/fosterDesc/ratepay.jsx

@@ -1,7 +1,7 @@
 import React from 'react';
 import { Icon, Form, Button, Input, Spin, Table, message, Select, Modal, InputNumber, Upload } from 'antd';
 import './techProduct.less';
-import { beforeUploadFile, downloadFile } from '../../../../tools.js';
+import { beforeUploadFile, newDownloadFile } from '../../../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 
@@ -194,8 +194,8 @@ const RatepayDescFrom = Form.create()(React.createClass({
                 <div className="hrSituation-roster">
                     <Upload
                         name="ratepay"
-                        action={globalConfig.context + "/techservice/cognizance/upload"}
-                        data={{ 'sign': 'ratepay_' + (this.state.year || theData.year) }}
+                        action={globalConfig.context + "/api/admin/uploadRatepay"}
+                        data={{ 'sign': 'ratepay','year': (this.state.year || theData.year),'uid': this.props.uid }}
                         beforeUpload={beforeUploadFile}
                         showUploadList={false}
                         onChange={(info) => {
@@ -217,7 +217,7 @@ const RatepayDescFrom = Form.create()(React.createClass({
                     >
                         <Button><Icon type="upload" /> 上传企业纳税申报表 </Button>
                     </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.taxReturnUrl ? <a onClick={downloadFile.bind(null, theData.taxReturnUrl, theData.taxReturnDownloadFileName)}>{theData.taxReturnDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    <p style={{ marginTop: '10px' }}>{theData.taxReturnUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'ratepay', '/api/admin/downloadRatepay')}>{theData.taxReturnDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                 </div>
                 <FormItem style={{ marginTop: '20px' }}>
                     <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
@@ -264,7 +264,7 @@ const RatepayDesc = React.createClass({
         return (
             <div className="patent-addNew">
                 <Spin spinning={this.state.loading} className='spin-box'>
-                    <Modal title="纳税申报信息" visible={this.state.visible}
+                    <Modal title="企业所得税纳税申报信息" visible={this.state.visible}
                         onOk={this.handleOk} onCancel={this.handleCancel}
                         width='800px'
                         footer=''
@@ -320,7 +320,7 @@ const Ratepay = React.createClass({
                     year: thisdata.year,
                     taxReturnUrl: thisdata.taxReturnUrl,
                     taxReturnDownloadFileName: thisdata.taxReturnDownloadFileName,
-                    taxReturn: [thisdata.taxReturnUrl, thisdata.taxReturnDownloadFileName]
+                    taxReturn: [thisdata.id, thisdata.taxReturnDownloadFileName]
                 });
             };
             this.state.pagination.current = data.data.pageNo;
@@ -378,7 +378,7 @@ const Ratepay = React.createClass({
                     dataIndex: 'taxReturn',
                     key: 'taxReturn',
                     render: (text) => {
-                        return <a onClick={downloadFile.bind(null, text[0], text[1])}>{text[1]}</a>
+                        return <a onClick={newDownloadFile.bind(null, text[0], 'ratepay', '/api/admin/downloadRatepay')}>{text[1]}</a>
                     }
                 }
             ],
@@ -410,7 +410,7 @@ const Ratepay = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteRatepay",
+            url: globalConfig.context + "/api/admin/deleteRatepay",
             data: {
                 ids: deletedIds
             }
@@ -452,7 +452,7 @@ const Ratepay = React.createClass({
         return (
             <div className="user-content" >
                 <div className="content-title">
-                    <span>纳税申信息</span>
+                    <span>企业所得税纳税申信息</span>
                 </div>
                 <div className="user-search">
                     <p>

+ 1 - 1
js/component/manageCenter/servicesManage/highTech/fosterDesc/standard.jsx

@@ -247,7 +247,7 @@ const Standard = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteStandard",
+            url: globalConfig.context + "/api/admin/deleteStandard",
             data: {
                 ids: deletedIds
             }

+ 6 - 5
js/component/manageCenter/servicesManage/highTech/fosterDesc/techProduct.jsx

@@ -1,6 +1,7 @@
 import React from 'react';
 import { Icon, Upload, Form, Button, Radio, Input, Spin, Table, message, Select, Modal, DatePicker, Cascader, Transfer, InputNumber } from 'antd';
-import { techFieldList, technicalSourceList } from '../../../../dataDic.js';
+import { technicalSourceList } from '../../../../dataDic.js';
+import { techFieldList } from '../../../../DicTechFieldList.js';
 import { getTechField, getTechnicalSource, beforeUploadFile, downloadFile } from '../../../../tools.js';
 import moment from 'moment';
 import ajax from 'jquery/src/ajax/xhr.js';
@@ -229,8 +230,8 @@ const TechProductDescFrom = Form.create()(React.createClass({
                 <div style={{ width: '50%' }}>
                     <Upload
                         name="ratepay"
-                        action={globalConfig.context + "/techservice/cognizance/upload"}
-                        data={{ 'sign': 'tech_product' }}
+                        action={globalConfig.context + "/api/admin/uploadTecProduct"}
+                        data={{ 'sign': 'tech_product', 'uid': this.props.uid }}
                         beforeUpload={beforeUploadFile}
                         showUploadList={false}
                         onChange={(info) => {
@@ -252,7 +253,7 @@ const TechProductDescFrom = Form.create()(React.createClass({
                     >
                         <Button><Icon type="upload" /> 上传高新技术产品台帐 </Button>
                     </Upload>
-                    <p style={{ marginTop: '10px' }}>{theData.accountUrl ? <a onClick={downloadFile.bind(null, theData.accountUrl, theData.accountDownloadFileName)}>{theData.accountDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                    <p style={{ marginTop: '10px' }}>{theData.accountUrl ? <a onClick={newDownloadFile.bind(null, this.props.data.id, 'tech_product', '/api/admin/downloadTecProduct')}>{theData.accountDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                 </div>
                 <FormItem style={{ marginTop: '20px' }}>
                     <Button className="set-submit" type="primary" htmlType="submit">保存</Button>
@@ -491,7 +492,7 @@ const TechProduct = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/cognizance/deleteTechProduct",
+            url: globalConfig.context + "/api/admin/deleteTechProduct",
             data: {
                 ids: deletedIds
             }

+ 56 - 21
js/component/manageCenter/servicesManage/highTech/highTechApply.jsx

@@ -1,6 +1,7 @@
 import React from 'react';
 import { Icon, InputNumber, Form, Button, Input, Radio, Select, Spin, Table, DatePicker, message, Cascader, Modal } from 'antd';
-import { techFieldList, provinceArr, cognizanceStateList } from '../../../dataDic.js';
+import { provinceArr, cognizanceStateList } from '../../../dataDic.js';
+import { techFieldList } from '../../../DicTechFieldList.js';
 import { getTime, getCognizanceState, companySearch } from '../../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
@@ -48,6 +49,9 @@ const CognizanceDescFrom = Form.create()(React.createClass({
                     salesRevenue: data.data.salesRevenue3,
                     grossProfit: data.data.grossProfit3
                 }];
+                this.state.netAssetRate = 1 / 2 * (data.data.netAsset2 / data.data.netAsset3 + data.data.netAsset1 / data.data.netAsset2) - 1;
+                this.state.salesRevenueRate = 1 / 2 * (data.data.salesRevenue2 / data.data.salesRevenue3 + data.data.salesRevenue1 / data.data.salesRevenue2) - 1;
+                console.log(this.state.netAssetRate, this.state.salesRevenueRate);
             }.bind(this),
         }).always(function () {
             this.setState({
@@ -92,7 +96,7 @@ const CognizanceDescFrom = Form.create()(React.createClass({
     },
     getContactsList(uid) {
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
             url: globalConfig.context + "/api/admin/getContacts",
@@ -116,6 +120,36 @@ const CognizanceDescFrom = Form.create()(React.createClass({
             }.bind(this),
         });
     },
+    getOptionList() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/cognizanceStatus",
+            success: function (data) {
+                let _me = this;
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                        return;
+                    };
+                };
+                _me.state.stateOption = [];
+                for (var item in data.data) {
+                    _me.state.stateOption.push(
+                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
+                    )
+                };
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
     getInitialState() {
         return {
             loading: false,
@@ -133,7 +167,7 @@ const CognizanceDescFrom = Form.create()(React.createClass({
                 dataIndex: 'salesRevenue',
                 key: 'salesRevenue',
             }, {
-                title: '利润总',
+                title: '利润总',
                 dataIndex: 'grossProfit',
                 key: 'grossProfit',
             }],
@@ -162,13 +196,8 @@ const CognizanceDescFrom = Form.create()(React.createClass({
         };
     },
     componentWillMount() {
-        let _me = this;
-        cognizanceStateList.map(function (item) {
-            _me.state.stateOption.push(
-                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
-            )
-        });
         this.loadData();
+        this.getOptionList();
         this.getStateData();
         this.getContactsList();
     },
@@ -321,6 +350,16 @@ const CognizanceDescFrom = Form.create()(React.createClass({
                     <div className="form-title">近三年经营状况(万元): </div>
                     <Table pagination={false} dataSource={this.state.moneyTable} columns={this.state.moneyColumns} />
                     <div className="clearfix">
+                        <div className="half-item">
+                            <span className="item-title">净资产增长率: </span>
+                            <span>{isNaN(this.state.netAssetRate) ? '数据错误无法计算' : (this.state.netAssetRate * 100).toFixed(2) + '%'}</span>
+                        </div>
+                        <div className="half-item">
+                            <span className="item-title">销售收入增长率: </span>
+                            <span>{isNaN(this.state.salesRevenueRate) ? '数据错误无法计算' : (this.state.salesRevenueRate * 100).toFixed(2) + '%'}</span>
+                        </div>
+                    </div>
+                    <div className="clearfix">
                         <div><span className="form-title">近三年研究开发费用总额(万元): </span></div>
                         <div className="third-item">
                             <div className="item-title">近三年研究开发费用总额</div>
@@ -484,7 +523,7 @@ const CognizanceAdd = React.createClass({
     },
     getContactsList(theUid) {
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
             url: globalConfig.context + "/api/admin/getContacts",
@@ -728,7 +767,7 @@ const Cognizance = React.createClass({
             method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/getAdmin",
+            url: globalConfig.context + "/api/admin/getConsultant",
             success: function (data) {
                 if (data.error.length || !data.data) {
                     return;
@@ -754,7 +793,7 @@ const Cognizance = React.createClass({
             method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/getUnitNames",
+            url: globalConfig.context + "/api/admin/getUnitNames",
             success: function (data) {
                 if (data.error.length || !data.data) {
                     return;
@@ -939,6 +978,8 @@ const Cognizance = React.createClass({
             <div className="foster-content" >
                 <div className="content-title">
                     <span>高企申请管理</span>
+                    <Button style={{ background: "#ea0862", border: "none", color: "#fff", float: 'right' }}
+                        onClick={this.addClick}>添加新申请<Icon type="plus" /></Button>
                 </div>
                 <div className="foster-query">
                     <Select placeholder="选择省份"
@@ -959,15 +1000,9 @@ const Cognizance = React.createClass({
                     </Select>
                     <Button type="primary" onClick={this.search}>搜索</Button>
                     <Button onClick={this.reset}>重置</Button>
-                </div>
-                <div className="foster-query">
-                    <div>
-                        <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
-                            onClick={this.addClick}>添加<Icon type="plus" /></Button>
-                        <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
-                            disabled={!hasSelected}
-                            onClick={this.delectRow}>删除<Icon type="minus" /></Button>
-                    </div>
+                    <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                        disabled={!hasSelected}
+                        onClick={this.delectRow}>删除<Icon type="minus" /></Button>
                 </div>
                 <div className="patent-table">
                     <Spin spinning={this.state.loading}>

+ 1 - 1
js/component/manageCenter/servicesManage/highTech/highTechFoster.jsx

@@ -1,6 +1,6 @@
 import React from 'react';
 import { Icon, Button, Input, Select, Spin, Table, DatePicker, message, Cascader } from 'antd';
-import { techFieldList, provinceArr } from '../../../dataDic.js';
+import { provinceArr } from '../../../dataDic.js';
 import { getTime, getPatentState, companySearch } from '../../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';

+ 8 - 9
js/component/manageCenter/servicesManage/patent/applyFee.jsx

@@ -13,17 +13,16 @@ const applyFee = React.createClass({
         this.setState({
             loading: true
         });
+        let page = pageNo || 1,
+        pageSize = this.state.pagination.pageSize,
+        locationProvince = this.state.province,
+        patentApplicationDate = this.state.searchData;
+
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/getApplicationFeeList",
-            data: {
-                pageNo: pageNo || 1,
-                pageSize: this.state.pagination.pageSize,
-                locationProvince: this.state.province,
-                patentApplicationDate: this.state.searchData
-            },
+            url: globalConfig.context + "/api/admin/patent/getApplicationFeeList?pageNo=" + page + "&pageSize=" + pageSize + "&locationProvince=" + locationProvince + "&patentApplicationDate=" + patentApplicationDate,
             success: function (data) {
                 if (data.error.length || !data.data || !data.data.list) {
                     message.warning(data.error[0].message);
@@ -202,7 +201,7 @@ const applyFee = React.createClass({
         this.loadData();
     },
     exportApply() {
-        window.open(globalConfig.context + "/techservice/patent/exportApplicationFee?locationProvince="
+        window.open(globalConfig.context + "/api/admin/patent/exportApplicationFee?locationProvince="
             + this.state.province + "&patentApplicationDate=" + this.state.searchData);
     },
     render() {

+ 1 - 1
js/component/manageCenter/servicesManage/patent/applyFeeDesc.jsx

@@ -24,7 +24,7 @@ const PatentDesc = React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/registerApplicationFee",
+            url: globalConfig.context + "/api/admin/patent/registerApplicationFee",
             data: {
                 cid: this.props.data.cid,
                 applicationFee: this.state.applicationFee,

+ 65 - 15
js/component/manageCenter/servicesManage/patent/comPatentAdd.jsx

@@ -29,8 +29,8 @@ class Avatar extends React.Component {
                 className="avatar-uploader"
                 name="avatar"
                 showUploadList={false}
-                action={globalConfig.context + "/techservice/patent/patentFile"}
-                data={{ 'sign': this.props.name, 'oid': this.props.oid }}
+                action={globalConfig.context + "/api/admin/patent/upload"}
+                data={{ 'sign': this.props.name, 'uid': this.props.oid }}
                 beforeUpload={beforeUpload}
                 onChange={this.handleChange.bind(this)}
             >
@@ -49,7 +49,7 @@ const PatentAddFrom = Form.create()(React.createClass({
             method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/getUnitNames",
+            url: globalConfig.context + "/api/admin/getUnitNames",
             success: function (data) {
                 if (data.error.length || !data.data) {
                     return;
@@ -67,6 +67,32 @@ const PatentAddFrom = Form.create()(React.createClass({
             });
         }.bind(this));
     },
+    getContactsList(theUid) {
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/getContacts",
+            data: {
+                uid: theUid || this.state.uid
+            },
+            success: function (data) {
+                let theOption = [];
+                if (data.error.length || !data.data) {
+                    return;
+                };
+                for (let item in data.data) {
+                    let theData = data.data[item];
+                    theOption.push(
+                        <Select.Option value={item} key={theData}>{theData}</Select.Option>
+                    );
+                };
+                this.setState({
+                    contactsOption: theOption
+                });
+            }.bind(this),
+        });
+    },
     getInitialState() {
         return {
             loading: false,
@@ -82,10 +108,6 @@ const PatentAddFrom = Form.create()(React.createClass({
     },
     handleSubmit(e) {
         e.preventDefault();
-        if (!this.state.companyName || this.state.companyName === "") {
-            message.warning('请先选择公司!');
-            return;
-        };
         this.props.form.validateFields((err, values) => {
             if (!err) {
                 this.props.spinState(true);
@@ -93,9 +115,10 @@ const PatentAddFrom = Form.create()(React.createClass({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/techservice/patent/manageApplyPatent",
+                    url: globalConfig.context + "/api/admin/patent/apply",
                     data: {
-                        'uid': this.state.companyName,
+                        'uid': values.companyName,
+                        'contacts': values.contacts,
                         'firstInventorIdNumber': values.firstInventorID,
                         'firstInventorName': values.firstInventorName,
                         'patentDes': values.intro,
@@ -155,11 +178,38 @@ const PatentAddFrom = Form.create()(React.createClass({
         const _me = this;
         return (
             <Form horizontal onSubmit={this.handleSubmit} className="person-form">
-                <Select placeholder="选择公司"
-                    showSearch
-                    filterOption={companySearch}
-                    onChange={(e) => { this.state.companyName = e; }}
-                    showSearch={true} style={{ width: 200 }} >{this.state.companyOption}</Select>
+                <FormItem
+                    {...formItemLayout}
+                    label="申请公司"
+                >
+                    {getFieldDecorator('companyName', {
+                        rules: [{ required: true, message: '请选择一个公司!' }],
+                        initialValue: this.state.companyName || null
+
+                    })(
+                        <Select placeholder="选择公司"
+                            showSearch
+                            filterOption={companySearch}
+                            onChange={(e) => { this.setState({ companyName: e }); this.getContactsList(e); }}
+                            showSearch={true} style={{ width: 200 }} >
+                            {this.state.companyOption}
+                        </Select>
+                        )}
+                </FormItem>
+                <FormItem
+                    {...formItemLayout}
+                    label="联系人"
+                >
+                    {getFieldDecorator('contacts', {
+                        rules: [{ required: true, message: '请选择一个联系人!' }],
+                        initialValue: this.state.contacts || null
+                    })(
+                        <Select placeholder="选择联系人"
+                            style={{ width: 200 }} >
+                            {this.state.contactsOption}
+                        </Select>
+                        )}
+                </FormItem>
                 <FormItem
                     labelCol={{ span: 24 }}
                     wrapperCol={{ span: 18 }}
@@ -225,7 +275,7 @@ const PatentAddFrom = Form.create()(React.createClass({
                         <Avatar urlData={this.avatarUrl} name='patent_prory_statement' oid={this.state.companyName} />
                     )}
                     <p>
-                        <a onClick={() => { window.open(globalConfig.context + "/open/downloadTemplateFile?sign=patent_prory_statement") }}>模板下载</a>
+                        <a onClick={() => { window.open(globalConfig.context + "/api/admin/patent/downloadTemplateFile?sign=patent_prory_statement") }}>模板下载</a>
                     </p>
                 </FormItem>
                 <FormItem>

+ 155 - 61
js/component/manageCenter/servicesManage/patent/comPatentDesc.jsx

@@ -1,10 +1,11 @@
 import React from 'react';
-import { Icon, Modal, message, Spin, Steps, Input, Select, Upload, DatePicker, Button } from 'antd';
+import { Icon, Modal, message, Spin, Steps, Input, Select, Upload, DatePicker, Button, Table } from 'antd';
 import './comprehensive.less';
 import ajax from 'jquery/src/ajax/xhr.js';
+import moment from 'moment';
 import $ from 'jquery/src/ajax';
 import { patentTypeList, patentFieldList, patentStateList } from '../../../dataDic.js';
-import { getBase64, beforeUpload, getPatentState, getTime, downloadFile } from '../../../tools.js';
+import { getBase64, beforeUpload, getPatentState, getTime, newDownloadFile } from '../../../tools.js';
 
 class Avatar extends React.Component {
     constructor(props) {
@@ -34,8 +35,8 @@ class Avatar extends React.Component {
             <Upload className="upload-file"
                 name="avatar"
                 showUploadList={false}
-                action={globalConfig.context + "/techservice/patent/patentFile"}
-                data={{ 'sign': this.props.name, 'oid': this.props.oid }}
+                action={globalConfig.context + "/api/admin/patent/upload"}
+                data={{ 'sign': this.props.name, 'uid': this.props.uid }}
                 beforeUpload={beforeUpload}
                 onChange={this.handleChange.bind(this)}
             >
@@ -54,7 +55,29 @@ const PatentDesc = React.createClass({
             patentFieldOption: [],
             patentStateOption: [],
             adminOption: [],
-            patentProcessList: []
+            stateTable: [],
+            stateColumns: [{
+                title: '申请状态',
+                dataIndex: 'state',
+                key: 'state',
+                render: (text) => { return getPatentState(text) }
+            }, {
+                title: '处理时间',
+                dataIndex: 'recordTimeFormattedDate',
+                key: 'recordTimeFormattedDate',
+            }, {
+                title: '负责人',
+                dataIndex: 'principal',
+                key: 'principal',
+            }, {
+                title: '操作人',
+                dataIndex: 'operator',
+                key: 'operator',
+            }, {
+                title: '备注',
+                dataIndex: 'comment',
+                key: 'comment',
+            }]
         };
     },
     loadData() {
@@ -62,41 +85,69 @@ const PatentDesc = React.createClass({
             loading: true
         });
         $.when($.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/patentProcess",
-            data: {
-                pid: this.state.xid
-            }
+            url: globalConfig.context + "/api/admin/patent/detail?pid=" + this.state.xid,
+        }), $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/patent/logs?pid=" + this.state.xid,
         }), $.ajax({
             method: "get",
             dataType: "json",
             crossDomain: false,
             url: globalConfig.context + "/techservice/patent/getAdmin"
-        })).done((data1, data2) => {
-            if (data1[0].error.length) {
+        }), $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/patent/patentStatus"
+        })).done((data1, data2, data3, data4) => {
+            let _me = this;
+            if (data1[0].error.length || !data1[0].data) {
                 message.warning(data1[0].error[0].message);
                 return;
             };
-            let _me = this;
-            data1[0].data.map(function (item) {
-                _me.state.patentProcessList.push(
-                    <p className="patent-process-list" key={item.id}>
-                        <span>专利状态: {getPatentState(item.state)}</span>
-                        <span>处理时间: {getTime(item.recordTime)}</span>
-                        <span>负责人:{item.principal}</span>
-                        <span>操作人:{item.operator}</span>
-                    </p>
-                )
-            });
+            this.state.data = data1[0].data;
+            this.state.contacts = data1[0].data.contacts;
             if (data2[0].error.length) {
                 message.warning(data2[0].error[0].message);
                 return;
             };
-            for (var item in data2[0].data) {
+            _me.state.stateTable = [];
+            data2[0].data.map(function (item) {
+                _me.state.stateTable.push({
+                    comment: item.comment,
+                    id: item.id,
+                    operator: item.operator,
+                    pid: item.pid,
+                    principal: item.principal,
+                    recordTime: item.recordTime,
+                    recordTimeFormattedDate: item.recordTimeFormattedDate,
+                    state: item.state,
+                });
+            });
+            if (data3[0].error.length) {
+                message.warning(data3[0].error[0].message);
+                return;
+            };
+            for (var item in data3[0].data) {
                 _me.state.adminOption.push(
-                    <Select.Option value={item} key={item}>{data2[0].data[item]}</Select.Option>
+                    <Select.Option value={item} key={item}>{data3[0].data[item]}</Select.Option>
+                )
+            };
+            if (!data4[0].data) {
+                if (data4[0].error && data4[0].error.length) {
+                    message.warning(data4[0].error[0].message);
+                    return;
+                };
+            };
+            _me.state.patentStateOption = [];
+            for (var item in data4[0].data) {
+                _me.state.patentStateOption.push(
+                    <Select.Option value={item} key={item}>{data4[0].data[item]}</Select.Option>
                 )
             };
         }).always(function () {
@@ -105,11 +156,36 @@ const PatentDesc = React.createClass({
             });
         }.bind(this));
     },
+    getContactsList(theUid) {
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/getContacts",
+            data: {
+                uid: theUid || this.state.uid
+            },
+            success: function (data) {
+                let theOption = [];
+                if (data.error.length || !data.data) {
+                    return;
+                };
+                for (let item in data.data) {
+                    let theData = data.data[item];
+                    theOption.push(
+                        <Select.Option value={item} key={theData}>{theData}</Select.Option>
+                    );
+                };
+                this.setState({
+                    contactsOption: theOption
+                });
+            }.bind(this),
+        });
+    },
     getOption() {
         let _me = this;
         _me.state.patentTypeOption = [];
         _me.state.patentFieldOption = [];
-        _me.state.patentStateOption = [];
         patentTypeList.map(function (item) {
             _me.state.patentTypeOption.push(
                 <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
@@ -120,11 +196,6 @@ const PatentDesc = React.createClass({
                 <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
             )
         });
-        patentStateList.map(function (item) {
-            _me.state.patentStateOption.push(
-                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
-            )
-        });
     },
     showModal() {
         this.setState({
@@ -139,21 +210,23 @@ const PatentDesc = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/managePatentInfo",
+            url: globalConfig.context + "/api/admin/patent/update",
             data: {
-                "xid": this.state.xid,
+                "id": this.state.xid,
                 "patentNumber": this.state.patentNumber,
                 "patentName": this.state.patentName,
-                "patentCatagory": this.state.patentType,
+                "patentCatagory": this.state.data.patentCatagory,
                 "patentField": this.state.patentField,
                 "patentDes": this.state.patentDes,
+                "contacts": this.state.contacts,
                 "patentWritingUrl": this.state.patentWritingUrl,
                 "authorizationNoticeUrl": this.state.authorizationNoticeUrl,
                 "patentCertificateUrl": this.state.patentCertificateUrl,
                 "pState": this.props.data.patentState,
                 "state": this.state.patentStateAdd,
                 "recordTimeFormattedDate": this.state.recordTime,
-                "principal": this.state.adminName
+                "principal": this.state.adminName,
+                "comment": this.state.comment
             }
         }).done(function (data) {
             if (!data.error.length) {
@@ -183,20 +256,21 @@ const PatentDesc = React.createClass({
         this.getOption();
     },
     componentWillReceiveProps(nextProps) {
-        this.state.patentStateAdd = '';
-        this.state.adminName = '';
-        this.state.recordTime = '';
+        this.state.patentStateAdd = undefined;
+        this.state.adminName = undefined;
+        this.state.recordTime = undefined;
+        this.state.comment = undefined;
         this.state.adminOption = [];
-        this.state.patentProcessList = [];
         if (nextProps.data && !this.state.visible && nextProps.showDesc) {
             this.state.xid = nextProps.data.pid;
             this.state.patentDes = nextProps.data.patentDes;
             this.state.patentName = nextProps.data.patentName;
             this.state.patentNumber = nextProps.data.patentNumber;
-            this.state.patentType = String(nextProps.data.patentType);
+            this.state.patentCatagory = String(nextProps.data.patentCatagory);
             this.state.patentState = String(nextProps.data.patentState);
             this.state.patentField = String(nextProps.data.patentField);
             this.loadData();
+            this.getContactsList(nextProps.data.uid);
         };
         this.state.visible = nextProps.showDesc;
     },
@@ -217,8 +291,10 @@ const PatentDesc = React.createClass({
     },
     render() {
         const Step = Steps.Step;
-        const theData = this.props.data;
-        if (this.props.data) {
+        const theData = this.state.data;
+
+        if (this.state.data) {
+            let companyAddress = theData.locationProvince || theData.locationCity || theData.locationArea ? theData.locationProvince + '/' + theData.locationCity + '/' + theData.locationArea : '';
             return (
                 <div className="patent-desc">
                     <Spin spinning={this.state.loading} className='spin-box'>
@@ -232,20 +308,28 @@ const PatentDesc = React.createClass({
                             className="patent-desc-content">
                             <div>
                                 <p className="widthHalf"><span>公司名称:</span>{theData.unitName}</p>
-                                <p className="widthHalf"><span>公司组织机构代码:</span>{theData.companyNum}</p>
+                                <p className="widthHalf"><span>公司组织机构代码:</span>{theData.orgCode}</p>
                             </div>
                             <div>
-                                <p className="widthHalf"><span>公司地址:</span>{theData.companyAddress}</p>
-                                <p className="widthHalf"><span className="three2eight">联系人</span>:{theData.companyContacts}</p>
+                                <p className="widthHalf"><span>公司地址:</span>{companyAddress}</p>
+                                <div className="widthHalf">
+                                    <span className="three2eight">联系人:</span>
+                                    <Select placeholder="选择联系人"
+                                        style={{ width: 200 }}
+                                        value={this.state.contacts}
+                                        onChange={(e) => { this.setState({ contacts: e }); }} >
+                                        {this.state.contactsOption}
+                                    </Select>
+                                </div>
                             </div>
                             <div>
-                                <p className="widthHalf"><span className="two2four">编号</span>:{theData.number}</p>
+                                <p className="widthHalf"><span className="two2four">编号</span>:{theData.serialNumber}</p>
                                 <p className="widthHalf"><span className="seven2eight">申请号/专利号</span>:<Input value={this.state.patentNumber} onChange={(e) => { this.setState({ patentNumber: e.target.value }); }} /></p>
                             </div>
                             <div>
                                 <p className="widthHalf"><span>专利名称:</span><Input value={this.state.patentName} onChange={(e) => { this.setState({ patentName: e.target.value }); }} /></p>
                                 <div className="widthHalf"><span className="four2eight">专利类型</span>:
-                                    <Select value={this.state.patentType} style={{ width: 200 }} onChange={(e) => { this.setState({ patentType: e }); } }>{this.state.patentTypeOption}</Select>
+                                    <Select value={this.state.data.patentCatagory} style={{ width: 200 }} onChange={(e) => { this.setState({ patentCatagory: e }); } }>{this.state.patentTypeOption}</Select>
                                 </div>
                             </div>
                             <div>
@@ -282,7 +366,7 @@ const PatentDesc = React.createClass({
                                 <div>材料管理:
                                     {theData.patentWritingUrl !== null && theData.patentWritingUrl !== undefined && theData.patentWritingUrl !== '' ?
                                     <p className="download-file">
-                                        <a onClick={downloadFile.bind(null, theData.patentWritingUrl, theData.patentWritingDownloadFileName)}>{theData.patentWritingDownloadFileName}</a>
+                                        <a onClick={newDownloadFile.bind(null, this.state.xid, "patent_writing", "/api/admin/patent/download")}>授权通知书</a>
                                         {theData.confirmState == '0' ?
                                             <Button onClick={this.confirmButton}>确认稿件</Button> : <span></span>
                                         }
@@ -291,50 +375,60 @@ const PatentDesc = React.createClass({
                                     }
                                     {theData.authorizationNoticeUrl !== null && theData.authorizationNoticeUrl !== undefined && theData.authorizationNoticeUrl !== '' ?
                                         <p className="download-file">
-                                            <a onClick={downloadFile.bind(null, theData.authorizationNoticeUrl, theData.authorizationNoticeDownloadFileName)}>{theData.authorizationNoticeDownloadFileName}</a>
+                                            <a onClick={newDownloadFile.bind(null, this.state.xid, "authorization_notice", "/api/admin/patent/download")}>授权通知书</a>
                                         </p> :
                                         <p><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />授权通知书未上传</p>
                                     }
                                     {theData.patentCertificateUrl !== null && theData.patentCertificateUrl !== undefined && theData.patentCertificateUrl !== '' ?
                                         <p className="download-file">
-                                            <a onClick={downloadFile.bind(null, theData.patentCertificateUrl, theData.patentCertificateDownloadFileName)}>{theData.patentCertificateDownloadFileName}</a>
+                                            <a onClick={newDownloadFile.bind(null, this.state.xid, "patent_certificate", "/api/admin/patent/download")}>专利证书</a>
                                         </p> :
                                         <p><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />专利证书未上传</p>
                                     }
                                     {theData.patentProryStatementUrl !== null && theData.patentProryStatementUrl !== undefined && theData.patentProryStatementUrl !== '' ?
                                         <p className="download-file">
-                                            <a onClick={downloadFile.bind(null, theData.patentProryStatementUrl, theData.patentProryStatementDownloadFileName)}>{theData.patentProryStatementDownloadFileName}</a>
+                                            <a onClick={newDownloadFile.bind(null, this.state.xid, "patent_prory_statement", "/api/admin/patent/download")}>{theData.patentProryStatementDownloadFileName}</a>
                                         </p> :
                                         <p><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />专利代理委托书未上传</p>
                                     }
                                     {theData.lastYearTaxReportUrl !== null && theData.lastYearTaxReportUrl !== undefined && theData.lastYearTaxReportUrl !== '' ?
                                         <p className="download-file">
-                                            <a onClick={downloadFile.bind(null, theData.lastYearTaxReportUrl, theData.lastYearTaxReportDownloadFileName)}>{theData.lastYearTaxReportDownloadFileName}</a>
+                                            <a onClick={newDownloadFile.bind(null, this.state.xid, "last_year_ratepay", "/api/admin/patent/downloadHonor")}>{theData.lastYearTaxReportDownloadFileName}</a>
                                         </p> :
-                                        <p><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />上年度纳税报表未上传</p>
+                                        <p><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />上年度纳税报表</p>
                                     }
                                 </div>
-                                <Avatar urlData={this.getPatentWritingUrl} name='patent_writing' oid={theData.oid}/>
-                                <Avatar urlData={this.getAuthorizationNoticeUrl} name='authorization_notice' oid={theData.oid}/>
-                                <Avatar urlData={this.getPatentCertificateUrl} name='patent_certificate' oid={theData.oid}/>
+                                <Avatar urlData={this.getPatentWritingUrl} name='patent_writing' uid={theData.uid}/>
+                                <Avatar urlData={this.getAuthorizationNoticeUrl} name='authorization_notice' uid={theData.uid}/>
+                                <Avatar urlData={this.getPatentCertificateUrl} name='patent_certificate' uid={theData.uid}/>
                             </div>
                             <div className="avatar-text"><span>专利稿件上传</span><span>授权通知书上传</span><span>专利证书上传</span></div>
-                            <div>
+                            <div className="clearfix">
                                 <p>专利状态流转记录:</p>
-                                {this.state.patentProcessList}
+                                <Table 
+                                    style={{ margin: '10px 0' }}
+                                    pagination={false}
+                                    dataSource={this.state.stateTable}  
+                                    columns={this.state.stateColumns} />
                                 <div className="widthThird">
                                     <span>状态流转:</span>
-                                    <Select value={this.state.patentStateAdd} style={{ width: 150 }} onChange={(e) => { this.setState({ patentStateAdd: e }); } }>{this.state.patentStateOption}</Select>
+                                    <Select placeholder='请选择状态' value={this.state.patentStateAdd} style={{ width: 150 }} onChange={(e) => { this.setState({ patentStateAdd: e }); } }>{this.state.patentStateOption}</Select>
                                 </div>
                                 <p className="widthThird">
                                     <span>处理时间:</span>
-                                    <DatePicker defaultValue={null} onChange={(data,dataString)=>{this.state.recordTime = dataString}}/>
+                                    <DatePicker 
+                                    value={this.state.recordTime ? moment(this.state.recordTime) : undefined} 
+                                    onChange={(data,dataString)=>{this.setState({recordTime : dataString});}}/>
                                 </p>
                                 <div className="widthThird">
                                     <span>负责人:</span>
-                                    <Select value={this.state.adminName} style={{ width: 150 }} onChange={(e) => { this.setState({ adminName: e }); } }>{this.state.adminOption}</Select>
+                                    <Select placeholder='请填写负责人' value={this.state.adminName} style={{ width: 150 }} onChange={(e) => { this.setState({ adminName: e }); } }>{this.state.adminOption}</Select>
                                 </div>
                             </div>
+                            <div>
+                                <span>备注:</span>
+                                <Input value={this.state.comment} placeholder='请填写备注' style={{ width: 400 }} onChange={(e)=>{this.setState({comment : e.target.value});}}/>
+                            </div>
                         </Modal>
                     </Spin>
                 </div>

+ 48 - 57
js/component/manageCenter/servicesManage/patent/comprehensive.jsx

@@ -15,24 +15,23 @@ const Patent = React.createClass({
             loading: true
         });
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/managePatentList",
+            url: globalConfig.context + "/api/admin/patent/patentList",
             data: {
-                pageNo: pageNo || 1,
-                pageSize: this.state.pagination.pageSize,
-                serialNumber: this.state.number,
-                patentNumber: this.state.patentNumber,
-                patentName: this.state.patentName,
-                //office: 事务所,
-                locationProvince: this.state.province,
-                unitName: this.state.unitName,
-                patentCatagory: this.state.patentType,
-                patentState: this.state.patentState,
-                createTime: this.state.createTime,
-                patentApplicationDate: this.state.startTime,
-                authorizedDate: this.state.endTime,
+                page: pageNo || 1,
+                pageSize: this.state.pagination.pageSize || null,
+                serialNumber: this.state.number || null,
+                patentNumber: this.state.patentNumber || null,
+                patentName: this.state.patentName || null,
+                locationProvince: this.state.province || null,
+                unitName: this.state.unitName || null,
+                patentCatagory: this.state.patentType || null,
+                patentState: this.state.patentState || null,
+                createTime: this.state.createTime || null,
+                patentApplicationDate: this.state.startTime || null,
+                authorizedDate: this.state.endTime || null,
                 author: this.state.author
             },
             success: function (data) {
@@ -44,8 +43,9 @@ const Patent = React.createClass({
                     let thisdata = data.data.list[i];
                     this.state.data.push({
                         key: i,
-                        pid: thisdata.pid,
+                        pid: thisdata.id,
                         oid: thisdata.oid,
+                        uid: thisdata.uid,
                         number: thisdata.serialNumber || '',
                         patentNumber: thisdata.patentNumber || '',
                         unitName: thisdata.unitName || '',
@@ -102,32 +102,6 @@ const Patent = React.createClass({
             });
         }.bind(this));
     },
-    getAuthorList() {
-        this.setState({
-            loading: true
-        });
-        $.ajax({
-            method: "get",
-            dataType: "json",
-            crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/getAdmin",
-            success: function (data) {
-                if (data.error.length || !data.data) {
-                    return;
-                };
-                let _me = this;
-                for (var item in data.data) {
-                    _me.state.authorOption.push(
-                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
-                    )
-                };
-            }.bind(this),
-        }).always(function () {
-            this.setState({
-                loading: false
-            });
-        }.bind(this));
-    },
     getCompanyList() {
         this.setState({
             loading: true
@@ -156,19 +130,9 @@ const Patent = React.createClass({
     },
     getInitialState() {
         return {
-            number: '',
-            patentNumber: '',
-            //office: 事务所,
-            province: '',
-            unitName: '',
-            patentType: '',
-            patentName: '',
-            patentState: '',
             createTime: [],
             endTime: [],
             startTime: [],
-            author: '',
-            AlertDis: 'block',
             patentTypeOption: [],
             patentStateOption: [],
             companyOption: [],
@@ -261,7 +225,7 @@ const Patent = React.createClass({
             )
         });
         this.loadData();
-        this.getAuthorList();
+        //this.getAuthorList();
         this.getCompanyList();
     },
     tableRowClick(record, index) {
@@ -296,7 +260,7 @@ const Patent = React.createClass({
         this.loadData();
     },
     exportComposite() {
-        window.open(globalConfig.context + "/techservice/patent/exportComposite" +
+        window.open(globalConfig.context + "/api/admin/patent/exportComposite" +
             "?" + "serialNumber" + "=" + this.state.number +
             "&" + "patentNumber" + "=" + this.state.patentNumber +
             "&" + "patentName" + "=" + this.state.patentName +
@@ -352,7 +316,7 @@ const Patent = React.createClass({
                         <Upload style={{ float: 'right' }}
                             name="ratepay"
                             showUploadList={false}
-                            action={globalConfig.context + "/api/admin/uploadTemplate"}
+                            action={globalConfig.context + "/api/admin/patent/uploadTemplate"}
                             data={{ 'sign': 'patent_prory_statement' }}
                             beforeUpload={beforeUploadFile}
                             onChange={(info) => {
@@ -402,7 +366,6 @@ const Patent = React.createClass({
                                 onChange={(e) => { this.state.province = e }}>
                                 {this.state.provinceOption}
                             </Select>
-                            <Select placeholder="选择撰写人" style={{ width: 200 }} onChange={(e) => { this.state.author = e }}>{this.state.authorOption}</Select>
                             <Select placeholder="选择公司"
                                 style={{ width: 200 }}
                                 showSearch
@@ -427,4 +390,32 @@ const Patent = React.createClass({
     }
 });
 
-export default Patent;
+export default Patent;
+
+//<Select placeholder="选择撰写人" style={{ width: 200 }} onChange={(e) => { this.state.author = e }}>{this.state.authorOption}</Select>
+    // getAuthorList() {
+    //     this.setState({
+    //         loading: true
+    //     });
+    //     $.ajax({
+    //         method: "get",
+    //         dataType: "json",
+    //         crossDomain: false,
+    //         url: globalConfig.context + "/api/admin/getAdmin",
+    //         success: function (data) {
+    //             if (data.error.length || !data.data) {
+    //                 return;
+    //             };
+    //             let _me = this;
+    //             for (var item in data.data) {
+    //                 _me.state.authorOption.push(
+    //                     <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
+    //                 )
+    //             };
+    //         }.bind(this),
+    //     }).always(function () {
+    //         this.setState({
+    //             loading: false
+    //         });
+    //     }.bind(this));
+    // },

+ 2 - 1
js/component/manageCenter/servicesManage/patent/correction.jsx

@@ -16,7 +16,7 @@ const Correction = React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/noticeOfCorrectionList",
+            url: globalConfig.context + "/api/admin/patent/noticeOfCorrectionList",
             data: {
                 pageNo: pageNo || 1,
                 pageSize: this.state.pagination.pageSize
@@ -31,6 +31,7 @@ const Correction = React.createClass({
                     this.state.data.push({
                         key: i,
                         pid:thisdata.pid,
+                        uid:thisdata.uid,
                         number: thisdata.serialNumber,
                         patentNumber: thisdata.patentNumber,
                         office: thisdata.office,

+ 2 - 1
js/component/manageCenter/servicesManage/patent/correctionDesc.jsx

@@ -24,9 +24,10 @@ const CorrectionDesc = React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/replyConfirm",
+            url: globalConfig.context + "/api/admin/patent/replyConfirm",
             data: {
                 pid: this.props.data.pid,
+                uid: this.props.data.uid,
                 patentState: this.props.data.patentState
             },
             success: function (data) {

+ 4 - 6
js/component/manageCenter/servicesManage/patent/express.jsx

@@ -12,15 +12,13 @@ const Express = React.createClass({
         this.setState({
             loading: true
         });
+        let page = pageNo || 1,
+        pageSize = this.state.pagination.pageSize;
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/getRecieveSendList",
-            data: {
-                pageNo: pageNo || 1,
-                pageSize: this.state.pagination.pageSize,
-            },
+            url: globalConfig.context + "/api/admin/patent/getRecieveSendList?pageNo=" + page + "&pageSize=" + pageSize,
             success: function (data) {
                 if (data.error.length || !data.data || !data.data.list) {
                     message.warning(data.error[0].message);

+ 1 - 1
js/component/manageCenter/servicesManage/patent/expressDesc.jsx

@@ -26,7 +26,7 @@ const ExpressDesc = React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/saveRecieveSend",
+            url: globalConfig.context + "/api/admin/patent/saveRecieveSend",
             data: {
                 "rid": this.props.data.rid,
                 "pid": this.props.data.pid,

+ 8 - 8
js/component/manageCenter/servicesManage/patent/payment.jsx

@@ -13,16 +13,15 @@ const Payment = React.createClass({
         this.setState({
             loading: true
         });
+        let page = pageNo || 1,
+        pageSize = this.state.pagination.pageSize,
+        locationProvince = this.state.province;
+
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/managePendingPaymentList",
-            data: {
-                pageNo: pageNo || 1,
-                pageSize: this.state.pagination.pageSize,
-                locationProvince: this.state.province,
-            },
+            url: globalConfig.context + "/api/admin/patent/pendingPaymentList?pageNo=" + page + "&pageSize=" + pageSize + "&locationProvince=" + locationProvince,
             success: function (data) {
                 if (data.error.length || !data.data || !data.data.list) {
                     message.warning(data.error[0].message);
@@ -33,6 +32,7 @@ const Payment = React.createClass({
                     this.state.data.push({
                         key: i,
                         cid: thisdata.cid,
+                        uid: thisdata.uid,
                         number: thisdata.serialNumber,
                         province: thisdata.locationProvince,
                         patentNumber: thisdata.patentNumber,
@@ -164,7 +164,7 @@ const Payment = React.createClass({
         this.loadData();
     },
     exportPending() {
-        window.open(globalConfig.context + "/techservice/patent/exportPending?locationProvince=" + this.state.province)
+        window.open(globalConfig.context + "/api/admin/patent/exportPending?locationProvince=" + this.state.province)
     },
     render() {
         return (

+ 3 - 2
js/component/manageCenter/servicesManage/patent/paymentDesc.jsx

@@ -24,9 +24,10 @@ const PatentDesc = React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/confirmPayment",
+            url: globalConfig.context + "/api/admin/patent/confirmPayment",
             data: {
-                cid : this.props.data.cid
+                cid : this.props.data.cid,
+                uid : this.props.data.uid
             },
             success: function (data) {
                 if ( data.error.length ) {

+ 44 - 81
js/component/manageCenter/servicesManage/technology/applyAdd.jsx

@@ -1,5 +1,5 @@
 import React from 'react';
-import { Button, Input, Select, message, Modal, Checkbox } from 'antd';
+import { Button, Input, Select, message, Modal, Checkbox, Radio } from 'antd';
 import { companySearch } from '../../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
@@ -13,13 +13,10 @@ const ApplyAdd = React.createClass({
     },
     getContactsList(theUid) {
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/getContacts",
-            data: {
-                uid: theUid
-            },
+            url: globalConfig.context + "/api/admin/getContacts?uid=" + theUid,
             success: function (data) {
                 let theOption = [];
                 if (data.error.length || !data.data) {
@@ -36,31 +33,6 @@ const ApplyAdd = React.createClass({
                 });
             }.bind(this),
         });
-        $.ajax({
-            method: "post",
-            dataType: "json",
-            crossDomain: false,
-            url: globalConfig.context + "/api/user/getDepartment",
-            data: {
-                uid: theUid
-            },
-            success: function (data) {
-                if (data.error.length || !data.data) {
-                    message.warning(data.error[0].message);
-                    return;
-                };
-                let theOption = [];
-                for (var item in data.data) {
-                    theOption.push(
-                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
-                    );
-                };
-                this.setState({
-                    departmentOption: theOption
-                })
-                
-            }.bind(this),
-        });
     },
     componentWillReceiveProps(nextProps) {
         this.state.visible = nextProps.showAdd
@@ -75,8 +47,8 @@ const ApplyAdd = React.createClass({
             loading: true
         });
         if (!this.state.uid) {
-             message.warning('请选择公司!');
-             this.setState({
+            message.warning('请选择公司!');
+            this.setState({
                 loading: false
             });
             return;
@@ -92,7 +64,7 @@ const ApplyAdd = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admintechproject/applyTechProject",
+            url: globalConfig.context + "/api/admin/techproject/applyTechProject",
             data: {
                 uid: this.state.uid,
                 contacts: this.state.contacts,
@@ -133,19 +105,15 @@ const ApplyAdd = React.createClass({
             loading: e
         });
     },
-    projectEstablishmentCheck(e) {
-        if (e.target.checked == true) {
-            this.state.projectMode = 1;
-        } else if (e.target.checked == false) {
-            this.state.projectMode = 0;
-        };
-    },
     subsidyCheck(e) {
-        if (e.target.checked == true) {
+        if (e.target.value == 1) {
             this.state.subsidy = 1;
-        } else if (e.target.checked == false) {
-            this.state.subsidy = 0;
+        } else if (e.target.value == 2) {
+            this.state.projectMode = 1;
         };
+        this.setState({
+            moneyType: e.target.value
+        });
     },
     render() {
         return (
@@ -181,68 +149,63 @@ const ApplyAdd = React.createClass({
                                 {this.state.contactsOption}
                             </Select>
                         </div>
-                        
+
                     </div>
                     <div className="clearfix">
                         <div className="half-item">
-                            <span className="item-title">选择申报科技部门:  </span>
-                            <Select 
-                                placeholder="请选择申报部门" 
-                                style={{ width: 200 }}
-                                onSelect={(e, n) => { this.state.department = e; }}>
-                                {this.state.departmentOption}
-                            </Select>
+                            <span className="item-title">申报科技部门:  </span>
+                            <Input
+                                placeholder="请填写申报部门"
+                                style={{ width: '200px' }}
+                                onChange={(e) => { this.state.department = e.target.value; }}
+                            />
                         </div>
                     </div>
                     <div className="clearfix">
-                    	<div>
+                        <div>
                             <span className="item-title">派单信息:  </span>
                         </div>
                         <Input type="textarea" rows={6} onChange={(e) => { this.state.dispatchInfo = e.target.value; }} />
                     </div>
                     <div className="clearfix">
-	                 	<div className="half-item">
-	                   		<span className="item-title">项目名称:  </span>
-	                     	<Input  style={{ width: 200 }} onChange={(e) => { this.state.projectName = e.target.value; }} />
-	                	</div>
+                        <div className="half-item">
+                            <span className="item-title">项目名称:  </span>
+                            <Input style={{ width: 200 }} onChange={(e) => { this.state.projectName = e.target.value; }} />
+                        </div>
                     </div>
                     <div className="clearfix">
-                    	<div className="half-item">
-	                   		<span className="item-title">项目类型:  </span>
-	                     	<Input  style={{ width: 200 }} onChange={(e) => { this.state.projectCatagory = e.target.value; }} />
-	                	</div>
-	                </div>
-	                <div className="clearfix">
-                    	<div className="half-item">
-	                   		<span className="item-title">技术领域:  </span>
-	                     	<Input  style={{ width: 200 }} onChange={(e) => { this.state.techField = e.target.value; }} />
-	                	</div>
-	                </div>
-	                <div className="clearfix">
-                    	<div>
-                            <span className="item-title">项目介绍:  </span>
+                        <div className="half-item">
+                            <span className="item-title">项目类型:  </span>
+                            <Input style={{ width: 200 }} onChange={(e) => { this.state.projectCatagory = e.target.value; }} />
                         </div>
-                        <Input type="textarea" rows={6} onChange={(e) => { this.state.projectDes = e.target.value; }} />
                     </div>
-                    
                     <div className="clearfix">
                         <div className="half-item">
-                            <span className="item-title">是否立项: </span>
-                            <Checkbox onChange={this.projectEstablishmentCheck}></Checkbox>
+                            <span className="item-title">技术领域:  </span>
+                            <Input style={{ width: 200 }} onChange={(e) => { this.state.techField = e.target.value; }} />
                         </div>
-                        <div className="half-item">
-                        	<span className="item-title">立项金额: </span>
-                            <Input style={{ width: 200 }} onChange={(e) => { this.state.projectApproval = e.target.value; }}  />
+                    </div>
+                    <div className="clearfix">
+                        <div>
+                            <span className="item-title">项目介绍:  </span>
                         </div>
+                        <Input type="textarea" rows={6} onChange={(e) => { this.state.projectDes = e.target.value; }} />
                     </div>
                     <div className="clearfix">
                         <div className="half-item">
-                            <span className="item-title">是否后补助: </span>
-                            <Checkbox onChange={this.subsidyCheck}></Checkbox>
+                            <span className="item-title">立项/后补助: </span>
+                            <Radio.Group onChange={this.subsidyCheck}>
+                                <Radio value={1}>立项</Radio>
+                                <Radio value={2}>后补助</Radio>
+                            </Radio.Group>
+                        </div>
+                        <div className="half-item">
+                            <span className="item-title">{this.state.moneyType !== 2 ? '立项' : '后补助'}金额: </span>
+                            <Input style={{ width: 200 }} onChange={(e) => { this.state.projectApproval = e.target.value; }} />
                         </div>
                     </div>
                     <div className="clearfix">
-                    	<div className="half-item">
+                        <div className="half-item">
                             <span className="item-title">选择咨询师:  </span>
                             <Select placeholder="请选择咨询师" style={{ width: 200 }}
                                 onSelect={(e, n) => { this.state.consultant = e }}>

+ 118 - 146
js/component/manageCenter/servicesManage/technology/applyChange.jsx

@@ -1,7 +1,7 @@
 import React from 'react';
-import { Icon, Form, Button, Input, Select, Spin, Table, DatePicker, message, Modal, Checkbox, Upload } from 'antd';
-import { cognizanceStateList } from '../../../dataDic.js';
-import { getCognizanceState, beforeUpload, beforeUploadFile, downloadFile } from '../../../tools.js';
+import { Icon, Form, Button, Input, Select, Spin, Table, DatePicker, message, Modal, Upload, Radio } from 'antd';
+import { technologyStateList } from '../../../dataDic.js';
+import { getTechnologyState, beforeUpload, beforeUploadFile, techDownloadFile } from '../../../tools.js';
 import ajax from 'jquery/src/ajax/xhr.js';
 import $ from 'jquery/src/ajax';
 
@@ -14,27 +14,26 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admintechproject/techProjectDetial",
+            url: globalConfig.context + "/api/admin/techproject/techProjectDetial",
             data: {
                 pid: id || this.props.data.pid
             },
             success: function (data) {
- 
+
                 if (data.error.length || !data.data) {
                     message.warning(data.error[0].message);
                     return;
                 };
                 this.state.data = data.data;
-
+                this.state.moneyType = undefined;
                 if (data.data.projectMode == 1) {
                     this.state.projectMode = data.data.projectMode;
-                    this.setState({projectModeState:true});
+                    this.setState({ moneyType: 2 });
                 }
                 if (data.data.subsidy == 1) {
                     this.state.subsidy = data.data.subsidy;
-                    this.setState({subsidyState:true});
+                    this.setState({ moneyType: 1 });
                 }
-                this.getDepartmentList();
                 this.getContactsList();
             }.bind(this),
         }).always(function () {
@@ -51,7 +50,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admintechproject/techProjectLog",
+            url: globalConfig.context + "/api/admin/techproject/techProjectLog",
             data: {
                 pid: id || this.props.data.pid
             },
@@ -78,46 +77,12 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             });
         }.bind(this));
     },
-    getDepartmentList () {
-        this.setState({
-            loading: true
-        });
-        $.ajax({
-            method: "post",
-            dataType: "json",
-            crossDomain: false,
-            url: globalConfig.context + "/api/user/getDepartment",
-            data: {
-                uid: this.props.data.uid,
-            },
-            success: function (data) {
-                this.state.departmentOption = [];
-                if (data.error.length || !data.data) {
-                    message.warning(data.error[0].message);
-                    return;
-                };
-                for (var item in data.data) {
-                    this.state.departmentOption.push(
-                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
-                    )
-                };
-                this.setState({department:data.data[this.state.data.department]});
-            }.bind(this),
-        }).always(function () {
-            this.setState({
-                loading: false
-            });
-        }.bind(this));
-    },
     getContactsList() {
         $.ajax({
-            method: "post",
+            method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admin/getContacts",
-            data: {
-                uid: this.props.data.uid,
-            },
+            url: globalConfig.context + "/api/admin/getContacts?uid=" + this.props.data.uid,
             success: function (data) {
                 let theOption = [];
                 if (data.error.length || !data.data) {
@@ -136,12 +101,41 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             }.bind(this),
         });
     },
+    getOptionList() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/techproject/status",
+            success: function (data) {
+                let _me = this;
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                        return;
+                    };
+                };
+                _me.state.stateOption = [];
+                for (var item in data.data) {
+                    _me.state.stateOption.push(
+                        <Select.Option value={item} key={item}>{data.data[item]}</Select.Option>
+                    )
+                };
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
     getInitialState() {
         return {
             loading: false,
             stateOption: [],
-            departmentOption: [],
-            projectDes:'',
+            projectDes: '',
             projectMode: 0,
             subsidy: 0,
             projectModeState: false,
@@ -150,7 +144,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                 title: '专利状态',
                 dataIndex: 'state',
                 key: 'state',
-                render: (text) => { return getCognizanceState(text) }
+                render: (text) => { return getTechnologyState(text) }
             }, {
                 title: '处理时间',
                 dataIndex: 'recordTime',
@@ -168,15 +162,10 @@ const ApplyChangeFrom = Form.create()(React.createClass({
         };
     },
     componentWillMount() {
-        let _me = this;
-        cognizanceStateList.map(function (item) {
-            _me.state.stateOption.push(
-                <Select.Option value={item.value} key={item.key}>{item.key}</Select.Option>
-            )
-        });
         this.loadData();
+        this.getOptionList();
         this.getStateData();
-        
+
     },
     handleSubmit(e) {
         e.preventDefault();
@@ -194,7 +183,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/api/admintechproject/updateTechProject",
+                    url: globalConfig.context + "/api/admin/techproject/updateTechProject",
                     data: {
                         id: this.props.data.pid,
                         uid: this.props.data.uid,
@@ -208,7 +197,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                         projectApproval: values.projectApproval,
                         subsidy: this.state.subsidy,
                         approvalUrl: this.state.approvalUrl,
-                        
+
                         recordTimeFormattedDate: values.recordTime ? values.recordTime.format("YYYY-MM-DD") : undefined,
                         state: values.state,
                         principal: values.principal,
@@ -234,23 +223,17 @@ const ApplyChangeFrom = Form.create()(React.createClass({
             this.getStateData(nextProps.data.pid);
         };
     },
-    projectEstablishmentCheck(e) {
-        if (e.target.checked == true) {
-            this.setState({projectModeState:true})
-            this.state.projectMode = 1;
-        } else if (e.target.checked == false) {
-            this.setState({projectModeState:false})
-            this.state.projectMode = 0;
-        };
-    },
     subsidyCheck(e) {
-        if (e.target.checked == true) {
-            this.setState({subsidyState:true})
+        if (e.target.value == 1) {
             this.state.subsidy = 1;
-        } else if (e.target.checked == false) {
-            this.setState({subsidyState:false})
+            this.state.projectMode = 0;
+        } else if (e.target.value == 2) {
             this.state.subsidy = 0;
+            this.state.projectMode = 1;
         };
+        this.setState({
+            moneyType: e.target.value
+        });
     },
     render() {
         const FormItem = Form.Item;
@@ -275,33 +258,33 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                         </div>
                         <div className="half-item">
                             <span className="item-title">公司地址: </span>
-                            <span>{theData.province+' '+theData.city+' '+theData.area}</span>
+                            <span>{theData.province + ' ' + theData.city + ' ' + theData.area}</span>
                         </div>
                         <div className="half-item">
-                            <FormItem 
+                            <FormItem
                                 labelCol={{ span: 4 }}
                                 wrapperCol={{ span: 10 }}
                                 label="联系人:"
                             >
                                 {getFieldDecorator('contacts', {
                                     initialValue: this.state.contacts
-                                    })(
-                                        <Select>{this.state.contactsOption}</Select>
-                                    )}      
+                                })(
+                                    <Select>{this.state.contactsOption}</Select>
+                                    )}
                             </FormItem>
                         </div>
                     </div>
                     <div className="clearfix">
                         <FormItem className="third-item"
                             {...formItemLayout}
-	                            label="科技部门"
-	                        >
-                                {getFieldDecorator('department', {
-                                    initialValue: this.state.department
-                                    })(
-                                        <Select>{this.state.departmentOption}</Select>
-                                    )}
-	                 	</FormItem>
+                            label="科技部门"
+                        >
+                            {getFieldDecorator('department', {
+                                initialValue: this.state.department
+                            })(
+                                <Input placeholder='请输入科技部门' />
+                                )}
+                        </FormItem>
                     </div>
                     <div className="clearfix">
                         <div className="half-item">
@@ -310,97 +293,86 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                         </div>
                     </div>
                     <div className="clearfix">
-                    	<div className="half-item">
-	                        <FormItem
-		                        labelCol={{ span: 4 }}
-                        		wrapperCol={{ span: 12 }}
-		                        label="项目名称"
-		                    >
+                        <div className="half-item">
+                            <FormItem
+                                labelCol={{ span: 4 }}
+                                wrapperCol={{ span: 12 }}
+                                label="项目名称"
+                            >
                                 {getFieldDecorator('projectName', {
                                     initialValue: theData.projectName
-                                    })(
-                                        <Input />
+                                })(
+                                    <Input />
                                     )}
-		                    </FormItem>
-	                    </div>
+                            </FormItem>
+                        </div>
                     </div>
                     <div className="clearfix">
-                    	<div className="half-item">
-	                        <FormItem
-		                        labelCol={{ span: 4 }}
-	                        	wrapperCol={{ span: 12 }}
-		                        label="项目类型"
-		                    >
+                        <div className="half-item">
+                            <FormItem
+                                labelCol={{ span: 4 }}
+                                wrapperCol={{ span: 12 }}
+                                label="项目类型"
+                            >
                                 {getFieldDecorator('projectCatagory', {
                                     initialValue: theData.projectCatagory
-                                    })(
-                                        <Input />
+                                })(
+                                    <Input />
                                     )}
-		                    </FormItem>
-	                    </div>
+                            </FormItem>
+                        </div>
                     </div>
                     <div className="clearfix">
-                    	<div className="half-item">
-	                        <FormItem
-		                        labelCol={{ span: 4 }}
-	                        	wrapperCol={{ span: 12 }}
-		                        label="技术领域"
-		                    >
+                        <div className="half-item">
+                            <FormItem
+                                labelCol={{ span: 4 }}
+                                wrapperCol={{ span: 12 }}
+                                label="技术领域"
+                            >
                                 {getFieldDecorator('techField', {
                                     initialValue: theData.techField
-                                    })(
-                                        <Input />
+                                })(
+                                    <Input />
                                     )}
-		                    </FormItem>
-		                </div>
+                            </FormItem>
+                        </div>
                     </div>
                     <div className="clearfix">
-                     	<span className="item-title">项目简介: </span>
-                            {getFieldDecorator('projectDes', {
-                                initialValue: theData.projectDes
-                                })(
-                                    <Input type="textarea"
-                          	            placeholder="多行输入"
-                                        rows={6} />
-                                )}
+                        <span className="item-title">项目简介: </span>
+                        {getFieldDecorator('projectDes', {
+                            initialValue: theData.projectDes
+                        })(
+                            <Input type="textarea"
+                                placeholder="多行输入"
+                                rows={6} />
+                            )}
                     </div>
                     <div className="clearfix">
                         <div className="half-item">
-                            <span className="item-title">是否立项: </span>
-                            <Checkbox 
-                                onChange={this.projectEstablishmentCheck}
-                                checked={this.state.projectModeState}
-                                >
-                            </Checkbox>
+                            <span className="item-title">立项/后补助: </span>
+                            <Radio.Group value={this.state.moneyType} onChange={this.subsidyCheck}>
+                                <Radio value={1}>立项</Radio>
+                                <Radio value={2}>后补助</Radio>
+                            </Radio.Group>
                         </div>
                         <div className="half-item">
                             <FormItem
-			                    {...formItemLayout}
-			                    label="立项金额"
-			                >
+                                {...formItemLayout}
+                                label={this.state.moneyType !== 2 ? '立项金额' : '后补助金额'}
+                            >
                                 {getFieldDecorator('projectApproval', {
                                     initialValue: theData.projectApproval
                                 })(
-                                    <Input style={{ width:150,marginRight:10 }}/>
-                                )}
+                                    <Input style={{ width: 200 }} />
+                                    )}
                                 <span>万元</span>
-			                </FormItem>
-                        </div>
-                    </div>
-                    <div className="clearfix">
-                        <div className="half-item">
-                            <span className="item-title">是否后补助: </span>
-                            <Checkbox 
-                                onChange={this.subsidyCheck}
-                                checked={this.state.subsidyState}
-                                >
-                            </Checkbox>
+                            </FormItem>
                         </div>
                     </div>
                     <div className="hrSituation-roster">
                         <Upload
                             name="avatar"
-                            action={globalConfig.context + "/api/admintechproject/upload"}
+                            action={globalConfig.context + "/api/admin/techproject/upload"}
                             data={{ 'uid': this.props.data.uid }}
                             beforeUpload={beforeUploadFile}
                             showUploadList={false}
@@ -423,7 +395,7 @@ const ApplyChangeFrom = Form.create()(React.createClass({
                         >
                             <Button><Icon type="upload" /> 项目材料上传 </Button>
                         </Upload>
-                        <p style={{ marginTop: '10px' }}>{theData.approvalUrl ? <a onClick={downloadFile.bind(null, theData.approvalUrl, theData.approvalDownloadFileName)}>{theData.approvalDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
+                        <p style={{ marginTop: '10px' }}>{theData.approvalUrl ? <a onClick={techDownloadFile.bind(null, "/api/admin/techproject/download", this.state.data.id)}>{theData.approvalDownloadFileName}</a> : <span><Icon type="exclamation-circle" style={{ color: '#ffbf00', marginRight: '6px' }} />未上传!</span>}</p>
                     </div>
                     <div className="form-title">状态流转记录: </div>
                     <Table pagination={false} dataSource={this.state.stateTable} columns={this.state.stateColumns} />

+ 28 - 26
js/component/manageCenter/servicesManage/technology/applyManage.jsx

@@ -19,7 +19,7 @@ const ApplyManage = React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admintechproject/listTechProject",
+            url: globalConfig.context + "/api/admin/techproject/listTechProject",
             data: {
                 pageNo: pageNo || 1,
                 pageSize: this.state.pagination.pageSize,
@@ -33,16 +33,16 @@ const ApplyManage = React.createClass({
                 }
                 for (let i = 0; i < data.data.list.length; i++) {
                     let thisdata = data.data.list[i];
-                    switch (thisdata.contacts){
-                    	case 1:
-                    		thisdata.contacts = thisdata.firstContacts;
-                    		break;
-                    	case 2:
-                    		thisdata.contacts = thisdata.secondContacts;
-                    		break;
-                    	case 3:
-                    		thisdata.contacts = thisdata.thirdContacts;
-                    		break;
+                    switch (thisdata.contacts) {
+                        case 1:
+                            thisdata.contacts = thisdata.firstContacts;
+                            break;
+                        case 2:
+                            thisdata.contacts = thisdata.secondContacts;
+                            break;
+                        case 3:
+                            thisdata.contacts = thisdata.thirdContacts;
+                            break;
                     }
                     this.state.data.push({
                         key: i,
@@ -110,9 +110,12 @@ const ApplyManage = React.createClass({
             method: "get",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/techservice/patent/getUnitNames",
+            url: globalConfig.context + "/api/admin/getUnitNames",
             success: function (data) {
-                if (data.error.length || !data.data) {
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    }
                     return;
                 };
                 let _me = this;
@@ -179,7 +182,7 @@ const ApplyManage = React.createClass({
                     title: '项目类型',
                     dataIndex: 'projectCatagory',
                     key: 'projectCatagory'
-                },{
+                }, {
                     title: '技术领域',
                     dataIndex: 'techField',
                     key: 'techField'
@@ -188,7 +191,7 @@ const ApplyManage = React.createClass({
                     dataIndex: 'state',
                     key: 'state',
                     render: text => { return getTechnologyState(text) },
-                },{
+                }, {
                     title: '派单日',
                     dataIndex: 'createTime',
                     key: 'createTime'
@@ -223,7 +226,6 @@ const ApplyManage = React.createClass({
         this.loadData();
         this.getAuthorList();
         this.getCompanyList();
-        //        this.getContactsList();
     },
     tableRowClick(record, index) {
         this.state.RowData = record;
@@ -252,7 +254,7 @@ const ApplyManage = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admintechproject/deleteTechProject",
+            url: globalConfig.context + "/api/admin/techproject/deleteTechProject",
             data: {
                 ids: deletedIds
             }
@@ -300,13 +302,13 @@ const ApplyManage = React.createClass({
                 <div className="content-title">
                     <span>科技项目申报管理</span>
                     <div className="foster-query" style={{ float: "right" }}>
-	                    <div>
-	                        <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
-	                            onClick={this.addClick}>申请新科技项目<Icon type="plus" /></Button>
-	                    </div>
-	                </div>
+                        <div>
+                            <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
+                                onClick={this.addClick}>申请新科技项目<Icon type="plus" /></Button>
+                        </div>
+                    </div>
                 </div>
-                
+
                 <div className="foster-query">
                     <Select placeholder="选择省份"
                         style={{ width: 200 }}
@@ -327,10 +329,10 @@ const ApplyManage = React.createClass({
                     <Button type="primary" onClick={this.search}>搜索</Button>
                     <Button onClick={this.reset}>重置</Button>
                     <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
-                            disabled={!hasSelected}
-                            onClick={this.delectRow}>删除<Icon type="minus" /></Button>
+                        disabled={!hasSelected}
+                        onClick={this.delectRow}>删除<Icon type="minus" /></Button>
                 </div>
-                
+
                 <div className="patent-table">
                     <Spin spinning={this.state.loading}>
                         <Table columns={this.state.columns}

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

@@ -34,7 +34,7 @@ const WebsiteAdd = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admintechproject/disposeTechWebsite",
+            url: globalConfig.context + "/api/admin/techproject/disposeTechWebsite",
             data: {
                 uid: this.state.unitName,
                 department: this.state.department,

+ 2 - 2
js/component/manageCenter/servicesManage/technology/websiteChange.jsx

@@ -15,7 +15,7 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admintechproject/techWebsiteDetail",
+            url: globalConfig.context + "/api/admin/techproject/techWebsiteDetail",
             data: {
                 id: id || this.props.data.id
             },
@@ -56,7 +56,7 @@ const WebsiteChangeFrom = Form.create()(React.createClass({
                     method: "POST",
                     dataType: "json",
                     crossDomain: false,
-                    url: globalConfig.context + "/api/admintechproject/disposeTechWebsite",
+                    url: globalConfig.context + "/api/admin/techproject/disposeTechWebsite",
                     data: {
                         id: this.state.data.id,
                         uid: this.state.data.uid,

+ 2 - 3
js/component/manageCenter/servicesManage/technology/websiteManage.jsx

@@ -19,7 +19,7 @@ const Cognizance = React.createClass({
             method: "post",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admintechproject/listTechWebsite",
+            url: globalConfig.context + "/api/admin/techproject/listTechWebsite",
             data: {
                 pageNo: pageNo || 1,
                 pageSize: this.state.pagination.pageSize,
@@ -144,7 +144,6 @@ const Cognizance = React.createClass({
         });
         this.loadData();
         this.getCompanyList();
-        //        this.getContactsList();
     },
     tableRowClick(record, index) {
         this.state.RowData = record;
@@ -173,7 +172,7 @@ const Cognizance = React.createClass({
             method: "POST",
             dataType: "json",
             crossDomain: false,
-            url: globalConfig.context + "/api/admintechproject/deleteTechWebsite",
+            url: globalConfig.context + "/api/admin/techproject/deleteTechWebsite",
             data: {
                 ids: deletedIds
             }

+ 63 - 0
js/component/manageCenter/set/content.jsx

@@ -0,0 +1,63 @@
+import React, { Component } from 'react';
+import '../content.less';
+import './content.less';
+import LeftTab from './leftTab';
+
+
+class Content extends Component {
+    constructor() {
+        super();
+        this.state = {
+            loading: false,
+            component: <div />,
+        };
+    }
+    componentWillMount() {
+        if (window.location.hash) {
+            this.getKey(window.location.hash.substr(1));
+        } else {
+            this.getKey('member');
+        };
+    }
+    getKey(key) {
+        switch (key) {
+            case 'member':
+                require.ensure([], () => {
+                    const Member = require('./member').default;
+                    this.setState({
+                        component: <Member />,
+                    });
+                });
+                break;
+            case 'permission':
+                require.ensure([], () => {
+                    const Permission = require('./permission').default;
+                    this.setState({
+                        component: <Permission />,
+                    });
+                });
+                break;
+            case 'role':
+                require.ensure([], () => {
+                    const Role = require('./role').default;
+                    this.setState({
+                        component: <Role />,
+                    });
+                });
+                break;
+        };
+        window.location.hash = key;
+    }
+    render() {
+        return (
+            <div className="manage-content">
+                <LeftTab handlekey={this.getKey.bind(this)} />
+                <div className="content-right">
+                    {this.state.component}
+                </div>
+            </div>
+        )
+    }
+}
+
+export default Content;

+ 34 - 0
js/component/manageCenter/set/content.less

@@ -0,0 +1,34 @@
+.set-content {
+    background: #fff;
+    padding: 20px;
+    .set-title {
+        >span {
+            font-size: 16px;
+            color: #333;
+        }
+        >button {
+            float: right;
+            margin-right: 20px;
+        }
+    }
+    .member-table {
+        margin-top: 20px;
+    }
+}
+
+.ant-modal-body {
+    .modal-content {
+        >li {
+            margin-bottom: 20px;
+            >span {
+                margin-right: 20px;
+                display: inline-block;
+                width: 60px;
+                text-align: right;
+            }
+            >input {
+                width: 200px;
+            }
+        }
+    }
+}

+ 46 - 0
js/component/manageCenter/set/leftTab.jsx

@@ -0,0 +1,46 @@
+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: 'userList',
+        };
+    },
+    handleClick(e) {
+        this.props.handlekey(e.key);
+        this.setState({
+            current: e.key,
+        });
+    },
+    componentWillMount(){
+        if ( window.location.hash ) {
+            this.state.current = window.location.hash.substr(1);
+        };
+    },
+    render() {
+        return (
+            <Menu onClick={this.handleClick}
+                selectedKeys={[this.state.current]}
+                mode="vertical"
+                className="account-left"
+                >
+                <Menu.Item key="member">
+                    管理员列表
+                </Menu.Item>
+                <Menu.Item key="permission">
+                    权限控制
+                </Menu.Item>
+                <Menu.Item key="role">
+                    角色控制
+                </Menu.Item>
+            </Menu>
+        );
+    },
+});
+
+export default LeftTab;

+ 179 - 0
js/component/manageCenter/set/member.jsx

@@ -0,0 +1,179 @@
+import React from 'react';
+import { Table, Button, Spin, message, Popconfirm, Icon } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+import TheModal from './modal.jsx';
+
+const Member = React.createClass({
+    loadData(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true
+        });
+        return $.ajax({
+            type: 'get',
+            cache: false,
+            url: globalConfig.context + "/api/admin/adminList",
+            dataType: "json",
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize
+            },
+            success: function (data) {
+                if (!data.data) {
+                    if (data.error && data.error.length) {
+                        message.warning(data.error[0].message);
+                    };
+                    return;
+                };
+                for (let i = 0; i < data.data.list.length; i++) {
+                    let thisdata = data.data.list[i];
+                    this.state.data.push({
+                        key: i,
+                        id: thisdata.id,
+                        mobile: thisdata.mobile,
+                        name: thisdata.name,
+                        email: thisdata.email,
+                        createTime: thisdata.createTime,
+                        number: thisdata.number,
+                        province: thisdata.province,
+                        createTimeFormattedDate: thisdata.createTimeFormattedDate
+                    });
+                };
+                this.state.pagination.current = data.data.pageNo;
+                this.state.pagination.total = data.data.totalCount;
+                this.setState({
+                    data: this.state.data,
+                    pagination: this.state.pagination
+                });
+            }.bind(this),
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    getInitialState() {
+        return {
+            data: [],
+            dataSource: [],
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            modalData: {},
+            modalShow: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadData(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            }
+        }
+    },
+    componentDidMount() {
+        this.loadData();
+    },
+    addNew() {
+        let e = {}
+        this.setState({
+            modalData: e,
+            modalShow: true
+        })
+    },
+    edit(e) {
+        this.setState({
+            modalData: e,
+            modalShow: true
+        })
+    },
+    handleReturn(show, render) {
+        this.state.modalShow = show;
+        if (render) {
+            this.loadData();
+        }
+    },
+    resetPwd(e) {
+        this.setState({
+            loading: true
+        })
+        $.ajax({
+            type: 'post',
+            url: globalConfig.context + "/api/admin/resetPwd",
+            dataType: "json",
+            data: {
+                id: e.id
+            }
+        }).done((res) => {
+            if (res.error.length) {
+                message.error(res.error[0].message);
+            } else {
+                message.success("密码重置成功");
+            }
+        }).always(() => {
+            this.setState({
+                loading: false
+            })
+        });
+    },
+    render() {
+        const columns = [{
+            title: '编号',
+            dataIndex: 'number',
+            key: 'number'
+        }, {
+            title: '登录账号',
+            dataIndex: 'mobile',
+            key: 'mobile'
+        }, {
+            title: '名字',
+            dataIndex: 'name',
+            key: 'name'
+        }, {
+            title: '省份',
+            dataIndex: 'province',
+            key: 'province'
+        }, {
+            title: '邮箱',
+            dataIndex: 'email',
+            key: 'email'
+        }, {
+            title: '创建时间',
+            dataIndex: 'createTimeFormattedDate',
+            key: 'createTimeFormattedDate'
+        }, {
+            title: '操作',
+            dataIndex: 'act',
+            key: 'act',
+            render: (text, record, index) => {
+                return <Popconfirm title={"用户" + record.name + "的密码将会重置为123456,确认操作?"} onConfirm={this.resetPwd.bind(null, record)} okText="确认" cancelText="取消" placement="topRight">
+                    <Button>重置密码</Button>
+                </Popconfirm>
+            },
+            width: '15%'
+        }];
+        return (
+            <Spin spinning={this.state.loading}>
+                <div className="set-content">
+                    <div className="set-title">
+                        <span>管理员设置</span>
+                        <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
+                            onClick={this.addNew}>添加<Icon type="plus" /></Button>
+                    </div>
+                    <TheModal data={this.state.modalData} show={this.state.modalShow} handleReturn={this.handleReturn} />
+                    <Table className='member-table'
+                        columns={columns}
+                        onRowClick={this.edit}
+                        dataSource={this.state.data}
+                        pagination={this.state.pagination} />
+                </div>
+            </Spin>
+        );
+    }
+});
+export default Member;

+ 175 - 0
js/component/manageCenter/set/modal.jsx

@@ -0,0 +1,175 @@
+import React from 'react';
+import { Modal, Input, Spin, Switch, Select, Message } from 'antd';
+import { provinceArr } from '../../dataDic.js';
+import { companySearch } from '../../tools.js';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+export default class TheModal extends React.Component {
+    postData() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            type: "POST",
+            url: this.state.id ? globalConfig.context + "/api/admin/updateAdmin" : globalConfig.context + "/api/admin/insertAdmin",
+            data: {
+                'id': this.state.id,
+                'name': this.state.name,
+                'email': this.state.email,
+                'mobile': this.state.mobile,
+                'province':this.state.province,
+                'roles': this.state.bindroles
+            }
+        }).done((res) => {
+            if (res.error.length) {
+                Message.error(res.error[0].message);
+            } else {
+                Message.success("保存成功");
+                this.setState({
+                    visible: false,
+                });
+                this.props.handleReturn(false, true);
+                //第二个参数表示保存
+            }
+        }).always(() => {
+            this.setState({
+                loading: false
+            })
+        })
+        this.props.postData;
+    }
+    constructor(props) {
+        super(props);
+        this.state = {
+            name: '',
+            email: '',
+            mobile: '',
+            roles: [],
+            visible: false,
+            loading: false,
+            provinceOption: [],
+            bindroles: []
+        }
+    }
+    handleCancel() {
+        this.setState({
+            visible: false,
+        });
+        this.props.handleReturn(false, false);
+    }
+    componentWillMount() {
+        let _me = this;
+        provinceArr.map(function (item) {
+            _me.state.provinceOption.push(
+                <Select.Option value={item} key={item}>{item}</Select.Option>
+            )
+        });
+    }
+    loadInitialData() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            url: globalConfig.context + '/api/roles',
+            cache: false
+        }).done((rolesres) => {
+            this.setState({
+                roles: rolesres.data,
+                loading: false
+            });
+        })
+    }
+    componentWillReceiveProps(nextProps) {
+        if (nextProps.show && !this.state.roles.length) {
+            this.loadInitialData();
+        };
+        let nextState = {
+            visible: nextProps.show,
+            id: nextProps.data ? nextProps.data.id : '',
+            name: nextProps.data ? nextProps.data.name : '',
+            email: nextProps.data ? nextProps.data.email : '',
+            mobile: nextProps.data ? nextProps.data.mobile : '',
+            province: nextProps.data ? nextProps.data.province : '',
+            bindroles: nextProps.data && nextProps.data.roles ? nextProps.data.roles.map((role) => { return String(role.id); }) : []
+        };
+        this.setState(nextState)
+    }
+
+    getRolesSelection() {
+        if (this.state.id > 1) {
+            return <li>
+                <span className='modal-text'>角色</span>
+                <Select
+                    multiple
+                    style={{ width: '60%' }}
+                    placeholder="选择用户关联角色"
+                    value={this.state.bindroles}
+                    onChange={this.bindRoles.bind(this)}
+                >
+                    {this.getRolesOptions()}
+                </Select>
+            </li>
+        } else if (this.state.id == "1") {
+            return <li><span className='modal-text'>角色</span><span>系统管理员</span></li>
+        }
+    }
+
+
+    bindRoles(val) {
+        this.setState({
+            bindroles: val
+        });
+    }
+
+
+    getRolesOptions() {
+        let options = [];
+        for (let i = 0; i < this.state.roles.length; i++) {
+            options.push(<Select.Option key={String(this.state.roles[i].id)}>{this.state.roles[i].roleName}</Select.Option>);
+        }
+        return options;
+    }
+
+    render() {
+        return (
+            <div className="modal" >
+                <Spin spinning={this.state.loading} >
+                    <Modal title="用户编辑"
+                        closable={false}
+                        visible={this.state.visible}
+                        onOk={this.postData.bind(this)}
+                        onCancel={this.handleCancel.bind(this)}
+                    >
+                        <ul className="modal-content">
+                            <li>
+                                <span className='modal-text'>名字</span>
+                                <Input value={this.state.name} onChange={(e) => { this.state.name = e.target.value; this.setState({ name: this.state.name }); }} />
+                            </li>
+                            <li>
+                                <span className='modal-text'>登录账号</span>
+                                <Input value={this.state.mobile} onChange={(e) => { this.state.mobile = e.target.value; this.setState({ mobile: this.state.mobile }); }} />
+                            </li>
+                            <li>
+                                <span className='modal-text'>省份</span>
+                                <Select placeholder="选择省份"
+                                    style={{ width: 200 }}
+                                    value={this.state.province}
+                                    showSearch
+                                    filterOption={companySearch}
+                                    onChange={(e) => { this.setState({ province: e }) }}>
+                                    {this.state.provinceOption}
+                                </Select>
+                            </li>
+                            <li>
+                                <span className='modal-text'>邮箱</span>
+                                <Input value={this.state.email} onChange={(e) => { this.state.email = e.target.value; this.setState({ email: this.state.email }); }} />
+                            </li>
+                            {this.getRolesSelection()}
+                        </ul>
+                    </Modal>
+                </Spin>
+            </div >
+        );
+    }
+}

+ 166 - 0
js/component/manageCenter/set/permission.jsx

@@ -0,0 +1,166 @@
+import React from 'react';
+import { Table, Button, Input, Spin, Message, Icon } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
+
+const Permission = React.createClass({
+    getInitialState() {
+        return {
+            data: [],
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false
+        }
+    },
+
+    componentDidMount() {
+        this.loadData();
+    },
+
+    loadData() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            url: globalConfig.context + '/api/permissions',
+            method: 'get',
+            cache: false
+        }).done((res) => {
+            if (!res.error.length) {
+                this.setState({
+                    data: res.data
+                })
+            }
+        }).always(() => {
+            this.setState({
+                loading: false
+            });
+        });
+    },
+
+    save() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            url: globalConfig.context + '/api/permission',
+            method: 'post',
+            data: {
+                data: JSON.stringify(this.state.data)
+            }
+        }).done((res) => {
+            if (!res.error.length) {
+                Message.success("保存成功");
+                this.loadData();
+            } else {
+                Message.error(res.error[0].message);
+            }
+        }).always(() => {
+            this.setState({
+                loading: false
+            });
+        })
+    },
+
+    remove() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            }
+        };
+        this.setState({
+            loading: deletedIds.length > 0
+        });
+        if (deletedIds.length) {
+            $.ajax({
+                url: globalConfig.context + '/api/permission/delete',
+                method: 'post',
+                data: {
+                    data: JSON.stringify(deletedIds)
+                }
+            }).done((res) => {
+                if (!res.error.length) {
+                    Message.success("删除成功");
+                    this.state.selectedRowKeys.sort((a, b) => { return b - a });
+                    for (let idx = 0; idx < this.state.selectedRowKeys.length; idx++) {
+                        let dataIndex = this.state.selectedRowKeys[idx];
+                        this.state.data.splice(dataIndex, 1);
+                    };
+                    this.setState({
+                        data: this.state.data,
+                        selectedRowKeys: []
+                    });
+                } else {
+                    Message.error(res.error[0].message);
+                }
+            }).always(() => {
+                this.setState({
+                    loading: false
+                });
+            })
+        }
+    },
+
+    addNew() {
+        this.state.data.push({
+            id: null,
+            name: '',
+            url: ''
+        });
+        this.setState({
+            data: this.state.data
+        })
+    },
+
+    render() {
+        const columns = [{
+            title: '权限名字',
+            dataIndex: 'name',
+            key: 'name',
+            render: (text, record, index) => {
+                return <Input value={record.name} onChange={(e) => { record.name = e.target.value; this.setState({ data: this.state.data }); }} />
+            }
+        }, {
+            title: '接口路径',
+            dataIndex: 'url',
+            key: 'url',
+            render: (text, record, index) => {
+                return <Input value={record.url} onChange={(e) => { record.url = e.target.value; this.setState({ data: this.state.data }); }} />
+            }
+        }];
+        const rowSelection = {
+            type: 'checkbox',
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows,
+                    selectedRowKeys: selectedRowKeys
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        return (
+            <Spin spinning={this.state.loading}>
+                <div className="set-content">
+                    <div className="set-title">
+                        <span>权限控制</span>
+                        <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
+                            onClick={this.addNew}>添加<Icon type="plus" /></Button>
+                        <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                            disabled={!hasSelected}
+                            onClick={this.remove}>删除<Icon type="minus" /></Button>
+                        <Button type="primary" onClick={this.save}>保存修改</Button>
+                    </div>
+                    <Table className="member-table"
+                        columns={columns}
+                        dataSource={this.state.data}
+                        pagination={false}
+                        rowSelection={rowSelection} />
+                </div>
+            </Spin>
+        );
+    }
+});
+export default Permission;

+ 264 - 0
js/component/manageCenter/set/role.jsx

@@ -0,0 +1,264 @@
+import React from 'react';
+import { Table, Button, Input, Spin, Message, Select, Modal, Tag, Icon } from 'antd';
+import ajax from 'jquery/src/ajax/xhr.js'
+import $ from 'jquery/src/ajax';
+
+const Role = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            disabled: false,
+            name: '',
+            selectOption: [],
+            data: [],
+            selectedRowKeys: [],
+            selectedRows: [],
+            loading: false,
+            permissions: {
+
+            },
+            modelRecord: {
+                id: '',
+                name: '',
+                permissions: []
+            }
+        }
+    },
+
+    componentWillMount() {
+        this.loadData();
+    },
+
+    loadData() {
+        let _me = this;
+        this.setState({
+            loading: true
+        });
+        $.when($.ajax({
+            url: globalConfig.context + '/api/roles',
+            method: 'get',
+            cache: false
+        }), $.ajax({
+            url: globalConfig.context + '/api/permissions',
+            method: 'get',
+            cache: false
+        })).done((roles, permissions) => {
+            if (!roles[0].error.length && roles[0].data) {
+                this.state.data = [];
+                for (let i = 0; i < roles[0].data.length; i++) {
+                    let thisdata = roles[0].data[i];
+                    this.state.data.push({
+                        key: i,
+                        id: thisdata.id,
+                        roleName: thisdata.roleName,
+                        permissions: thisdata.permissions.map((p) => { return String(p.id) }) || []
+                    });
+                };
+            }
+            if (!permissions[0].error.length && permissions[0].data) {
+                _me.state.selectOption = [];
+                permissions[0].data.map(function (item) {
+                    _me.state.selectOption.push(
+                        <Select.Option key={item.id}>{item.name}</Select.Option>
+                    )
+                    _me.state.permissions[String(item.id)] = item.name;
+                });
+            }
+        }).always(() => {
+            this.setState({
+                loading: false
+            });
+        });
+    },
+
+    save() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            url: globalConfig.context + '/api/role',
+            method: 'post',
+            data: { data: JSON.stringify(this.state.modelRecord) },
+        }).done((res) => {
+            if (!res.error.length) {
+                Message.success("保存成功");
+                this.loadData();
+            } else {
+                Message.error(res.error[0].message);
+            }
+        }).always(() => {
+            this.setState({
+                loading: false,
+                visible: false,
+                disabled: false
+            });
+        })
+    },
+
+    remove() {
+        let deletedIds = [];
+        for (let idx = 0; idx < this.state.selectedRows.length; idx++) {
+            let rowItem = this.state.selectedRows[idx];
+            if (rowItem.id) {
+                deletedIds.push(rowItem.id)
+            }
+        };
+        this.setState({
+            loading: deletedIds.length > 0
+        });
+        if (deletedIds.length) {
+            $.ajax({
+                url: globalConfig.context + '/api/role/delete',
+                method: 'post',
+                data: {
+                    data: JSON.stringify(deletedIds)
+                }
+            }).done((res) => {
+                if (!res.error.length) {
+                    Message.success("删除成功");
+                    this.state.selectedRowKeys.sort((a, b) => { return b - a });
+                    for (let idx = 0; idx < this.state.selectedRowKeys.length; idx++) {
+                        let dataIndex = this.state.selectedRowKeys[idx];
+                        this.state.data.splice(dataIndex, 1);
+                    };
+                    this.setState({
+                        data: this.state.data,
+                        selectedRowKeys: []
+                    });
+                } else {
+                    Message.error(res.error[0].message);
+                }
+            }).always(() => {
+                this.setState({
+                    loading: false
+                });
+            })
+        }
+    },
+
+    addNew() {
+        this.setState({
+            visible: true,
+            modelRecord: {
+                id: null,
+                roleName: '',
+                permissions: []
+            }
+        })
+    },
+
+    edit(e) {
+        this.setState({
+            modelRecord: {
+                id: e.id,
+                roleName: e.roleName,
+                permissions: e.permissions
+            },
+            visible: true,
+            disabled: false
+        })
+    },
+
+    handleCancel() {
+        this.setState({
+            visible: false,
+            disabled: false
+        })
+    },
+
+    render() {
+        const columns = [{
+            title: '名字',
+            dataIndex: 'roleName',
+            key: 'roleName'
+        }, {
+            title: '绑定权限',
+            dataIndex: 'permissions',
+            key: 'permissions',
+            render: (text, record, index) => {
+                let _me = this;
+                if (record.permissions) {
+                    return <div>
+                        {record.permissions.map((tag) => {
+                            return <Tag key={tag} closable={false}>
+                                {_me.state.permissions[tag]}
+                            </Tag>
+                        }
+                        )}
+                    </div>
+                } else {
+                    return <div></div>;
+                }
+            },
+        }];
+        const rowSelection = {
+            type: 'checkbox',
+            selectedRowKeys: this.state.selectedRowKeys,
+            onChange: (selectedRowKeys, selectedRows) => {
+                this.setState({
+                    selectedRows: selectedRows,
+                    selectedRowKeys: selectedRowKeys
+                });
+            }
+        };
+        const hasSelected = this.state.selectedRowKeys.length > 0;
+        return (
+            <Spin spinning={this.state.loading}>
+                <Modal title="用户编辑"
+                    closable={false}
+                    visible={this.state.visible}
+                    onOk={this.save}
+                    onCancel={this.handleCancel}>
+                    <ul className="modal-content">
+                        <li>
+                            <span className='modal-text'>名字</span>
+                            <Input value={this.state.modelRecord.roleName} onChange={(e) => {
+                                this.state.modelRecord.roleName = e.target.value;
+                                this.setState({
+                                    modelRecord: this.state.modelRecord
+                                })
+                            }} />
+                        </li>
+                        <li>
+                            <span className='modal-text'>权限</span>
+                            <Select
+                                multiple
+                                style={{ width: '76%' }}
+                                placeholder="选择绑定权限"
+                                disabled={!this.state.modelRecord.id}
+                                filterOption={(input, option) => { return option.props.children.indexOf(input) >= 0 }}
+                                value={this.state.modelRecord.permissions}
+                                onChange={(pids) => {
+                                    this.state.modelRecord.permissions = pids;
+                                    this.setState({
+                                        modelRecord: this.state.modelRecord
+                                    })
+                                }}
+                            >
+                                {this.state.selectOption}
+                            </Select>
+                        </li>
+                    </ul>
+                </Modal>
+                <div className="set-content">
+                    <div className="set-title">
+                        <span>角色控制</span>
+                        <Button style={{ background: "#ea0862", border: "none", color: "#fff" }}
+                            onClick={this.addNew}>添加<Icon type="plus" /></Button>
+                        <Button style={{ background: "#3fcf9e", border: "none", color: "#fff" }}
+                            disabled={!hasSelected}
+                            onClick={this.remove}>删除<Icon type="minus" /></Button>
+                    </div>
+                    <Table className='member-table'
+                        columns={columns}
+                        dataSource={this.state.data}
+                        onRowClick={this.edit}
+                        pagination={false}
+                        rowSelection={rowSelection} />
+                </div>
+            </Spin>
+        );
+    }
+});
+
+export default Role;

+ 396 - 9
js/component/manageCenter/topTab.jsx

@@ -1,5 +1,7 @@
 import React from 'react';
-import { Row, Col } from 'antd';
+import { Row, Col, Icon, Modal, Button, Spin, Select, Input, message, Badge, Table, Tabs } from 'antd';
+import { provinceArr } from '../dataDic.js';
+import { companySearch } from '../tools.js';
 import './topTab.less';
 import ajax from 'jquery/src/ajax/xhr.js'
 import $ from 'jquery/src/ajax';
@@ -7,10 +9,343 @@ import $ from 'jquery/src/ajax';
 
 import logo from '../../../image/acc-logo.png';
 
+const MessageModal = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false,
+            pagination: {
+                defaultCurrent: 1,
+                defaultPageSize: 10,
+                showQuickJumper: true,
+                pageSize: 10,
+                onChange: function (page) {
+                    this.loadReaded(page);
+                }.bind(this),
+                showTotal: function (total) {
+                    return '共' + total + '条数据';
+                }
+            },
+            columns: [
+                {
+                    title: '编号',
+                    dataIndex: 'key',
+                    key: 'key'
+                }, {
+                    title: '类型',
+                    dataIndex: 'noticeType',
+                    key: 'noticeType',
+                    render: (text) => {
+                        switch (text) {
+                            case 1:
+                                return <a href={globalConfig.context + "/admin/servicesManage/patent.html#comprehensive"}> 专利申请管理 </a>;
+                            case 3:
+                                return <a href={globalConfig.context + "/admin/servicesManage/copyright.html#copyright"}> 软著申请管理 </a>;
+                            case 2:
+                                return <a href={globalConfig.context + "/admin/servicesManage/highTech.html#highTechApply"}> 高企认定管理 </a>;
+                            case 4:
+                                return <a href={globalConfig.context + "/admin/servicesManage/technology.html#applyManage"}> 科技项目申报管理 </a>;
+                        }
+                    }
+                }, {
+                    title: '时间',
+                    dataIndex: 'createTimeFormattedDate',
+                    key: 'createTimeFormattedDate'
+                }, {
+                    title: '内容',
+                    dataIndex: 'content',
+                    key: 'content',
+                }
+            ],
+            data: []
+        };
+    },
+    loadReaded(pageNo) {
+        this.state.data = [];
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/notice/readed",
+            data: {
+                pageNo: pageNo || 1,
+                pageSize: this.state.pagination.pageSize,
+            }
+        }).done((data) => {
+            if (!data.data) {
+                if (data.error && data.error.length) {
+                    message.warning(data.error[0].message);
+                    return;
+                };
+            };
+            this.state.data = [];
+            for (let i = 0; i < data.data.list.length; i++) {
+                let thisdata = data.data.list[i];
+                this.state.data.push({
+                    key: i + 1,
+                    id: thisdata.id,
+                    aid: thisdata.aid,
+                    noticeType: thisdata.noticeType,
+                    content: thisdata.content,
+                    createTime: thisdata.createTime,
+                    createTimeFormattedDate: thisdata.createTimeFormattedDate,
+                });
+            };
+            this.state.pagination.current = data.data.pageNo;
+            this.state.pagination.total = data.data.totalCount;
+            this.setState({
+                dataSource: this.state.data,
+                pagination: this.state.pagination
+            });
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    loadUnread() {
+        this.state.data = [];
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/notice/unread",
+            // data: {
+            //     pageNo: pageNo || 1,
+            //     pageSize: this.state.pagination.pageSize,
+            // }
+        }).done((data) => {
+            if (!data.data) {
+                if (data.error && data.error.length) {
+                    message.warning(data.error[0].message);
+                    return;
+                };
+            };
+            this.state.data = [];
+            for (let i = 0; i < data.data.list.length; i++) {
+                let thisdata = data.data.list[i];
+                this.state.data.push({
+                    key: i + 1,
+                    id: thisdata.id,
+                    aid: thisdata.aid,
+                    noticeType: thisdata.noticeType,
+                    content: thisdata.content,
+                    createTime: thisdata.createTime,
+                    createTimeFormattedDate: thisdata.createTimeFormattedDate,
+                });
+            };
+            this.setState({
+                unreadData: this.state.data
+            });
+            // this.state.pagination.current = data.data.pageNo;
+            // this.state.pagination.total = data.data.totalCount;
+            // this.setState({
+            //     dataSource: this.state.data,
+            //     pagination: this.state.pagination
+            // });
+        }).always(function () {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    componentWillReceiveProps(nextProps) {
+        if (!this.state.visible && nextProps.showDesc) {
+            this.loadReaded();
+            this.loadUnread();
+        };
+        this.state.visible = nextProps.showDesc
+    },
+    handleOk() {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false, true);
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false, true);
+    },
+    render() {
+        return (
+            <div className="topTab-modal">
+                <Spin spinning={this.state.loading} className='spin-box'>
+                    <Modal title="信息中心" visible={this.state.visible}
+                        onOk={this.handleOk} onCancel={this.handleCancel}
+                        width='600px' footer={
+                            <Button key="back" onClick={this.handleCancel}>返回</Button>
+                        }
+                    >
+                        <Tabs defaultActiveKey="1">
+                            <Tabs.TabPane tab="新信息" key="1">
+                                <Table columns={this.state.columns}
+                                    dataSource={this.state.unreadData}
+                                    pagination={false} />
+                            </Tabs.TabPane>
+                            <Tabs.TabPane tab="已读信息" key="2">
+                                <Table columns={this.state.columns}
+                                    dataSource={this.state.dataSource}
+                                    pagination={this.state.pagination} />
+                            </Tabs.TabPane>
+                        </Tabs>
+                    </Modal>
+                </Spin>
+            </div>
+        );
+    }
+});
+
+const UserModal = React.createClass({
+    getInitialState() {
+        return {
+            visible: false,
+            loading: false,
+            provinceOption: []
+        };
+    },
+    componentWillMount() {
+        let _me = this;
+        provinceArr.map(function (item) {
+            _me.state.provinceOption.push(
+                <Select.Option value={item} key={item}>{item}</Select.Option>
+            )
+        });
+    },
+    loadData() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/adminInfo",
+            success: function (data) {
+                if (!data.data) {
+                    if (data.error[0] && data.error[0]) {
+                        message.warning(data.error[0].message);
+                    };
+                    return;
+                };
+                this.setState({
+                    id: data.data.id,
+                    mobile: data.data.mobile,
+                    name: data.data.name,
+                    email: data.data.email,
+                    createTime: data.data.createTime,
+                    number: data.data.number,
+                    province: data.data.province,
+                    createTimeFormattedDate: data.data.createTimeFormattedDate
+                });
+            }.bind(this),
+        }).always(function (data) {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    componentWillReceiveProps(nextProps) {
+        if (!this.state.visible && nextProps.showDesc) {
+            this.loadData();
+        };
+        this.state.visible = nextProps.showDesc
+    },
+    handleOk() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "post",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/updateAdminInfo",
+            data: {
+                id: this.state.id,
+                mobile: this.state.mobile,
+                name: this.state.name,
+                email: this.state.email,
+                province: this.state.province,
+                password: this.state.password,
+                pwd: this.state.pwd
+            }
+        }).always(function (data) {
+            if (data.error && data.error.length) {
+                message.warning(data.error[0].message);
+                this.setState({
+                    loading: false
+                });
+            } else {
+                message.success('保存成功!');
+                this.props.closeDesc(false, true);
+            };
+        }.bind(this));
+    },
+    handleCancel(e) {
+        this.setState({
+            visible: false,
+        });
+        this.props.closeDesc(false);
+    },
+    render() {
+        return (
+            <div className="topTab-modal">
+                <Spin spinning={this.state.loading} className='spin-box'>
+                    <Modal title="用户设置" visible={this.state.visible}
+                        onOk={this.handleOk} onCancel={this.handleCancel}
+                        width='380px'
+                    >
+                        <ul className="modal-content">
+                            <li>
+                                <span className='modal-text'>名字</span>
+                                <Input value={this.state.name} onChange={(e) => { this.state.name = e.target.value; this.setState({ name: this.state.name }); }} />
+                            </li>
+                            <li>
+                                <span className='modal-text'>登录账号</span>
+                                <Input value={this.state.mobile} onChange={(e) => { this.state.mobile = e.target.value; this.setState({ mobile: this.state.mobile }); }} />
+                            </li>
+                            <li>
+                                <span className='modal-text'>省份</span>
+                                <Select placeholder="选择省份"
+                                    style={{ width: 200 }}
+                                    value={this.state.province}
+                                    showSearch
+                                    filterOption={companySearch}
+                                    onChange={(e) => { this.setState({ province: e }) }}>
+                                    {this.state.provinceOption}
+                                </Select>
+                            </li>
+                            <li>
+                                <span className='modal-text'>邮箱</span>
+                                <Input value={this.state.email} onChange={(e) => { this.state.email = e.target.value; this.setState({ email: this.state.email }); }} />
+                            </li>
+                            <li>
+                                <span className='modal-text'>密码</span>
+                                <Input value={this.state.password} onChange={(e) => { this.state.password = e.target.value; this.setState({ password: this.state.password }); }} />
+                            </li>
+                            <li>
+                                <span className='modal-text'>原密码</span>
+                                <Input value={this.state.pwd} onChange={(e) => { this.state.pwd = e.target.value; this.setState({ pwd: this.state.pwd }); }} />
+                            </li>
+                        </ul>
+                    </Modal>
+                </Spin>
+            </div>
+        );
+    }
+});
+
 const TopTab = React.createClass({
     getInitialState() {
         return {
-            username: 'username',
+            username: '请登录!',
         };
     },
     logOut() {
@@ -23,12 +358,61 @@ const TopTab = React.createClass({
             window.location.href = globalConfig.context + "/admin/login.html"
         });
     },
+    componentWillMount() {
+        this.loadData();
+    },
+    loadData() {
+        this.setState({
+            loading: true
+        });
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + "/api/admin/notice/unreadCount",
+            success: function (data) {
+                if (!data.data) {
+                    if (data.error[0] && data.error[0]) {
+                        message.warning(data.error[0].message);
+                        return;
+                    };
+                };
+                this.setState({
+                    badge: data.data,
+                });
+            }.bind(this),
+        }).always(function (data) {
+            this.setState({
+                loading: false
+            });
+        }.bind(this));
+    },
+    closeUserModal(e, s) {
+        this.state.userModalShow = e;
+        if (s) {
+            this.loadData();
+        };
+    },
+    closeMessageModal(e, s) {
+        this.state.messageModalShow = e;
+        if (s) {
+            this.loadData();
+        };
+    },
     render() {
         return (
             <div className="account-top" >
                 <div className="acc-top-user">
-                    <span className="acc-top-user-name">欢迎您, {adminData.name || adminData.mobile || this.state.username} <a onClick={this.logOut}>[ 退出 ]</a></span>
-                    <span className="acc-top-user-toindex"><a href={globalConfig.context + "/admin/index.html"}>返回首页</a></span>
+                    <span className="acc-top-user-name">欢迎您 , {adminData.name || adminData.mobile ? <a onClick={() => { this.setState({ userModalShow: true }); }}> {adminData.name || adminData.mobile} </a> : <a onClick={this.logOut}>{this.state.username}</a>} <a onClick={this.logOut}>[ 退出 ]</a></span>
+                    <span className="acc-top-user-toindex"><a href={globalConfig.avatarHost + "/html/index.html"}>返回首页</a></span>
+                    <a onClick={() => { this.setState({ messageModalShow: true }); }} className="user-badge">
+                        <Icon type="mail" />
+                        {(() => {
+                            if (this.state.badge) {
+                                return <Badge status="processing" />
+                            }
+                        })()}
+                    </a>
                 </div>
                 <div className="acc-index">
                     <div className="acc-index-imgbox">
@@ -38,13 +422,16 @@ const TopTab = React.createClass({
                 </div>
                 <div className="acc-top-tab">
                     <Row>
-                        <Col className={this.props.active === 'set' ? 'active' : ''} span={3}><a href={globalConfig.context + "/admin/userManage.html"}>用户管理</a></Col>
-                        <Col className={this.props.active === 'services' ? 'active' : ''} span={3}><a href={globalConfig.context + "/admin/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>
+                        <Col style={{ display: window.showUserManage ? 'block' : 'none' }} className={this.props.active === 'userManage' ? 'active' : ''} span={3}><a href={globalConfig.context + "/admin/userManage.html"}>用户管理</a></Col>
+                        <Col style={{ display: window.showServices ? 'block' : 'none' }} className={this.props.active === 'services' ? 'active' : ''} span={3}><a href={globalConfig.context + "/admin/servicesManage/patent.html"}>科技服务管理</a></Col>
+                        <Col style={{ display: window.showAchievement ? 'block' : 'none' }} className={this.props.active === 'achievement' ? 'active' : ''} span={3}><a href="">科技成果管理</a></Col>
+                        <Col style={{ display: window.showDemand ? 'block' : 'none' }} className={this.props.active === 'demand' ? 'active' : ''} span={3}><a href="">科技需求管理</a></Col>
+                        <Col style={{ display: window.showIdea ? 'block' : 'none' }} className={this.props.active === 'idea' ? 'active' : ''} span={3}><a href="">科技思想管理</a></Col>
+                        <Col style={{ display: window.showSystem ? 'block' : 'none' }} className={this.props.active === 'system' ? 'active' : ''} span={3}><a href={globalConfig.context + "/admin/set.html"}>系统设置</a></Col>
                     </Row>
                 </div>
+                <UserModal showDesc={this.state.userModalShow} closeDesc={this.closeUserModal} />
+                <MessageModal showDesc={this.state.messageModalShow} closeDesc={this.closeMessageModal} />
             </div >
         )
     }

+ 41 - 5
js/component/manageCenter/topTab.less

@@ -11,12 +11,34 @@
             height: 34px;
             line-height: 34px;
             background: #f8f8f8;
+            font-size: 14px;
             .acc-top-user-name {
                 margin-left: 10px;
+                line-height: 34px;
+                vertical-align: middle;
             }
             .acc-top-user-toindex {
                 float: right;
                 margin-right: 10px;
+                line-height: 34px;
+                vertical-align: middle;
+            }
+            .user-badge {
+                margin-left: 12px;
+                font-size: 18px;
+                color: #58a3ff;
+                position: relative;
+                line-height: 34px;
+                vertical-align: middle;
+                .ant-badge {
+                    position: absolute;
+                    right: -10px;
+                    top: 0;
+                    line-height: 0px;
+                    .ant-badge-status-processing {
+                        background-color: red
+                    }
+                }
             }
         }
         .acc-index {
@@ -27,8 +49,8 @@
             left: 0;
             color: #fff;
             background: #4665bf;
-            padding:27px 10px;
-            .acc-index-imgbox{
+            padding: 27px 10px;
+            .acc-index-imgbox {
                 width: 36px;
                 height: 36px;
                 padding-top: 36px;
@@ -48,7 +70,7 @@
                 font-size: 20px;
                 line-height: 36px;
                 a {
-                    color:#fff;
+                    color: #fff;
                 }
             }
         }
@@ -65,9 +87,9 @@
                 padding-left: 20px;
                 border-left: 1px solid #6b84cc;
                 div {
-                    margin:0 10px;
+                    margin: 0 10px;
                     a {
-                        color:#fff;
+                        color: #fff;
                     }
                 }
                 .active {
@@ -85,4 +107,18 @@
                 }
             }
         }
+    }
+
+    .modal-content {
+        >li {
+            margin-bottom: 20px;
+            >span {
+                display: inline-block;
+                width: 60px;
+                margin-right: 10px;
+            }
+            >input {
+                width: 200px;
+            }
+        }
     }

+ 102 - 6
js/component/tools.js

@@ -1,12 +1,11 @@
+import { message,Timeline,Select  } from 'antd';
+import React from 'react';
+import ajax from 'jquery/src/ajax/xhr.js';
+import $ from 'jquery/src/ajax';
 import {
-    message
-} from 'antd';
-import {
-    provinceList,
     patentTypeList,
     patentStateList,
     patentFieldList,
-    techFieldList,
     technicalSourceList,
     catagoryList,
     intellectualGetList,
@@ -17,7 +16,8 @@ import {
     copyrightStateList,
     vocations
 } from './dataDic.js';
-
+import { provinceList } from './DicProvinceList.js';
+import { techFieldList } from './DicTechFieldList.js'
 module.exports = {
     addressInit: function (_cmbProvince, _cmbCity, _cmbArea, defaultProvince, defaultCity, defaultArea) {
         var cmbProvince = document.getElementById(_cmbProvince);
@@ -305,9 +305,15 @@ module.exports = {
     downloadFile: function (path, fileName) {
         window.open(globalConfig.context + '/open/downloadFile?path=' + path + '&fileName=' + fileName)
     },
+    techDownloadFile: function (url, id) {
+        window.open(globalConfig.context + url + '?id=' + id)
+    },
     copyrightDownloadFile: function (id, sign, url) {
         window.open(globalConfig.context + url + '?id=' + id + '&sign=' + sign)
     },
+    newDownloadFile: function (id, sign, url) {
+        window.open(globalConfig.context + url + '?id=' + id + '&sign=' + sign)
+    },
     companySearch(input, option) {
         return option.props.children.indexOf(input) >= 0
     },
@@ -330,5 +336,95 @@ module.exports = {
             day = (day > 9 ? "" : "0") + day;
             return year + month + day;
         }
+    },
+    getStepList(pid,url) {
+        let stepList = [];
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            cache: false,
+            url: globalConfig.context + url + "?pid=" + pid,
+            success: function (data) {
+                if (!data.data) {
+                    if (data.error && data.error.length ) {
+                        return;
+                    };
+                };
+                for (var item in data.data) {
+                    stepList.push(
+                        <Timeline.Item key={item}> 
+                            <span>{module.exports.getPatentState(data.data[item].state)}</span> 
+                            {module.exports.getTime(data.data[item].recordTime)} 
+                        </Timeline.Item>
+                    )
+                };
+            }.bind(this),
+        });
+        return stepList;
+    },
+
+
+    //各种通过接口获取下拉列表
+
+    setPatentStateOption(permission) {
+        let theArr = [];
+        patentStateList.map(function (item) {
+            for (let i = 0; i < permission.length; i++) {
+                if (item.value == permission[i]) {
+                    theArr.push(item);
+                };
+            };
+        });
+        return theArr;
+    },
+    setUserContactsList(){
+        let theOption = [];
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/user/getContacts',
+            success: function (data) {
+                if (!data.data) {
+                    if ( data.error && data.error.length ) {
+                        message.warning(data.error[0].message);
+                    };
+                    return;
+                };
+                for (let item in data.data) {
+                    let theData = data.data[item];
+                    theOption.push(
+                        <Select.Option value={item} key={theData}>{theData}</Select.Option>
+                    );
+                };
+            }
+        });
+        return theOption;
+    },
+    setAdminContactsList(uid){
+        let theOption = [];
+        $.ajax({
+            method: "get",
+            dataType: "json",
+            crossDomain: false,
+            url: globalConfig.context + '/api/admin/getContacts',
+            data:{ "uid": uid },
+            success: function (data) {
+                if (!data.data) {
+                    if ( data.error && data.error.length ) {
+                        message.warning(data.error[0].message);
+                    };
+                    return;
+                };
+                for (let item in data.data) {
+                    let theData = data.data[item];
+                    theOption.push(
+                        <Select.Option value={item} key={theData}>{theData}</Select.Option>
+                    );
+                };
+            }
+        });
+        return theOption;
     }
 }

+ 1 - 1
package.json

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

+ 7 - 0
webpack.config.js

@@ -120,6 +120,13 @@ module.exports = (function () {
             filename: 'admin/servicesManage/technology.html',
             template: './template/template.html',
             chunks: ['admin/servicesManage/technology', 'vendors']
+        }),
+        //admin-set
+        new HtmlWebpackPlugin({
+            title: '管理员-用户管理',
+            filename: 'admin/set.html',
+            template: './template/template.html',
+            chunks: ['admin/set', 'vendors']
         })
     ];
     if (!isDev) {