miaofuhao 2 yıl önce
ebeveyn
işleme
f48a01c0e2
91 değiştirilmiş dosya ile 6608 ekleme ve 78 silme
  1. BIN
      AY12345.zip
  2. 3 3
      WebChartNewest/js/index.js
  3. 2 0
      WebChartNewest/js/login.js
  4. 3 3
      WebChartNewest/js/newIndex.js
  5. 6 2
      WebUI/CallCenterWeb.UI/CommonHtml/AddAppeal.html
  6. 2 0
      WebUI/CallCenterWeb.UI/CommonHtml/Cb.html
  7. 7 1
      WebUI/CallCenterWeb.UI/CommonHtml/WorkDatil.html
  8. 7 2
      WebUI/CallCenterWeb.UI/CommonHtml/auditBack.html
  9. 5 2
      WebUI/CallCenterWeb.UI/CommonHtml/jiaoban.html
  10. 4 1
      WebUI/CallCenterWeb.UI/OutboundMessage/LookMessage.html
  11. 6 2
      WebUI/CallCenterWeb.UI/OutboundMessage/LookMessages.html
  12. 2 0
      WebUI/CallCenterWeb.UI/OutboundMessage/MyTaskResult.html
  13. 6 1
      WebUI/CallCenterWeb.UI/OutboundMessage/OutboundAllo.html
  14. 3 2
      WebUI/CallCenterWeb.UI/OutboundMessage/OutboundPlan.html
  15. 6 2
      WebUI/CallCenterWeb.UI/Quality/zhijianjieguo.html
  16. 7 2
      WebUI/CallCenterWeb.UI/Quality/zhijianpingfen.html
  17. 7 3
      WebUI/CallCenterWeb.UI/ReportForm/unitContentInformationReport.html
  18. 6 1
      WebUI/CallCenterWeb.UI/SystemManager/js/yongHuManger.js
  19. 15 4
      WebUI/CallCenterWeb.UI/SystemManager/tongXun.html
  20. 4 5
      WebUI/CallCenterWeb.UI/SystemManager/yongHuManger.html
  21. 7 2
      WebUI/CallCenterWeb.UI/TelCall/BlackList.html
  22. 14 6
      WebUI/CallCenterWeb.UI/TelCall/CallRecord.html
  23. 6 2
      WebUI/CallCenterWeb.UI/TelCall/SMSlist.html
  24. 17 13
      WebUI/CallCenterWeb.UI/TelCall/callbackRecordList.html
  25. 11 8
      WebUI/CallCenterWeb.UI/TelCall/unCallBackRecord.html
  26. 8 2
      WebUI/CallCenterWeb.UI/TelCall/uplinkSMSList.html
  27. 6 2
      WebUI/CallCenterWeb.UI/TelCall/vipCall.html
  28. 4 0
      WebUI/CallCenterWeb.UI/js/OutboundMessage/OutboundPlan.js
  29. 23 0
      WebUI/CallCenterWeb.UI/js/sm2/decrypt.js
  30. 1 0
      WebUI/CallCenterWeb.UI/js/sm2/sm2.js
  31. 2 0
      WebUI/CallCenterWeb.UI/keHuManager/ContactPersonManger.html
  32. 8 4
      WebUI/CallCenterWeb.UI/keHuManager/js/keHuManger.js
  33. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/addOrEditPerformanceBonus.html
  34. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/addOrEditPerformanceReduce.html
  35. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/css/department.css
  36. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/js/addOrEditPerformanceBonus.js
  37. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/js/addOrEditPerformanceReduce.js
  38. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/js/department.js
  39. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/js/performanceBonus.js
  40. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/js/performanceReduce.js
  41. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/performanceAppraisalReport.html
  42. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/performanceBonus.html
  43. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/performanceReduce.html
  44. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/scoreDetails.html
  45. 0 0
      WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/singleScoreCalculationMethod.html
  46. 170 0
      WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuFunctional.html
  47. 176 0
      WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuGlossary.html
  48. 208 0
      WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuGuide.html
  49. 176 0
      WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuHotLssues.html
  50. 170 0
      WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuPoliciesRegulations.html
  51. 179 0
      WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuPolicyExpert.html
  52. 29 0
      WebUI/CallCenterWeb.UI/zhiShiKu/css/reflectCategory.css
  53. 219 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuFunctional.js
  54. 221 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuGlossary.js
  55. 238 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuGuide.js
  56. 221 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuHotLssues.js
  57. 219 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuPoliciesRegulations.js
  58. 197 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuPolicyExpert.js
  59. 82 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/reflectCategory.js
  60. 192 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuFunctional.js
  61. 192 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuGlossary.js
  62. 192 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuGuide.js
  63. 192 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuHotLssues.js
  64. 192 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuPoliciesRegulations.js
  65. 190 0
      WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuPolicyExpert.js
  66. 121 0
      WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuFunctional.html
  67. 121 0
      WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuGlossary.html
  68. 134 0
      WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuGuide.html
  69. 121 0
      WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuHotLssues.html
  70. 121 0
      WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuPoliciesRegulations.html
  71. 108 0
      WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuPolicyExpert.html
  72. 3 0
      anyangWebAPP/node_modules/sm-crypto/.babelrc
  73. 97 0
      anyangWebAPP/node_modules/sm-crypto/.eslintrc.js
  74. 78 0
      anyangWebAPP/node_modules/sm-crypto/CHANGELOG.md
  75. 7 0
      anyangWebAPP/node_modules/sm-crypto/LICENCE_MIT
  76. 160 0
      anyangWebAPP/node_modules/sm-crypto/README.md
  77. 1 0
      anyangWebAPP/node_modules/sm-crypto/dist/sm2.js
  78. 1 0
      anyangWebAPP/node_modules/sm-crypto/dist/sm3.js
  79. 1 0
      anyangWebAPP/node_modules/sm-crypto/dist/sm4.js
  80. 42 0
      anyangWebAPP/node_modules/sm-crypto/package.json
  81. 5 0
      anyangWebAPP/node_modules/sm-crypto/src/index.js
  82. 161 0
      anyangWebAPP/node_modules/sm-crypto/src/sm2/asn1.js
  83. 332 0
      anyangWebAPP/node_modules/sm-crypto/src/sm2/ec.js
  84. 260 0
      anyangWebAPP/node_modules/sm-crypto/src/sm2/index.js
  85. 170 0
      anyangWebAPP/node_modules/sm-crypto/src/sm2/sm3.js
  86. 194 0
      anyangWebAPP/node_modules/sm-crypto/src/sm2/utils.js
  87. 94 0
      anyangWebAPP/node_modules/sm-crypto/src/sm3/index.js
  88. 358 0
      anyangWebAPP/node_modules/sm-crypto/src/sm4/index.js
  89. 26 0
      anyangWebAPP/node_modules/sm-crypto/webpack.config.js
  90. 5 3
      anyangWebAPP/pages/adressBook/adressBook.vue
  91. 24 0
      anyangWebAPP/utils/secretKey.js

BIN
AY12345.zip


+ 3 - 3
WebChartNewest/js/index.js

@@ -21,7 +21,7 @@ $(document).ready(function() {
21 21
 	getHotline() //热线
22 22
 	getHotThings() //重大事件
23 23
 	getKeyWord(); //热搜词
24
-	getworkOrder() //工单类型
24
+	getworkOrderType() //工单类型
25 25
 	timeTable() //办理时限
26 26
 	getHotlineAccept() //热线受理
27 27
 	getNowFormatDate() //现在的时间
@@ -31,7 +31,7 @@ $(document).ready(function() {
31 31
 		getHotline() //热线
32 32
 		getHotThings() //重大事件
33 33
 		getKeyWord(); //热搜词
34
-		getworkOrder() //工单类型
34
+		getworkOrderType() //工单类型
35 35
 		timeTable() //办理时限
36 36
 		getHotlineAccept() //热线受理
37 37
 	}, 30000)
@@ -744,7 +744,7 @@ function getKeyWord() {
744 744
 	});
745 745
 }
746 746
 
747
-function getworkOrder() {
747
+function getworkOrderType() {
748 748
 	let workOrderData = [];
749 749
 	let workOrderName = []
750 750
 	new doAjax({

+ 2 - 0
WebChartNewest/js/login.js

@@ -78,6 +78,8 @@ $('.login_gl').click(function() {
78 78
 						expires: 7
79 79
 					});
80 80
 					loginHref()
81
+				}else{
82
+					layer.msg(data.message)
81 83
 				}
82 84
 			}
83 85
 		});

+ 3 - 3
WebChartNewest/js/newIndex.js

@@ -13,7 +13,7 @@ $(document).ready(function() {
13 13
 	getHotline() //热线
14 14
 	getHotThings() //重大事件
15 15
 	getKeyWord(); //热搜词
16
-	getworkOrder() //工单类型
16
+	getworkOrderType() //工单类型
17 17
 	timeTable() //办理时限
18 18
 	getHotlineAccept() //热线受理
19 19
 	getNowFormatDate()//现在的时间
@@ -23,7 +23,7 @@ $(document).ready(function() {
23 23
 		getHotline() //热线
24 24
 		getHotThings() //重大事件
25 25
 		getKeyWord(); //热搜词
26
-		getworkOrder() //工单类型
26
+		getworkOrderType() //工单类型
27 27
 		timeTable() //办理时限
28 28
 		getHotlineAccept() //热线受理
29 29
 	}, 30000)
@@ -596,7 +596,7 @@ function getKeyWord() {
596 596
 	});
597 597
 }
598 598
 
599
-function getworkOrder() {
599
+function getworkOrderType() {
600 600
 	let workOrderData = [];
601 601
 	let workOrderName = []
602 602
 	new doAjax({

+ 6 - 2
WebUI/CallCenterWeb.UI/CommonHtml/AddAppeal.html

@@ -285,6 +285,8 @@
285 285
 		<script src="../js/zTree/jquery.ztree.core.js"></script>
286 286
 		<script src="../js/ztreeSelect.js"></script>
287 287
 		<script src="../Script/Common/huayi.common.js"></script>
288
+		<script src="../js/sm2/sm2.js"></script>
289
+		<script src="../js/sm2/decrypt.js"></script>
288 290
 
289 291
 		<script>
290 292
 			var wid = helper.request.queryString("wid");
@@ -539,9 +541,11 @@
539 541
 							if(data.state.toLowerCase() == "success") {
540 542
 								var Data = data.data.data;
541 543
 								$(".F_WorkState").val(Data[0].F_WorkState)
544
+								var cusPhone = decryptFn(Data[0].F_CusPhoneShow)
542 545
 								$("#cusname").val(Data[0].F_CusName);
543
-								$("#cusphone").val(Data[0].F_CusPhone);
544
-								$("#conphone").val(Data[0].F_ConPhone);
546
+								$("#cusphone").val(cusPhone);
547
+								$("#conphone").val(cusPhone);
548
+								
545 549
 								$("#title").val(Data[0].F_ComTitle);
546 550
 								$("#content").val(Data[0].F_ComContent);
547 551
 								if(Data[0].F_Content === "" || Data[0].F_Content === null) {

+ 2 - 0
WebUI/CallCenterWeb.UI/CommonHtml/Cb.html

@@ -294,6 +294,8 @@
294 294
     <script src="../js/zTree/jquery.ztree.core.js"></script>
295 295
     <script src="../js/zTree/jquery.ztree.excheck.min.js"></script>
296 296
     <script src="../js/adjustHeight.js"></script>
297
+    <script src="../js/sm2/sm2.js"></script>
298
+	<script src="../js/sm2/decrypt.js"></script>
297 299
     <script>
298 300
         var wid = helper.request.queryString("wid");
299 301
         var State = 0;

+ 7 - 1
WebUI/CallCenterWeb.UI/CommonHtml/WorkDatil.html

@@ -857,6 +857,11 @@
857 857
 		<script src="../js/mousewheel/jquery.mousewheel.min.js"></script>
858 858
 		<script src="../js/WorkOrder/jquery.drag.js"></script>
859 859
 		<script src="../js/jquery-photo-gallery/jquery.photo.gallery.js"></script>
860
+		<script src="../css/laydate/laydate.js"></script>
861
+    	<script src="../js/adjustHeight.js"></script>
862
+    		
863
+    	<script src="../js/sm2/sm2.js"></script>
864
+		<script src="../js/sm2/decrypt.js"></script>
860 865
 		<!--<script src="../js/WorkOrder/WorkOrderList.js"></script>-->
861 866
 
862 867
 		<script>
@@ -1085,7 +1090,8 @@
1085 1090
 											} else {
1086 1091
 												$(".phoneTitle").unbind("click");
1087 1092
 											}
1088
-											phoneNumber = Data[0].F_CusPhone
1093
+											phoneNumber = decryptFn(Data[0].F_CusPhoneShow)
1094
+											
1089 1095
 										} else {
1090 1096
 											$(".phoneTitle").unbind("click");
1091 1097
 										}

+ 7 - 2
WebUI/CallCenterWeb.UI/CommonHtml/auditBack.html

@@ -123,6 +123,8 @@
123 123
     <!--<script src="../js/main.js?v=1.5"></script>-->
124 124
     <script src="../js/adjustHeight.js"></script>
125 125
     <script src="../js/guid.js"></script>
126
+    <script src="../js/sm2/sm2.js"></script>
127
+	<script src="../js/sm2/decrypt.js"></script>
126 128
     <script>
127 129
         var wid = helper.request.queryString("wid");
128 130
         var IsExamine = helper.request.queryString("IsExamine"); // 0待回访未审核、1待待回访已审核
@@ -391,20 +393,23 @@
391 393
             }, function (result) {
392 394
                 if (result.state.toLowerCase() == "success") {
393 395
                     var Data = result.data.data;
396
+                    
394 397
                     $('#msg3').val(Data[0].F_WorkOrderId)
395 398
                     $('#msg1').val(Data[0].F_CreateTime)
396 399
                     $('#msg2').text(Data[0].F_ComTitle)
397 400
                     $('#msg4').val(result.data.bldata && result.data.bldata[result.data.bldata.length - 1]
398 401
                         .F_Situation)
399 402
                     if (Data[0].F_CusPhone) {
400
-                        $(".F_CusPhone").text(Data[0].F_CusPhone);
403
+                    	var cusPhone = decryptFn(Data[0].F_CusPhoneShow)
404
+                        $(".F_CusPhone").text(cusPhone);
401 405
                         $('.cupImg').css('display', 'inline-block')
402 406
                     } else {
403 407
                         $(".F_CusPhone").css('display', 'none');
404 408
                         $('.cupImg').css('display', 'none');
405 409
                     }
406 410
                     if (Data[0].F_ConPhone) {
407
-                        $(".F_ConPhone").text(Data[0].F_ConPhone);
411
+                    	var conPhone = decryptFn(Data[0].F_CusPhoneShow)
412
+                        $(".F_ConPhone").text(conPhone);
408 413
                         $('.copImg').css('display', 'inline-block')
409 414
                     } else {
410 415
                         $(".F_ConPhone").css('display', 'none');

+ 5 - 2
WebUI/CallCenterWeb.UI/CommonHtml/jiaoban.html

@@ -183,6 +183,8 @@
183 183
     <script src="../js/zTree/jquery.ztree.core.js"></script>
184 184
     <script src="../js/zTree/jquery.ztree.excheck.min.js"></script>
185 185
     <script src="../js/adjustHeight.js"></script>
186
+    <script src="../js/sm2/sm2.js"></script>
187
+	<script src="../js/sm2/decrypt.js"></script>
186 188
     <script>
187 189
         var wid = helper.request.queryString("wid");
188 190
         var jbSelect = helper.request.queryString("jbSelect");
@@ -337,9 +339,10 @@
337 339
                         }
338 340
                         //保密工单模糊市民号码
339 341
                         if (content.data[0].F_IsProtect == 0) {
340
-                            $(".lxdh").text(content.data[0].F_CusPhone);
342
+                        	 var cusPhone = decryptFn(data[0].F_CusPhoneShow)
343
+                            $(".lxdh").text(cusPhone);
341 344
                         } else if (content.data[0].F_IsProtect == 1) {
342
-                            var cusPhone = content.data[0].F_CusPhone
345
+                            var cusPhone = decryptFn(data[0].F_CusPhoneShow)
343 346
                             var cusPhoneSecret = cusPhone.substr(0, 3) + '****' + cusPhone.substr(7)
344 347
                             $(".lxdh").text(cusPhoneSecret);
345 348
                         }

+ 4 - 1
WebUI/CallCenterWeb.UI/OutboundMessage/LookMessage.html

@@ -106,6 +106,8 @@
106 106
 		</div>
107 107
 		<script src="../js/guid.js"></script>
108 108
 		<script src="../js/autosize/autosize.js"></script>
109
+		<script src="../js/sm2/sm2.js"></script>
110
+		<script src="../js/sm2/decrypt.js"></script>
109 111
 		<script>
110 112
 			var wid = helper.request.queryString("Str");
111 113
 			var ans = [];
@@ -199,7 +201,8 @@
199 201
 							if(Count.taskModel) {
200 202
 								//console.log(Count.taskModel);
201 203
 								$("#Name_").val(Count.taskModel.F_CusName);
202
-								$("#Phone_").text(Count.taskModel.F_Phone);
204
+								var telPhone = decryptFn(Count.taskModel.F_TelephoneShow) 
205
+								$("#Phone_").text(telPhone);
203 206
 								$("#F_CusID").val(Count.taskModel.F_CusID);
204 207
 								$("#F_Id").val(Count.taskModel.F_Id);
205 208
 								$("#F_TaskId").val(Count.taskModel.F_TaskId);

+ 6 - 2
WebUI/CallCenterWeb.UI/OutboundMessage/LookMessages.html

@@ -96,6 +96,8 @@
96 96
 			</div>
97 97
 		</div>
98 98
 		<script src="../js/autosize/autosize.js"></script>
99
+		<script src="../js/sm2/sm2.js"></script>
100
+		<script src="../js/sm2/decrypt.js"></script>
99 101
 		<script>
100 102
 			var wid = helper.request.queryString("Str");
101 103
 			$(document).ready(function() {
@@ -117,8 +119,10 @@
117 119
 					success: function(data) {
118 120
 						var Count = data.data;
119 121
 						$("#Name_").text(Count.taskModel.F_CusName);
120
-						$("#Phone_").text(Count.taskModel.F_Telephone);
121
-						$('#callNum').text(Count.taskModel.F_Phone); //固定号码, 
122
+						var telPhone = decryptFn(Count.taskModel.F_TelephoneShow) 
123
+						var phone = decryptFn(Count.taskModel.F_PhoneShow) 
124
+						$("#Phone_").text(telPhone);
125
+						$('#callNum').text(phone); //固定号码, 
122 126
 						$('#country').text(Count.taskModel.F_City); //乡镇或单位 
123 127
 						$('#address').text(Count.taskModel.F_Address); //地址
124 128
 

+ 2 - 0
WebUI/CallCenterWeb.UI/OutboundMessage/MyTaskResult.html

@@ -64,6 +64,8 @@
64 64
 			</div>
65 65
 		</div>
66 66
 		<script src="../js/laydate/laydate.js"></script>
67
+		<script src="../js/sm2/sm2.js"></script>
68
+		<script src="../js/sm2/decrypt.js"></script>
67 69
 		<script>
68 70
 			$(document).ready(function() {
69 71
 				laydate.render({

+ 6 - 1
WebUI/CallCenterWeb.UI/OutboundMessage/OutboundAllo.html

@@ -244,7 +244,7 @@
244 244
 							<thead>
245 245
 								<tr>
246 246
 
247
-									<th data-field="F_Phone" data-align="center">号码</th>
247
+									<th data-field="F_Phone" data-align="center" data-formatter="phoneTableHtml">号码</th>
248 248
 									<th data-field="F_CusName" data-align="center">名称</th>
249 249
 								</tr>
250 250
 							</thead>
@@ -257,6 +257,8 @@
257 257
 			</div>
258 258
 			<input type="hidden" id="zxNum" />
259 259
 		</div>
260
+		<script src="../js/sm2/sm2.js"></script>
261
+		<script src="../js/sm2/decrypt.js"></script>
260 262
 		<script>
261 263
 			var Arruser; //分配坐席
262 264
 			var Fpvalue; //分配数量
@@ -373,6 +375,9 @@
373 375
 					}
374 376
 				});
375 377
 			}
378
+			function phoneTableHtml(val, row){
379
+				return '<a onclick="phoneTableClick(this ,\'' +row.F_PhoneShow+'\')"> ' + val + '</a>'
380
+			}
376 381
 			//限制字符串长度
377 382
 			function cutContent(val) {
378 383
 				if(val) {

+ 3 - 2
WebUI/CallCenterWeb.UI/OutboundMessage/OutboundPlan.html

@@ -63,7 +63,7 @@
63 63
 								<th data-field="state" data-checkbox="true"></th>
64 64
 								<th data-field="checkbox" data-align="center" data-formatter="setCode"></th>
65 65
 								<th data-align="center" data-field="F_CusName">客户姓名</th>
66
-								<th data-align="center" data-field="F_Phone">电话</th>
66
+								<th data-align="center" data-field="F_Phone" data-formatter="phoneTableHtml">电话</th>
67 67
 								<th data-align="center" data-field="ExpandVchField12">住址</th>
68 68
 								<th data-align="center" data-field="F_CreateTime">导入时间</th>
69 69
 								<th data-align="center" data-field="F_UserName">分配坐席</th>
@@ -77,7 +77,8 @@
77 77
 			</div>
78 78
 		</div>
79 79
 	</body>
80
-
80
+	<script src="../js/sm2/sm2.js"></script>
81
+	<script src="../js/sm2/decrypt.js"></script>
81 82
 	<script src="../js/OutboundMessage/OutboundPlan.js"></script>
82 83
 
83 84
 </html>

+ 6 - 2
WebUI/CallCenterWeb.UI/Quality/zhijianjieguo.html

@@ -241,7 +241,7 @@
241 241
                 <thead>
242 242
                     <tr>
243 243
                         <th data-field="CallNumber" data-align="center" data-formatter="Code">编号</th>
244
-                        <th data-field="CallNumber" data-align="center">电话号码</th>
244
+                        <th data-field="CallNumber" data-align="center" data-formatter="phoneTableHtml">电话号码</th>
245 245
                         <th data-field="FilePath" data-formatter="setCode" data-align="center">质检结果</th>
246 246
                         <th data-field="F_QCScore" data-align="center">质检分数</th>
247 247
                         <th data-field="F_QCUserName" data-align="center">质检人</th>
@@ -325,6 +325,8 @@
325 325
     <script src="../js/bootstrap-select.js"></script>
326 326
     <script src="../My97DatePicker/WdatePicker.js"></script>
327 327
     <script src="../css/laydate/laydate.js"></script>
328
+    <script src="../js/sm2/sm2.js"></script>
329
+	<script src="../js/sm2/decrypt.js"></script>
328 330
     <script>
329 331
         var stype = 1;
330 332
         var seatlist = [];
@@ -457,7 +459,9 @@
457 459
                 }
458 460
             });
459 461
         }
460
-
462
+		function phoneTableHtml(val, row){
463
+			return '<a onclick="phoneTableClick(this ,\'' +row.CallNumberShow+'\')"> ' + val + '</a>'
464
+		}
461 465
         //音频
462 466
         function setCode(val, row) {
463 467
             if (val) {

+ 7 - 2
WebUI/CallCenterWeb.UI/Quality/zhijianpingfen.html

@@ -241,7 +241,7 @@
241 241
                 <thead>
242 242
                     <tr>
243 243
                         <th data-field="CallNumber" data-align="center" data-formatter="Code">编号</th>
244
-                        <th data-field="CallNumber" data-align="center">电话号码</th>
244
+                        <th data-field="CallNumber" data-align="center" data-formatter="phoneTableHtml">电话号码</th>
245 245
                         <th data-field="FilePath" data-formatter="setCode" data-align="center">录音质检</th>
246 246
                         <th data-field="CallType" data-formatter="callType" data-align="center">呼叫方向</th>
247 247
                         <th data-field="UserCode" data-align="center">坐席工号</th>
@@ -327,6 +327,8 @@
327 327
     <script src="../js/bootstrap-select.js"></script>
328 328
     <script src="../My97DatePicker/WdatePicker.js"></script>
329 329
     <script src="../css/laydate/laydate.js"></script>
330
+    <script src="../js/sm2/sm2.js"></script>
331
+	<script src="../js/sm2/decrypt.js"></script>
330 332
     <script>
331 333
         var stype = 1;
332 334
         var seatlist = [];
@@ -458,7 +460,10 @@
458 460
                 }
459 461
             });
460 462
         }
461
-
463
+		
464
+		function phoneTableHtml(val, row){
465
+			return '<a onclick="phoneTableClick(this ,\'' +row.CallNumberShow+'\')"> ' + val + '</a>'
466
+		}
462 467
         //音频
463 468
         function setCode(val, row) {
464 469
             if (val) {

+ 7 - 3
WebUI/CallCenterWeb.UI/ReportForm/unitContentInformationReport.html

@@ -65,7 +65,7 @@
65 65
                             <th data-field="F_UserCode" data-align="center">用户编号</th>
66 66
                             <th data-field="F_WorkNumber" data-align="center">坐席工号</th>
67 67
                             <th data-field="F_UserName" data-align="center">用户名称</th>
68
-                            <th data-field="F_Telephone" data-align="center">用户电话</th>
68
+                            <th data-field="F_Telephone" data-align="center" data-formatter="phoneTableHtml">用户电话</th>
69 69
                             <th data-field="F_Mobile" data-align="center">用户手机</th>
70 70
                             <th data-field="F_RoleName" data-align="center">用户角色</th>
71 71
                             <th data-field="F_DeptName" data-align="center">用户部门</th>
@@ -74,7 +74,7 @@
74 74
                             <th data-field="F_Department" data-align="center">科室</th>
75 75
                             <th data-field="F_Post" data-align="center">职务</th>
76 76
                             <th data-field="F_Mobile" data-align="center">手机号</th>
77
-                            <th data-field="F_Telephone" data-align="center">办公电话</th>
77
+                            <th data-field="F_Telephone" data-align="center" data-formatter="phoneTableHtml">办公电话</th>
78 78
                             <th data-field="F_LastActiveTime" data-align="center">创建时间</th>
79 79
                         </tr>
80 80
                     </thead>
@@ -90,6 +90,8 @@
90 90
     <script src="../js/zTree/jquery.ztree.core.js"></script>
91 91
     <script src="../js/comboSelect/jquery.combo.select.js"></script>
92 92
     <script src="./js/yongHuManger.js"></script>
93
+    <script src="../js/sm2/sm2.js"></script>
94
+	<script src="../js/sm2/decrypt.js"></script>
93 95
     <script>
94 96
         var token = $.cookie("token");
95 97
         var tree; //部门树
@@ -151,7 +153,9 @@
151 153
                 },
152 154
             });
153 155
         }
154
-
156
+		function phoneTableHtml(val, row){
157
+			return '<a onclick="phoneTableClick(this ,\'' +row.F_TelephoneShow+'\')"> ' + val + '</a>'
158
+		}
155 159
         function setCode(val, row, index) {
156 160
             return index + 1;
157 161
         }

+ 6 - 1
WebUI/CallCenterWeb.UI/SystemManager/js/yongHuManger.js

@@ -650,7 +650,12 @@ function initTable() {
650 650
     });
651 651
 }
652 652
 /*选中行添加背景颜色*/
653
-
653
+function phoneTableHtml1(val, row){
654
+	return '<a onclick="phoneTableClick(this ,\'' +row.F_TelephoneShow+'\')"> ' + val + '</a>'
655
+}
656
+function phoneTableHtml2(val, row){
657
+	return '<a onclick="phoneTableClick(this ,\'' +row.F_MobileShow+'\')"> ' + val + '</a>'
658
+}
654 659
 function setCode(val, row, index) {
655 660
     return index + 1;
656 661
 }

+ 15 - 4
WebUI/CallCenterWeb.UI/SystemManager/tongXun.html

@@ -82,14 +82,14 @@
82 82
 							<tr>
83 83
 								<th data-field="F_Name" data-align="left">姓名</th>
84 84
 								<th data-field="F_Sex" data-align="left">性别</th>
85
-								<th data-field="F_Mobile" data-align="left">手机号</th>
86
-								<th data-field="F_ElseMobile" data-align="left">其他电话</th>
85
+								<th data-field="F_Mobile" data-align="left" data-formatter="phoneTableHtml1">手机号</th>
86
+								<th data-field="F_ElseMobile" data-align="left" data-formatter="phoneTableHtml2">其他电话</th>
87 87
 								<!--<th data-field="F_Birthday" data-align="left">生日</th>
88 88
 								<th data-field="F_IDCard" data-align="center">身份证号</th>
89 89
 								<th data-field="F_Education" data-align="center">学历</th>-->
90 90
 								<th data-field="F_Email" data-align="center">邮件</th>
91 91
 								<th data-field="F_Department" data-align="center">单位名称</th>
92
-								<th data-field="F_Telephone" data-align="center">单位电话</th>
92
+								<th data-field="F_Telephone" data-align="center" data-formatter="phoneTableHtml3">单位电话</th>
93 93
 								<th data-field="F_Company" data-align="center">部门</th>
94 94
 								<th data-field="F_Position" data-align="center">职务</th>
95 95
 								<th data-field="F_Address" data-align="center">地址</th>
@@ -106,6 +106,8 @@
106 106
 		<script src="../css/layer/layer.js"></script>
107 107
 		<script src="../js/zTree/jquery.ztree.core.js"></script>
108 108
 		<script src="../js/visit/ajaxfileupload.js"></script>
109
+		<script src="../js/sm2/sm2.js"></script>
110
+		<script src="../js/sm2/decrypt.js"></script>
109 111
 		<script>
110 112
 			var token = $.cookie("token");
111 113
 			var table = $('#table1');
@@ -151,7 +153,16 @@
151 153
 					}
152 154
 				});
153 155
 			}
154
-
156
+			
157
+			function phoneTableHtml1(val, row){
158
+				return '<a onclick="phoneTableClick(this ,\'' +row.F_MobileShow+'\')"> ' + val + '</a>'
159
+			}
160
+			function phoneTableHtml2(val, row){
161
+				return '<a onclick="phoneTableClick(this ,\'' +row.F_ElseMobileShow+'\')"> ' + val + '</a>'
162
+			}
163
+			function phoneTableHtml3(val, row){
164
+				return '<a onclick="phoneTableClick(this ,\'' +row.F_TelephoneShow+'\')"> ' + val + '</a>'
165
+			}
155 166
 			function caoZuo(val, row) {
156 167
 				return '<div><a title="编辑" style="margin-right:5px;" onclick="XG(' + row.F_UserId + ')"><i class="fa fa-pencil-square-o"></i></a><a  title="删除" onclick="del(' + row.F_UserId + ')"><i class="fa fa-remove"></i></a>  </div>'
157 168
 			}

+ 4 - 5
WebUI/CallCenterWeb.UI/SystemManager/yongHuManger.html

@@ -97,8 +97,8 @@
97 97
                             <!-- <th data-field="F_UserCode" data-align="center">用户编号</th> -->
98 98
                             <th data-field="F_WorkNumber" data-align="center">坐席工号</th>
99 99
                             <th data-field="F_UserName" data-align="center">用户名称</th>
100
-                            <th data-field="F_Telephone" data-align="center">用户电话</th>
101
-                            <th data-field="F_Mobile" data-align="center">用户手机</th>
100
+                            <th data-field="F_Telephone" data-align="center" data-formatter="phoneTableHtml1">用户电话</th>
101
+                            <th data-field="F_Mobile" data-align="center" data-formatter="phoneTableHtml2">用户手机</th>
102 102
                             <th data-field="F_RoleName" data-align="center">用户角色</th>
103 103
                             <th data-field="F_DeptName" data-align="center">用户部门</th>
104 104
                             <th data-field="F_DeleteFlag" data-align="center" data-formatter="setYongState">用户状态</th>
@@ -444,9 +444,8 @@
444 444
     <script src="../js/zTree/jquery.ztree.core.js"></script>
445 445
     <script src="../js/comboSelect/jquery.combo.select.js"></script>
446 446
     <script src="./js/yongHuManger.js"></script>
447
-    <script>
448
-
449
-    </script>
447
+    <script src="../js/sm2/sm2.js"></script>
448
+	<script src="../js/sm2/decrypt.js"></script>
450 449
 </body>
451 450
 
452 451
 </html>

+ 7 - 2
WebUI/CallCenterWeb.UI/TelCall/BlackList.html

@@ -74,7 +74,7 @@
74 74
 						<tr>
75 75
 							<th data-field="state" data-checkbox="true"></th>
76 76
 							<th data-align="center" data-formatter="setCode">编号</th>
77
-							<th data-field="F_TelPhone">来电号码</th>
77
+							<th data-field="F_TelPhone" data-formatter="phoneTableHtml">来电号码</th>
78 78
 							<th data-field="F_BlackType" data-formatter="shtype">名单类型</th>
79 79
 							<th data-field="F_SetTime" data-formatter="dateconvert">开始时间</th>
80 80
 							<th data-field="F_RemoveTime" data-formatter="dateconvert">结束时间</th>
@@ -88,6 +88,8 @@
88 88
 			</div>
89 89
 		</div>
90 90
 		<script src="../js/adjustHeight.js"></script>
91
+		<script src="../js/sm2/sm2.js"></script>
92
+		<script src="../js/sm2/decrypt.js"></script>
91 93
 		<script>
92 94
 			var isBlackName = true;
93 95
 			var html = '<div >' +
@@ -228,7 +230,10 @@
228 230
 				});
229 231
 				initTable();
230 232
 			})
231
-
233
+			
234
+			function phoneTableHtml(val, row){
235
+				return '<a onclick="phoneTableClick(this ,\'' +row.PhoneShow+'\')"> ' + val + '</a>'
236
+			}
232 237
 			function initTable() {
233 238
 				//先销毁表格
234 239
 				$('#list').bootstrapTable('destroy');	

+ 14 - 6
WebUI/CallCenterWeb.UI/TelCall/CallRecord.html

@@ -314,7 +314,7 @@
314 314
                 <thead>
315 315
                     <tr>
316 316
                         <th data-field="" data-align="center" data-formatter="Code">编号</th>
317
-                        <th data-field="CallNumber" data-align="center" data-formatter="formatterCallNum">电话号码</th>
317
+                        <th data-field="CallNumber" data-align="center" data-formatter="phoneTableHtml">电话号码</th>
318 318
                         <th data-field="FilePath" data-formatter="setCode" data-align="center">录音</th>
319 319
                         <th data-field="CallType" data-formatter="callType" data-align="center">呼叫方向</th>
320 320
                         <th data-field="CallState" data-formatter="states" data-align="center">呼叫状态</th>
@@ -366,6 +366,8 @@
366 366
     <script src="../css/laydate/laydate.js"></script>
367 367
     <!-- <script src="../js/main.js"></script> -->
368 368
     <script src="../js/guid.js"></script>
369
+    <script src="../js/sm2/sm2.js"></script>
370
+	<script src="../js/sm2/decrypt.js"></script>
369 371
     <!--<script src="../js/contabs.min.js"></script>-->
370 372
     
371 373
     <script>
@@ -639,19 +641,22 @@
639 641
             } else {
640 642
                 phoneNumber = val
641 643
             }
644
+            
642 645
             return '<div class="imgs" ><p class="" onclick="viewList(\'' + phoneNumber + '\')" >' + phoneNumber +
643 646
                 '</p></div>';
644 647
         }
645
-
648
+		function phoneTableHtml(val, row){
649
+			return '<a onclick="phoneTableClick(this ,\'' +row.CallNumberShow+'\')"> ' + val + '</a>'
650
+		}
646 651
         // 查看列表
647
-//      function viewList(phoneNumber) {
652
+        function viewList(phoneNumber) {
648 653
 //          layer.open({
649 654
 //              type: 2,
650 655
 //              content: "./CallRecordList.html?phoneNumber=" + phoneNumber, //iframe的url,no代表不显示滚动条
651 656
 //              title: '通话记录',
652 657
 //              area: ['90%', '90%'], //宽高
653 658
 //          });
654
-//      }
659
+        }
655 660
 
656 661
         //方向呼出
657 662
         function callType(val) {
@@ -743,9 +748,11 @@
743 748
 
744 749
         //格式化工单号
745 750
         function formatWorkOrderNum(val, row) { 
751
+        	
746 752
         	if (row.CallType ===0) {
747 753
         		if (val == null || val == '') {
748
-	               return '<a class="xg" onclick="addWorkOrder(\'' + row.CallRecordsId  + '\',\'' +row.CallNumber+'\')" title="添加工单">添加工单</a>';
754
+        			var callNumber = decryptFn(row.CallNumberShow)
755
+	               return '<a class="xg" onclick="addWorkOrder(\'' + row.CallRecordsId  + '\',\'' +callNumber+'\')" title="添加工单">添加工单</a>';
749 756
 	            } else {
750 757
 	                return '<a class="xg" onclick="ckxq(\'' + val + '\')" title="点击查看工单详情">' + val + '</a>';
751 758
 	            }
@@ -773,7 +780,8 @@
773 780
 	            if (row.Callback) {
774 781
 	                return '<a class="operation" onclick="callbackRecord(\'' + row.CallId + '\')" title="">回拨记录</a>'
775 782
 	            } else {
776
-	                return '<a class="operation" onclick="backDial(\'' + row.CallNumber + '\',\'' + row.CallId +'\')" title="">回拨</a>'
783
+	            	var callNumber = decryptFn(row.CallNumberShow)
784
+	                return '<a class="operation" onclick="backDial(\'' + callNumber + '\',\'' + row.CallId +'\')" title="">回拨</a>'
777 785
 	            }
778 786
             }
779 787
         }

+ 6 - 2
WebUI/CallCenterWeb.UI/TelCall/SMSlist.html

@@ -44,7 +44,7 @@
44 44
 				<table id="list" data-row-style="rowStyle" data-query-params="queryParams" data-pagination="true">
45 45
 					<thead>
46 46
 						<tr>
47
-							<th data-field="CallerNum" data-align="center">电话号码</th>
47
+							<th data-field="CallerNum" data-align="center" data-formatter="phoneTableHtml">电话号码</th>
48 48
 							<th data-field="Content" data-align="center" >内容</th>
49 49
 							<th data-field="usercode" data-align="center">发送人</th>
50 50
 							<th data-field="RecvTime" data-align="center">发送时间</th>
@@ -53,6 +53,8 @@
53 53
 				</table>
54 54
 			</div>
55 55
 		</div>
56
+		<script src="../js/sm2/sm2.js"></script>
57
+		<script src="../js/sm2/decrypt.js"></script>
56 58
 		<script>
57 59
 			$(document).ready(function() {
58 60
 				/*日期选择*/
@@ -80,7 +82,9 @@
80 82
 
81 83
 				initTable();
82 84
 			})
83
-
85
+			function phoneTableHtml(val, row){
86
+				return '<a onclick="phoneTableClick(this ,\'' +row.CallerNumShow+'\')"> ' + val + '</a>'
87
+			}
84 88
 			function initTable() {
85 89
 				//先销毁表格
86 90
 				$('#list').bootstrapTable('destroy');

+ 17 - 13
WebUI/CallCenterWeb.UI/TelCall/callbackRecordList.html

@@ -16,7 +16,7 @@
16 16
                 <thead>
17 17
                     <tr>
18 18
                         <th data-field="" data-align="center" data-formatter="Code">编号</th>
19
-                        <th data-field="CallNumber" data-align="center" data-formatter="formatterCallNum">电话号码</th>
19
+                        <th data-field="CallNumber" data-align="center" data-formatter="phoneTableHtml">电话号码</th>
20 20
                         <th data-field="FilePath" data-formatter="setCode" data-align="center">录音</th>
21 21
                         <th data-field="CallState" data-formatter="states" data-align="center">呼叫状态</th>
22 22
                         <th data-field="UserCode" data-align="center">坐席工号</th>
@@ -34,6 +34,8 @@
34 34
             <button class="btns exportFile">导出</button>
35 35
         </div>-->
36 36
     </div>
37
+    <script src="../js/sm2/sm2.js"></script>
38
+	<script src="../js/sm2/decrypt.js"></script>
37 39
     <script>
38 40
         var callId = helper.request.queryString("callId");
39 41
         $(document).ready(function () {
@@ -98,19 +100,21 @@
98 100
         function Code(val, row, index) {
99 101
             return index + 1;
100 102
         }
101
-		
103
+		function phoneTableHtml(val, row){
104
+				return '<a onclick="phoneTableClick(this ,\'' +row.CallNumberShow+'\')"> ' + val + '</a>'
105
+		}
102 106
         // 电话号码
103
-        function formatterCallNum(val, row) {
104
-            var phoneNumber
105
-            if (val.length === 12) {
106
-                phoneNumber = val.slice(1)
107
-            } else if (val.length === 13) {
108
-                phoneNumber = val.slice(2)
109
-            } else {
110
-                phoneNumber = val
111
-            }
112
-            return phoneNumber;
113
-        }
107
+//      function formatterCallNum(val, row) {
108
+//          var phoneNumber
109
+//          if (val.length === 12) {
110
+//              phoneNumber = val.slice(1)
111
+//          } else if (val.length === 13) {
112
+//              phoneNumber = val.slice(2)
113
+//          } else {
114
+//              phoneNumber = val
115
+//          }
116
+//          return phoneNumber;
117
+//      }
114 118
 		function states(val, row) {
115 119
             if (val == 0) {
116 120
                 if (row.CallType == 0 && !row.UserCode) {

+ 11 - 8
WebUI/CallCenterWeb.UI/TelCall/unCallBackRecord.html

@@ -69,6 +69,8 @@
69 69
         </div>
70 70
     </div>
71 71
     <script src="../js/guid.js"></script>
72
+    <script src="../js/sm2/sm2.js"></script>
73
+	<script src="../js/sm2/decrypt.js"></script>
72 74
     <script>
73 75
         var callId = helper.request.queryString("callId");
74 76
         $(document).ready(function () {
@@ -141,16 +143,17 @@
141 143
         // 电话号码
142 144
         function formatterCallNum(val, row) {
143 145
             var phoneNumber
144
-            if (val.length === 12) {
145
-                phoneNumber = val.slice(1)
146
-            } else if (val.length === 13) {
147
-                phoneNumber = val.slice(2)
146
+            var callNumber = decryptFn(row.CallNumberShow)
147
+            if (callNumber.length === 12) {
148
+                callNumber = callNumber.slice(1)
149
+            } else if (callNumber.length === 13) {
150
+                callNumber = callNumber.slice(2)
148 151
             } else {
149
-                phoneNumber = val
152
+                callNumber = callNumber
150 153
             }
151
-            if (phoneNumber) {
152
-	            return '<a class="operation" onclick="backDial(\'' + phoneNumber + '\',\'' + row.CallId +'\')" title="">'+
153
-	            '<img src="../img/phones.png" style="display:inline-block"></img>'+phoneNumber+'</a>'
154
+            if (callNumber) {
155
+	            return '<a class="operation" onclick="backDial(\'' + callNumber + '\',\'' + row.CallId +'\')" title="">'+
156
+	            '<img src="../img/phones.png" style="display:inline-block"></img>'+val+'</a>'
154 157
             }
155 158
         }
156 159
 		function states(val, row) {

+ 8 - 2
WebUI/CallCenterWeb.UI/TelCall/uplinkSMSList.html

@@ -64,7 +64,7 @@
64 64
 				<table id="list" data-row-style="rowStyle" data-query-params="queryParams" data-pagination="true">
65 65
 					<thead>
66 66
 						<tr>
67
-							<th data-field="CallerNum" data-align="center">电话号码</th>
67
+							<th data-field="CallerNum" data-align="center" data-formatter="phoneTableHtml">电话号码</th>
68 68
 							<th data-field="Content" data-align="center" >内容</th>
69 69
 							<th data-field="RecvTime" data-align="center">接收时间</th>
70 70
 							
@@ -76,6 +76,8 @@
76 76
 				</table>
77 77
 			</div>
78 78
 		</div>
79
+		<script src="../js/sm2/sm2.js"></script>
80
+		<script src="../js/sm2/decrypt.js"></script>
79 81
 		<script>
80 82
 			var type = helper.request.queryString("type")
81 83
 			$(document).ready(function() {
@@ -114,12 +116,16 @@
114 116
 			function dispose(val,row){
115 117
 				//encodeURI(row.Content)
116 118
 				var content = row.Content.replace(/\s+/g, "");//替换空格
119
+				var callerNum = decryptFn(row.CallerNumShow)
117 120
         		if (!row.F_Name) {
118
-	               return '<a class="xg" onclick="addWorkOrder(\''+val+'\',\''+row.CallerNum+'\',\''+content+'\')" title="添加工单">添加工单</a>';
121
+	               return '<a class="xg" onclick="addWorkOrder(\''+val+'\',\''+callerNum+'\',\''+content+'\')" title="添加工单">添加工单</a>';
119 122
 	            } else {
120 123
 	                return '<a class="xg" onclick="ckxq(\'' + row.F_Name + '\')" title="点击查看工单详情">' + row.F_Name + '</a>';
121 124
 	            }
122 125
 			}
126
+			function phoneTableHtml(val, row){
127
+				return '<a onclick="phoneTableClick(this ,\'' +row.CallerNumShow+'\')"> ' + val + '</a>'
128
+			}
123 129
 			function typeState(val,row){
124 130
 				if (row.F_Name) {
125 131
 					return "已受理"

+ 6 - 2
WebUI/CallCenterWeb.UI/TelCall/vipCall.html

@@ -78,7 +78,7 @@
78 78
                         <th data-field="state" data-checkbox="true"></th>
79 79
                         <th data-align="center" data-formatter="setCode">编号</th>
80 80
                         <th data-field="F_Name">姓名</th>
81
-                        <th data-field="F_Phone">电话</th>
81
+                        <th data-field="F_Phone" data-formatter="phoneTableHtml">电话</th>
82 82
                         <th data-field="F_State" data-formatter="stateFormatter">状态</th>
83 83
                         <th data-field="F_Remarks">备注</th>
84 84
                     </tr>
@@ -88,6 +88,8 @@
88 88
         </div>
89 89
     </div>
90 90
     <script src="../js/adjustHeight.js"></script>
91
+    <script src="../js/sm2/sm2.js"></script>
92
+	<script src="../js/sm2/decrypt.js"></script>
91 93
     <script>
92 94
         var isBlackName = true;
93 95
         var tc;
@@ -144,7 +146,9 @@
144 146
             });
145 147
             initTable();
146 148
         })
147
-
149
+		function phoneTableHtml(val, row){
150
+			return '<a onclick="phoneTableClick(this ,\'' +row.PhoneShow+'\')"> ' + val + '</a>'
151
+		}
148 152
         function initTable() {
149 153
             //先销毁表格
150 154
             $('#list').bootstrapTable('destroy');

+ 4 - 0
WebUI/CallCenterWeb.UI/js/OutboundMessage/OutboundPlan.js

@@ -64,6 +64,10 @@ function IndexCategoryGe() {
64 64
 	});
65 65
 }
66 66
 
67
+
68
+function phoneTableHtml(val, row){
69
+	return '<a onclick="phoneTableClick(this ,\'' +row.F_PhoneShow+'\')"> ' + val + '</a>'
70
+}
67 71
 //操作
68 72
 function Code(val, row) {
69 73
 	var html = '';

+ 23 - 0
WebUI/CallCenterWeb.UI/js/sm2/decrypt.js

@@ -0,0 +1,23 @@
1
+var publicKey ="042DBA45E7B03394F603CADAFCDDEC854D3E01A4E9C52CD799B85B1A14BDB970137AE58BA553D79F058604DC1CD4B77DE5408BA3308E767584100C2B663510C819";
2
+
3
+
4
+var privateKey ="BF1F907B4E0487F798DC80AFD7BC2A6201E8514233002272EA3BE2FC6F797843";
5
+
6
+//加密
7
+function encryptFn(value){
8
+	var encrText = sm2.doEncrypt(value, publicKey);
9
+    return encrText
10
+}
11
+//解密
12
+function decryptFn(value){
13
+	var decryptText = sm2.doDecrypt(value.slice(2), privateKey,0);
14
+	return decryptText
15
+}
16
+function phoneTableClick(ele,data){
17
+	console.log(decryptFn(data))
18
+	ele.innerText =decryptFn(data)
19
+}
20
+function addPhoneHtml(ele,data,dataShow){
21
+	var html = '<a onclick="phoneTableClick(this ,\'' +row.CallNumberShow+'\')"> ' + val + '</a>'
22
+	$(html).appendTo($(ele))
23
+}

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
WebUI/CallCenterWeb.UI/js/sm2/sm2.js


+ 2 - 0
WebUI/CallCenterWeb.UI/keHuManager/ContactPersonManger.html

@@ -266,5 +266,7 @@
266 266
 		<script src="../css/laydate/laydate.js"></script>
267 267
 		 <script src="../css/layer/layer.js"></script>
268 268
 		<script src="./js/keHuManger.js"></script>
269
+		<script src="../js/sm2/sm2.js"></script>
270
+		<script src="../js/sm2/decrypt.js"></script>
269 271
 	</body>
270 272
 </html>

+ 8 - 4
WebUI/CallCenterWeb.UI/keHuManager/js/keHuManger.js

@@ -82,8 +82,9 @@ $(".change").click(function () {
82 82
                 result = $.parseJSON(result);
83 83
                 if (result.state.toLowerCase() == "success") {
84 84
                     var con = result.data;
85
+                    var Mobile = decryptFn(con.F_MobileShow)
85 86
                     $(".change_name").val(con.F_CustomerName);
86
-                    $(".change_mobile").val(con.F_Mobile);
87
+                    $(".change_mobile").val(Mobile);
87 88
                     $(".change_lxr").val(con.F_CustomerEName);
88 89
                     $(".change_tel").val(con.F_Telephone);
89 90
                     $(".change_post").val(con.F_PostCode);
@@ -235,22 +236,25 @@ function setCode(val, row, index) {
235 236
 
236 237
 // 工单数量
237 238
 function numberWorkOrders(val, row) {
239
+	var Mobile = decryptFn(row.F_MobileShow)
238 240
     return (
239
-        '<div class="imgs" ><a class="" onclick="viewList(\'' + row.F_Mobile + '\', \'9\')" >' + val + '</a></div>'
241
+        '<div class="imgs" ><a class="" onclick="viewList(\'' + Mobile + '\', \'9\')" >' + val + '</a></div>'
240 242
     );
241 243
 }
242 244
 
243 245
 // 来电数量
244 246
 function ldCountFormatter(val, row) {
247
+	var Mobile = decryptFn(row.F_MobileShow)
245 248
     return (
246
-        '<div class="imgs" ><a class="" onclick="callRecords(\'' + row.F_Mobile + '\')" >' + val + '</a></div>'
249
+        '<div class="imgs" ><a class="" onclick="callRecords(\'' + Mobile + '\')" >' + val + '</a></div>'
247 250
     );
248 251
 }
249 252
 
250 253
 // 联系电话
251 254
 function mobileFormatter(val, row) {
255
+	var Mobile = decryptFn(row.F_MobileShow)
252 256
     return (
253
-        '<div class="imgs" ><a class="" onclick="viewName(\'' + row.F_Mobile + '\')" >' + val + '</a></div>'
257
+        '<div class="imgs" ><a class="" onclick="viewName(\'' + Mobile + '\')" >' + Mobile + '</a></div>'
254 258
     );
255 259
 }
256 260
 

WebUI/CallCenterWeb.UI/PerformanceEvaluation/addOrEditPerformanceBonus.html → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/addOrEditPerformanceBonus.html


WebUI/CallCenterWeb.UI/PerformanceEvaluation/addOrEditPerformanceReduce.html → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/addOrEditPerformanceReduce.html


WebUI/CallCenterWeb.UI/PerformanceEvaluation/css/department.css → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/css/department.css


WebUI/CallCenterWeb.UI/PerformanceEvaluation/js/addOrEditPerformanceBonus.js → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/js/addOrEditPerformanceBonus.js


WebUI/CallCenterWeb.UI/PerformanceEvaluation/js/addOrEditPerformanceReduce.js → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/js/addOrEditPerformanceReduce.js


WebUI/CallCenterWeb.UI/PerformanceEvaluation/js/department.js → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/js/department.js


WebUI/CallCenterWeb.UI/PerformanceEvaluation/js/performanceBonus.js → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/js/performanceBonus.js


WebUI/CallCenterWeb.UI/PerformanceEvaluation/js/performanceReduce.js → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/js/performanceReduce.js


WebUI/CallCenterWeb.UI/PerformanceEvaluation/performanceAppraisalReport.html → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/performanceAppraisalReport.html


WebUI/CallCenterWeb.UI/PerformanceEvaluation/performanceBonus.html → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/performanceBonus.html


WebUI/CallCenterWeb.UI/PerformanceEvaluation/performanceReduce.html → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/performanceReduce.html


WebUI/CallCenterWeb.UI/PerformanceEvaluation/scoreDetails.html → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/scoreDetails.html


WebUI/CallCenterWeb.UI/PerformanceEvaluation/singleScoreCalculationMethod.html → WebUI/CallCenterWeb.UI/phoneClientManage/PerformanceEvaluation/singleScoreCalculationMethod.html


+ 170 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuFunctional.html

@@ -0,0 +1,170 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <link rel="stylesheet" href="../css/init.css" />
9
+    <link rel="stylesheet" href="./css/reflectCategory.css">
10
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
11
+    <title>新版知识库添加</title>
12
+    <style type="text/css">
13
+        ul,
14
+        li {
15
+            padding: 0;
16
+            margin: 0;
17
+            list-style: none;
18
+        }
19
+
20
+        .table tr td input[type="text"] {
21
+            width: 100%;
22
+            height: 34px;
23
+            background: #f3f3f4;
24
+            outline: none;
25
+            border: 1px solid #e7e7e7;
26
+            /*padding-left: 10px;*/
27
+        }
28
+
29
+        .radio-inline input[type=radio] {
30
+            margin-top: 2px;
31
+        }
32
+
33
+        .table tr td textarea {
34
+            width: 100%;
35
+            height: 100%;
36
+            background: #f3f3f4;
37
+            border: 1px solid #e7e7e7;
38
+            resize: none;
39
+            padding: 0px;
40
+            /*padding-left: 10px;*/
41
+        }
42
+
43
+        #scwj {
44
+            background-color: #FFF;
45
+            background-image: none;
46
+            border: 1px solid #ccc;
47
+            border-radius: 1px;
48
+            color: inherit;
49
+            padding: 6px 12px !important;
50
+        }
51
+
52
+        .files {
53
+            padding: 5px !important;
54
+        }
55
+
56
+        .time-box {
57
+            position: relative;
58
+            width: 197px !important;
59
+            height: 34px;
60
+            margin: 0;
61
+        }
62
+
63
+        .tub+input {
64
+            padding-right: 30px;
65
+            border: 1px solid #e5e6e7 !important;
66
+        }
67
+
68
+        i.tub {
69
+            position: absolute;
70
+            right: 8px;
71
+            top: 8px;
72
+            font-size: 18px;
73
+            color: #00a0ca;
74
+        }
75
+
76
+        .operation_bj {
77
+            float: right;
78
+        }
79
+
80
+        .msg_time {
81
+            max-width: 240px;
82
+            min-width: 190px;
83
+        }
84
+    </style>
85
+</head>
86
+
87
+<body class="gray-bg">
88
+    <div class="container-fluid wrapper-content animated fadeInRight">
89
+        <div class="operation_bj">
90
+
91
+        </div>
92
+        <table class="table table-bordered table-condensed">
93
+            <tr>
94
+                <td width="100">关键词</td>
95
+                <td width="40%" class="reflectCategory-wrapper">
96
+                    <input type="text" id="reflectCategory" class="" autocomplete="off"/>
97
+                    <input type="hidden" id="keyId">
98
+                    <div class="reflectCategoryList-wrapper">
99
+                        <ul id="reflectCategoryList">
100
+                        </ul>
101
+                    </div>
102
+                </td>
103
+                <td width="100">发布单位</td>
104
+                <td width="40%"><input type="text" id="publishUnit" autocomplete="off" /></td>
105
+            </tr>
106
+            <tr>
107
+                <td width="100">所属行业</td>
108
+                <td><input type="text" id="industry" autocomplete="off" /></td>
109
+                <td width="100">地区</td>
110
+                <td><input type="text" id="address" autocomplete="off" /></td>
111
+            </tr>
112
+            <tr>
113
+                <td width="100">生效时间</td>
114
+                <td><input type="text" id="effectiveTime" autocomplete="off" /></td>
115
+                <td width="100">失效时间</td>
116
+                <td><input type="text" id="invalidTime" autocomplete="off" /></td>
117
+            </tr>
118
+            <tr>
119
+                <td width="100">发文单位</td>
120
+                <td><input type="text" id="documentUnit" autocomplete="off" /></td>
121
+                <td width="100">职能部门</td>
122
+                <td><input type="text" id="functionalDepartment" autocomplete="off" /></td>
123
+            </tr>
124
+            <tr>
125
+                <td width="100">文件名称</td>
126
+                <td><input type="text" id="fileName" autocomplete="off" /></td>
127
+                <td width="100">附件</td>
128
+                <td>
129
+                    <div class="fileBox">
130
+                        <!--<span class="files">文件1<i class="fa fa-remove"></i></span>-->
131
+                    </div>
132
+                    <input class="input" type="file" name="upFile" id="upFile" multiple="multiple" style="display: none;">
133
+                    <input class="input" type="button" value="上传" id="scwj" />
134
+                    <input class="input" type="button" value="删除附件" id="scfj" style="display:none;" />
135
+                    <input type="hidden" id="file" />
136
+                    <span style="color:#FF0000; border: none;">
137
+                        (文件格式为png,jpg,mp4,mp3,pdf,doc,docx,xls,xlsx)
138
+                    </span>     
139
+                    <!-- <input type="text" id="" autocomplete="off" /> -->
140
+                </td>
141
+            </tr>
142
+            <tr>
143
+                <td class="addOrEditDisplay" width="100">发布人</td>
144
+                <td class="addOrEditDisplay"><input type="text" id="publishPersonal" autocomplete="off" /></td>
145
+                <td class="addOrEditDisplay" width="100">发布时间</td>
146
+                <td class="addOrEditDisplay"><input type="text" id="publishTime" autocomplete="off" /></td>
147
+            </tr>
148
+            <tr style="display: none;">
149
+                <td width="100">标识编码</td>
150
+                <td><input type="text" id="identifyEncoding" autocomplete="off" /></td>
151
+                <td width="100">发文文号</td>
152
+                <td class="addOrEditDisplay"><input type="text" id="documentNumber" autocomplete="off" /></td>
153
+            </tr>
154
+            <tr>
155
+                <td width="100" height="100">文件内容</td>
156
+                <td colspan="3" height="100"> <textarea name="" rows="" cols="" id="documentContent"></textarea></td>
157
+            </tr>
158
+        </table>
159
+        <p style="text-align: center;">
160
+            <button class="btns save">保存</button>
161
+        </p>
162
+    </div>
163
+    <script src="../js/layui/layui.js"></script>
164
+    <script src="../js/adjustHeight.js"></script>
165
+    <script src="../css/laydate/laydate.js"></script>
166
+    <script src="./js/reflectCategory.js"></script>
167
+    <script src="js/addOrEditZhiShiKuFunctional.js"></script>
168
+</body>
169
+
170
+</html>

+ 176 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuGlossary.html

@@ -0,0 +1,176 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <link rel="stylesheet" href="../css/init.css" />
9
+    <link rel="stylesheet" href="./css/reflectCategory.css">
10
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
11
+    <title>新版知识库添加</title>
12
+    <style type="text/css">
13
+        ul,
14
+        li {
15
+            padding: 0;
16
+            margin: 0;
17
+            list-style: none;
18
+        }
19
+
20
+        .table tr td input[type="text"] {
21
+            width: 100%;
22
+            height: 34px;
23
+            background: #f3f3f4;
24
+            outline: none;
25
+            border: 1px solid #e7e7e7;
26
+            /*padding-left: 10px;*/
27
+        }
28
+
29
+        .radio-inline input[type=radio] {
30
+            margin-top: 2px;
31
+        }
32
+
33
+        .table tr td textarea {
34
+            width: 100%;
35
+            height: 100%;
36
+            background: #f3f3f4;
37
+            border: 1px solid #e7e7e7;
38
+            resize: none;
39
+            padding: 0px;
40
+            /*padding-left: 10px;*/
41
+        }
42
+
43
+        #scwj {
44
+            background-color: #FFF;
45
+            background-image: none;
46
+            border: 1px solid #ccc;
47
+            border-radius: 1px;
48
+            color: inherit;
49
+            padding: 6px 12px !important;
50
+        }
51
+
52
+        .files {
53
+            padding: 5px !important;
54
+        }
55
+
56
+        .time-box {
57
+            position: relative;
58
+            width: 197px !important;
59
+            height: 34px;
60
+            margin: 0;
61
+        }
62
+
63
+        .tub+input {
64
+            padding-right: 30px;
65
+            border: 1px solid #e5e6e7 !important;
66
+        }
67
+
68
+        i.tub {
69
+            position: absolute;
70
+            right: 8px;
71
+            top: 8px;
72
+            font-size: 18px;
73
+            color: #00a0ca;
74
+        }
75
+
76
+        .operation_bj {
77
+            float: right;
78
+        }
79
+
80
+        .msg_time {
81
+            max-width: 240px;
82
+            min-width: 190px;
83
+        }
84
+    </style>
85
+</head>
86
+
87
+<body class="gray-bg">
88
+    <div class="container-fluid wrapper-content animated fadeInRight">
89
+        <div class="operation_bj">
90
+
91
+        </div>
92
+        <table class="table table-bordered table-condensed">
93
+            <tr>
94
+                <td width="100">关键词</td>
95
+                <td width="40%" class="reflectCategory-wrapper">
96
+                    <input type="text" id="reflectCategory" class="" autocomplete="off"/>
97
+                    <input type="hidden" id="keyId">
98
+                    <div class="reflectCategoryList-wrapper">
99
+                        <ul id="reflectCategoryList">
100
+                        </ul>
101
+                    </div>
102
+                </td>
103
+                <td width="100">发布单位</td>
104
+                <td width="40%"><input type="text" id="publishUnit" autocomplete="off" /></td>
105
+            </tr>
106
+            <tr>
107
+                <td width="100">所属行业</td>
108
+                <td><input type="text" id="industry" autocomplete="off" /></td>
109
+                <td width="100">地区</td>
110
+                <td><input type="text" id="address" autocomplete="off" /></td>
111
+            </tr>
112
+            <tr>
113
+                <td width="100">生效时间</td>
114
+                <td><input type="text" id="effectiveTime" autocomplete="off" /></td>
115
+                <td width="100">失效时间</td>
116
+                <td><input type="text" id="invalidTime" autocomplete="off" /></td>
117
+            </tr>
118
+            <tr>
119
+                <td width="100">发文单位</td>
120
+                <td><input type="text" id="documentUnit" autocomplete="off" /></td>
121
+                <td width="100">附件</td>
122
+                <td>
123
+                    <div class="fileBox">
124
+                        <!--<span class="files">文件1<i class="fa fa-remove"></i></span>-->
125
+                    </div>
126
+                    <input class="input" type="file" name="upFile" id="upFile" multiple="multiple" style="display: none;">
127
+                    <input class="input" type="button" value="上传" id="scwj" />
128
+                    <input class="input" type="button" value="删除附件" id="scfj" style="display:none;" />
129
+                    <input type="hidden" id="file" />
130
+                    <span style="color:#FF0000; border: none;">
131
+                        (文件格式为png,jpg,mp4,mp3,pdf,doc,docx,xls,xlsx)
132
+                    </span>     
133
+                    <!-- <input type="text" id="" autocomplete="off" /> -->
134
+                </td>
135
+            </tr>
136
+            <tr>
137
+                <td class="addOrEditDisplay" width="100">发布人</td>
138
+                <td class="addOrEditDisplay"><input type="text" id="publishPersonal" autocomplete="off" /></td>
139
+                <td class="addOrEditDisplay" width="100">发布时间</td>
140
+                <td class="addOrEditDisplay"><input type="text" id="publishTime" autocomplete="off" /></td>
141
+            </tr>
142
+            <tr style="display: none;">
143
+                <td class="addOrEditDisplay" width="100">发文文号</td>
144
+                <td class="addOrEditDisplay"><input type="text" id="documentNumber" autocomplete="off" /></td>
145
+                <td class="addOrEditDisplay" width="100">标识编码</td>
146
+                <td class="addOrEditDisplay"><input type="text" id="identifyEncoding" autocomplete="off" /></td>
147
+            </tr>
148
+            <tr>
149
+                <td width="100">政策名称</td>
150
+                <td colspan="3"><input type="text" id="policyName" autocomplete="off" /></td>
151
+            </tr>
152
+            <tr>
153
+                <td width="100">解答单位</td>
154
+                <td colspan="3"><input type="text" id="answeringUnit" autocomplete="off" /></td>
155
+            </tr>
156
+            <tr>
157
+                <td width="100" height="100">名词解释</td>
158
+                <td colspan="3" height="100"> <textarea name="" rows="" cols="" id="hotIssues"></textarea></td>
159
+            </tr>
160
+            <tr>
161
+                <td width="100" height="100">内容解答</td>
162
+                <td colspan="3" height="100"> <textarea name="" rows="" cols="" id="contentAnswer"></textarea></td>
163
+            </tr>
164
+        </table>
165
+        <p style="text-align: center;">
166
+            <button class="btns save">保存</button>
167
+        </p>
168
+    </div>
169
+    <script src="../js/layui/layui.js"></script>
170
+    <script src="../js/adjustHeight.js"></script>
171
+    <script src="../css/laydate/laydate.js"></script>
172
+    <script src="./js/reflectCategory.js"></script>
173
+    <script src="js/addOrEditZhiShiKuGlossary.js"></script>
174
+</body>
175
+
176
+</html>

+ 208 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuGuide.html

@@ -0,0 +1,208 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <link rel="stylesheet" href="../css/init.css" />
9
+    <link rel="stylesheet" href="./css/reflectCategory.css">
10
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
11
+    <title>新版知识库添加</title>
12
+    <style type="text/css">
13
+        ul,
14
+        li {
15
+            padding: 0;
16
+            margin: 0;
17
+            list-style: none;
18
+        }
19
+
20
+        .table tr td input[type="text"] {
21
+            width: 100%;
22
+            height: 34px;
23
+            background: #f3f3f4;
24
+            outline: none;
25
+            border: 1px solid #e7e7e7;
26
+            /*padding-left: 10px;*/
27
+        }
28
+
29
+        .radio-inline input[type=radio] {
30
+            margin-top: 2px;
31
+        }
32
+
33
+        .table tr td textarea {
34
+            width: 100%;
35
+            height: 100%;
36
+            background: #f3f3f4;
37
+            border: 1px solid #e7e7e7;
38
+            resize: none;
39
+            padding: 0px;
40
+            /*padding-left: 10px;*/
41
+        }
42
+
43
+        #scwj {
44
+            background-color: #FFF;
45
+            background-image: none;
46
+            border: 1px solid #ccc;
47
+            border-radius: 1px;
48
+            color: inherit;
49
+            padding: 6px 12px !important;
50
+        }
51
+
52
+        .files {
53
+            padding: 5px !important;
54
+        }
55
+
56
+        .time-box {
57
+            position: relative;
58
+            width: 197px !important;
59
+            height: 34px;
60
+            margin: 0;
61
+        }
62
+
63
+        .tub+input {
64
+            padding-right: 30px;
65
+            border: 1px solid #e5e6e7 !important;
66
+        }
67
+
68
+        i.tub {
69
+            position: absolute;
70
+            right: 8px;
71
+            top: 8px;
72
+            font-size: 18px;
73
+            color: #00a0ca;
74
+        }
75
+
76
+        .operation_bj {
77
+            float: right;
78
+        }
79
+
80
+        .msg_time {
81
+            max-width: 240px;
82
+            min-width: 190px;
83
+        }
84
+    </style>
85
+</head>
86
+
87
+<body class="gray-bg">
88
+    <div class="container-fluid wrapper-content animated fadeInRight">
89
+        <div class="operation_bj">
90
+
91
+        </div>
92
+        <table class="table table-bordered table-condensed">
93
+            <tr>
94
+                <td width="100">关键词</td>
95
+                <td width="40%" class="reflectCategory-wrapper">
96
+                    <input type="text" id="reflectCategory" class="" autocomplete="off"/>
97
+                    <input type="hidden" id="keyId">
98
+                    <div class="reflectCategoryList-wrapper">
99
+                        <ul id="reflectCategoryList">
100
+                        </ul>
101
+                    </div>
102
+                </td>
103
+                <td width="100">发布单位</td>
104
+                <td width="40%"><input type="text" id="publishUnit" autocomplete="off" /></td>
105
+            </tr>
106
+            <tr>
107
+                <td width="100">所属行业</td>
108
+                <td><input type="text" id="industry" autocomplete="off" /></td>
109
+                <td width="100">地区</td>
110
+                <td><input type="text" id="address" autocomplete="off" /></td>
111
+            </tr>
112
+            <tr>
113
+                <td width="100">生效时间</td>
114
+                <td><input type="text" id="effectiveTime" autocomplete="off" /></td>
115
+                <td width="100">失效时间</td>
116
+                <td><input type="text" id="invalidTime" autocomplete="off" /></td>
117
+            </tr>
118
+            <tr>
119
+                <td width="100">申请条件</td>
120
+                <td><input type="text" id="applicationConditions" autocomplete="off" /></td>
121
+                <td width="100">政策依据</td>
122
+                <td><input type="text" id="policyBased" autocomplete="off" /></td>
123
+            </tr>
124
+            <tr>
125
+                <td width="100">网上办理链接</td>
126
+                <td><input type="text" id="onlineURL" autocomplete="off" /></td>
127
+                <td width="100">附件</td>
128
+                <td>
129
+                    <div class="fileBox">
130
+                        <!--<span class="files">文件1<i class="fa fa-remove"></i></span>-->
131
+                    </div>
132
+                    <input class="input" type="file" name="upFile" id="upFile" multiple="multiple" style="display: none;">
133
+                    <input class="input" type="button" value="上传" id="scwj" />
134
+                    <input class="input" type="button" value="删除附件" id="scfj" style="display:none;" />
135
+                    <input type="hidden" id="file" />
136
+                    <span style="color:#FF0000; border: none;">
137
+                        (文件格式为png,jpg,mp4,mp3,pdf,doc,docx,xls,xlsx)
138
+                    </span>     
139
+                    <!-- <input type="text" id="" autocomplete="off" /> -->
140
+                </td>
141
+            </tr>
142
+            <tr>
143
+                <td width="100">业务名称</td>
144
+                <td><input type="text" id="businessName" autocomplete="off" /></td>
145
+                <td class="addOrEditDisplay" width="100">发布人</td>
146
+                <td class="addOrEditDisplay"><input type="text" id="publishPersonal" autocomplete="off" /></td>
147
+            </tr>
148
+            <tr>
149
+                <td class="addOrEditDisplay" width="100">发布时间</td>
150
+                <td class="addOrEditDisplay"><input type="text" id="publishTime" autocomplete="off" /></td>
151
+            </tr>
152
+            <tr style="display: none;">
153
+                <td width="100">标识编码</td>
154
+                <td><input type="text" id="identifyEncoding" autocomplete="off" /></td>
155
+            </tr>
156
+            <tr>
157
+                <th colspan="4">办理流程</th>
158
+            </tr>
159
+            <tr>
160
+                <td width="100">办理材料</td>
161
+                <td colspan="3"><input type="text" id="handlingMaterials" autocomplete="off" /></td>
162
+            </tr>
163
+            <tr>
164
+                <td width="100">办理时限</td>
165
+                <td colspan="3"><input type="text" id="processingTimeLimit" autocomplete="off" /></td>
166
+            </tr>
167
+            <tr>
168
+                <td width="100">办理地点</td>
169
+                <td colspan="3"><input type="text" id="handlingPlace" autocomplete="off" /></td>
170
+            </tr>
171
+            <tr>
172
+                <td width="100">办理时间</td>
173
+                <td colspan="3"><input type="text" id="processingTime" autocomplete="off" /></td>
174
+            </tr>
175
+            <tr>
176
+                <td width="100">电话</td>
177
+                <td colspan="3"><input type="text" id="telephone" autocomplete="off" /></td>
178
+            </tr>
179
+            <tr>
180
+                <td width="100">其他说明</td>
181
+                <td colspan="3"><input type="text" id="otherInstructions" autocomplete="off" /></td>
182
+            </tr>
183
+            <tr>
184
+                <td width="100">办理流程</td>
185
+                <td colspan="3"><input type="text" id="process" autocomplete="off" /></td>
186
+            </tr>
187
+            <!-- <tr>
188
+                <td width="100">备注</td>
189
+                <td colspan="3"><input type="text" id="publishUnit" autocomplete="off" /></td>
190
+            </tr> -->
191
+            <tr>
192
+                <td width="100" height="100">备注</td>
193
+                <td colspan="3" height="100"> <textarea name="" rows="" cols=""
194
+                        id="remark"></textarea></td>
195
+            </tr>
196
+        </table>
197
+        <p style="text-align: center;">
198
+            <button class="btns save">保存</button>
199
+        </p>
200
+    </div>
201
+    <script src="../js/layui/layui.js"></script>
202
+    <script src="../js/adjustHeight.js"></script>
203
+    <script src="../css/laydate/laydate.js"></script>
204
+    <script src="./js/reflectCategory.js"></script>
205
+    <script src="js/addOrEditZhiShiKuGuide.js"></script>
206
+</body>
207
+
208
+</html>

+ 176 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuHotLssues.html

@@ -0,0 +1,176 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <link rel="stylesheet" href="../css/init.css" />
9
+    <link rel="stylesheet" href="./css/reflectCategory.css">
10
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
11
+    <title>新版知识库添加</title>
12
+    <style type="text/css">
13
+        ul,
14
+        li {
15
+            padding: 0;
16
+            margin: 0;
17
+            list-style: none;
18
+        }
19
+
20
+        .table tr td input[type="text"] {
21
+            width: 100%;
22
+            height: 34px;
23
+            background: #f3f3f4;
24
+            outline: none;
25
+            border: 1px solid #e7e7e7;
26
+            /*padding-left: 10px;*/
27
+        }
28
+
29
+        .radio-inline input[type=radio] {
30
+            margin-top: 2px;
31
+        }
32
+
33
+        .table tr td textarea {
34
+            width: 100%;
35
+            height: 100%;
36
+            background: #f3f3f4;
37
+            border: 1px solid #e7e7e7;
38
+            resize: none;
39
+            padding: 0px;
40
+            /*padding-left: 10px;*/
41
+        }
42
+
43
+        #scwj {
44
+            background-color: #FFF;
45
+            background-image: none;
46
+            border: 1px solid #ccc;
47
+            border-radius: 1px;
48
+            color: inherit;
49
+            padding: 6px 12px !important;
50
+        }
51
+
52
+        .files {
53
+            padding: 5px !important;
54
+        }
55
+
56
+        .time-box {
57
+            position: relative;
58
+            width: 197px !important;
59
+            height: 34px;
60
+            margin: 0;
61
+        }
62
+
63
+        .tub+input {
64
+            padding-right: 30px;
65
+            border: 1px solid #e5e6e7 !important;
66
+        }
67
+
68
+        i.tub {
69
+            position: absolute;
70
+            right: 8px;
71
+            top: 8px;
72
+            font-size: 18px;
73
+            color: #00a0ca;
74
+        }
75
+
76
+        .operation_bj {
77
+            float: right;
78
+        }
79
+
80
+        .msg_time {
81
+            max-width: 240px;
82
+            min-width: 190px;
83
+        }
84
+    </style>
85
+</head>
86
+
87
+<body class="gray-bg">
88
+    <div class="container-fluid wrapper-content animated fadeInRight">
89
+        <div class="operation_bj">
90
+
91
+        </div>
92
+        <table class="table table-bordered table-condensed">
93
+            <tr>
94
+                <td width="100">关键词</td>
95
+                <td width="40%" class="reflectCategory-wrapper">
96
+                    <input type="text" id="reflectCategory" class="" autocomplete="off"/>
97
+                    <input type="hidden" id="keyId">
98
+                    <div class="reflectCategoryList-wrapper">
99
+                        <ul id="reflectCategoryList">
100
+                        </ul>
101
+                    </div>
102
+                </td>
103
+                <td width="100">发布单位</td>
104
+                <td width="40%"><input type="text" id="publishUnit" autocomplete="off" /></td>
105
+            </tr>
106
+            <tr>
107
+                <td width="100">所属行业</td>
108
+                <td><input type="text" id="industry" autocomplete="off" /></td>
109
+                <td width="100">地区</td>
110
+                <td><input type="text" id="address" autocomplete="off" /></td>
111
+            </tr>
112
+            <tr>
113
+                <td width="100">生效时间</td>
114
+                <td><input type="text" id="effectiveTime" autocomplete="off" /></td>
115
+                <td width="100">失效时间</td>
116
+                <td><input type="text" id="invalidTime" autocomplete="off" /></td>
117
+            </tr>
118
+            <tr>
119
+                <td width="100">发文单位</td>
120
+                <td><input type="text" id="documentUnit" autocomplete="off" /></td>
121
+                <td width="100">附件</td>
122
+                <td>
123
+                    <div class="fileBox">
124
+                        <!--<span class="files">文件1<i class="fa fa-remove"></i></span>-->
125
+                    </div>
126
+                    <input class="input" type="file" name="upFile" id="upFile" multiple="multiple" style="display: none;">
127
+                    <input class="input" type="button" value="上传" id="scwj" />
128
+                    <input class="input" type="button" value="删除附件" id="scfj" style="display:none;" />
129
+                    <input type="hidden" id="file" />
130
+                    <span style="color:#FF0000; border: none;">
131
+                        (文件格式为png,jpg,mp4,mp3,pdf,doc,docx,xls,xlsx)
132
+                    </span>     
133
+                    <!-- <input type="text" id="" autocomplete="off" /> -->
134
+                </td>
135
+            </tr>
136
+            <tr>
137
+                <td class="addOrEditDisplay" width="100">发布人</td>
138
+                <td class="addOrEditDisplay"><input type="text" id="publishPersonal" autocomplete="off" /></td>
139
+                <td class="addOrEditDisplay" width="100">发布时间</td>
140
+                <td class="addOrEditDisplay"><input type="text" id="publishTime" autocomplete="off" /></td>
141
+            </tr>
142
+            <tr style="display: none;">
143
+                <td width="100">发文文号</td>
144
+                <td><input type="text" id="documentNumber" autocomplete="off" /></td>
145
+                <td width="100">标识编码</td>
146
+                <td><input type="text" id="identifyEncoding" autocomplete="off" /></td>
147
+            </tr>
148
+            <tr>
149
+                <td width="100">政策名称</td>
150
+                <td colspan="3"><input type="text" id="policyName" autocomplete="off" /></td>
151
+            </tr>
152
+            <tr>
153
+                <td width="100">解答单位</td>
154
+                <td colspan="3"><input type="text" id="answeringUnit" autocomplete="off" /></td>
155
+            </tr>
156
+            <tr>
157
+                <td width="100" height="100">热点问题</td>
158
+                <td colspan="3" height="100"> <textarea name="" rows="" cols="" id="hotIssues"></textarea></td>
159
+            </tr>
160
+            <tr>
161
+                <td width="100" height="100">内容解答</td>
162
+                <td colspan="3" height="100"> <textarea name="" rows="" cols="" id="contentAnswer"></textarea></td>
163
+            </tr>
164
+        </table>
165
+        <p style="text-align: center;">
166
+            <button class="btns save">保存</button>
167
+        </p>
168
+    </div>
169
+    <script src="../js/layui/layui.js"></script>
170
+    <script src="../js/adjustHeight.js"></script>
171
+    <script src="../css/laydate/laydate.js"></script>
172
+    <script src="./js/reflectCategory.js"></script>
173
+    <script src="js/addOrEditZhiShiKuHotLssues.js"></script>
174
+</body>
175
+
176
+</html>

+ 170 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuPoliciesRegulations.html

@@ -0,0 +1,170 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <link rel="stylesheet" href="../css/init.css" />
9
+    <link rel="stylesheet" href="./css/reflectCategory.css">
10
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
11
+    <title>新版知识库添加</title>
12
+    <style type="text/css">
13
+        ul,
14
+        li {
15
+            padding: 0;
16
+            margin: 0;
17
+            list-style: none;
18
+        }
19
+
20
+        .table tr td input[type="text"] {
21
+            width: 100%;
22
+            height: 34px;
23
+            background: #f3f3f4;
24
+            outline: none;
25
+            border: 1px solid #e7e7e7;
26
+            /*padding-left: 10px;*/
27
+        }
28
+
29
+        .radio-inline input[type=radio] {
30
+            margin-top: 2px;
31
+        }
32
+
33
+        .table tr td textarea {
34
+            width: 100%;
35
+            height: 100%;
36
+            background: #f3f3f4;
37
+            border: 1px solid #e7e7e7;
38
+            resize: none;
39
+            padding: 0px;
40
+            /*padding-left: 10px;*/
41
+        }
42
+
43
+        #scwj {
44
+            background-color: #FFF;
45
+            background-image: none;
46
+            border: 1px solid #ccc;
47
+            border-radius: 1px;
48
+            color: inherit;
49
+            padding: 6px 12px !important;
50
+        }
51
+
52
+        .files {
53
+            padding: 5px !important;
54
+        }
55
+
56
+        .time-box {
57
+            position: relative;
58
+            width: 197px !important;
59
+            height: 34px;
60
+            margin: 0;
61
+        }
62
+
63
+        .tub+input {
64
+            padding-right: 30px;
65
+            border: 1px solid #e5e6e7 !important;
66
+        }
67
+
68
+        i.tub {
69
+            position: absolute;
70
+            right: 8px;
71
+            top: 8px;
72
+            font-size: 18px;
73
+            color: #00a0ca;
74
+        }
75
+
76
+        .operation_bj {
77
+            float: right;
78
+        }
79
+
80
+        .msg_time {
81
+            max-width: 240px;
82
+            min-width: 190px;
83
+        }
84
+    </style>
85
+</head>
86
+
87
+<body class="gray-bg">
88
+    <div class="container-fluid wrapper-content animated fadeInRight">
89
+        <div class="operation_bj">
90
+
91
+        </div>
92
+        <table class="table table-bordered table-condensed">
93
+            <tr>
94
+                <td width="100">关键词</td>
95
+                <td width="40%" class="reflectCategory-wrapper">
96
+                    <input type="text" id="reflectCategory" class="" autocomplete="off"/>
97
+                    <input type="hidden" id="keyId">
98
+                    <div class="reflectCategoryList-wrapper">
99
+                        <ul id="reflectCategoryList">
100
+                        </ul>
101
+                    </div>
102
+                </td>
103
+                <td width="100">发布单位</td>
104
+                <td width="40%"><input type="text" id="publishUnit" autocomplete="off" /></td>
105
+            </tr>
106
+            <tr>
107
+                <td width="100">所属行业</td>
108
+                <td><input type="text" id="industry" autocomplete="off" /></td>
109
+                <td width="100">地区</td>
110
+                <td><input type="text" id="address" autocomplete="off" /></td>
111
+            </tr>
112
+            <tr>
113
+                <td width="100">生效时间</td>
114
+                <td><input type="text" id="effectiveTime" autocomplete="off" /></td>
115
+                <td width="100">失效时间</td>
116
+                <td><input type="text" id="invalidTime" autocomplete="off" /></td>
117
+            </tr>
118
+            <tr>
119
+                <td width="100">发文单位</td>
120
+                <td><input type="text" id="documentUnit" autocomplete="off" /></td>
121
+                <td width="100">职能部门</td>
122
+                <td><input type="text" id="functionalDepartment" autocomplete="off" /></td>
123
+            </tr>
124
+            <tr>
125
+                <td width="100">文件名称</td>
126
+                <td><input type="text" id="fileName" autocomplete="off" /></td>
127
+                <td width="100">附件</td>
128
+                <td>
129
+                    <div class="fileBox">
130
+                        <!--<span class="files">文件1<i class="fa fa-remove"></i></span>-->
131
+                    </div>
132
+                    <input class="input" type="file" name="upFile" id="upFile" multiple="multiple" style="display: none;">
133
+                    <input class="input" type="button" value="上传" id="scwj" />
134
+                    <input class="input" type="button" value="删除附件" id="scfj" style="display:none;" />
135
+                    <input type="hidden" id="file" />
136
+                    <span style="color:#FF0000; border: none;">
137
+                        (文件格式为png,jpg,mp4,mp3,pdf,doc,docx,xls,xlsx)
138
+                    </span>     
139
+                    <!-- <input type="text" id="" autocomplete="off" /> -->
140
+                </td>
141
+            </tr>
142
+            <tr>
143
+                <td class="addOrEditDisplay" width="100">发布人</td>
144
+                <td class="addOrEditDisplay"><input type="text" id="publishPersonal" autocomplete="off" /></td>
145
+                <td class="addOrEditDisplay" width="100">发布时间</td>
146
+                <td class="addOrEditDisplay"><input type="text" id="publishTime" autocomplete="off" /></td>
147
+            </tr>
148
+            <tr style="display: none;">
149
+                <td width="100">标识编码</td>
150
+                <td><input type="text" id="identifyEncoding" autocomplete="off" /></td>
151
+                <td width="100">发文文号</td>
152
+                <td><input type="text" id="documentNumber" autocomplete="off" /></td>
153
+            </tr>
154
+            <tr>
155
+                <td width="100" height="100">文件内容</td>
156
+                <td colspan="3" height="100"> <textarea name="" rows="" cols="" id="documentContent"></textarea></td>
157
+            </tr>
158
+        </table>
159
+        <p style="text-align: center;">
160
+            <button class="btns save">保存</button>
161
+        </p>
162
+    </div>
163
+    <script src="../js/layui/layui.js"></script>
164
+    <script src="../js/adjustHeight.js"></script>
165
+    <script src="../css/laydate/laydate.js"></script>
166
+    <script src="./js/reflectCategory.js"></script>
167
+    <script src="js/addOrEditZhiShiKuPoliciesRegulations.js"></script>
168
+</body>
169
+
170
+</html>

+ 179 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/addOrEditZhiShiKuPolicyExpert.html

@@ -0,0 +1,179 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <link rel="stylesheet" href="../css/init.css" />
9
+    <title>办事指南</title>
10
+    <style type="text/css">
11
+        ul,
12
+        li {
13
+            padding: 0;
14
+            margin: 0;
15
+            list-style: none;
16
+        }
17
+
18
+        .table tr td input[type="text"] {
19
+            width: 100%;
20
+            height: 34px;
21
+            background: #f3f3f4;
22
+            outline: none;
23
+            border: 1px solid #e7e7e7;
24
+            /*padding-left: 10px;*/
25
+        }
26
+
27
+        .radio-inline input[type=radio] {
28
+            margin-top: 2px;
29
+        }
30
+
31
+        .table tr td textarea {
32
+            width: 100%;
33
+            height: 100%;
34
+            background: #f3f3f4;
35
+            border: 1px solid #e7e7e7;
36
+            resize: none;
37
+            padding: 0px;
38
+            /*padding-left: 10px;*/
39
+        }
40
+
41
+        #scwj {
42
+            background-color: #FFF;
43
+            background-image: none;
44
+            border: 1px solid #ccc;
45
+            border-radius: 1px;
46
+            color: inherit;
47
+            padding: 6px 12px !important;
48
+        }
49
+
50
+        .files {
51
+            padding: 5px !important;
52
+        }
53
+
54
+        .time-box {
55
+            position: relative;
56
+            width: 197px !important;
57
+            height: 34px;
58
+            margin: 0;
59
+        }
60
+
61
+        .tub+input {
62
+            padding-right: 30px;
63
+            border: 1px solid #e5e6e7 !important;
64
+        }
65
+
66
+        i.tub {
67
+            position: absolute;
68
+            right: 8px;
69
+            top: 8px;
70
+            font-size: 18px;
71
+            color: #00a0ca;
72
+        }
73
+
74
+        .operation_bj {
75
+            float: right;
76
+        }
77
+
78
+        .imgBox {
79
+            display: inline-block;
80
+        }
81
+        .imgWrapper {
82
+            position: relative;
83
+        }
84
+        .imgMask {
85
+            display: none;
86
+            position: absolute;
87
+            top: 0;
88
+            left: 0;
89
+            width: 100%;
90
+            height: 20px;
91
+            background: rgba(0, 0, 0, 0.8);
92
+        }
93
+        .del_file {
94
+            position: absolute;
95
+            top: 2px;
96
+            right: 5px;
97
+            color: #FFF;
98
+        }
99
+    </style>
100
+</head>
101
+
102
+<body class="gray-bg">
103
+    <div class="container-fluid wrapper-content animated fadeInRight">
104
+        <div class="operation_bj">
105
+
106
+        </div>
107
+        <table class="table table-bordered table-condensed">
108
+            <tr>
109
+                <td width="100">专家姓名</td>
110
+                <td><input type="text" id="name" autocomplete="off" /></td>
111
+                <td width="100">地区</td>
112
+                <td><input type="text" id="address" autocomplete="off" /></td>
113
+            </tr>
114
+            <tr>
115
+                <td width="100">专家单位</td>
116
+                <td><input type="text" id="unit" autocomplete="off" /></td>
117
+                <td width="100">所属行业</td>
118
+                <td><input type="text" id="industry" autocomplete="off" /></td>
119
+            </tr>
120
+            <tr>
121
+                <td width="100">科室</td>
122
+                <td><input type="text" id="department" autocomplete="off" /></td>
123
+                <td width="100">生效时间</td>
124
+                <td><input type="text" id="effectiveTime" autocomplete="off" /></td>
125
+            </tr>
126
+            <tr>
127
+                <td width="100">职务</td>
128
+                <td><input type="text" id="job" autocomplete="off" /></td>
129
+                <td width="100">失效时间</td>
130
+                <td><input type="text" id="expirationTime" autocomplete="off" /></td>
131
+            </tr>
132
+            <tr>
133
+                <td width="100">手机号码</td>
134
+                <td><input type="text" id="phoneNumber" autocomplete="off" /></td>
135
+                <td width="100">办公电话</td>
136
+                <td><input type="text" id="officePhone" autocomplete="off" /></td>
137
+            </tr>
138
+            <tr>
139
+                <td class="addOrEditDisplay" width="100">发布时间</td>
140
+                <td class="addOrEditDisplay"><input type="text" id="publishTime" autocomplete="off" /></td>                
141
+                <td class="addOrEditDisplay" width="100">发布人</td>
142
+                <td class="addOrEditDisplay"><input type="text" id="publishPersonal" autocomplete="off" /></td>
143
+            </tr>
144
+            <tr style="display: none;">
145
+                <td width="100">标识编码</td>
146
+                <td><input type="text" id="identifyEncoding" autocomplete="off" /></td>
147
+            </tr>
148
+            <tr>
149
+                <td width="100">发布单位</td>
150
+                <td><input type="text" id="publishUnit" autocomplete="off" /></td>
151
+                <td width="100">头像</td>
152
+                <td>
153
+                    <div class="imgBox">
154
+                    </div>
155
+                    <input class="input" type="file" name="upFile" id="upFile" style="display: none;">
156
+                    <input class="input" type="button" value="上传" id="scwj" />
157
+                    <input class="input" type="button" value="删除附件" id="scfj" style="display:none;" />
158
+                    <input type="hidden" id="file" />
159
+                    <span style="color:#FF0000; border: none;">
160
+                        (文件格式为png,jpg)
161
+                    </span>        
162
+                </td>
163
+            </tr>
164
+            <tr>
165
+                <td width="100" height="100">专业领域简介</td>
166
+                <td colspan="3" height="100"> <textarea name="" rows="" cols=""
167
+                        id="introductionFieldExpertise"></textarea></td>
168
+            </tr>
169
+        </table>
170
+        <p style="text-align: center;">
171
+            <button class="btns save">保存</button>
172
+        </p>
173
+    </div>
174
+    <script src="../js/adjustHeight.js"></script>
175
+    <script src="../css/laydate/laydate.js"></script>
176
+    <script src="js/addOrEditZhiShiKuPolicyExpert.js"></script>
177
+</body>
178
+
179
+</html>

+ 29 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/css/reflectCategory.css

@@ -0,0 +1,29 @@
1
+.reflectCategory-wrapper {
2
+    position: relative;
3
+}
4
+
5
+.reflectCategoryList-wrapper {
6
+    display: none;
7
+    position: absolute;
8
+    top: 38px;
9
+    z-index: 9999;
10
+    line-height: 32px;
11
+    background: #FFF;
12
+}
13
+
14
+#reflectCategoryList {
15
+    height: 240px;
16
+    background: #FFF;
17
+    border: 1px solid #e5e6e7;
18
+    overflow: auto;
19
+}
20
+
21
+#reflectCategoryList li {
22
+    padding: 0 10px;
23
+    width: 100%;
24
+    line-height: 32px;
25
+}
26
+
27
+#reflectCategoryList li:hover {
28
+    background: #00a1cb;
29
+}

+ 219 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuFunctional.js

@@ -0,0 +1,219 @@
1
+var id = helper.request.queryString("id");
2
+$(document).ready(function () {
3
+    laydate.skin('blue');
4
+    laydate({
5
+        elem: '#publishTime',
6
+        event: 'focus',
7
+        istime: true,
8
+        format: 'YYYY-MM-DD hh:mm:ss'
9
+    });
10
+    laydate({
11
+        elem: '#effectiveTime',
12
+        event: 'focus',
13
+        istime: true,
14
+        format: 'YYYY-MM-DD hh:mm:ss'
15
+    });
16
+    laydate({
17
+        elem: '#invalidTime',
18
+        event: 'focus',
19
+        istime: true,
20
+        format: 'YYYY-MM-DD hh:mm:ss'
21
+    });
22
+
23
+    $(".save").click(function () {
24
+        saveCon();
25
+    });
26
+    //上传附件
27
+    $("#scwj").click(function () {
28
+        $("#upFile").trigger("click");
29
+    });
30
+    $("#upFile").change(function () {
31
+        upload();
32
+    });
33
+
34
+    //保存
35
+    function saveCon() {
36
+        $.ajax({
37
+            type: "post",
38
+            url: huayi.config.callcenter_url + "Functions/AddModel",
39
+            async: true,
40
+            dataType: "json",
41
+            data: {
42
+                token: $.cookie("token"),
43
+                id: id, //知识库id
44
+                key: $("#keyId").val(), // 关键词id
45
+                fabudanwei: $("#publishUnit").val(), // 发布单位
46
+                faburen: $("#publishPersonal").val(), // 发布人
47
+                hangye: $("#industry").val(), // 所属行业
48
+                diqu: $("#address").val(), // 地区
49
+                fabushijian: $("#publishTime").val(), // 发布时间
50
+                shengxiaoshijian: $("#effectiveTime").val(), // 生效时间
51
+                shixiaoshijian: $("#invalidTime").val(), // 失效时间
52
+                fawenwenhao: $("#documentNumber").val(), // 发文文号
53
+                fawendanwei: $("#documentUnit").val(), // 发文单位
54
+                zhinengbumen: $("#functionalDepartment").val(), // 职能部门
55
+                biaoshibianma: $("#identifyEncoding").val(), // 标识编码
56
+                file: $("#file").val(), // 附件
57
+                wenjianmingcheng: $("#fileName").val(), // 文件名称
58
+                wenjianneirong: $("#documentContent").val(), // 文件内容
59
+            },
60
+            success: function (data) {
61
+                if (data.state.toLowerCase() == "success") {
62
+                    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
63
+                    parent.layer.close(index); //再执行关闭
64
+                    parent.layer.msg(data.message); //再执行关闭
65
+                    parent.$("#tableList").bootstrapTable("refresh"); //再执行关闭
66
+                }
67
+            },
68
+        });
69
+    }
70
+    //获取知识库详情
71
+    if (id) {
72
+        $(".addOrEditDisplay").show();
73
+        $.ajax({
74
+            type: "get",
75
+            url: huayi.config.callcenter_url + "Functions/GetModel",
76
+            async: true,
77
+            dataType: "json",
78
+            data: {
79
+                token: $.cookie("token"),
80
+                id: id,
81
+            },
82
+            success: function (result) {
83
+                if (result.state.toLowerCase() == "success") {
84
+                    var model = result.data.model;
85
+                    var dtkey = result.data.dtkey;
86
+                    var dtfile = result.data.dtfile;
87
+
88
+                    $("#publishUnit").val(model.F_FaBuDanWei);
89
+                    $("#publishPersonal").val(model.F_FaBuRen);
90
+                    $("#industry").val(model.F_HangYe);
91
+                    $("#address").val(model.F_DiQu);
92
+                    $("#publishTime").val(model.F_FaBuShiJian);
93
+                    $("#effectiveTime").val(model.F_ShengXiaoShiJian);
94
+                    $("#invalidTime").val(model.F_ShiXiaoShiJian);
95
+                    $("#documentNumber").val(model.F_FaWenWenHao);
96
+                    $("#documentUnit").val(model.F_FaWenDanWei);
97
+                    $("#functionalDepartment").val(model.F_ZhiNengBuMen);
98
+                    $("#identifyEncoding").val(model.F_BiaoShiBianMa);
99
+                    $("#fileName").val(model.F_WenJianMingCheng);
100
+                    $("#documentContent").val(model.F_WenJianNeiRong);
101
+                    $("#reflectCategory").val(dtkey[0].name);
102
+                    $("#keyId").val(dtkey[0].id);
103
+
104
+                    $(dtfile).each(function (k, q) {
105
+                        var strs =
106
+                            '<span class="files" fiel-num="' +
107
+                            q.F_FileId +
108
+                            '">' +
109
+                            q.F_FileName.substring(19) +
110
+                            '<i class="fa fa-remove del_file"></i></span>';
111
+                        $(strs)
112
+                            .appendTo($(".fileBox"))
113
+                            .find(".del_file")
114
+                            .click(function (event) {
115
+                                event.stopPropagation();
116
+                                $(this).parent().remove();
117
+                                file_num();
118
+                                console.log($(".fileBox").find(".del_file"));
119
+                            });
120
+                        file_num();
121
+                    });
122
+                }
123
+            },
124
+        });
125
+    } else {
126
+        $(".addOrEditDisplay").hide();
127
+    }
128
+});
129
+
130
+//上传文件
131
+function upload() {
132
+    var Files = document.getElementById("upFile").files;
133
+    if (Files.length > 0) {
134
+        var formData = new FormData();
135
+        for (var i = 0; i < Files.length; i++) {
136
+            formData.append("file" + i, Files[i]);
137
+        }
138
+        formData.append("token", $.cookie("token"));
139
+        console.log(formData);
140
+        console.log("123",formData.file0);
141
+        var typeName = Files[0].name.split(".")[1];
142
+        if (
143
+            typeName == "png" ||
144
+            typeName == "jpg" ||
145
+            typeName == "mp4" ||
146
+            typeName == "mp3" ||
147
+            typeName == "pdf" ||
148
+            typeName == "doc" ||
149
+            typeName == "docx" ||
150
+            typeName == "xls" ||
151
+            typeName == "xlsx"
152
+        ) {
153
+            $.ajax({
154
+                url: huayi.config.callcenter_url + "HotspotGlossary/UploadFile",
155
+                type: "POST",
156
+                data: formData,
157
+                /**
158
+                 *必须false才会自动加上正确的Content-Type
159
+                 */
160
+                contentType: false,
161
+                /**
162
+                 * 必须false才会避开jQuery对 formdata 的默认处理
163
+                 * XMLHttpRequest会对 formdata 进行正确的处理
164
+                 */
165
+                processData: false,
166
+                success: function (result) {
167
+                    document.getElementById("upFile").outerHTML =
168
+                        document.getElementById("upFile").outerHTML;
169
+                    $("#upFile").change(function () {
170
+                        upload();
171
+                    });
172
+                    var r = $.parseJSON(result);
173
+                    if (r.state.toLowerCase() == "success") {
174
+                        //								$(".fjnr").text(r.data[0].F_FileName);
175
+                        var a = r.data;
176
+                        $(a).each(function (i, n) {
177
+                            var strs =
178
+                                '<span class="files" fiel-num="' +
179
+                                n.F_FileId +
180
+                                '">' +
181
+                                n.F_FileName.substring(19) +
182
+                                '<i class="fa fa-remove del_file"></i></span>';
183
+                            $(strs)
184
+                                .appendTo($(".fileBox"))
185
+                                .find(".del_file")
186
+                                .click(function (event) {
187
+                                    event.stopPropagation();
188
+                                    $(this).parent().remove();
189
+                                    file_num();
190
+                                });
191
+                        });
192
+                        file_num();
193
+                    }
194
+                },
195
+            });
196
+        } else {
197
+            layer.msg("格式不正确");
198
+        }
199
+    } else {
200
+        layer.confirm("请上传文件!", {
201
+            btn: ["确定"],
202
+        });
203
+    }
204
+}
205
+//上传文件隐藏域值
206
+function file_num() {
207
+    var str = "";
208
+    var Str;
209
+    $(".fileBox .files").each(function (j, m) {
210
+        var aa = $(m).attr("fiel-num");
211
+        console.log(aa);
212
+        str += aa + ",";
213
+        Str =
214
+            str.substring(str.length - 1) == ","
215
+                ? str.substring(0, str.length - 1)
216
+                : str;
217
+    });
218
+    $("#file").val(Str);
219
+}

+ 221 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuGlossary.js

@@ -0,0 +1,221 @@
1
+var id = helper.request.queryString("id");
2
+$(document).ready(function () {
3
+    laydate.skin('blue');
4
+    laydate({
5
+        elem: '#publishTime',
6
+        event: 'focus',
7
+        istime: true,
8
+        format: 'YYYY-MM-DD hh:mm:ss'
9
+    });
10
+    laydate({
11
+        elem: '#effectiveTime',
12
+        event: 'focus',
13
+        istime: true,
14
+        format: 'YYYY-MM-DD hh:mm:ss'
15
+    });
16
+    laydate({
17
+        elem: '#invalidTime',
18
+        event: 'focus',
19
+        istime: true,
20
+        format: 'YYYY-MM-DD hh:mm:ss'
21
+    });
22
+
23
+    $(".save").click(function () {
24
+        saveCon();
25
+    });
26
+    //上传附件
27
+    $("#scwj").click(function () {
28
+        $("#upFile").trigger("click");
29
+    });
30
+    $("#upFile").change(function () {
31
+        upload();
32
+    });
33
+
34
+    //保存
35
+    function saveCon() {
36
+        $.ajax({
37
+            type: "post",
38
+            url: huayi.config.callcenter_url + "NounInterpretation/AddModel",
39
+            async: true,
40
+            dataType: "json",
41
+            data: {
42
+                token: $.cookie("token"),
43
+                id: id, //知识库id
44
+                key: $("#keyId").val(), // 关键词id
45
+                fabudanwei: $("#publishUnit").val(), // 发布单位
46
+                faburen: $("#publishPersonal").val(), // 发布人
47
+                hangye: $("#industry").val(), // 所属行业
48
+                diqu: $("#address").val(), // 地区
49
+                fabushijian: $("#publishTime").val(), // 发布时间
50
+                shengxiaoshijian: $("#effectiveTime").val(), // 生效时间
51
+                shixiaoshijian: $("#invalidTime").val(), // 失效时间
52
+                fawenwenhao: $("#documentNumber").val(), // 发文文号
53
+                fawendanwei: $("#documentUnit").val(), // 发文单位
54
+                biaoshibianma: $("#identifyEncoding").val(), // 标识编码
55
+                file: $("#file").val(), // 附件
56
+                zhengcemingci: $("#policyName").val(), // 政策名称
57
+                jiedadanwei: $("#answeringUnit").val(), // 解答单位
58
+                redianwenti: $("#hotIssues").val(), // 热点问题/名词解释
59
+                wentijieda: $("#contentAnswer").val(), // 内容解答
60
+            },
61
+            success: function (data) {
62
+                if (data.state.toLowerCase() == "success") {
63
+                    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
64
+                    parent.layer.close(index); //再执行关闭
65
+                    parent.layer.msg(data.message); //再执行关闭
66
+                    parent.$("#tableList").bootstrapTable("refresh"); //再执行关闭
67
+                }
68
+            },
69
+        });
70
+    }
71
+    //获取知识库详情
72
+    if (id) {
73
+        $(".addOrEditDisplay").show();
74
+        $.ajax({
75
+            type: "get",
76
+            url: huayi.config.callcenter_url + "NounInterpretation/GetModel",
77
+            async: true,
78
+            dataType: "json",
79
+            data: {
80
+                token: $.cookie("token"),
81
+                id: id,
82
+            },
83
+            success: function (result) {
84
+                if (result.state.toLowerCase() == "success") {
85
+                    var model = result.data.model;
86
+                    var dtkey = result.data.dtkey;
87
+                    var dtfile = result.data.dtfile;
88
+
89
+                    $("#publishUnit").val(model.F_FaBuDanWei);
90
+                    $("#publishPersonal").val(model.F_FaBuRen);
91
+                    $("#industry").val(model.F_HangYe);
92
+                    $("#address").val(model.F_DiQu);
93
+                    $("#publishTime").val(model.F_FaBuShiJian);
94
+                    $("#effectiveTime").val(model.F_ShengXiaoShiJian);
95
+                    $("#invalidTime").val(model.F_ShiXiaoShiJian);
96
+                    $("#documentNumber").val(model.F_FaWenWenHao);
97
+                    $("#documentUnit").val(model.F_FaWenDanWei);
98
+                    $("#identifyEncoding").val(model.F_BiaoShiBianMa);
99
+                    $("#policyName").val(model.F_ZhengCeMingCi);
100
+                    $("#answeringUnit").val(model.F_JieDaDanWei);
101
+                    $("#hotIssues").val(model.F_ReDianWenTi);
102
+                    $("#contentAnswer").val(model.F_WenTiJieDa);
103
+                    $("#reflectCategory").val(dtkey[0].name);
104
+                    $("#keyId").val(dtkey[0].id);
105
+
106
+                    $(dtfile).each(function (k, q) {
107
+                        var strs =
108
+                            '<span class="files" fiel-num="' +
109
+                            q.F_FileId +
110
+                            '">' +
111
+                            q.F_FileName.substring(19) +
112
+                            '<i class="fa fa-remove del_file"></i></span>';
113
+                        $(strs)
114
+                            .appendTo($(".fileBox"))
115
+                            .find(".del_file")
116
+                            .click(function (event) {
117
+                                event.stopPropagation();
118
+                                $(this).parent().remove();
119
+                                file_num();
120
+                                console.log($(".fileBox").find(".del_file"));
121
+                            });
122
+                        file_num();
123
+                    });
124
+                }
125
+            },
126
+        });
127
+    } else {
128
+        $(".addOrEditDisplay").hide();
129
+    }
130
+});
131
+
132
+//上传文件
133
+function upload() {
134
+    var Files = document.getElementById("upFile").files;
135
+    if (Files.length > 0) {
136
+        var formData = new FormData();
137
+        for (var i = 0; i < Files.length; i++) {
138
+            formData.append("file" + i, Files[i]);
139
+        }
140
+        formData.append("token", $.cookie("token"));
141
+        console.log(formData);
142
+        console.log("123",formData.file0);
143
+        var typeName = Files[0].name.split(".")[1];
144
+        if (
145
+            typeName == "png" ||
146
+            typeName == "jpg" ||
147
+            typeName == "mp4" ||
148
+            typeName == "mp3" ||
149
+            typeName == "pdf" ||
150
+            typeName == "doc" ||
151
+            typeName == "docx" ||
152
+            typeName == "xls" ||
153
+            typeName == "xlsx"
154
+        ) {
155
+            $.ajax({
156
+                url: huayi.config.callcenter_url + "NounInterpretation/UploadFile",
157
+                type: "POST",
158
+                data: formData,
159
+                /**
160
+                 *必须false才会自动加上正确的Content-Type
161
+                 */
162
+                contentType: false,
163
+                /**
164
+                 * 必须false才会避开jQuery对 formdata 的默认处理
165
+                 * XMLHttpRequest会对 formdata 进行正确的处理
166
+                 */
167
+                processData: false,
168
+                success: function (result) {
169
+                    document.getElementById("upFile").outerHTML =
170
+                        document.getElementById("upFile").outerHTML;
171
+                    $("#upFile").change(function () {
172
+                        upload();
173
+                    });
174
+                    var r = $.parseJSON(result);
175
+                    if (r.state.toLowerCase() == "success") {
176
+                        //								$(".fjnr").text(r.data[0].F_FileName);
177
+                        var a = r.data;
178
+                        $(a).each(function (i, n) {
179
+                            var strs =
180
+                                '<span class="files" fiel-num="' +
181
+                                n.F_FileId +
182
+                                '">' +
183
+                                n.F_FileName.substring(19) +
184
+                                '<i class="fa fa-remove del_file"></i></span>';
185
+                            $(strs)
186
+                                .appendTo($(".fileBox"))
187
+                                .find(".del_file")
188
+                                .click(function (event) {
189
+                                    event.stopPropagation();
190
+                                    $(this).parent().remove();
191
+                                    file_num();
192
+                                });
193
+                        });
194
+                        file_num();
195
+                    }
196
+                },
197
+            });
198
+        } else {
199
+            layer.msg("格式不正确");
200
+        }
201
+    } else {
202
+        layer.confirm("请上传文件!", {
203
+            btn: ["确定"],
204
+        });
205
+    }
206
+}
207
+//上传文件隐藏域值
208
+function file_num() {
209
+    var str = "";
210
+    var Str;
211
+    $(".fileBox .files").each(function (j, m) {
212
+        var aa = $(m).attr("fiel-num");
213
+        console.log(aa);
214
+        str += aa + ",";
215
+        Str =
216
+            str.substring(str.length - 1) == ","
217
+                ? str.substring(0, str.length - 1)
218
+                : str;
219
+    });
220
+    $("#file").val(Str);
221
+}

+ 238 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuGuide.js

@@ -0,0 +1,238 @@
1
+var id = helper.request.queryString("id");
2
+$(document).ready(function () {
3
+    laydate.skin('blue');
4
+    laydate({
5
+        elem: '#publishTime',
6
+        event: 'focus',
7
+        istime: true,
8
+        format: 'YYYY-MM-DD hh:mm:ss'
9
+    });
10
+    laydate({
11
+        elem: '#effectiveTime',
12
+        event: 'focus',
13
+        istime: true,
14
+        format: 'YYYY-MM-DD hh:mm:ss'
15
+    });
16
+    laydate({
17
+        elem: '#invalidTime',
18
+        event: 'focus',
19
+        istime: true,
20
+        format: 'YYYY-MM-DD hh:mm:ss'
21
+    });
22
+    laydate({
23
+        elem: '#processingTime',
24
+        event: 'focus',
25
+        istime: true,
26
+        format: 'YYYY-MM-DD hh:mm:ss'
27
+    });
28
+
29
+    $(".save").click(function () {
30
+        saveCon();
31
+    });
32
+    //上传附件
33
+    $("#scwj").click(function () {
34
+        $("#upFile").trigger("click");
35
+    });
36
+    $("#upFile").change(function () {
37
+        upload();
38
+    });
39
+
40
+    //保存
41
+    function saveCon() {
42
+        $.ajax({
43
+            type: "post",
44
+            url: huayi.config.callcenter_url + "LawGuide/AddModel",
45
+            async: true,
46
+            dataType: "json",
47
+            data: {
48
+                token: $.cookie("token"),
49
+                id: id, //知识库id
50
+                key: $("#keyId").val(), // 关键词id
51
+                fabudanwei: $("#publishUnit").val(), // 发布单位
52
+                faburen: $("#publishPersonal").val(), // 发布人
53
+                hangye: $("#industry").val(), // 所属行业
54
+                diqu: $("#address").val(), // 地区
55
+                fabushijian: $("#publishTime").val(), // 发布时间
56
+                shengxiaoshijian: $("#effectiveTime").val(), // 生效时间
57
+                shixiaoshijian: $("#invalidTime").val(), // 失效时间
58
+                yewumingcheng: $("#businessName").val(), // 业务名称
59
+                biaoshibianma: $("#identifyEncoding").val(), // 标识编码
60
+                shenqingtiaojian: $("#applicationConditions").val(), // 申请条件
61
+                zhengceyiju: $("#policyBased").val(), // 政策依据
62
+                wangshangbanlilianjie: $("#onlineURL").val(), // 网上办理链接
63
+                file: $("#file").val(), // 附件
64
+                banlicailiao: $("#handlingMaterials").val(), // 办理材料
65
+                banlishixian: $("#processingTimeLimit").val(), // 办理时限
66
+                banlididian: $("#handlingPlace").val(), // 办理地点
67
+                banlishijian: $("#processingTime").val(), // 办理时间
68
+                banlidianhua: $("#telephone").val(), // 电话
69
+                qitashuoming: $("#otherInstructions").val(), // 其他说明
70
+                banliliucheng: $("#process").val(), // 办理流程
71
+                beizhu: $("#remark").val(), // 备注
72
+            },
73
+            success: function (data) {
74
+                if (data.state.toLowerCase() == "success") {
75
+                    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
76
+                    parent.layer.close(index); //再执行关闭
77
+                    parent.layer.msg(data.message); //再执行关闭
78
+                    parent.$("#tableList").bootstrapTable("refresh"); //再执行关闭
79
+                }
80
+            },
81
+        });
82
+    }
83
+    //获取知识库详情
84
+    if (id) {
85
+        $(".addOrEditDisplay").show();
86
+        $.ajax({
87
+            type: "get",
88
+            url: huayi.config.callcenter_url + "LawGuide/GetModel",
89
+            async: true,
90
+            dataType: "json",
91
+            data: {
92
+                token: $.cookie("token"),
93
+                id: id,
94
+            },
95
+            success: function (result) {
96
+                if (result.state.toLowerCase() == "success") {
97
+                    var model = result.data.model;
98
+                    var dtkey = result.data.dtkey;
99
+                    var dtfile = result.data.dtfile;
100
+
101
+                    $("#publishUnit").val(model.F_FaBuDanWei);
102
+                    $("#publishPersonal").val(model.F_FaBuRen);
103
+                    $("#industry").val(model.F_HangYe);
104
+                    $("#address").val(model.F_DiQu);
105
+                    $("#publishTime").val(model.F_FaBuShiJian);
106
+                    $("#effectiveTime").val(model.F_ShengXiaoShiJian);
107
+                    $("#invalidTime").val(model.F_ShiXiaoShiJian);
108
+                    $("#businessName").val(model.F_YeWuMingCheng);
109
+                    $("#identifyEncoding").val(model.F_BiaoShiBianMa);
110
+                    $("#applicationConditions").val(model.F_ShenQingTiaoJian);
111
+                    $("#policyBased").val(model.F_ZhengCeYiJu);
112
+                    $("#onlineURL").val(model.F_WangShangBanLiLianJie);
113
+                    $("#handlingMaterials").val(model.F_BanLiCaiLiao);
114
+                    $("#processingTimeLimit").val(model.F_BanLiShiXian);
115
+                    $("#handlingPlace").val(model.F_BanLiDiDian);
116
+                    $("#processingTime").val(model.F_BanLiShiJian);
117
+                    $("#telephone").val(model.F_BanLiDianHua);
118
+                    $("#otherInstructions").val(model.F_QiTaShuoMing);
119
+                    $("#process").val(model.F_BanLiLiuCheng);
120
+                    $("#remark").val(model.F_BeiZhu);
121
+                    $("#reflectCategory").val(dtkey[0].name);
122
+                    $("#keyId").val(dtkey[0].id);
123
+                    $(dtfile).each(function (k, q) {
124
+                        var strs =
125
+                            '<span class="files" fiel-num="' +
126
+                            q.F_FileId +
127
+                            '">' +
128
+                            q.F_FileName.substring(19) +
129
+                            '<i class="fa fa-remove del_file"></i></span>';
130
+                        $(strs)
131
+                            .appendTo($(".fileBox"))
132
+                            .find(".del_file")
133
+                            .click(function (event) {
134
+                                event.stopPropagation();
135
+                                $(this).parent().remove();
136
+                                file_num();
137
+                                console.log($(".fileBox").find(".del_file"));
138
+                            });
139
+                        file_num();
140
+                    });
141
+                }
142
+            },
143
+        });
144
+    } else {
145
+        $(".addOrEditDisplay").hide();
146
+    }
147
+});
148
+
149
+//上传文件
150
+function upload() {
151
+    var Files = document.getElementById("upFile").files;
152
+    if (Files.length > 0) {
153
+        var formData = new FormData();
154
+        for (var i = 0; i < Files.length; i++) {
155
+            formData.append("file" + i, Files[i]);
156
+        }
157
+        formData.append("token", $.cookie("token"));
158
+        console.log(formData);
159
+        console.log("123",formData.file0);
160
+        var typeName = Files[0].name.split(".")[1];
161
+        if (
162
+            typeName == "png" ||
163
+            typeName == "jpg" ||
164
+            typeName == "mp4" ||
165
+            typeName == "mp3" ||
166
+            typeName == "pdf" ||
167
+            typeName == "doc" ||
168
+            typeName == "docx" ||
169
+            typeName == "xls" ||
170
+            typeName == "xlsx"
171
+        ) {
172
+            $.ajax({
173
+                url: huayi.config.callcenter_url + "LawGuide/UploadFile",
174
+                type: "POST",
175
+                data: formData,
176
+                /**
177
+                 *必须false才会自动加上正确的Content-Type
178
+                 */
179
+                contentType: false,
180
+                /**
181
+                 * 必须false才会避开jQuery对 formdata 的默认处理
182
+                 * XMLHttpRequest会对 formdata 进行正确的处理
183
+                 */
184
+                processData: false,
185
+                success: function (result) {
186
+                    document.getElementById("upFile").outerHTML =
187
+                        document.getElementById("upFile").outerHTML;
188
+                    $("#upFile").change(function () {
189
+                        upload();
190
+                    });
191
+                    var r = $.parseJSON(result);
192
+                    if (r.state.toLowerCase() == "success") {
193
+                        //								$(".fjnr").text(r.data[0].F_FileName);
194
+                        var a = r.data;
195
+                        $(a).each(function (i, n) {
196
+                            var strs =
197
+                                '<span class="files" fiel-num="' +
198
+                                n.F_FileId +
199
+                                '">' +
200
+                                n.F_FileName.substring(19) +
201
+                                '<i class="fa fa-remove del_file"></i></span>';
202
+                            $(strs)
203
+                                .appendTo($(".fileBox"))
204
+                                .find(".del_file")
205
+                                .click(function (event) {
206
+                                    event.stopPropagation();
207
+                                    $(this).parent().remove();
208
+                                    file_num();
209
+                                });
210
+                        });
211
+                        file_num();
212
+                    }
213
+                },
214
+            });
215
+        } else {
216
+            layer.msg("格式不正确");
217
+        }
218
+    } else {
219
+        layer.confirm("请上传文件!", {
220
+            btn: ["确定"],
221
+        });
222
+    }
223
+}
224
+//上传文件隐藏域值
225
+function file_num() {
226
+    var str = "";
227
+    var Str;
228
+    $(".fileBox .files").each(function (j, m) {
229
+        var aa = $(m).attr("fiel-num");
230
+        console.log(aa);
231
+        str += aa + ",";
232
+        Str =
233
+            str.substring(str.length - 1) == ","
234
+                ? str.substring(0, str.length - 1)
235
+                : str;
236
+    });
237
+    $("#file").val(Str);
238
+}

+ 221 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuHotLssues.js

@@ -0,0 +1,221 @@
1
+var id = helper.request.queryString("id");
2
+$(document).ready(function () {
3
+    laydate.skin('blue');
4
+    laydate({
5
+        elem: '#publishTime',
6
+        event: 'focus',
7
+        istime: true,
8
+        format: 'YYYY-MM-DD hh:mm:ss'
9
+    });
10
+    laydate({
11
+        elem: '#effectiveTime',
12
+        event: 'focus',
13
+        istime: true,
14
+        format: 'YYYY-MM-DD hh:mm:ss'
15
+    });
16
+    laydate({
17
+        elem: '#invalidTime',
18
+        event: 'focus',
19
+        istime: true,
20
+        format: 'YYYY-MM-DD hh:mm:ss'
21
+    });
22
+
23
+    $(".save").click(function () {
24
+        saveCon();
25
+    });
26
+    //上传附件
27
+    $("#scwj").click(function () {
28
+        $("#upFile").trigger("click");
29
+    });
30
+    $("#upFile").change(function () {
31
+        upload();
32
+    });
33
+
34
+    //保存
35
+    function saveCon() {
36
+        $.ajax({
37
+            type: "post",
38
+            url: huayi.config.callcenter_url + "HotspotGlossary/AddModel",
39
+            async: true,
40
+            dataType: "json",
41
+            data: {
42
+                token: $.cookie("token"),
43
+                id: id, //知识库id
44
+                key: $("#keyId").val(), // 关键词id
45
+                fabudanwei: $("#publishUnit").val(), // 发布单位
46
+                faburen: $("#publishPersonal").val(), // 发布人
47
+                hangye: $("#industry").val(), // 所属行业
48
+                diqu: $("#address").val(), // 地区
49
+                fabushijian: $("#publishTime").val(), // 发布时间
50
+                shengxiaoshijian: $("#effectiveTime").val(), // 生效时间
51
+                shixiaoshijian: $("#invalidTime").val(), // 失效时间
52
+                fawenwenhao: $("#documentNumber").val(), // 发文文号
53
+                fawendanwei: $("#documentUnit").val(), // 发文单位
54
+                biaoshibianma: $("#identifyEncoding").val(), // 标识编码
55
+                file: $("#file").val(), // 附件
56
+                zhengcemingci: $("#policyName").val(), // 政策名称
57
+                jiedadanwei: $("#answeringUnit").val(), // 解答单位
58
+                redianwenti: $("#hotIssues").val(), // 热点问题/名词解释
59
+                wentijieda: $("#contentAnswer").val(), // 内容解答
60
+            },
61
+            success: function (data) {
62
+                if (data.state.toLowerCase() == "success") {
63
+                    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
64
+                    parent.layer.close(index); //再执行关闭
65
+                    parent.layer.msg(data.message); //再执行关闭
66
+                    parent.$("#tableList").bootstrapTable("refresh"); //再执行关闭
67
+                }
68
+            },
69
+        });
70
+    }
71
+    //获取知识库详情
72
+    if (id) {
73
+        $(".addOrEditDisplay").show();
74
+        $.ajax({
75
+            type: "get",
76
+            url: huayi.config.callcenter_url + "HotspotGlossary/GetModel",
77
+            async: true,
78
+            dataType: "json",
79
+            data: {
80
+                token: $.cookie("token"),
81
+                id: id,
82
+            },
83
+            success: function (result) {
84
+                if (result.state.toLowerCase() == "success") {
85
+                    var model = result.data.model;
86
+                    var dtkey = result.data.dtkey;
87
+                    var dtfile = result.data.dtfile;
88
+
89
+                    $("#publishUnit").val(model.F_FaBuDanWei);
90
+                    $("#publishPersonal").val(model.F_FaBuRen);
91
+                    $("#industry").val(model.F_HangYe);
92
+                    $("#address").val(model.F_DiQu);
93
+                    $("#publishTime").val(model.F_FaBuShiJian);
94
+                    $("#effectiveTime").val(model.F_ShengXiaoShiJian);
95
+                    $("#invalidTime").val(model.F_ShiXiaoShiJian);
96
+                    $("#documentNumber").val(model.F_FaWenWenHao);
97
+                    $("#documentUnit").val(model.F_FaWenDanWei);
98
+                    $("#identifyEncoding").val(model.F_BiaoShiBianMa);
99
+                    $("#policyName").val(model.F_ZhengCeMingCi);
100
+                    $("#answeringUnit").val(model.F_JieDaDanWei);
101
+                    $("#hotIssues").val(model.F_ReDianWenTi);
102
+                    $("#contentAnswer").val(model.F_WenTiJieDa);
103
+                    $("#reflectCategory").val(dtkey[0].name);
104
+                    $("#keyId").val(dtkey[0].id);
105
+
106
+                    $(dtfile).each(function (k, q) {
107
+                        var strs =
108
+                            '<span class="files" fiel-num="' +
109
+                            q.F_FileId +
110
+                            '">' +
111
+                            q.F_FileName.substring(19) +
112
+                            '<i class="fa fa-remove del_file"></i></span>';
113
+                        $(strs)
114
+                            .appendTo($(".fileBox"))
115
+                            .find(".del_file")
116
+                            .click(function (event) {
117
+                                event.stopPropagation();
118
+                                $(this).parent().remove();
119
+                                file_num();
120
+                                console.log($(".fileBox").find(".del_file"));
121
+                            });
122
+                        file_num();
123
+                    });
124
+                }
125
+            },
126
+        });
127
+    } else {
128
+        $(".addOrEditDisplay").hide();
129
+    }
130
+});
131
+
132
+//上传文件
133
+function upload() {
134
+    var Files = document.getElementById("upFile").files;
135
+    if (Files.length > 0) {
136
+        var formData = new FormData();
137
+        for (var i = 0; i < Files.length; i++) {
138
+            formData.append("file" + i, Files[i]);
139
+        }
140
+        formData.append("token", $.cookie("token"));
141
+        console.log(formData);
142
+        console.log("123",formData.file0);
143
+        var typeName = Files[0].name.split(".")[1];
144
+        if (
145
+            typeName == "png" ||
146
+            typeName == "jpg" ||
147
+            typeName == "mp4" ||
148
+            typeName == "mp3" ||
149
+            typeName == "pdf" ||
150
+            typeName == "doc" ||
151
+            typeName == "docx" ||
152
+            typeName == "xls" ||
153
+            typeName == "xlsx"
154
+        ) {
155
+            $.ajax({
156
+                url: huayi.config.callcenter_url + "HotspotGlossary/UploadFile",
157
+                type: "POST",
158
+                data: formData,
159
+                /**
160
+                 *必须false才会自动加上正确的Content-Type
161
+                 */
162
+                contentType: false,
163
+                /**
164
+                 * 必须false才会避开jQuery对 formdata 的默认处理
165
+                 * XMLHttpRequest会对 formdata 进行正确的处理
166
+                 */
167
+                processData: false,
168
+                success: function (result) {
169
+                    document.getElementById("upFile").outerHTML =
170
+                        document.getElementById("upFile").outerHTML;
171
+                    $("#upFile").change(function () {
172
+                        upload();
173
+                    });
174
+                    var r = $.parseJSON(result);
175
+                    if (r.state.toLowerCase() == "success") {
176
+                        //								$(".fjnr").text(r.data[0].F_FileName);
177
+                        var a = r.data;
178
+                        $(a).each(function (i, n) {
179
+                            var strs =
180
+                                '<span class="files" fiel-num="' +
181
+                                n.F_FileId +
182
+                                '">' +
183
+                                n.F_FileName.substring(19) +
184
+                                '<i class="fa fa-remove del_file"></i></span>';
185
+                            $(strs)
186
+                                .appendTo($(".fileBox"))
187
+                                .find(".del_file")
188
+                                .click(function (event) {
189
+                                    event.stopPropagation();
190
+                                    $(this).parent().remove();
191
+                                    file_num();
192
+                                });
193
+                        });
194
+                        file_num();
195
+                    }
196
+                },
197
+            });
198
+        } else {
199
+            layer.msg("格式不正确");
200
+        }
201
+    } else {
202
+        layer.confirm("请上传文件!", {
203
+            btn: ["确定"],
204
+        });
205
+    }
206
+}
207
+//上传文件隐藏域值
208
+function file_num() {
209
+    var str = "";
210
+    var Str;
211
+    $(".fileBox .files").each(function (j, m) {
212
+        var aa = $(m).attr("fiel-num");
213
+        console.log(aa);
214
+        str += aa + ",";
215
+        Str =
216
+            str.substring(str.length - 1) == ","
217
+                ? str.substring(0, str.length - 1)
218
+                : str;
219
+    });
220
+    $("#file").val(Str);
221
+}

+ 219 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuPoliciesRegulations.js

@@ -0,0 +1,219 @@
1
+var id = helper.request.queryString("id");
2
+$(document).ready(function () {
3
+    laydate.skin('blue');
4
+    laydate({
5
+        elem: '#publishTime',
6
+        event: 'focus',
7
+        istime: true,
8
+        format: 'YYYY-MM-DD hh:mm:ss'
9
+    });
10
+    laydate({
11
+        elem: '#effectiveTime',
12
+        event: 'focus',
13
+        istime: true,
14
+        format: 'YYYY-MM-DD hh:mm:ss'
15
+    });
16
+    laydate({
17
+        elem: '#invalidTime',
18
+        event: 'focus',
19
+        istime: true,
20
+        format: 'YYYY-MM-DD hh:mm:ss'
21
+    });
22
+
23
+    $(".save").click(function () {
24
+        saveCon();
25
+    });
26
+    //上传附件
27
+    $("#scwj").click(function () {
28
+        $("#upFile").trigger("click");
29
+    });
30
+    $("#upFile").change(function () {
31
+        upload();
32
+    });
33
+
34
+    //保存
35
+    function saveCon() {
36
+        $.ajax({
37
+            type: "post",
38
+            url: huayi.config.callcenter_url + "Policy/AddModel",
39
+            async: true,
40
+            dataType: "json",
41
+            data: {
42
+                token: $.cookie("token"),
43
+                id: id, //知识库id
44
+                key: $("#keyId").val(), // 关键词id
45
+                fabudanwei: $("#publishUnit").val(), // 发布单位
46
+                faburen: $("#publishPersonal").val(), // 发布人
47
+                hangye: $("#industry").val(), // 所属行业
48
+                diqu: $("#address").val(), // 地区
49
+                fabushijian: $("#publishTime").val(), // 发布时间
50
+                shengxiaoshijian: $("#effectiveTime").val(), // 生效时间
51
+                shixiaoshijian: $("#invalidTime").val(), // 失效时间
52
+                fawenwenhao: $("#documentNumber").val(), // 发文文号
53
+                fawendanwei: $("#documentUnit").val(), // 发文单位
54
+                zhinengbumen: $("#functionalDepartment").val(), // 职能部门
55
+                biaoshibianma: $("#identifyEncoding").val(), // 标识编码
56
+                file: $("#file").val(), // 附件
57
+                wenjianmingcheng: $("#fileName").val(), // 文件名称
58
+                wenjianneirong: $("#documentContent").val(), // 文件内容
59
+            },
60
+            success: function (data) {
61
+                if (data.state.toLowerCase() == "success") {
62
+                    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
63
+                    parent.layer.close(index); //再执行关闭
64
+                    parent.layer.msg(data.message); //再执行关闭
65
+                    parent.$("#tableList").bootstrapTable("refresh"); //再执行关闭
66
+                }
67
+            },
68
+        });
69
+    }
70
+    //获取知识库详情
71
+    if (id) {
72
+        $(".addOrEditDisplay").show();
73
+        $.ajax({
74
+            type: "get",
75
+            url: huayi.config.callcenter_url + "Policy/GetModel",
76
+            async: true,
77
+            dataType: "json",
78
+            data: {
79
+                token: $.cookie("token"),
80
+                id: id,
81
+            },
82
+            success: function (result) {
83
+                if (result.state.toLowerCase() == "success") {
84
+                    var model = result.data.model;
85
+                    var dtkey = result.data.dtkey;
86
+                    var dtfile = result.data.dtfile;
87
+
88
+                    $("#publishUnit").val(model.F_FaBuDanWei);
89
+                    $("#publishPersonal").val(model.F_FaBuRen);
90
+                    $("#industry").val(model.F_HangYe);
91
+                    $("#address").val(model.F_DiQu);
92
+                    $("#publishTime").val(model.F_FaBuShiJian);
93
+                    $("#effectiveTime").val(model.F_ShengXiaoShiJian);
94
+                    $("#invalidTime").val(model.F_ShiXiaoShiJian);
95
+                    $("#documentNumber").val(model.F_FaWenWenHao);
96
+                    $("#documentUnit").val(model.F_FaWenDanWei);
97
+                    $("#functionalDepartment").val(model.F_ZhiNengBuMen);
98
+                    $("#identifyEncoding").val(model.F_BiaoShiBianMa);
99
+                    $("#fileName").val(model.F_WenJianMingCheng);
100
+                    $("#documentContent").val(model.F_WenJianNeiRong);
101
+                    $("#reflectCategory").val(dtkey[0].name);
102
+                    $("#keyId").val(dtkey[0].id);
103
+
104
+                    $(dtfile).each(function (k, q) {
105
+                        var strs =
106
+                            '<span class="files" fiel-num="' +
107
+                            q.F_FileId +
108
+                            '">' +
109
+                            q.F_FileName.substring(19) +
110
+                            '<i class="fa fa-remove del_file"></i></span>';
111
+                        $(strs)
112
+                            .appendTo($(".fileBox"))
113
+                            .find(".del_file")
114
+                            .click(function (event) {
115
+                                event.stopPropagation();
116
+                                $(this).parent().remove();
117
+                                file_num();
118
+                                console.log($(".fileBox").find(".del_file"));
119
+                            });
120
+                        file_num();
121
+                    });
122
+                }
123
+            },
124
+        });
125
+    } else {
126
+        $(".addOrEditDisplay").hide();
127
+    }
128
+});
129
+
130
+//上传文件
131
+function upload() {
132
+    var Files = document.getElementById("upFile").files;
133
+    if (Files.length > 0) {
134
+        var formData = new FormData();
135
+        for (var i = 0; i < Files.length; i++) {
136
+            formData.append("file" + i, Files[i]);
137
+        }
138
+        formData.append("token", $.cookie("token"));
139
+        console.log(formData);
140
+        console.log("123",formData.file0);
141
+        var typeName = Files[0].name.split(".")[1];
142
+        if (
143
+            typeName == "png" ||
144
+            typeName == "jpg" ||
145
+            typeName == "mp4" ||
146
+            typeName == "mp3" ||
147
+            typeName == "pdf" ||
148
+            typeName == "doc" ||
149
+            typeName == "docx" ||
150
+            typeName == "xls" ||
151
+            typeName == "xlsx"
152
+        ) {
153
+            $.ajax({
154
+                url: huayi.config.callcenter_url + "HotspotGlossary/UploadFile",
155
+                type: "POST",
156
+                data: formData,
157
+                /**
158
+                 *必须false才会自动加上正确的Content-Type
159
+                 */
160
+                contentType: false,
161
+                /**
162
+                 * 必须false才会避开jQuery对 formdata 的默认处理
163
+                 * XMLHttpRequest会对 formdata 进行正确的处理
164
+                 */
165
+                processData: false,
166
+                success: function (result) {
167
+                    document.getElementById("upFile").outerHTML =
168
+                        document.getElementById("upFile").outerHTML;
169
+                    $("#upFile").change(function () {
170
+                        upload();
171
+                    });
172
+                    var r = $.parseJSON(result);
173
+                    if (r.state.toLowerCase() == "success") {
174
+                        //								$(".fjnr").text(r.data[0].F_FileName);
175
+                        var a = r.data;
176
+                        $(a).each(function (i, n) {
177
+                            var strs =
178
+                                '<span class="files" fiel-num="' +
179
+                                n.F_FileId +
180
+                                '">' +
181
+                                n.F_FileName.substring(19) +
182
+                                '<i class="fa fa-remove del_file"></i></span>';
183
+                            $(strs)
184
+                                .appendTo($(".fileBox"))
185
+                                .find(".del_file")
186
+                                .click(function (event) {
187
+                                    event.stopPropagation();
188
+                                    $(this).parent().remove();
189
+                                    file_num();
190
+                                });
191
+                        });
192
+                        file_num();
193
+                    }
194
+                },
195
+            });
196
+        } else {
197
+            layer.msg("格式不正确");
198
+        }
199
+    } else {
200
+        layer.confirm("请上传文件!", {
201
+            btn: ["确定"],
202
+        });
203
+    }
204
+}
205
+//上传文件隐藏域值
206
+function file_num() {
207
+    var str = "";
208
+    var Str;
209
+    $(".fileBox .files").each(function (j, m) {
210
+        var aa = $(m).attr("fiel-num");
211
+        console.log(aa);
212
+        str += aa + ",";
213
+        Str =
214
+            str.substring(str.length - 1) == ","
215
+                ? str.substring(0, str.length - 1)
216
+                : str;
217
+    });
218
+    $("#file").val(Str);
219
+}

+ 197 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/addOrEditZhiShiKuPolicyExpert.js

@@ -0,0 +1,197 @@
1
+var id = helper.request.queryString("id");
2
+$(document).ready(function () {
3
+    laydate.skin('blue');
4
+    laydate({
5
+        elem: '#effectiveTime',
6
+        event: 'focus',
7
+        istime: true,
8
+        format: 'YYYY-MM-DD hh:mm:ss'
9
+    });
10
+    laydate({
11
+        elem: '#expirationTime',
12
+        event: 'focus',
13
+        istime: true,
14
+        format: 'YYYY-MM-DD hh:mm:ss'
15
+    });
16
+    laydate({
17
+        elem: '#publishTime',
18
+        event: 'focus',
19
+        istime: true,
20
+        format: 'YYYY-MM-DD hh:mm:ss'
21
+    });
22
+
23
+    $(".save").click(function () {
24
+        saveCon();
25
+    });
26
+    //上传附件
27
+    $("#scwj").click(function () {
28
+        $("#upFile").trigger("click");
29
+    });
30
+    $("#upFile").change(function () {
31
+        upload();
32
+    });
33
+
34
+    //保存
35
+    function saveCon() {
36
+        $.ajax({
37
+            type: "post",
38
+            url: huayi.config.callcenter_url + "Professor/AddModel",
39
+            async: true,
40
+            dataType: "json",
41
+            data: {
42
+                token: $.cookie("token"),
43
+                id: id, //知识库id
44
+                xingming: $("#name").val(), // 专家姓名
45
+                danwei: $("#unit").val(), // 专家单位
46
+                keshi: $("#department").val(), // 科室
47
+                zhiwu: $("#job").val(), // 职务
48
+                shouji: $("#phoneNumber").val(), // 手机号码
49
+                dianhua: $("#officePhone").val(), // 办公电话
50
+                biaoshibianma: $("#identifyEncoding").val(), // 标识编码
51
+                diqu: $("#address").val(), // 地区
52
+                hangye: $("#industry").val(), // 行业
53
+                shengxiaoshijian: $("#effectiveTime").val(), // 生效时间
54
+                shixiaoshijian: $("#expirationTime").val(), // 失效时间
55
+                fabushijian: $("#publishTime").val(), // 发布时间
56
+                faburen: $("#publishPersonal").val(), // 发布人
57
+                fabudanwei: $("#publishUnit").val(), // 发布单位
58
+                touxiang: $("#file").val(),
59
+                zhuanyelingyujianjie: $("#introductionFieldExpertise").val(), // 发布领域简介
60
+            },
61
+            success: function (data) {
62
+                if (data.state.toLowerCase() == "success") {
63
+                    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
64
+                    parent.layer.close(index); //再执行关闭
65
+                    parent.layer.msg(data.message); //再执行关闭
66
+                    parent.$("#tableList").bootstrapTable("refresh"); //再执行关闭
67
+                }
68
+            },
69
+        });
70
+    }
71
+    //获取知识库详情
72
+    if (id) {
73
+        $(".addOrEditDisplay").show()
74
+        $.ajax({
75
+            type: "get",
76
+            url: huayi.config.callcenter_url + "Professor/GetModel",
77
+            async: true,
78
+            dataType: "json",
79
+            data: {
80
+                token: $.cookie("token"),
81
+                id: id,
82
+            },
83
+            success: function (result) {
84
+                if (result.state.toLowerCase() == "success") {
85
+                    var data = result.data;
86
+                    $("#name").val(data.F_XingMing);
87
+                    $("#address").val(data.F_DiQu);
88
+                    $("#unit").val(data.F_DanWei);
89
+                    $("#industry").val(data.F_HangYe);
90
+                    $("#department").val(data.F_KeShi);
91
+                    $("#effectiveTime").val(data.F_ShengXiaoShiJian);
92
+                    $("#job").val(data.F_ZhiWu);
93
+                    $("#expirationTime").val(data.F_ShiXiaoShiJian);
94
+                    $("#phoneNumber").val(data.F_ShouJi);
95
+                    $("#publishTime").val(data.F_FaBuShiJian);
96
+                    $("#officePhone").val(data.F_DianHua);
97
+                    $("#publishPersonal").val(data.F_FaBuRen);
98
+                    $("#identifyEncoding").val(data.F_BiaoShiBianMa);
99
+                    $("#publishUnit").val(data.F_FaBuDanWei);
100
+                    $("#introductionFieldExpertise").val(data.F_ZhuanYeLingYuJianJie);
101
+
102
+                    if(data.F_TouXiang) {
103
+                        avatarDisplay(data.F_TouXiang);
104
+                    }
105
+                }
106
+            },
107
+        });
108
+    } else {
109
+        $(".addOrEditDisplay").hide();
110
+    }
111
+});
112
+
113
+//上传文件
114
+function upload() {
115
+    var Files = document.getElementById("upFile").files;
116
+    if (Files.length > 0) {
117
+        var formData = new FormData();
118
+        // for (var i = 0; i < Files.length; i++) {
119
+        //     formData.append("file" + i, Files[i]);
120
+        // }
121
+        formData.append("upFile", Files[0]);
122
+        formData.append("token", $.cookie("token"));
123
+        var typeName = Files[0].name.split(".")[1];
124
+        if (
125
+            typeName == "png" ||
126
+            typeName == "jpg"
127
+        ) {
128
+            $.ajax({
129
+                url: huayi.config.callcenter_url + "Professor/UploadTX",
130
+                type: "POST",
131
+                data: formData,
132
+                /**
133
+                 *必须false才会自动加上正确的Content-Type
134
+                 */
135
+                contentType: false,
136
+                /**
137
+                 * 必须false才会避开jQuery对 formdata 的默认处理
138
+                 * XMLHttpRequest会对 formdata 进行正确的处理
139
+                 */
140
+                processData: false,
141
+                success: function (result) {
142
+                    document.getElementById("upFile").outerHTML =
143
+                        document.getElementById("upFile").outerHTML;
144
+                    $("#upFile").change(function () {
145
+                        upload();
146
+                    });
147
+                    var r = $.parseJSON(result);
148
+                    if (r.state.toLowerCase() == "success") {
149
+                        var data = r.data;
150
+                        avatarDisplay(data);
151
+                    }
152
+                },
153
+            });
154
+        } else {
155
+            layer.msg("格式不正确");
156
+        }
157
+    } else {
158
+        layer.confirm("请上传文件!", {
159
+            btn: ["确定"],
160
+        });
161
+    }
162
+}
163
+
164
+//上传文件隐藏域值
165
+// function file_num() {
166
+//     var str = "";
167
+//     var Str;
168
+//     $(".fileBox .files").each(function (j, m) {
169
+//         var aa = $(m).attr("fiel-num");
170
+//         console.log(aa);
171
+//         str += aa + ",";
172
+//         Str =
173
+//             str.substring(str.length - 1) == ","
174
+//                 ? str.substring(0, str.length - 1)
175
+//                 : str;
176
+//     });
177
+//     $("#file").val(Str);
178
+// }
179
+
180
+// 头像展示
181
+function avatarDisplay(data) {
182
+    $(".imgBox").empty();
183
+    var str = "<div class='imgWrapper'><img class='' with='80' height='80' src="+ huayi.config.callcenter_url + data + "><div class='imgMask'><i class='fa fa-remove del_file'></i></div></div>"
184
+    $(".imgBox").append(str);
185
+    $(".imgBox").find(".imgWrapper").mouseenter(function() {
186
+        $(this).find(".imgMask").show()
187
+    })
188
+    $(".imgBox").find(".imgWrapper").mouseleave(function() {
189
+        $(this).find(".imgMask").hide()
190
+    })
191
+    $(".imgBox").find(".imgWrapper").find(".del_file").click(function(event) {
192
+        event.stopPropagation();
193
+        $(this).parent().parent().remove();
194
+        $("#file").val("");
195
+    })
196
+    $("#file").val(data);
197
+}

+ 82 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/reflectCategory.js

@@ -0,0 +1,82 @@
1
+$(document).ready(function() {
2
+    // 获取反映类别
3
+    getReactionCategory();
4
+    $("#reflectCategory").bind("input propertychange", function () {
5
+        $(".layui-dropdown").hide();
6
+        if ($("#reflectCategory").val() == "") {
7
+            $(".reflectCategoryList-wrapper").hide();
8
+            return;
9
+        }
10
+        var debounceGetSearchReactionCategory = debounce(getSearchReactionCategory, 500)
11
+        $(".reflectCategoryList-wrapper").show();
12
+        debounceGetSearchReactionCategory($("#reflectCategory").val())
13
+    })
14
+    $("#reflectCategoryList").on("click", "li", function () {
15
+        $(".reflectCategoryList-wrapper").hide();
16
+        $("#reflectCategory").val($(this).attr("indexName"));
17
+        $("#keyId").val($(this).attr("index"));
18
+    });
19
+})
20
+
21
+function getReactionCategory(pid = 38) {
22
+    $.get(
23
+        huayi.config.callcenter_url + "Dictionary/GetZTreeNew", {
24
+            token: $.cookie("token"),
25
+            pid: pid,
26
+        },
27
+        function (result) {
28
+            result = $.parseJSON(result);
29
+            var content = JSON.parse(result.data);
30
+            layui.use("dropdown", function () {
31
+                var dropdown = layui.dropdown;
32
+                dropdown.render({
33
+                    elem: "#reflectCategory", //可绑定在任意元素中,此处以上述按钮为例
34
+                    data: content,
35
+                    id: "reflectCategory",
36
+                    //菜单被点击的事件
37
+                    click: function (obj) {
38
+                        $("#reflectCategory").val(obj.title)
39
+                        $("#keyId").val(obj.id)
40
+                    },
41
+                });
42
+                
43
+            });
44
+        }
45
+    );
46
+}
47
+
48
+function getSearchReactionCategory(key) {
49
+    $.get(
50
+        huayi.config.callcenter_url + "Dictionary/GetKeyListNew", {
51
+            token: $.cookie("token"),
52
+            key: key,
53
+        },
54
+        function (result) {
55
+            result = $.parseJSON(result);
56
+            if (result.state.toLowerCase() === "success") {
57
+                $("#reflectCategoryList").empty();
58
+                var content = result.data;
59
+                if (content.length > 0) {
60
+                    content.forEach(function (e, i) {
61
+                        $("<li index='" + e.id + "' indexName='" + e.name + "'>" + e.names +
62
+                                "</li>")
63
+                            .appendTo("#reflectCategoryList");
64
+                    });
65
+                } else {
66
+                    $("<li index='' indexName=''>没有相关数据</li>").appendTo("#reflectCategoryList");
67
+                }
68
+            }
69
+        }
70
+    );
71
+}
72
+
73
+function debounce(fun, delay) {
74
+    return function (args) {
75
+        var that = this;
76
+        var _args = args
77
+        clearTimeout(fun.id)
78
+        fun.id = setTimeout(function () {
79
+            fun.call(that, _args)
80
+        }, delay)
81
+    }
82
+}

+ 192 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuFunctional.js

@@ -0,0 +1,192 @@
1
+var table = $("#tableList");
2
+$(document).ready(function () {
3
+    initTable();
4
+    laydate.skin('blue');
5
+    laydate({
6
+        elem: '#starttime',
7
+        event: 'focus',
8
+        istime: true,
9
+        format: 'YYYY-MM-DD hh:mm:ss'
10
+    });
11
+    laydate({
12
+        elem: '#endtime',
13
+        event: 'focus',
14
+        istime: true,
15
+        format: 'YYYY-MM-DD hh:mm:ss'
16
+    });
17
+});
18
+
19
+function initTable(action, isPass) {
20
+    //先销毁表格
21
+    table.bootstrapTable("destroy");
22
+    //初始化表格,动态从服务器加载数据
23
+    table.bootstrapTable({
24
+        method: "get", //使用get请求到服务器获取数据
25
+        url: huayi.config.callcenter_url + "Functions/GetList", //获取数据的Servlet地址
26
+        contentType: "application/x-www-form-urlencoded",
27
+        striped: true, //表格显示条纹
28
+        pagination: true, //启动分页
29
+        pageSize: 10, //每页显示的记录数
30
+        pageNumber: 1, //当前第几页
31
+        pageList: [10, 20, 50, 100], //记录数可选列表
32
+        search: false, //是否启用查询
33
+        showColumns: false, //显示下拉框勾选要显示的列
34
+        showRefresh: false, //显示刷新按钮
35
+        sidePagination: "server", //表示服务端请求
36
+        //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder
37
+        //设置为limit可以获取limit, offset, search, sort, order
38
+        queryParamsType: "undefined",
39
+        queryParams: function queryParams(params) {
40
+            //设置查询参数
41
+            var param = {
42
+                page: params.pageNumber,
43
+                pagesize: params.pageSize,
44
+                token: $.cookie("token"),
45
+                keyvalue: $("#keyvalue").val(),
46
+                key: $("#keyId").val(),
47
+                stime: $("#starttime").val(),
48
+                etime: $("#endtime").val(),
49
+            };
50
+            return param;
51
+        },
52
+        onLoadSuccess: function () {
53
+            //加载成功时执行
54
+            //layer.msg("加载成功");
55
+        },
56
+        onLoadError: function () {
57
+            //加载失败时执行
58
+            //layer.msg("加载数据失败", { time: 1500, icon: 2 });
59
+        },
60
+    });
61
+}
62
+
63
+function setCode(val, row, index) {
64
+    return index + 1;
65
+}
66
+
67
+function operation(val, row) {
68
+    return (
69
+        '<div class="tool_downs">' +
70
+        '<a href="javascript:;" class="aBtn" style="margin-left:0px;" authorize="yes"  id="HY_details_' +
71
+        row.F_Id +
72
+        '" onclick="detailBtn(\'' +
73
+        row.F_Id +
74
+        '\')" title="详情">详情</a>' +
75
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="editBtn(' +
76
+        row.F_Id +
77
+        ')" title="编辑">编辑</a>' +
78
+        '<div class="tool_downs">' +
79
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="deleteBtn(' +
80
+        row.F_Id +
81
+        ')" title="删除">删除</a>' +
82
+        "</div>"
83
+    );
84
+}
85
+
86
+$(".searchGo").click(function () {
87
+    initTable();
88
+});
89
+
90
+$(".addBtn").click(function () {
91
+    layer.open({
92
+        type: 2,
93
+        content: "./addOrEditZhiShiKuFunctional.html", //iframe的url,no代表不显示滚动条
94
+        title: "部门职能",
95
+        area: ["80%", "80%"], //宽高
96
+    });
97
+});
98
+
99
+function editBtn(id) {
100
+    layer.open({
101
+        type: 2,
102
+        content: "./addOrEditZhiShiKuFunctional.html?id=" + id, //iframe的url,no代表不显示滚动条
103
+        title: "部门职能",
104
+        area: ["80%", "80%"], //宽高
105
+    });
106
+}
107
+
108
+function deleteBtn(id) {
109
+    layer.confirm('确定删除吗?', {
110
+        btn: ['是', '否'] //按钮
111
+    }, function () {
112
+        $.post(huayi.config.callcenter_url + "Functions/DelModel", {
113
+            ids: id,
114
+            token: $.cookie("token")
115
+        }, function (result) {
116
+            result = JSON.parse(result);
117
+            if (result.state.toLowerCase() == "success") {
118
+                layer.msg("删除成功");
119
+                initTable()
120
+            }
121
+        })
122
+    });
123
+}
124
+
125
+function detailBtn(id) {
126
+    layer.open({
127
+        type: 2,
128
+        content: "./detailZhiShiKuFunctional.html?id=" + id, //iframe的url,no代表不显示滚动条
129
+        title: "部门职能",
130
+        area: ["80%", "80%"], //宽高
131
+    });
132
+}
133
+
134
+$(".exportFile").click(function() {
135
+    var keyvalue = $("#keyvalue").val();
136
+    var stime = $("#starttime").val();
137
+    var etime = $("#endtime").val();
138
+    var key = $("#keyId").val();
139
+
140
+    var url = huayi.config.callcenter_url + "Functions/GetList?token=" + $.cookie("token");
141
+
142
+    url += "&keyvalue=" + keyvalue + "&stime=" + stime + "&etime=" + etime + "&key=" + key + "&isdc=1"
143
+
144
+    window.location.href = url;
145
+})
146
+
147
+$(".importFile").click(function () {
148
+    $("#upFile").trigger("click");
149
+});
150
+
151
+$("#upFile").change(function () {
152
+    upload();
153
+});
154
+
155
+function upload() {
156
+    if (document.getElementById("upFile").files.length > 0) {
157
+        var formData = new FormData();
158
+        formData.append("upFile", document.getElementById("upFile").files[0]);
159
+        formData.append("token", $.cookie("token"));
160
+        $.ajax({
161
+            url: huayi.config.callcenter_url + "Functions/ImportExcel",
162
+            type: "POST",
163
+            data: formData,
164
+            contentType: false,
165
+            processData: false,
166
+            success: function (result) {
167
+                $("#upFile").change(function () {
168
+                    upload();
169
+                });
170
+                var r = $.parseJSON(result);
171
+                if (r.state.toLowerCase() == "success") {
172
+                    layer.msg("导入成功");
173
+                    initTable();
174
+                }
175
+            },
176
+        });
177
+    } else {
178
+        layer.confirm("请上传文件!", {
179
+            btn: ["确定"],
180
+        });
181
+    }
182
+}
183
+
184
+$(".exportTemplate").click(function () {
185
+    var a = document.createElement("a");
186
+    a.style.display = "none";
187
+    a.download = "部门职能模板.xlsx";
188
+    a.href = "../static/xls/部门职能模板.xlsx";
189
+    document.body.appendChild(a);
190
+    a.click();
191
+    document.body.removeChild(a);
192
+});

+ 192 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuGlossary.js

@@ -0,0 +1,192 @@
1
+var table = $("#tableList");
2
+$(document).ready(function () {
3
+    initTable();
4
+    laydate.skin('blue');
5
+    laydate({
6
+        elem: '#starttime',
7
+        event: 'focus',
8
+        istime: true,
9
+        format: 'YYYY-MM-DD hh:mm:ss'
10
+    });
11
+    laydate({
12
+        elem: '#endtime',
13
+        event: 'focus',
14
+        istime: true,
15
+        format: 'YYYY-MM-DD hh:mm:ss'
16
+    });
17
+});
18
+
19
+function initTable(action, isPass) {
20
+    //先销毁表格
21
+    table.bootstrapTable("destroy");
22
+    //初始化表格,动态从服务器加载数据
23
+    table.bootstrapTable({
24
+        method: "get", //使用get请求到服务器获取数据
25
+        url: huayi.config.callcenter_url + "NounInterpretation/GetList", //获取数据的Servlet地址
26
+        contentType: "application/x-www-form-urlencoded",
27
+        striped: true, //表格显示条纹
28
+        pagination: true, //启动分页
29
+        pageSize: 10, //每页显示的记录数
30
+        pageNumber: 1, //当前第几页
31
+        pageList: [10, 20, 50, 100], //记录数可选列表
32
+        search: false, //是否启用查询
33
+        showColumns: false, //显示下拉框勾选要显示的列
34
+        showRefresh: false, //显示刷新按钮
35
+        sidePagination: "server", //表示服务端请求
36
+        //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder
37
+        //设置为limit可以获取limit, offset, search, sort, order
38
+        queryParamsType: "undefined",
39
+        queryParams: function queryParams(params) {
40
+            //设置查询参数
41
+            var param = {
42
+                page: params.pageNumber,
43
+                pagesize: params.pageSize,
44
+                token: $.cookie("token"),
45
+                keyvalue: $("#keyvalue").val(),
46
+                key: $("#keyId").val(),
47
+                stime: $("#starttime").val(),
48
+                etime: $("#endtime").val(),
49
+            };
50
+            return param;
51
+        },
52
+        onLoadSuccess: function () {
53
+            //加载成功时执行
54
+            //layer.msg("加载成功");
55
+        },
56
+        onLoadError: function () {
57
+            //加载失败时执行
58
+            //layer.msg("加载数据失败", { time: 1500, icon: 2 });
59
+        },
60
+    });
61
+}
62
+
63
+function setCode(val, row, index) {
64
+    return index + 1;
65
+}
66
+
67
+function operation(val, row) {
68
+    return (
69
+        '<div class="tool_downs">' +
70
+        '<a href="javascript:;" class="aBtn" style="margin-left:0px;" authorize="yes"  id="HY_details_' +
71
+        row.F_Id +
72
+        '" onclick="detailBtn(\'' +
73
+        row.F_Id +
74
+        '\')" title="详情">详情</a>' +
75
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="editBtn(' +
76
+        row.F_Id +
77
+        ')" title="编辑">编辑</a>' +
78
+        '<div class="tool_downs">' +
79
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="deleteBtn(' +
80
+        row.F_Id +
81
+        ')" title="删除">删除</a>' +
82
+        "</div>"
83
+    );
84
+}
85
+
86
+$(".searchGo").click(function () {
87
+    initTable();
88
+});
89
+
90
+$(".addBtn").click(function () {
91
+    layer.open({
92
+        type: 2,
93
+        content: "./addOrEditZhiShiKuGlossary.html", //iframe的url,no代表不显示滚动条
94
+        title: "名词解释",
95
+        area: ["80%", "80%"], //宽高
96
+    });
97
+});
98
+
99
+function editBtn(id) {
100
+    layer.open({
101
+        type: 2,
102
+        content: "./addOrEditZhiShiKuGlossary.html?id=" + id, //iframe的url,no代表不显示滚动条
103
+        title: "名词解释",
104
+        area: ["80%", "80%"], //宽高
105
+    });
106
+}
107
+
108
+function deleteBtn(id) {
109
+    layer.confirm('确定删除吗?', {
110
+        btn: ['是', '否'] //按钮
111
+    }, function () {
112
+        $.post(huayi.config.callcenter_url + "NounInterpretation/DelModel", {
113
+            ids: id,
114
+            token: $.cookie("token")
115
+        }, function (result) {
116
+            result = JSON.parse(result);
117
+            if (result.state.toLowerCase() == "success") {
118
+                layer.msg("删除成功");
119
+                initTable()
120
+            }
121
+        })
122
+    });
123
+}
124
+
125
+function detailBtn(id) {
126
+    layer.open({
127
+        type: 2,
128
+        content: "./detailZhiShiKuGlossary.html?id=" + id, //iframe的url,no代表不显示滚动条
129
+        title: "名词解释",
130
+        area: ["80%", "80%"], //宽高
131
+    });
132
+}
133
+
134
+$(".exportFile").click(function() {
135
+    var keyvalue = $("#keyvalue").val();
136
+    var stime = $("#starttime").val();
137
+    var etime = $("#endtime").val();
138
+    var key = $("#keyId").val();
139
+
140
+    var url = huayi.config.callcenter_url + "NounInterpretation/GetList?token=" + $.cookie("token");
141
+
142
+    url += "&keyvalue=" + keyvalue + "&stime=" + stime + "&etime=" + etime + "&key=" + key + "&isdc=1"
143
+
144
+    window.location.href = url;
145
+})
146
+
147
+$(".importFile").click(function () {
148
+    $("#upFile").trigger("click");
149
+});
150
+
151
+$("#upFile").change(function () {
152
+    upload();
153
+});
154
+
155
+function upload() {
156
+    if (document.getElementById("upFile").files.length > 0) {
157
+        var formData = new FormData();
158
+        formData.append("upFile", document.getElementById("upFile").files[0]);
159
+        formData.append("token", $.cookie("token"));
160
+        $.ajax({
161
+            url: huayi.config.callcenter_url + "NounInterpretation/ImportExcel",
162
+            type: "POST",
163
+            data: formData,
164
+            contentType: false,
165
+            processData: false,
166
+            success: function (result) {
167
+                $("#upFile").change(function () {
168
+                    upload();
169
+                });
170
+                var r = $.parseJSON(result);
171
+                if (r.state.toLowerCase() == "success") {
172
+                    layer.msg("导入成功");
173
+                    initTable();
174
+                }
175
+            },
176
+        });
177
+    } else {
178
+        layer.confirm("请上传文件!", {
179
+            btn: ["确定"],
180
+        });
181
+    }
182
+}
183
+
184
+$(".exportTemplate").click(function () {
185
+    var a = document.createElement("a");
186
+    a.style.display = "none";
187
+    a.download = "名词解释模板.xlsx";
188
+    a.href = "../static/xls/名词解释模板.xlsx";
189
+    document.body.appendChild(a);
190
+    a.click();
191
+    document.body.removeChild(a);
192
+});

+ 192 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuGuide.js

@@ -0,0 +1,192 @@
1
+var table = $("#tableList");
2
+$(document).ready(function () {
3
+    initTable();
4
+    laydate.skin('blue');
5
+    laydate({
6
+        elem: '#starttime',
7
+        event: 'focus',
8
+        istime: true,
9
+        format: 'YYYY-MM-DD hh:mm:ss'
10
+    });
11
+    laydate({
12
+        elem: '#endtime',
13
+        event: 'focus',
14
+        istime: true,
15
+        format: 'YYYY-MM-DD hh:mm:ss'
16
+    });
17
+});
18
+
19
+function initTable(action, isPass) {
20
+    //先销毁表格
21
+    table.bootstrapTable("destroy");
22
+    //初始化表格,动态从服务器加载数据
23
+    table.bootstrapTable({
24
+        method: "get", //使用get请求到服务器获取数据
25
+        url: huayi.config.callcenter_url + "LawGuide/GetList", //获取数据的Servlet地址
26
+        contentType: "application/x-www-form-urlencoded",
27
+        striped: true, //表格显示条纹
28
+        pagination: true, //启动分页
29
+        pageSize: 10, //每页显示的记录数
30
+        pageNumber: 1, //当前第几页
31
+        pageList: [10, 20, 50, 100], //记录数可选列表
32
+        search: false, //是否启用查询
33
+        showColumns: false, //显示下拉框勾选要显示的列
34
+        showRefresh: false, //显示刷新按钮
35
+        sidePagination: "server", //表示服务端请求
36
+        //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder
37
+        //设置为limit可以获取limit, offset, search, sort, order
38
+        queryParamsType: "undefined",
39
+        queryParams: function queryParams(params) {
40
+            //设置查询参数
41
+            var param = {
42
+                page: params.pageNumber,
43
+                pagesize: params.pageSize,
44
+                token: $.cookie("token"),
45
+                keyvalue: $("#keyvalue").val(),
46
+                key: $("#keyId").val(),
47
+                stime: $("#starttime").val(),
48
+                etime: $("#endtime").val(),
49
+            };
50
+            return param;
51
+        },
52
+        onLoadSuccess: function () {
53
+            //加载成功时执行
54
+            //layer.msg("加载成功");
55
+        },
56
+        onLoadError: function () {
57
+            //加载失败时执行
58
+            //layer.msg("加载数据失败", { time: 1500, icon: 2 });
59
+        },
60
+    });
61
+}
62
+
63
+function setCode(val, row, index) {
64
+    return index + 1;
65
+}
66
+
67
+function operation(val, row) {
68
+    return (
69
+        '<div class="tool_downs">' +
70
+        '<a href="javascript:;" class="aBtn" style="margin-left:0px;" authorize="yes"  id="HY_details_' +
71
+        row.F_Id +
72
+        '" onclick="detailBtn(\'' +
73
+        row.F_Id +
74
+        '\')" title="详情">详情</a>' +
75
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="editBtn(' +
76
+        row.F_Id +
77
+        ')" title="编辑">编辑</a>' +
78
+        '<div class="tool_downs">' +
79
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="deleteBtn(' +
80
+        row.F_Id +
81
+        ')" title="删除">删除</a>' +
82
+        "</div>"
83
+    );
84
+}
85
+
86
+$(".searchGo").click(function () {
87
+    initTable();
88
+});
89
+
90
+$(".addBtn").click(function () {
91
+    layer.open({
92
+        type: 2,
93
+        content: "./addOrEditZhiShiKuGuide.html", //iframe的url,no代表不显示滚动条
94
+        title: "办事指南",
95
+        area: ["80%", "80%"], //宽高
96
+    });
97
+});
98
+
99
+function editBtn(id) {
100
+    layer.open({
101
+        type: 2,
102
+        content: "./addOrEditZhiShiKuGuide.html?id=" + id, //iframe的url,no代表不显示滚动条
103
+        title: "办事指南",
104
+        area: ["80%", "80%"], //宽高
105
+    });
106
+}
107
+
108
+function deleteBtn(id) {
109
+    layer.confirm('确定删除吗?', {
110
+        btn: ['是', '否'] //按钮
111
+    }, function () {
112
+        $.post(huayi.config.callcenter_url + "LawGuide/DelModel", {
113
+            ids: id,
114
+            token: $.cookie("token")
115
+        }, function (result) {
116
+            result = JSON.parse(result);
117
+            if (result.state.toLowerCase() == "success") {
118
+                layer.msg("删除成功");
119
+                initTable()
120
+            }
121
+        })
122
+    });
123
+}
124
+
125
+function detailBtn(id) {
126
+    layer.open({
127
+        type: 2,
128
+        content: "./detailZhiShiKuGuide.html?id=" + id, //iframe的url,no代表不显示滚动条
129
+        title: "办事指南",
130
+        area: ["80%", "80%"], //宽高
131
+    });
132
+}
133
+
134
+$(".exportFile").click(function() {
135
+    var keyvalue = $("#keyvalue").val();
136
+    var stime = $("#starttime").val();
137
+    var etime = $("#endtime").val();
138
+    var key = $("#keyId").val();
139
+
140
+    var url = huayi.config.callcenter_url + "LawGuide/GetList?token=" + $.cookie("token");
141
+
142
+    url += "&keyvalue=" + keyvalue + "&stime=" + stime + "&etime=" + etime + "&key=" + key + "&isdc=1"
143
+
144
+    window.location.href = url;
145
+})
146
+
147
+$(".importFile").click(function () {
148
+    $("#upFile").trigger("click");
149
+});
150
+
151
+$("#upFile").change(function () {
152
+    upload();
153
+});
154
+
155
+function upload() {
156
+    if (document.getElementById("upFile").files.length > 0) {
157
+        var formData = new FormData();
158
+        formData.append("upFile", document.getElementById("upFile").files[0]);
159
+        formData.append("token", $.cookie("token"));
160
+        $.ajax({
161
+            url: huayi.config.callcenter_url + "LawGuide/ImportExcel",
162
+            type: "POST",
163
+            data: formData,
164
+            contentType: false,
165
+            processData: false,
166
+            success: function (result) {
167
+                $("#upFile").change(function () {
168
+                    upload();
169
+                });
170
+                var r = $.parseJSON(result);
171
+                if (r.state.toLowerCase() == "success") {
172
+                    layer.msg("导入成功");
173
+                    initTable();
174
+                }
175
+            },
176
+        });
177
+    } else {
178
+        layer.confirm("请上传文件!", {
179
+            btn: ["确定"],
180
+        });
181
+    }
182
+}
183
+
184
+$(".exportTemplate").click(function () {
185
+    var a = document.createElement("a");
186
+    a.style.display = "none";
187
+    a.download = "办事指南模板.xlsx";
188
+    a.href = "../static/xls/办事指南模板.xlsx";
189
+    document.body.appendChild(a);
190
+    a.click();
191
+    document.body.removeChild(a);
192
+});

+ 192 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuHotLssues.js

@@ -0,0 +1,192 @@
1
+var table = $("#tableList");
2
+$(document).ready(function () {
3
+    initTable();
4
+    laydate.skin('blue');
5
+    laydate({
6
+        elem: '#starttime',
7
+        event: 'focus',
8
+        istime: true,
9
+        format: 'YYYY-MM-DD hh:mm:ss'
10
+    });
11
+    laydate({
12
+        elem: '#endtime',
13
+        event: 'focus',
14
+        istime: true,
15
+        format: 'YYYY-MM-DD hh:mm:ss'
16
+    });
17
+});
18
+
19
+function initTable(action, isPass) {
20
+    //先销毁表格
21
+    table.bootstrapTable("destroy");
22
+    //初始化表格,动态从服务器加载数据
23
+    table.bootstrapTable({
24
+        method: "get", //使用get请求到服务器获取数据
25
+        url: huayi.config.callcenter_url + "HotspotGlossary/GetList", //获取数据的Servlet地址
26
+        contentType: "application/x-www-form-urlencoded",
27
+        striped: true, //表格显示条纹
28
+        pagination: true, //启动分页
29
+        pageSize: 10, //每页显示的记录数
30
+        pageNumber: 1, //当前第几页
31
+        pageList: [10, 20, 50, 100], //记录数可选列表
32
+        search: false, //是否启用查询
33
+        showColumns: false, //显示下拉框勾选要显示的列
34
+        showRefresh: false, //显示刷新按钮
35
+        sidePagination: "server", //表示服务端请求
36
+        //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder
37
+        //设置为limit可以获取limit, offset, search, sort, order
38
+        queryParamsType: "undefined",
39
+        queryParams: function queryParams(params) {
40
+            //设置查询参数
41
+            var param = {
42
+                page: params.pageNumber,
43
+                pagesize: params.pageSize,
44
+                token: $.cookie("token"),
45
+                keyvalue: $("#keyvalue").val(),
46
+                key: $("#keyId").val(),
47
+                stime: $("#starttime").val(),
48
+                etime: $("#endtime").val(),
49
+            };
50
+            return param;
51
+        },
52
+        onLoadSuccess: function () {
53
+            //加载成功时执行
54
+            //layer.msg("加载成功");
55
+        },
56
+        onLoadError: function () {
57
+            //加载失败时执行
58
+            //layer.msg("加载数据失败", { time: 1500, icon: 2 });
59
+        },
60
+    });
61
+}
62
+
63
+function setCode(val, row, index) {
64
+    return index + 1;
65
+}
66
+
67
+function operation(val, row) {
68
+    return (
69
+        '<div class="tool_downs">' +
70
+        '<a href="javascript:;" class="aBtn" style="margin-left:0px;" authorize="yes"  id="HY_details_' +
71
+        row.F_Id +
72
+        '" onclick="detailBtn(\'' +
73
+        row.F_Id +
74
+        '\')" title="详情">详情</a>' +
75
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="editBtn(' +
76
+        row.F_Id +
77
+        ')" title="编辑">编辑</a>' +
78
+        '<div class="tool_downs">' +
79
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="deleteBtn(' +
80
+        row.F_Id +
81
+        ')" title="删除">删除</a>' +
82
+        "</div>"
83
+    );
84
+}
85
+
86
+$(".searchGo").click(function () {
87
+    initTable();
88
+});
89
+
90
+$(".addBtn").click(function () {
91
+    layer.open({
92
+        type: 2,
93
+        content: "./addOrEditZhiShiKuHotLssues.html", //iframe的url,no代表不显示滚动条
94
+        title: "热点问题",
95
+        area: ["80%", "80%"], //宽高
96
+    });
97
+});
98
+
99
+function editBtn(id) {
100
+    layer.open({
101
+        type: 2,
102
+        content: "./addOrEditZhiShiKuHotLssues.html?id=" + id, //iframe的url,no代表不显示滚动条
103
+        title: "热点问题",
104
+        area: ["80%", "80%"], //宽高
105
+    });
106
+}
107
+
108
+function deleteBtn(id) {
109
+    layer.confirm('确定删除吗?', {
110
+        btn: ['是', '否'] //按钮
111
+    }, function () {
112
+        $.post(huayi.config.callcenter_url + "HotspotGlossary/DelModel", {
113
+            ids: id,
114
+            token: $.cookie("token")
115
+        }, function (result) {
116
+            result = JSON.parse(result);
117
+            if (result.state.toLowerCase() == "success") {
118
+                layer.msg("删除成功");
119
+                initTable()
120
+            }
121
+        })
122
+    });
123
+}
124
+
125
+function detailBtn(id) {
126
+    layer.open({
127
+        type: 2,
128
+        content: "./detailZhiShiKuHotLssues.html?id=" + id, //iframe的url,no代表不显示滚动条
129
+        title: "热点问题",
130
+        area: ["80%", "80%"], //宽高
131
+    });
132
+}
133
+
134
+$(".exportFile").click(function() {
135
+    var keyvalue = $("#keyvalue").val();
136
+    var stime = $("#starttime").val();
137
+    var etime = $("#endtime").val();
138
+    var key = $("#keyId").val();
139
+
140
+    var url = huayi.config.callcenter_url + "HotspotGlossary/GetList?token=" + $.cookie("token");
141
+
142
+    url += "&keyvalue=" + keyvalue + "&stime=" + stime + "&etime=" + etime + "&key=" + key + "&isdc=1"
143
+
144
+    window.location.href = url;
145
+})
146
+
147
+$(".importFile").click(function () {
148
+    $("#upFile").trigger("click");
149
+});
150
+
151
+$("#upFile").change(function () {
152
+    upload();
153
+});
154
+
155
+function upload() {
156
+    if (document.getElementById("upFile").files.length > 0) {
157
+        var formData = new FormData();
158
+        formData.append("upFile", document.getElementById("upFile").files[0]);
159
+        formData.append("token", $.cookie("token"));
160
+        $.ajax({
161
+            url: huayi.config.callcenter_url + "HotspotGlossary/ImportExcel",
162
+            type: "POST",
163
+            data: formData,
164
+            contentType: false,
165
+            processData: false,
166
+            success: function (result) {
167
+                $("#upFile").change(function () {
168
+                    upload();
169
+                });
170
+                var r = $.parseJSON(result);
171
+                if (r.state.toLowerCase() == "success") {
172
+                    layer.msg("导入成功");
173
+                    initTable();
174
+                }
175
+            },
176
+        });
177
+    } else {
178
+        layer.confirm("请上传文件!", {
179
+            btn: ["确定"],
180
+        });
181
+    }
182
+}
183
+
184
+$(".exportTemplate").click(function () {
185
+    var a = document.createElement("a");
186
+    a.style.display = "none";
187
+    a.download = "热点问题模板.xlsx";
188
+    a.href = "../static/xls/热点问题模板.xlsx";
189
+    document.body.appendChild(a);
190
+    a.click();
191
+    document.body.removeChild(a);
192
+});

+ 192 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuPoliciesRegulations.js

@@ -0,0 +1,192 @@
1
+var table = $("#tableList");
2
+$(document).ready(function () {
3
+    initTable();
4
+    laydate.skin('blue');
5
+    laydate({
6
+        elem: '#starttime',
7
+        event: 'focus',
8
+        istime: true,
9
+        format: 'YYYY-MM-DD hh:mm:ss'
10
+    });
11
+    laydate({
12
+        elem: '#endtime',
13
+        event: 'focus',
14
+        istime: true,
15
+        format: 'YYYY-MM-DD hh:mm:ss'
16
+    });
17
+});
18
+
19
+function initTable(action, isPass) {
20
+    //先销毁表格
21
+    table.bootstrapTable("destroy");
22
+    //初始化表格,动态从服务器加载数据
23
+    table.bootstrapTable({
24
+        method: "get", //使用get请求到服务器获取数据
25
+        url: huayi.config.callcenter_url + "Policy/GetList", //获取数据的Servlet地址
26
+        contentType: "application/x-www-form-urlencoded",
27
+        striped: true, //表格显示条纹
28
+        pagination: true, //启动分页
29
+        pageSize: 10, //每页显示的记录数
30
+        pageNumber: 1, //当前第几页
31
+        pageList: [10, 20, 50, 100], //记录数可选列表
32
+        search: false, //是否启用查询
33
+        showColumns: false, //显示下拉框勾选要显示的列
34
+        showRefresh: false, //显示刷新按钮
35
+        sidePagination: "server", //表示服务端请求
36
+        //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder
37
+        //设置为limit可以获取limit, offset, search, sort, order
38
+        queryParamsType: "undefined",
39
+        queryParams: function queryParams(params) {
40
+            //设置查询参数
41
+            var param = {
42
+                page: params.pageNumber,
43
+                pagesize: params.pageSize,
44
+                token: $.cookie("token"),
45
+                keyvalue: $("#keyvalue").val(),
46
+                key: $("#keyId").val(),
47
+                stime: $("#starttime").val(),
48
+                etime: $("#endtime").val(),
49
+            };
50
+            return param;
51
+        },
52
+        onLoadSuccess: function () {
53
+            //加载成功时执行
54
+            //layer.msg("加载成功");
55
+        },
56
+        onLoadError: function () {
57
+            //加载失败时执行
58
+            //layer.msg("加载数据失败", { time: 1500, icon: 2 });
59
+        },
60
+    });
61
+}
62
+
63
+function setCode(val, row, index) {
64
+    return index + 1;
65
+}
66
+
67
+function operation(val, row) {
68
+    return (
69
+        '<div class="tool_downs">' +
70
+        '<a href="javascript:;" class="aBtn" style="margin-left:0px;" authorize="yes"  id="HY_details_' +
71
+        row.F_Id +
72
+        '" onclick="detailBtn(\'' +
73
+        row.F_Id +
74
+        '\')" title="详情">详情</a>' +
75
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="editBtn(' +
76
+        row.F_Id +
77
+        ')" title="编辑">编辑</a>' +
78
+        '<div class="tool_downs">' +
79
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="deleteBtn(' +
80
+        row.F_Id +
81
+        ')" title="删除">删除</a>' +
82
+        "</div>"
83
+    );
84
+}
85
+
86
+$(".searchGo").click(function () {
87
+    initTable();
88
+});
89
+
90
+$(".addBtn").click(function () {
91
+    layer.open({
92
+        type: 2,
93
+        content: "./addOrEditZhiShiKuPoliciesRegulations.html", //iframe的url,no代表不显示滚动条
94
+        title: "政策法规",
95
+        area: ["80%", "80%"], //宽高
96
+    });
97
+});
98
+
99
+function editBtn(id) {
100
+    layer.open({
101
+        type: 2,
102
+        content: "./addOrEditZhiShiKuPoliciesRegulations.html?id=" + id, //iframe的url,no代表不显示滚动条
103
+        title: "政策法规",
104
+        area: ["80%", "80%"], //宽高
105
+    });
106
+}
107
+
108
+function deleteBtn(id) {
109
+    layer.confirm('确定删除吗?', {
110
+        btn: ['是', '否'] //按钮
111
+    }, function () {
112
+        $.post(huayi.config.callcenter_url + "Policy/DelModel", {
113
+            ids: id,
114
+            token: $.cookie("token")
115
+        }, function (result) {
116
+            result = JSON.parse(result);
117
+            if (result.state.toLowerCase() == "success") {
118
+                layer.msg("删除成功");
119
+                initTable()
120
+            }
121
+        })
122
+    });
123
+}
124
+
125
+function detailBtn(id) {
126
+    layer.open({
127
+        type: 2,
128
+        content: "./detaileZhiShiKuPoliciesRegulations.html?id=" + id, //iframe的url,no代表不显示滚动条
129
+        title: "政策法规",
130
+        area: ["80%", "80%"], //宽高
131
+    });
132
+}
133
+
134
+$(".exportFile").click(function() {
135
+    var keyvalue = $("#keyvalue").val();
136
+    var stime = $("#starttime").val();
137
+    var etime = $("#endtime").val();
138
+    var key = $("#keyId").val();
139
+
140
+    var url = huayi.config.callcenter_url + "Policy/GetList?token=" + $.cookie("token");
141
+
142
+    url += "&keyvalue=" + keyvalue + "&stime=" + stime + "&etime=" + etime + "&key=" + key + "&isdc=1"
143
+
144
+    window.location.href = url;
145
+})
146
+
147
+$(".importFile").click(function () {
148
+    $("#upFile").trigger("click");
149
+});
150
+
151
+$("#upFile").change(function () {
152
+    upload();
153
+});
154
+
155
+function upload() {
156
+    if (document.getElementById("upFile").files.length > 0) {
157
+        var formData = new FormData();
158
+        formData.append("upFile", document.getElementById("upFile").files[0]);
159
+        formData.append("token", $.cookie("token"));
160
+        $.ajax({
161
+            url: huayi.config.callcenter_url + "Policy/ImportExcel",
162
+            type: "POST",
163
+            data: formData,
164
+            contentType: false,
165
+            processData: false,
166
+            success: function (result) {
167
+                $("#upFile").change(function () {
168
+                    upload();
169
+                });
170
+                var r = $.parseJSON(result);
171
+                if (r.state.toLowerCase() == "success") {
172
+                    layer.msg("导入成功");
173
+                    initTable();
174
+                }
175
+            },
176
+        });
177
+    } else {
178
+        layer.confirm("请上传文件!", {
179
+            btn: ["确定"],
180
+        });
181
+    }
182
+}
183
+
184
+$(".exportTemplate").click(function () {
185
+    var a = document.createElement("a");
186
+    a.style.display = "none";
187
+    a.download = "政策法规模板.xlsx";
188
+    a.href = "../static/xls/政策法规模板.xlsx";
189
+    document.body.appendChild(a);
190
+    a.click();
191
+    document.body.removeChild(a);
192
+});

+ 190 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/js/zhiShiKuPolicyExpert.js

@@ -0,0 +1,190 @@
1
+var table = $("#tableList");
2
+$(document).ready(function () {
3
+    initTable();
4
+    laydate.skin('blue');
5
+    laydate({
6
+        elem: '#starttime',
7
+        event: 'focus',
8
+        istime: true,
9
+        format: 'YYYY-MM-DD hh:mm:ss'
10
+    });
11
+    laydate({
12
+        elem: '#endtime',
13
+        event: 'focus',
14
+        istime: true,
15
+        format: 'YYYY-MM-DD hh:mm:ss'
16
+    });
17
+});
18
+
19
+function initTable(action, isPass) {
20
+    //先销毁表格
21
+    table.bootstrapTable("destroy");
22
+    //初始化表格,动态从服务器加载数据
23
+    table.bootstrapTable({
24
+        method: "get", //使用get请求到服务器获取数据
25
+        url: huayi.config.callcenter_url + "Professor/GetList", //获取数据的Servlet地址
26
+        contentType: "application/x-www-form-urlencoded",
27
+        striped: true, //表格显示条纹
28
+        pagination: true, //启动分页
29
+        pageSize: 10, //每页显示的记录数
30
+        pageNumber: 1, //当前第几页
31
+        pageList: [10, 20, 50, 100], //记录数可选列表
32
+        search: false, //是否启用查询
33
+        showColumns: false, //显示下拉框勾选要显示的列
34
+        showRefresh: false, //显示刷新按钮
35
+        sidePagination: "server", //表示服务端请求
36
+        //设置为undefined可以获取pageNumber,pageSize,searchText,sortName,sortOrder
37
+        //设置为limit可以获取limit, offset, search, sort, order
38
+        queryParamsType: "undefined",
39
+        queryParams: function queryParams(params) {
40
+            //设置查询参数
41
+            var param = {
42
+                page: params.pageNumber,
43
+                pagesize: params.pageSize,
44
+                token: $.cookie("token"),
45
+                keyvalue: $("#keyvalue").val(),
46
+                stime: $("#starttime").val(),
47
+                etime: $("#endtime").val(),
48
+            };
49
+            return param;
50
+        },
51
+        onLoadSuccess: function () {
52
+            //加载成功时执行
53
+            //layer.msg("加载成功");
54
+        },
55
+        onLoadError: function () {
56
+            //加载失败时执行
57
+            //layer.msg("加载数据失败", { time: 1500, icon: 2 });
58
+        },
59
+    });
60
+}
61
+
62
+// function setCode(val, row, index) {
63
+//     return index + 1;
64
+// }
65
+
66
+function operation(val, row) {
67
+    return (
68
+        '<div class="tool_downs">' +
69
+        '<a href="javascript:;" class="aBtn" style="margin-left:0px;" authorize="yes"  id="HY_details_' +
70
+        row.F_Id +
71
+        '" onclick="detailBtn(\'' +
72
+        row.F_Id +
73
+        '\')" title="详情">详情</a>' +
74
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="editBtn(' +
75
+        row.F_Id +
76
+        ')" title="编辑">编辑</a>' +
77
+        '<div class="tool_downs">' +
78
+        '<a href="javascript:;" class="aBtn" authorize="yes" onclick="deleteBtn(' +
79
+        row.F_Id +
80
+        ')" title="删除">删除</a>' +
81
+        "</div>"
82
+    );
83
+}
84
+
85
+$(".searchGo").click(function () {
86
+    initTable();
87
+});
88
+
89
+$(".addBtn").click(function () {
90
+    layer.open({
91
+        type: 2,
92
+        content: "./addOrEditZhiShiKuPolicyExpert.html", //iframe的url,no代表不显示滚动条
93
+        title: "政策专家库",
94
+        area: ["80%", "80%"], //宽高
95
+    });
96
+});
97
+
98
+function editBtn(id) {
99
+    layer.open({
100
+        type: 2,
101
+        content: "./addOrEditZhiShiKuPolicyExpert.html?id=" + id, //iframe的url,no代表不显示滚动条
102
+        title: "政策专家库",
103
+        area: ["80%", "80%"], //宽高
104
+    });
105
+}
106
+
107
+function deleteBtn(id) {
108
+    layer.confirm('确定删除吗?', {
109
+        btn: ['是', '否'] //按钮
110
+    }, function () {
111
+        $.post(huayi.config.callcenter_url + "Professor/DelModel", {
112
+            ids: id,
113
+            token: $.cookie("token")
114
+        }, function (result) {
115
+            result = JSON.parse(result);
116
+            if (result.state.toLowerCase() == "success") {
117
+                layer.msg("删除成功");
118
+                initTable()
119
+            }
120
+        })
121
+    });
122
+}
123
+
124
+function detailBtn(id) {
125
+    layer.open({
126
+        type: 2,
127
+        content: "./detailZhiShiKuPolicyExpert.html?id=" + id, //iframe的url,no代表不显示滚动条
128
+        title: "政策专家库",
129
+        area: ["80%", "80%"], //宽高
130
+    });
131
+}
132
+
133
+$(".exportFile").click(function() {
134
+    var keyvalue = $("#keyvalue").val();
135
+    var stime = $("#starttime").val();
136
+    var etime = $("#endtime").val();
137
+
138
+    var url = huayi.config.callcenter_url + "Professor/GetList?token=" + $.cookie("token");
139
+
140
+    url += "&keyvalue=" + keyvalue + "&stime=" + stime + "&etime=" + etime + "&isdc=1"
141
+
142
+    window.location.href = url;
143
+})
144
+
145
+$(".importFile").click(function () {
146
+    $("#upFile").trigger("click");
147
+});
148
+
149
+$("#upFile").change(function () {
150
+    upload();
151
+});
152
+
153
+function upload() {
154
+    if (document.getElementById("upFile").files.length > 0) {
155
+        var formData = new FormData();
156
+        formData.append("upFile", document.getElementById("upFile").files[0]);
157
+        formData.append("token", $.cookie("token"));
158
+        $.ajax({
159
+            url: huayi.config.callcenter_url + "Professor/ImportExcel",
160
+            type: "POST",
161
+            data: formData,
162
+            contentType: false,
163
+            processData: false,
164
+            success: function (result) {
165
+                $("#upFile").change(function () {
166
+                    upload();
167
+                });
168
+                var r = $.parseJSON(result);
169
+                if (r.state.toLowerCase() == "success") {
170
+                    layer.msg("导入成功");
171
+                    initTable();
172
+                }
173
+            },
174
+        });
175
+    } else {
176
+        layer.confirm("请上传文件!", {
177
+            btn: ["确定"],
178
+        });
179
+    }
180
+}
181
+
182
+$(".exportTemplate").click(function () {
183
+    var a = document.createElement("a");
184
+    a.style.display = "none";
185
+    a.download = "政策专家库模板.xlsx";
186
+    a.href = "../static/xls/政策专家库模板.xlsx";
187
+    document.body.appendChild(a);
188
+    a.click();
189
+    document.body.removeChild(a);
190
+});

+ 121 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuFunctional.html

@@ -0,0 +1,121 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <!--<link rel="stylesheet" href="../css/layer/need/layer.css" />-->
9
+    <link rel="stylesheet" href="../js/zTree/zTreeStyle.css" />
10
+    <link rel="stylesheet" href="../css/init.css" />
11
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
12
+    <link rel="stylesheet" href="./css/reflectCategory.css">
13
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
14
+    <title>部门职能</title>
15
+    <style>
16
+        .toolBar {
17
+            padding: 15px 0;
18
+            border-bottom: 1px solid #ccc;
19
+        }
20
+
21
+        .treeTable {
22
+            height: 400px;
23
+        }
24
+
25
+        .tool_downs{
26
+        	display: flex;
27
+        	justify-content: center;
28
+        }
29
+        .tool_downs span{
30
+        	display: block;
31
+        	width: 100%;
32
+        	height: 100%;
33
+        	text-align: center;
34
+        }
35
+        .tool_downs a{
36
+        	display: block;
37
+        	list-style: none;
38
+        	float: left;
39
+        	padding-left: 10px;
40
+        }
41
+        .reflectCategory-wrapper {
42
+            display: inline-block;
43
+        }
44
+    </style>
45
+</head>
46
+
47
+<body class="gray-bg">
48
+    <div class="container-fluid wrapper-content animated fadeInRight">
49
+        <div class="daoHang clearfix">
50
+            <div class="dhLeft">
51
+                <sapn><i class="syIcon"></i>位置:<a id="ReIndex">首页</a>&gt;<a href="javaScript:;">知识库</a>&gt;<a href=""
52
+                        class="nowPosition">部门职能</a></sapn>
53
+            </div>
54
+            <div class="dhRight"><a href="" title="刷新"><i class="fa fa-refresh"></i></a></div>
55
+        </div>
56
+        <div class="toolBar clearfix">
57
+            <div class="toolRight">
58
+                <span>
59
+                    关键字:
60
+                    <input id="keyvalue" type="text" class="">
61
+                </span>
62
+                <span>
63
+                    关键词:
64
+                     <div class="reflectCategory-wrapper">
65
+                        <input type="text" id="reflectCategory" class="" autocomplete="off" />
66
+                        <input type="hidden" id="keyId">
67
+                        <div class="reflectCategoryList-wrapper">
68
+                            <ul id="reflectCategoryList">
69
+                            </ul>
70
+                        </div>
71
+                    </div>
72
+                </span>
73
+                <span>
74
+                    开始时间
75
+                    <input id="starttime" type="text" class="">
76
+                </span>
77
+                <span>
78
+                    结束时间
79
+                    <input id="endtime" type="text" class="">
80
+                </span>
81
+                <button class="btns searchGo">搜索</button>
82
+                <button class="btns exportFile">导出</button>
83
+                <button class="btns exportTemplate">模板</button>
84
+                <button class="btns importFile">导入</button>
85
+                <input type="file" id="upFile" name="upFile"  accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" style="display: none;">
86
+                <button class="btns addBtn">添加</button>
87
+            </div>
88
+
89
+        </div>
90
+        <div class="treeTable clearfix">
91
+
92
+            <div class="tableCon col-md-12">
93
+                <table id="tableList" data-row-style="rowStyle" data-query-params="queryParams" data-pagination="true">
94
+                    <thead>
95
+                        <tr>
96
+                            <!-- <th data-checkbox="true" data-align="center"></th> -->
97
+                            <!-- <th data-align="center" data-formatter="setCode">编号</th> -->
98
+                            <th data-field="序号" data-align="center">序号</th>
99
+                            <th data-field="F_FaBuShiJian" data-align="center">发布时间</th>
100
+                            <th data-field="F_FaWenWenHao" data-align="center">发文文号</th>
101
+                            <th data-field="F_FaWenDanWei" data-align="center">发文单位</th>
102
+                            <th data-field="F_ZhiNengBuMen" data-align="center">职能部门</th>
103
+                            <th data-field="F_BiaoShiBianMa" data-align="center">标识编码</th>
104
+                            <th data-field="F_WenJianMingCheng" data-align="center">文件名称</th>
105
+                            <th data-field="F_WenJianNeiRong" data-align="center">文件内容</th>
106
+                            <th data-align="center" data-formatter="operation">操作</th>
107
+                        </tr>
108
+                    </thead>
109
+                    <tbody id="tbody"></tbody>
110
+                </table>
111
+            </div>
112
+        </div>
113
+    </div>
114
+    <script src="../js/layui/layui.js"></script>
115
+    <script src="../css/layer/layer.js"></script>
116
+    <script src="../css/laydate/laydate.js"></script>
117
+    <script src="./js/reflectCategory.js"></script>
118
+    <script src="./js/zhiShiKuFunctional.js"></script>
119
+</body>
120
+
121
+</html>

+ 121 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuGlossary.html

@@ -0,0 +1,121 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <!--<link rel="stylesheet" href="../css/layer/need/layer.css" />-->
9
+    <link rel="stylesheet" href="../js/zTree/zTreeStyle.css" />
10
+    <link rel="stylesheet" href="../css/init.css" />
11
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
12
+    <link rel="stylesheet" href="./css/reflectCategory.css">
13
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
14
+    <title>名词解释</title>
15
+    <style>
16
+        .toolBar {
17
+            padding: 15px 0;
18
+            border-bottom: 1px solid #ccc;
19
+        }
20
+
21
+        .treeTable {
22
+            height: 400px;
23
+        }
24
+
25
+        .tool_downs{
26
+        	display: flex;
27
+        	justify-content: center;
28
+        }
29
+        .tool_downs span{
30
+        	display: block;
31
+        	width: 100%;
32
+        	height: 100%;
33
+        	text-align: center;
34
+        }
35
+        .tool_downs a{
36
+        	display: block;
37
+        	list-style: none;
38
+        	float: left;
39
+        	padding-left: 10px;
40
+        }
41
+        .reflectCategory-wrapper {
42
+            display: inline-block;
43
+        }
44
+    </style>
45
+</head>
46
+
47
+<body class="gray-bg">
48
+    <div class="container-fluid wrapper-content animated fadeInRight">
49
+        <div class="daoHang clearfix">
50
+            <div class="dhLeft">
51
+                <sapn><i class="syIcon"></i>位置:<a id="ReIndex">首页</a>&gt;<a href="javaScript:;">知识库</a>&gt;<a href=""
52
+                        class="nowPosition">名词解释</a></sapn>
53
+            </div>
54
+            <div class="dhRight"><a href="" title="刷新"><i class="fa fa-refresh"></i></a></div>
55
+        </div>
56
+        <div class="toolBar clearfix">
57
+            <div class="toolRight">
58
+                <span>
59
+                    关键字:
60
+                    <input id="keyvalue" type="text" class="">
61
+                </span>
62
+                <span>
63
+                    关键词:
64
+                     <div class="reflectCategory-wrapper">
65
+                        <input type="text" id="reflectCategory" class="" autocomplete="off" />
66
+                        <input type="hidden" id="keyId">
67
+                        <div class="reflectCategoryList-wrapper">
68
+                            <ul id="reflectCategoryList">
69
+                            </ul>
70
+                        </div>
71
+                    </div>
72
+                </span>
73
+                <span>
74
+                    开始时间
75
+                    <input id="starttime" type="text" class="">
76
+                </span>
77
+                <span>
78
+                    结束时间
79
+                    <input id="endtime" type="text" class="">
80
+                </span>
81
+                <button class="btns searchGo">搜索</button>
82
+                <button class="btns exportFile">导出</button>
83
+                <button class="btns exportTemplate">模板</button>
84
+                <button class="btns importFile">导入</button>
85
+                <input type="file" id="upFile" name="upFile"  accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" style="display: none;">
86
+                <button class="btns addBtn">添加</button>
87
+            </div>
88
+
89
+        </div>
90
+        <div class="treeTable clearfix">
91
+
92
+            <div class="tableCon col-md-12">
93
+                <table id="tableList" data-row-style="rowStyle" data-query-params="queryParams" data-pagination="true">
94
+                    <thead>
95
+                        <tr>
96
+                            <!-- <th data-checkbox="true" data-align="center"></th> -->
97
+                            <!-- <th data-align="center" data-formatter="setCode">编号</th> -->
98
+                            <th data-field="序号" data-align="center">序号</th>
99
+                            <th data-field="F_FaBuShiJian" data-align="center">发布时间</th>
100
+                            <th data-field="F_FaWenWenHao" data-align="center">发文文号</th>
101
+                            <th data-field="F_FaWenDanWei" data-align="center">发文单位</th>
102
+                            <th data-field="F_BiaoShiBianMa" data-align="center">标识编码</th>
103
+                            <th data-field="F_ZhengCeMingCi" data-align="center">政策名称</th>
104
+                            <th data-field="F_ReDianWenTi" data-align="center">名词解释</th>
105
+                            <th data-field="F_WenTiJieDa" data-align="center">内容解答</th>
106
+                            <th data-align="center" data-formatter="operation">操作</th>
107
+                        </tr>
108
+                    </thead>
109
+                    <tbody id="tbody"></tbody>
110
+                </table>
111
+            </div>
112
+        </div>
113
+    </div>
114
+    <script src="../js/layui/layui.js"></script>
115
+    <script src="../css/layer/layer.js"></script>
116
+    <script src="../css/laydate/laydate.js"></script>
117
+    <script src="./js/reflectCategory.js"></script>
118
+    <script src="./js/zhiShiKuGlossary.js"></script>
119
+</body>
120
+
121
+</html>

+ 134 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuGuide.html

@@ -0,0 +1,134 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <!--<link rel="stylesheet" href="../css/layer/need/layer.css" />-->
9
+    <link rel="stylesheet" href="../js/zTree/zTreeStyle.css" />
10
+    <link rel="stylesheet" href="../css/init.css" />
11
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
12
+    <link rel="stylesheet" href="./css/reflectCategory.css">
13
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
14
+    <title>办事指南</title>
15
+    <style>
16
+        .toolBar {
17
+            padding: 15px 0;
18
+            border-bottom: 1px solid #ccc;
19
+        }
20
+
21
+        .treeTable {
22
+            height: 400px;
23
+        }
24
+
25
+        .tool_downs{
26
+        	display: flex;
27
+        	justify-content: center;
28
+        }
29
+        .tool_downs span{
30
+        	display: block;
31
+        	width: 100%;
32
+        	height: 100%;
33
+        	text-align: center;
34
+        }
35
+        .tool_downs a{
36
+        	display: block;
37
+        	list-style: none;
38
+        	float: left;
39
+        	padding-left: 10px;
40
+        }
41
+        .reflectCategory-wrapper {
42
+            display: inline-block;
43
+        }
44
+    </style>
45
+</head>
46
+
47
+<body class="gray-bg">
48
+    <div class="container-fluid wrapper-content animated fadeInRight">
49
+        <div class="daoHang clearfix">
50
+            <div class="dhLeft">
51
+                <sapn><i class="syIcon"></i>位置:<a id="ReIndex">首页</a>&gt;<a href="javaScript:;">知识库</a>&gt;<a href=""
52
+                        class="nowPosition">办事指南</a></sapn>
53
+            </div>
54
+            <div class="dhRight"><a href="" title="刷新"><i class="fa fa-refresh"></i></a></div>
55
+        </div>
56
+        <div class="toolBar clearfix">
57
+            <div class="toolRight">
58
+                <span>
59
+                    关键字:
60
+                    <input id="keyvalue" type="text" class="">
61
+                </span>
62
+                <span>
63
+                    关键词:
64
+                     <div class="reflectCategory-wrapper">
65
+                        <input type="text" id="reflectCategory" class="" autocomplete="off" />
66
+                        <input type="hidden" id="keyId">
67
+                        <div class="reflectCategoryList-wrapper">
68
+                            <ul id="reflectCategoryList">
69
+                            </ul>
70
+                        </div>
71
+                    </div>
72
+                </span>
73
+                <span>
74
+                    开始时间
75
+                    <input id="starttime" type="text" class="">
76
+                </span>
77
+                <span>
78
+                    结束时间
79
+                    <input id="endtime" type="text" class="">
80
+                </span>
81
+                <button class="btns searchGo">搜索</button>
82
+                <button class="btns exportFile">导出</button>
83
+                <button class="btns exportTemplate">模板</button>
84
+                <button class="btns importFile">导入</button>
85
+                <input type="file" id="upFile" name="upFile"  accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" style="display: none;">
86
+                <button class="btns addBtn">添加</button>
87
+            </div>
88
+
89
+        </div>
90
+        <div class="treeTable clearfix">
91
+
92
+            <div class="tableCon col-md-12">
93
+                <table id="tableList" data-row-style="rowStyle" data-query-params="queryParams" data-pagination="true">
94
+                    <thead>
95
+                        <tr>
96
+                            <!-- <th data-checkbox="true" data-align="center"></th> -->
97
+                            <!-- <th data-align="center" data-formatter="setCode">编号</th> -->
98
+                            <th data-field="序号" data-align="center">序号</th>
99
+                            <th data-field="F_FaBuDanWei" data-align="center">发布单位</th>
100
+                            <th data-field="F_FaBuShiJian" data-align="center">发布时间</th>
101
+                            <th data-field="F_YeWuMingCheng" data-align="center">业务名称</th>
102
+                            <th data-field="F_BiaoShiBianMa" data-align="center">标识编码</th>
103
+                            <th data-field="F_QiTaShuoMing" data-align="center">其他说明</th>
104
+                            <th data-field="F_BanLiLiuCheng" data-align="center">办理流程</th>
105
+                            <th data-field="F_BeiZhu" data-align="center">备注</th>
106
+
107
+                            <!-- <th data-field="F_HangYe" data-align="center">所属行业</th>
108
+                            <th data-field="F_ShenQingTiaoJian" data-align="center">申请条件</th>
109
+                            <th data-field="F_BanLiCaiLiao" data-align="center">办理材料</th>
110
+                            <th data-field="F_BanLiShiXian" data-align="center">办理时限</th>
111
+                            <th data-field="F_BanLiDiDian" data-align="center">办理地点</th>
112
+                            <th data-field="F_BanLiShiJian" data-align="center">办理时间</th>
113
+                            <th data-field="F_DiQu" data-align="center">地区</th>
114
+                            <th data-field="F_ZhengCeYiJu" data-align="center">政策依据</th>
115
+                            <th data-field="F_ShengXiaoShiJian" data-align="center">生效时间</th>
116
+                            <th data-field="F_ShiXiaoShiJian" data-align="center">失效时间</th>
117
+                            <th data-field="KeyName" data-align="center">四级关键词</th>
118
+                            <th data-field="F_WangShangBanLiLianJie" data-align="center">网站连接</th> -->
119
+                            <th data-align="center" data-formatter="operation" data-width="150">操作</th>
120
+                        </tr>
121
+                    </thead>
122
+                    <tbody id="tbody"></tbody>
123
+                </table>
124
+            </div>
125
+        </div>
126
+    </div>
127
+    <script src="../js/layui/layui.js"></script>
128
+    <script src="../css/layer/layer.js"></script>
129
+    <script src="../css/laydate/laydate.js"></script>
130
+    <script src="./js/reflectCategory.js"></script>
131
+    <script src="./js/zhiShiKuGuide.js"></script>
132
+</body>
133
+
134
+</html>

+ 121 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuHotLssues.html

@@ -0,0 +1,121 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <!--<link rel="stylesheet" href="../css/layer/need/layer.css" />-->
9
+    <link rel="stylesheet" href="../js/zTree/zTreeStyle.css" />
10
+    <link rel="stylesheet" href="../css/init.css" />
11
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
12
+    <link rel="stylesheet" href="./css/reflectCategory.css">
13
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
14
+    <title>热点问题</title>
15
+    <style>
16
+        .toolBar {
17
+            padding: 15px 0;
18
+            border-bottom: 1px solid #ccc;
19
+        }
20
+
21
+        .treeTable {
22
+            height: 400px;
23
+        }
24
+
25
+        .tool_downs{
26
+        	display: flex;
27
+        	justify-content: center;
28
+        }
29
+        .tool_downs span{
30
+        	display: block;
31
+        	width: 100%;
32
+        	height: 100%;
33
+        	text-align: center;
34
+        }
35
+        .tool_downs a{
36
+        	display: block;
37
+        	list-style: none;
38
+        	float: left;
39
+        	padding-left: 10px;
40
+        }
41
+        .reflectCategory-wrapper {
42
+            display: inline-block;
43
+        }
44
+    </style>
45
+</head>
46
+
47
+<body class="gray-bg">
48
+    <div class="container-fluid wrapper-content animated fadeInRight">
49
+        <div class="daoHang clearfix">
50
+            <div class="dhLeft">
51
+                <sapn><i class="syIcon"></i>位置:<a id="ReIndex">首页</a>&gt;<a href="javaScript:;">知识库</a>&gt;<a href=""
52
+                        class="nowPosition">热点问题</a></sapn>
53
+            </div>
54
+            <div class="dhRight"><a href="" title="刷新"><i class="fa fa-refresh"></i></a></div>
55
+        </div>
56
+        <div class="toolBar clearfix">
57
+            <div class="toolRight">
58
+                <span>
59
+                    关键字:
60
+                    <input id="keyvalue" type="text" class="">
61
+                </span>
62
+                <span>
63
+                    关键词:
64
+                     <div class="reflectCategory-wrapper">
65
+                        <input type="text" id="reflectCategory" class="" autocomplete="off" />
66
+                        <input type="hidden" id="keyId">
67
+                        <div class="reflectCategoryList-wrapper">
68
+                            <ul id="reflectCategoryList">
69
+                            </ul>
70
+                        </div>
71
+                    </div>
72
+                </span>
73
+                <span>
74
+                    开始时间
75
+                    <input id="starttime" type="text" class="">
76
+                </span>
77
+                <span>
78
+                    结束时间
79
+                    <input id="endtime" type="text" class="">
80
+                </span>
81
+                <button class="btns searchGo">搜索</button>
82
+                <button class="btns exportFile">导出</button>
83
+                <button class="btns exportTemplate">模板</button>
84
+                <button class="btns importFile">导入</button>
85
+                <input type="file" id="upFile" name="upFile"  accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" style="display: none;">
86
+                <button class="btns addBtn">添加</button>
87
+            </div>
88
+
89
+        </div>
90
+        <div class="treeTable clearfix">
91
+
92
+            <div class="tableCon col-md-12">
93
+                <table id="tableList" data-row-style="rowStyle" data-query-params="queryParams" data-pagination="true">
94
+                    <thead>
95
+                        <tr>
96
+                            <!-- <th data-checkbox="true" data-align="center"></th> -->
97
+                            <!-- <th data-align="center" data-formatter="setCode">编号</th> -->
98
+                            <th data-field="序号" data-align="center">序号</th>
99
+                            <th data-field="F_FaBuShiJian" data-align="center">发布时间</th>
100
+                            <th data-field="F_FaWenWenHao" data-align="center">发文文号</th>
101
+                            <th data-field="F_FaWenDanWei" data-align="center">发文单位</th>
102
+                            <th data-field="F_BiaoShiBianMa" data-align="center">标识编码</th>
103
+                            <th data-field="F_ZhengCeMingCi" data-align="center">政策名称</th>
104
+                            <th data-field="F_ReDianWenTi" data-align="center">热点问题</th>
105
+                            <th data-field="F_WenTiJieDa" data-align="center">内容解答</th>
106
+                            <th data-align="center" data-formatter="operation">操作</th>
107
+                        </tr>
108
+                    </thead>
109
+                    <tbody id="tbody"></tbody>
110
+                </table>
111
+            </div>
112
+        </div>
113
+    </div>
114
+    <script src="../js/layui/layui.js"></script>
115
+    <script src="../css/layer/layer.js"></script>
116
+    <script src="../css/laydate/laydate.js"></script>
117
+    <script src="./js/reflectCategory.js"></script>
118
+    <script src="./js/zhiShiKuHotLssues.js"></script>
119
+</body>
120
+
121
+</html>

+ 121 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuPoliciesRegulations.html

@@ -0,0 +1,121 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <!--<link rel="stylesheet" href="../css/layer/need/layer.css" />-->
9
+    <link rel="stylesheet" href="../js/zTree/zTreeStyle.css" />
10
+    <link rel="stylesheet" href="../css/init.css" />
11
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
12
+    <link rel="stylesheet" href="./css/reflectCategory.css">
13
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
14
+    <title>政策法规</title>
15
+    <style>
16
+        .toolBar {
17
+            padding: 15px 0;
18
+            border-bottom: 1px solid #ccc;
19
+        }
20
+
21
+        .treeTable {
22
+            height: 400px;
23
+        }
24
+
25
+        .tool_downs{
26
+        	display: flex;
27
+        	justify-content: center;
28
+        }
29
+        .tool_downs span{
30
+        	display: block;
31
+        	width: 100%;
32
+        	height: 100%;
33
+        	text-align: center;
34
+        }
35
+        .tool_downs a{
36
+        	display: block;
37
+        	list-style: none;
38
+        	float: left;
39
+        	padding-left: 10px;
40
+        }
41
+        .reflectCategory-wrapper {
42
+            display: inline-block;
43
+        }
44
+    </style>
45
+</head>
46
+
47
+<body class="gray-bg">
48
+    <div class="container-fluid wrapper-content animated fadeInRight">
49
+        <div class="daoHang clearfix">
50
+            <div class="dhLeft">
51
+                <sapn><i class="syIcon"></i>位置:<a id="ReIndex">首页</a>&gt;<a href="javaScript:;">知识库</a>&gt;<a href=""
52
+                        class="nowPosition">政策法规</a></sapn>
53
+            </div>
54
+            <div class="dhRight"><a href="" title="刷新"><i class="fa fa-refresh"></i></a></div>
55
+        </div>
56
+        <div class="toolBar clearfix">
57
+            <div class="toolRight">
58
+                <span>
59
+                    关键字:
60
+                    <input id="keyvalue" type="text" class="">
61
+                </span>
62
+                <span>
63
+                    关键词:
64
+                     <div class="reflectCategory-wrapper">
65
+                        <input type="text" id="reflectCategory" class="" autocomplete="off" />
66
+                        <input type="hidden" id="keyId">
67
+                        <div class="reflectCategoryList-wrapper">
68
+                            <ul id="reflectCategoryList">
69
+                            </ul>
70
+                        </div>
71
+                    </div>
72
+                </span>
73
+                <span>
74
+                    开始时间
75
+                    <input id="starttime" type="text" class="">
76
+                </span>
77
+                <span>
78
+                    结束时间
79
+                    <input id="endtime" type="text" class="">
80
+                </span>
81
+                <button class="btns searchGo">搜索</button>
82
+                <button class="btns exportFile">导出</button>
83
+                <button class="btns exportTemplate">模板</button>
84
+                <button class="btns importFile">导入</button>
85
+                <input type="file" id="upFile" name="upFile"  accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" style="display: none;">
86
+                <button class="btns addBtn">添加</button>
87
+            </div>
88
+
89
+        </div>
90
+        <div class="treeTable clearfix">
91
+
92
+            <div class="tableCon col-md-12">
93
+                <table id="tableList" data-row-style="rowStyle" data-query-params="queryParams" data-pagination="true">
94
+                    <thead>
95
+                        <tr>
96
+                            <!-- <th data-checkbox="true" data-align="center"></th> -->
97
+                            <!-- <th data-align="center" data-formatter="setCode">编号</th> -->
98
+                            <th data-field="序号" data-align="center">序号</th>
99
+                            <th data-field="F_FaBuShiJian" data-align="center">发布时间</th>
100
+                            <th data-field="F_FaWenWenHao" data-align="center">发文文号</th>
101
+                            <th data-field="F_FaWenDanWei" data-align="center">发文单位</th>
102
+                            <th data-field="F_ZhiNengBuMen" data-align="center">职能部门</th>
103
+                            <th data-field="F_BiaoShiBianMa" data-align="center">标识编码</th>
104
+                            <th data-field="F_WenJianMingCheng" data-align="center">文件名称</th>
105
+                            <th data-field="F_WenJianNeiRong" data-align="center">文件内容</th>
106
+                            <th data-align="center" data-formatter="operation">操作</th>
107
+                        </tr>
108
+                    </thead>
109
+                    <tbody id="tbody"></tbody>
110
+                </table>
111
+            </div>
112
+        </div>
113
+    </div>
114
+    <script src="../js/layui/layui.js"></script>
115
+    <script src="../css/layer/layer.js"></script>
116
+    <script src="../css/laydate/laydate.js"></script>
117
+    <script src="./js/reflectCategory.js"></script>
118
+    <script src="./js/zhiShiKuPoliciesRegulations.js"></script>
119
+</body>
120
+
121
+</html>

+ 108 - 0
WebUI/CallCenterWeb.UI/zhiShiKu/zhiShiKuPolicyExpert.html

@@ -0,0 +1,108 @@
1
+<!DOCTYPE html>
2
+<html>
3
+
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <script src="../Script/Common/huayi.load.js"></script>
7
+    <script src="../Script/Common/huayi.config.js"></script>
8
+    <!--<link rel="stylesheet" href="../css/layer/need/layer.css" />-->
9
+    <link rel="stylesheet" href="../js/zTree/zTreeStyle.css" />
10
+    <link rel="stylesheet" href="../css/init.css" />
11
+    <link rel="stylesheet" href="../js/layui/css/layui.css">
12
+    <title>政策专家库</title>
13
+    <style>
14
+        .toolBar {
15
+            padding: 15px 0;
16
+            border-bottom: 1px solid #ccc;
17
+        }
18
+
19
+        .treeTable {
20
+            height: 400px;
21
+        }
22
+
23
+        .tool_downs{
24
+        	display: flex;
25
+        	justify-content: center;
26
+        }
27
+        .tool_downs span{
28
+        	display: block;
29
+        	width: 100%;
30
+        	height: 100%;
31
+        	text-align: center;
32
+        }
33
+        .tool_downs a{
34
+        	display: block;
35
+        	list-style: none;
36
+        	float: left;
37
+        	padding-left: 10px;
38
+        }
39
+    </style>
40
+</head>
41
+
42
+<body class="gray-bg">
43
+    <div class="container-fluid wrapper-content animated fadeInRight">
44
+        <div class="daoHang clearfix">
45
+            <div class="dhLeft">
46
+                <sapn><i class="syIcon"></i>位置:<a id="ReIndex">首页</a>&gt;<a href="javaScript:;">知识库</a>&gt;<a href=""
47
+                        class="nowPosition">政策专家库</a></sapn>
48
+            </div>
49
+            <div class="dhRight"><a href="" title="刷新"><i class="fa fa-refresh"></i></a></div>
50
+        </div>
51
+        <div class="toolBar clearfix">
52
+            <div class="toolRight">
53
+                <span>
54
+                    关键字:
55
+                    <input id="keyvalue" type="text" class="">
56
+                </span>
57
+                <span>
58
+                    开始时间
59
+                    <input id="starttime" type="text" class="">
60
+                </span>
61
+                <span>
62
+                    结束时间
63
+                    <input id="endtime" type="text" class="">
64
+                </span>
65
+                <button class="btns searchGo">搜索</button>
66
+                <button class="btns exportFile">导出</button>
67
+                <button class="btns exportTemplate">模板</button>
68
+                <button class="btns importFile">导入</button>
69
+                <input type="file" id="upFile" name="upFile"  accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" style="display: none;">
70
+                <button class="btns addBtn">添加</button>
71
+            </div>
72
+
73
+        </div>
74
+        <div class="treeTable clearfix">
75
+
76
+            <div class="tableCon col-md-12">
77
+                <table id="tableList" data-row-style="rowStyle" data-query-params="queryParams" data-pagination="true">
78
+                    <thead>
79
+                        <tr>
80
+                            <!-- <th data-checkbox="true" data-align="center"></th> -->
81
+                            <!-- <th data-align="center" data-formatter="setCode">编号</th> -->
82
+                            <th data-field="序号" data-align="center">序号</th>
83
+                            <th data-field="F_XingMing" data-align="center">专家姓名</th>
84
+                            <th data-field="F_ShouJi" data-align="center">手机号码</th>
85
+                            <th data-field="F_FaBuShiJian" data-align="center">发布时间</th>
86
+                            <th data-field="F_FaBuDanWei" data-align="center">发布单位</th>
87
+
88
+                            <!-- <th data-field="F_HangYe" data-align="center">所属行业</th>
89
+                            <th data-field="F_DanWei" data-align="center">专家单位</th>
90
+                            <th data-field="F_KeShi" data-align="center">科室</th>
91
+                            <th data-field="F_ZhiWu" data-align="center">职务</th>
92
+                            <th data-field="F_DianHua" data-align="center">办公电话</th>
93
+                            <th data-field="F_FaBuRen" data-align="center">发布人</th>
94
+                            <th data-field="F_BiaoShiBianMa" data-align="center">标识编码</th> -->
95
+                            <th data-align="center" data-formatter="operation" data-width="150">操作</th>
96
+                        </tr>
97
+                    </thead>
98
+                    <tbody id="tbody"></tbody>
99
+                </table>
100
+            </div>
101
+        </div>
102
+    </div>
103
+    <script src="../css/layer/layer.js"></script>
104
+    <script src="../css/laydate/laydate.js"></script>
105
+    <script src="./js/zhiShiKuPolicyExpert.js"></script>
106
+</body>
107
+
108
+</html>

+ 3 - 0
anyangWebAPP/node_modules/sm-crypto/.babelrc

@@ -0,0 +1,3 @@
1
+{
2
+    "presets": ["es2015"]
3
+}

+ 97 - 0
anyangWebAPP/node_modules/sm-crypto/.eslintrc.js

@@ -0,0 +1,97 @@
1
+module.exports = {
2
+  'extends': [
3
+    'airbnb-base',
4
+    'plugin:promise/recommended'
5
+  ],
6
+  'parserOptions': {
7
+    'ecmaVersion': 9,
8
+    'ecmaFeatures': {
9
+      'jsx': false
10
+    },
11
+    'sourceType': 'module'
12
+  },
13
+  'env': {
14
+    'es6': true,
15
+    'node': true,
16
+    'jest': true
17
+  },
18
+  'plugins': [
19
+    'import',
20
+    'node',
21
+    'promise'
22
+  ],
23
+  'rules': {
24
+    'arrow-parens': 'off',
25
+    'comma-dangle': [
26
+      'error',
27
+      'only-multiline'
28
+    ],
29
+    'complexity': ['error', 20],
30
+    'func-names': 'off',
31
+    'global-require': 'off',
32
+    'handle-callback-err': [
33
+      'error',
34
+      '^(err|error)$'
35
+    ],
36
+    'import/no-unresolved': [
37
+      'error',
38
+      {
39
+        'caseSensitive': true,
40
+        'commonjs': true,
41
+        'ignore': ['^[^.]']
42
+      }
43
+    ],
44
+    'import/prefer-default-export': 'off',
45
+    'linebreak-style': 'off',
46
+    'no-catch-shadow': 'error',
47
+    'no-continue': 'off',
48
+    'no-div-regex': 'warn',
49
+    'no-else-return': 'off',
50
+    'no-param-reassign': 'off',
51
+    'no-plusplus': 'off',
52
+    'no-shadow': 'off',
53
+    'no-multi-assign': 'off',
54
+    'no-underscore-dangle': 'off',
55
+    'node/no-deprecated-api': 'error',
56
+    'node/process-exit-as-throw': 'error',
57
+    'object-curly-spacing': [
58
+      'error',
59
+      'never'
60
+    ],
61
+    'operator-linebreak': [
62
+      'error',
63
+      'after',
64
+      {
65
+        'overrides': {
66
+          ':': 'before',
67
+          '?': 'before'
68
+        }
69
+      }
70
+    ],
71
+    'prefer-arrow-callback': 'off',
72
+    'prefer-destructuring': 'off',
73
+    'prefer-template': 'off',
74
+    'quote-props': [
75
+      1,
76
+      'as-needed',
77
+      {
78
+        'unnecessary': true
79
+      }
80
+    ],
81
+    'semi': [
82
+      'error',
83
+      'never'
84
+    ],
85
+    'max-len': 'off',
86
+    'no-bitwise': 'off',
87
+    'no-mixed-operators': 'off',
88
+  },
89
+  'globals': {
90
+    'window': true,
91
+    'document': true,
92
+    'App': true,
93
+    'Page': true,
94
+    'Component': true,
95
+    'Behavior': true
96
+  }
97
+}

+ 78 - 0
anyangWebAPP/node_modules/sm-crypto/CHANGELOG.md

@@ -0,0 +1,78 @@
1
+## 0.3.12
2
+
3
+* 优化 sm3 运行性能
4
+
5
+## 0.3.11
6
+
7
+* sm2 支持压缩公钥
8
+
9
+## 0.3.10
10
+
11
+* 支持 sm3 hmac 模式
12
+
13
+
14
+## 0.3.9
15
+
16
+* 补充 sm4 解密时的 padding 判断
17
+
18
+## 0.3.8
19
+
20
+* sm2 解密时兼容密文可能是大写的情况
21
+
22
+## 0.3.7
23
+
24
+* 默认填充改为 pkcs#7,如传入 pkcs#5 也转到 pkcs#7 逻辑
25
+
26
+## 0.3.6
27
+
28
+* sm2 加解密支持二进制数据
29
+
30
+## 0.3.5
31
+
32
+* sm2.generateKeyPairHex 支持完整的 BigInteger 入参
33
+
34
+## 0.3.4
35
+
36
+* sm2 支持验证公钥接口
37
+* sm2 生成密钥时支持自定义随机数
38
+
39
+## 0.3.3
40
+
41
+* dist 输出改成 umd 模式
42
+
43
+## 0.3.2
44
+
45
+* 修复 sm2 在 userId 长度大于 31 时新旧版本验签不通过的问题
46
+## 0.3.0
47
+
48
+* sm2、sm3 重构
49
+* sm4 支持 cbc 模式
50
+
51
+## 0.2.7
52
+
53
+* 优化 sm3 性能
54
+
55
+## 0.2.5
56
+
57
+* sm3 支持字节数组输入
58
+
59
+## 0.2.4
60
+
61
+* 修复 sm4 四字节字符输出编码
62
+
63
+## 0.2.3
64
+
65
+* sm3/sm4 支持输入四字节字符
66
+
67
+## 0.2.2
68
+
69
+* sm3 支持中文输入
70
+
71
+## 0.2.1
72
+
73
+* 修复 sm2 点 16 进制串可能不满 64 位的问题
74
+
75
+## 0.2.0
76
+
77
+* sm4 默认支持 pkcs#5 填充方式
78
+* sm4 支持输入输出为字符串

+ 7 - 0
anyangWebAPP/node_modules/sm-crypto/LICENCE_MIT

@@ -0,0 +1,7 @@
1
+Copyright © 2018 june01
2
+
3
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 160 - 0
anyangWebAPP/node_modules/sm-crypto/README.md

@@ -0,0 +1,160 @@
1
+# sm-crypto
2
+
3
+国密算法sm2、sm3和sm4的js版。
4
+
5
+> PS: 小程序移植版:[https://github.com/wechat-miniprogram/sm-crypto](https://github.com/wechat-miniprogram/sm-crypto)
6
+>
7
+> PS: java 移植版(感谢 @antherd 提供):[https://github.com/antherd/sm-crypto/](https://github.com/antherd/sm-crypto/)
8
+
9
+## 安装
10
+
11
+```bash
12
+npm install --save sm-crypto
13
+```
14
+
15
+## sm2
16
+
17
+### 获取密钥对
18
+
19
+```js
20
+const sm2 = require('sm-crypto').sm2
21
+
22
+let keypair = sm2.generateKeyPairHex()
23
+
24
+publicKey = keypair.publicKey // 公钥
25
+privateKey = keypair.privateKey // 私钥
26
+
27
+// 默认生成公钥 130 位太长,可以压缩公钥到 66 位
28
+const compressedPublicKey = sm2.compressPublicKeyHex(publicKey) // compressedPublicKey 和 publicKey 等价
29
+sm2.comparePublicKeyHex(publicKey, compressedPublicKey) // 判断公钥是否等价
30
+
31
+// 自定义随机数,参数会直接透传给 jsbn 库的 BigInteger 构造器
32
+// 注意:开发者使用自定义随机数,需要自行确保传入的随机数符合密码学安全
33
+let keypair2 = sm2.generateKeyPairHex('123123123123123')
34
+let keypair3 = sm2.generateKeyPairHex(256, SecureRandom)
35
+
36
+let verifyResult = sm2.verifyPublicKey(publicKey) // 验证公钥
37
+verifyResult = sm2.verifyPublicKey(compressedPublicKey) // 验证公钥
38
+```
39
+
40
+### 加密解密
41
+
42
+```js
43
+const sm2 = require('sm-crypto').sm2
44
+const cipherMode = 1 // 1 - C1C3C2,0 - C1C2C3,默认为1
45
+
46
+let encryptData = sm2.doEncrypt(msgString, publicKey, cipherMode) // 加密结果
47
+let decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode) // 解密结果
48
+
49
+encryptData = sm2.doEncrypt(msgArray, publicKey, cipherMode) // 加密结果,输入数组
50
+decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode, {output: 'array'}) // 解密结果,输出数组
51
+```
52
+
53
+### 签名验签
54
+
55
+> ps:理论上来说,只做纯签名是最快的。
56
+
57
+```js
58
+const sm2 = require('sm-crypto').sm2
59
+
60
+// 纯签名 + 生成椭圆曲线点
61
+let sigValueHex = sm2.doSignature(msg, privateKey) // 签名
62
+let verifyResult = sm2.doVerifySignature(msg, sigValueHex, publicKey) // 验签结果
63
+
64
+// 纯签名
65
+let sigValueHex2 = sm2.doSignature(msg, privateKey, {
66
+    pointPool: [sm2.getPoint(), sm2.getPoint(), sm2.getPoint(), sm2.getPoint()], // 传入事先已生成好的椭圆曲线点,可加快签名速度
67
+}) // 签名
68
+let verifyResult2 = sm2.doVerifySignature(msg, sigValueHex2, publicKey) // 验签结果
69
+
70
+// 纯签名 + 生成椭圆曲线点 + der编解码
71
+let sigValueHex3 = sm2.doSignature(msg, privateKey, {
72
+    der: true,
73
+}) // 签名
74
+let verifyResult3 = sm2.doVerifySignature(msg, sigValueHex3, publicKey, {
75
+    der: true,
76
+}) // 验签结果
77
+
78
+// 纯签名 + 生成椭圆曲线点 + sm3杂凑
79
+let sigValueHex4 = sm2.doSignature(msg, privateKey, {
80
+    hash: true,
81
+}) // 签名
82
+let verifyResult4 = sm2.doVerifySignature(msg, sigValueHex4, publicKey, {
83
+    hash: true,
84
+}) // 验签结果
85
+
86
+// 纯签名 + 生成椭圆曲线点 + sm3杂凑(不做公钥推导)
87
+let sigValueHex5 = sm2.doSignature(msg, privateKey, {
88
+    hash: true,
89
+    publicKey, // 传入公钥的话,可以去掉sm3杂凑中推导公钥的过程,速度会比纯签名 + 生成椭圆曲线点 + sm3杂凑快
90
+})
91
+let verifyResult5 = sm2.doVerifySignature(msg, sigValueHex5, publicKey, {
92
+    hash: true,
93
+    publicKey,
94
+})
95
+
96
+// 纯签名 + 生成椭圆曲线点 + sm3杂凑 + 不做公钥推 + 添加 userId(长度小于 8192)
97
+// 默认 userId 值为 1234567812345678
98
+let sigValueHex6 = sm2.doSignature(msgString, privateKey, {
99
+    hash: true,
100
+    publicKey,
101
+    userId: 'testUserId',
102
+})
103
+let verifyResult6 = sm2.doVerifySignature(msgString, sigValueHex6, publicKey, {
104
+    hash: true,
105
+    userId: 'testUserId',
106
+})
107
+```
108
+
109
+### 获取椭圆曲线点
110
+
111
+```js
112
+const sm2 = require('sm-crypto').sm2
113
+
114
+let point = sm2.getPoint() // 获取一个椭圆曲线点,可在sm2签名时传入
115
+```
116
+
117
+## sm3
118
+
119
+```js
120
+const sm3 = require('sm-crypto').sm3
121
+
122
+let hashData = sm3('abc') // 杂凑
123
+
124
+// hmac
125
+hashData = sm3('abc', {
126
+    key: 'daac25c1512fe50f79b0e4526b93f5c0e1460cef40b6dd44af13caec62e8c60e0d885f3c6d6fb51e530889e6fd4ac743a6d332e68a0f2a3923f42585dceb93e9', // 要求为 16 进制串或字节数组
127
+})
128
+```
129
+
130
+## sm4
131
+
132
+### 加密
133
+
134
+```js
135
+const sm4 = require('sm-crypto').sm4
136
+const msg = 'hello world! 我是 juneandgreen.' // 可以为 utf8 串或字节数组
137
+const key = '0123456789abcdeffedcba9876543210' // 可以为 16 进制串或字节数组,要求为 128 比特
138
+
139
+let encryptData = sm4.encrypt(msg, key) // 加密,默认输出 16 进制字符串,默认使用 pkcs#7 填充(传 pkcs#5 也会走 pkcs#7 填充)
140
+let encryptData = sm4.encrypt(msg, key, {padding: 'none'}) // 加密,不使用 padding
141
+let encryptData = sm4.encrypt(msg, key, {padding: 'none', output: 'array'}) // 加密,不使用 padding,输出为字节数组
142
+let encryptData = sm4.encrypt(msg, key, {mode: 'cbc', iv: 'fedcba98765432100123456789abcdef'}) // 加密,cbc 模式
143
+```
144
+
145
+### 解密
146
+
147
+```js
148
+const sm4 = require('sm-crypto').sm4
149
+const encryptData = '0e395deb10f6e8a17e17823e1fd9bd98a1bff1df508b5b8a1efb79ec633d1bb129432ac1b74972dbe97bab04f024e89c' // 可以为 16 进制串或字节数组
150
+const key = '0123456789abcdeffedcba9876543210' // 可以为 16 进制串或字节数组,要求为 128 比特
151
+
152
+let decryptData = sm4.decrypt(encryptData, key) // 解密,默认输出 utf8 字符串,默认使用 pkcs#7 填充(传 pkcs#5 也会走 pkcs#7 填充)
153
+let decryptData = sm4.decrypt(encryptData, key, {padding: 'none'}) // 解密,不使用 padding
154
+let decryptData = sm4.decrypt(encryptData, key, {padding: 'none', output: 'array'}) // 解密,不使用 padding,输出为字节数组
155
+let decryptData = sm4.decrypt(encryptData, key, {mode: 'cbc', iv: 'fedcba98765432100123456789abcdef'}) // 解密,cbc 模式
156
+```
157
+
158
+## 协议
159
+
160
+MIT

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
anyangWebAPP/node_modules/sm-crypto/dist/sm2.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
anyangWebAPP/node_modules/sm-crypto/dist/sm3.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
anyangWebAPP/node_modules/sm-crypto/dist/sm4.js


+ 42 - 0
anyangWebAPP/node_modules/sm-crypto/package.json

@@ -0,0 +1,42 @@
1
+{
2
+  "name": "sm-crypto",
3
+  "version": "0.3.12",
4
+  "description": "sm-crypto",
5
+  "main": "src/index.js",
6
+  "scripts": {
7
+    "prepublish": "npm run build",
8
+    "test": "jest ./test/*",
9
+    "lint": "eslint \"src/**/*.js\" --fix",
10
+    "build": "npm run lint && webpack"
11
+  },
12
+  "repository": {
13
+    "type": "git",
14
+    "url": "git+https://github.com/JuneAndGreen/sm-crypto.git"
15
+  },
16
+  "keywords": [
17
+    "sm",
18
+    "js",
19
+    "crypto"
20
+  ],
21
+  "jest": {
22
+    "testEnvironment": "jsdom",
23
+    "testURL": "https://jest.test"
24
+  },
25
+  "author": "june_01",
26
+  "license": "MIT",
27
+  "dependencies": {
28
+    "jsbn": "^1.1.0"
29
+  },
30
+  "devDependencies": {
31
+    "babel-core": "^6.26.0",
32
+    "babel-loader": "^7.1.2",
33
+    "babel-preset-es2015": "^6.24.1",
34
+    "jest": "^22.1.4",
35
+    "webpack": "^3.10.0",
36
+    "eslint": "^5.3.0",
37
+    "eslint-config-airbnb-base": "13.1.0",
38
+    "eslint-plugin-import": "^2.14.0",
39
+    "eslint-plugin-node": "^7.0.1",
40
+    "eslint-plugin-promise": "^3.8.0"
41
+  }
42
+}

+ 5 - 0
anyangWebAPP/node_modules/sm-crypto/src/index.js

@@ -0,0 +1,5 @@
1
+module.exports = {
2
+  sm2: require('./sm2/index'),
3
+  sm3: require('./sm3/index'),
4
+  sm4: require('./sm4/index'),
5
+}

+ 161 - 0
anyangWebAPP/node_modules/sm-crypto/src/sm2/asn1.js

@@ -0,0 +1,161 @@
1
+/* eslint-disable class-methods-use-this */
2
+const {BigInteger} = require('jsbn')
3
+
4
+function bigintToValue(bigint) {
5
+  let h = bigint.toString(16)
6
+  if (h[0] !== '-') {
7
+    // 正数
8
+    if (h.length % 2 === 1) h = '0' + h // 补齐到整字节
9
+    else if (!h.match(/^[0-7]/)) h = '00' + h // 非0开头,则补一个全0字节
10
+  } else {
11
+    // 负数
12
+    h = h.substr(1)
13
+
14
+    let len = h.length
15
+    if (len % 2 === 1) len += 1 // 补齐到整字节
16
+    else if (!h.match(/^[0-7]/)) len += 2 // 非0开头,则补一个全0字节
17
+
18
+    let mask = ''
19
+    for (let i = 0; i < len; i++) mask += 'f'
20
+    mask = new BigInteger(mask, 16)
21
+
22
+    // 对绝对值取反,加1
23
+    h = mask.xor(bigint).add(BigInteger.ONE)
24
+    h = h.toString(16).replace(/^-/, '')
25
+  }
26
+  return h
27
+}
28
+
29
+class ASN1Object {
30
+  constructor() {
31
+    this.tlv = null
32
+    this.t = '00'
33
+    this.l = '00'
34
+    this.v = ''
35
+  }
36
+
37
+  /**
38
+   * 获取 der 编码比特流16进制串
39
+   */
40
+  getEncodedHex() {
41
+    if (!this.tlv) {
42
+      this.v = this.getValue()
43
+      this.l = this.getLength()
44
+      this.tlv = this.t + this.l + this.v
45
+    }
46
+    return this.tlv
47
+  }
48
+
49
+  getLength() {
50
+    const n = this.v.length / 2 // 字节数
51
+    let nHex = n.toString(16)
52
+    if (nHex.length % 2 === 1) nHex = '0' + nHex // 补齐到整字节
53
+
54
+    if (n < 128) {
55
+      // 短格式,以 0 开头
56
+      return nHex
57
+    } else {
58
+      // 长格式,以 1 开头
59
+      const head = 128 + nHex.length / 2 // 1(1位) + 真正的长度占用字节数(7位) + 真正的长度
60
+      return head.toString(16) + nHex
61
+    }
62
+  }
63
+
64
+  getValue() {
65
+    return ''
66
+  }
67
+}
68
+
69
+class DERInteger extends ASN1Object {
70
+  constructor(bigint) {
71
+    super()
72
+
73
+    this.t = '02' // 整型标签说明
74
+    if (bigint) this.v = bigintToValue(bigint)
75
+  }
76
+
77
+  getValue() {
78
+    return this.v
79
+  }
80
+}
81
+
82
+class DERSequence extends ASN1Object {
83
+  constructor(asn1Array) {
84
+    super()
85
+
86
+    this.t = '30' // 序列标签说明
87
+    this.asn1Array = asn1Array
88
+  }
89
+
90
+  getValue() {
91
+    this.v = this.asn1Array.map(asn1Object => asn1Object.getEncodedHex()).join('')
92
+    return this.v
93
+  }
94
+}
95
+
96
+/**
97
+ * 获取 l 占用字节数
98
+ */
99
+function getLenOfL(str, start) {
100
+  if (+str[start + 2] < 8) return 1 // l 以0开头,则表示短格式,只占一个字节
101
+  return +str.substr(start + 2, 2) & 0x7f + 1 // 长格式,取第一个字节后7位作为长度真正占用字节数,再加上本身
102
+}
103
+
104
+/**
105
+ * 获取 l
106
+ */
107
+function getL(str, start) {
108
+  // 获取 l
109
+  const len = getLenOfL(str, start)
110
+  const l = str.substr(start + 2, len * 2)
111
+
112
+  if (!l) return -1
113
+  const bigint = +l[0] < 8 ? new BigInteger(l, 16) : new BigInteger(l.substr(2), 16)
114
+
115
+  return bigint.intValue()
116
+}
117
+
118
+/**
119
+ * 获取 v 的位置
120
+ */
121
+function getStartOfV(str, start) {
122
+  const len = getLenOfL(str, start)
123
+  return start + (len + 1) * 2
124
+}
125
+
126
+module.exports = {
127
+  /**
128
+   * ASN.1 der 编码,针对 sm2 签名
129
+   */
130
+  encodeDer(r, s) {
131
+    const derR = new DERInteger(r)
132
+    const derS = new DERInteger(s)
133
+    const derSeq = new DERSequence([derR, derS])
134
+
135
+    return derSeq.getEncodedHex()
136
+  },
137
+
138
+  /**
139
+   * 解析 ASN.1 der,针对 sm2 验签
140
+   */
141
+  decodeDer(input) {
142
+    // 结构:
143
+    // input = | tSeq | lSeq | vSeq |
144
+    // vSeq = | tR | lR | vR | tS | lS | vS |
145
+    const start = getStartOfV(input, 0)
146
+
147
+    const vIndexR = getStartOfV(input, start)
148
+    const lR = getL(input, start)
149
+    const vR = input.substr(vIndexR, lR * 2)
150
+
151
+    const nextStart = vIndexR + vR.length
152
+    const vIndexS = getStartOfV(input, nextStart)
153
+    const lS = getL(input, nextStart)
154
+    const vS = input.substr(vIndexS, lS * 2)
155
+
156
+    const r = new BigInteger(vR, 16)
157
+    const s = new BigInteger(vS, 16)
158
+
159
+    return {r, s}
160
+  }
161
+}

+ 332 - 0
anyangWebAPP/node_modules/sm-crypto/src/sm2/ec.js

@@ -0,0 +1,332 @@
1
+/* eslint-disable no-case-declarations, max-len */
2
+const {BigInteger} = require('jsbn')
3
+
4
+/**
5
+ * thanks for Tom Wu : http://www-cs-students.stanford.edu/~tjw/jsbn/
6
+ *
7
+ * Basic Javascript Elliptic Curve implementation
8
+ * Ported loosely from BouncyCastle's Java EC code
9
+ * Only Fp curves implemented for now
10
+ */
11
+
12
+const TWO = new BigInteger('2')
13
+const THREE = new BigInteger('3')
14
+
15
+/**
16
+ * 椭圆曲线域元素
17
+ */
18
+class ECFieldElementFp {
19
+  constructor(q, x) {
20
+    this.x = x
21
+    this.q = q
22
+    // TODO if (x.compareTo(q) >= 0) error
23
+  }
24
+
25
+  /**
26
+   * 判断相等
27
+   */
28
+  equals(other) {
29
+    if (other === this) return true
30
+    return (this.q.equals(other.q) && this.x.equals(other.x))
31
+  }
32
+
33
+  /**
34
+   * 返回具体数值
35
+   */
36
+  toBigInteger() {
37
+    return this.x
38
+  }
39
+
40
+  /**
41
+   * 取反
42
+   */
43
+  negate() {
44
+    return new ECFieldElementFp(this.q, this.x.negate().mod(this.q))
45
+  }
46
+
47
+  /**
48
+   * 相加
49
+   */
50
+  add(b) {
51
+    return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q))
52
+  }
53
+
54
+  /**
55
+   * 相减
56
+   */
57
+  subtract(b) {
58
+    return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q))
59
+  }
60
+
61
+  /**
62
+   * 相乘
63
+   */
64
+  multiply(b) {
65
+    return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q))
66
+  }
67
+
68
+  /**
69
+   * 相除
70
+   */
71
+  divide(b) {
72
+    return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q))
73
+  }
74
+
75
+  /**
76
+   * 平方
77
+   */
78
+  square() {
79
+    return new ECFieldElementFp(this.q, this.x.square().mod(this.q))
80
+  }
81
+}
82
+
83
+class ECPointFp {
84
+  constructor(curve, x, y, z) {
85
+    this.curve = curve
86
+    this.x = x
87
+    this.y = y
88
+    // 标准射影坐标系:zinv == null 或 z * zinv == 1
89
+    this.z = z == null ? BigInteger.ONE : z
90
+    this.zinv = null
91
+    // TODO: compression flag
92
+  }
93
+
94
+  getX() {
95
+    if (this.zinv === null) this.zinv = this.z.modInverse(this.curve.q)
96
+
97
+    return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))
98
+  }
99
+
100
+  getY() {
101
+    if (this.zinv === null) this.zinv = this.z.modInverse(this.curve.q)
102
+
103
+    return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))
104
+  }
105
+
106
+  /**
107
+   * 判断相等
108
+   */
109
+  equals(other) {
110
+    if (other === this) return true
111
+    if (this.isInfinity()) return other.isInfinity()
112
+    if (other.isInfinity()) return this.isInfinity()
113
+
114
+    // u = y2 * z1 - y1 * z2
115
+    const u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q)
116
+    if (!u.equals(BigInteger.ZERO)) return false
117
+
118
+    // v = x2 * z1 - x1 * z2
119
+    const v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q)
120
+    return v.equals(BigInteger.ZERO)
121
+  }
122
+
123
+  /**
124
+   * 是否是无穷远点
125
+   */
126
+  isInfinity() {
127
+    if ((this.x === null) && (this.y === null)) return true
128
+    return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO)
129
+  }
130
+
131
+  /**
132
+   * 取反,x 轴对称点
133
+   */
134
+  negate() {
135
+    return new ECPointFp(this.curve, this.x, this.y.negate(), this.z)
136
+  }
137
+
138
+  /**
139
+   * 相加
140
+   *
141
+   * 标准射影坐标系:
142
+   *
143
+   * λ1 = x1 * z2
144
+   * λ2 = x2 * z1
145
+   * λ3 = λ1 − λ2
146
+   * λ4 = y1 * z2
147
+   * λ5 = y2 * z1
148
+   * λ6 = λ4 − λ5
149
+   * λ7 = λ1 + λ2
150
+   * λ8 = z1 * z2
151
+   * λ9 = λ3^2
152
+   * λ10 = λ3 * λ9
153
+   * λ11 = λ8 * λ6^2 − λ7 * λ9
154
+   * x3 = λ3 * λ11
155
+   * y3 = λ6 * (λ9 * λ1 − λ11) − λ4 * λ10
156
+   * z3 = λ10 * λ8
157
+   */
158
+  add(b) {
159
+    if (this.isInfinity()) return b
160
+    if (b.isInfinity()) return this
161
+
162
+    const x1 = this.x.toBigInteger()
163
+    const y1 = this.y.toBigInteger()
164
+    const z1 = this.z
165
+    const x2 = b.x.toBigInteger()
166
+    const y2 = b.y.toBigInteger()
167
+    const z2 = b.z
168
+    const q = this.curve.q
169
+
170
+    const w1 = x1.multiply(z2).mod(q)
171
+    const w2 = x2.multiply(z1).mod(q)
172
+    const w3 = w1.subtract(w2)
173
+    const w4 = y1.multiply(z2).mod(q)
174
+    const w5 = y2.multiply(z1).mod(q)
175
+    const w6 = w4.subtract(w5)
176
+
177
+    if (BigInteger.ZERO.equals(w3)) {
178
+      if (BigInteger.ZERO.equals(w6)) {
179
+        return this.twice() // this == b,计算自加
180
+      }
181
+      return this.curve.infinity // this == -b,则返回无穷远点
182
+    }
183
+
184
+    const w7 = w1.add(w2)
185
+    const w8 = z1.multiply(z2).mod(q)
186
+    const w9 = w3.square().mod(q)
187
+    const w10 = w3.multiply(w9).mod(q)
188
+    const w11 = w8.multiply(w6.square()).subtract(w7.multiply(w9)).mod(q)
189
+
190
+    const x3 = w3.multiply(w11).mod(q)
191
+    const y3 = w6.multiply(w9.multiply(w1).subtract(w11)).subtract(w4.multiply(w10)).mod(q)
192
+    const z3 = w10.multiply(w8).mod(q)
193
+
194
+    return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3)
195
+  }
196
+
197
+  /**
198
+   * 自加
199
+   *
200
+   * 标准射影坐标系:
201
+   *
202
+   * λ1 = 3 * x1^2 + a * z1^2
203
+   * λ2 = 2 * y1 * z1
204
+   * λ3 = y1^2
205
+   * λ4 = λ3 * x1 * z1
206
+   * λ5 = λ2^2
207
+   * λ6 = λ1^2 − 8 * λ4
208
+   * x3 = λ2 * λ6
209
+   * y3 = λ1 * (4 * λ4 − λ6) − 2 * λ5 * λ3
210
+   * z3 = λ2 * λ5
211
+   */
212
+  twice() {
213
+    if (this.isInfinity()) return this
214
+    if (!this.y.toBigInteger().signum()) return this.curve.infinity
215
+
216
+    const x1 = this.x.toBigInteger()
217
+    const y1 = this.y.toBigInteger()
218
+    const z1 = this.z
219
+    const q = this.curve.q
220
+    const a = this.curve.a.toBigInteger()
221
+
222
+    const w1 = x1.square().multiply(THREE).add(a.multiply(z1.square())).mod(q)
223
+    const w2 = y1.shiftLeft(1).multiply(z1).mod(q)
224
+    const w3 = y1.square().mod(q)
225
+    const w4 = w3.multiply(x1).multiply(z1).mod(q)
226
+    const w5 = w2.square().mod(q)
227
+    const w6 = w1.square().subtract(w4.shiftLeft(3)).mod(q)
228
+
229
+    const x3 = w2.multiply(w6).mod(q)
230
+    const y3 = w1.multiply(w4.shiftLeft(2).subtract(w6)).subtract(w5.shiftLeft(1).multiply(w3)).mod(q)
231
+    const z3 = w2.multiply(w5).mod(q)
232
+
233
+    return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3)
234
+  }
235
+
236
+  /**
237
+   * 倍点计算
238
+   */
239
+  multiply(k) {
240
+    if (this.isInfinity()) return this
241
+    if (!k.signum()) return this.curve.infinity
242
+
243
+    // 使用加减法
244
+    const k3 = k.multiply(THREE)
245
+    const neg = this.negate()
246
+    let Q = this
247
+
248
+    for (let i = k3.bitLength() - 2; i > 0; i--) {
249
+      Q = Q.twice()
250
+
251
+      const k3Bit = k3.testBit(i)
252
+      const kBit = k.testBit(i)
253
+
254
+      if (k3Bit !== kBit) {
255
+        Q = Q.add(k3Bit ? this : neg)
256
+      }
257
+    }
258
+
259
+    return Q
260
+  }
261
+}
262
+
263
+/**
264
+ * 椭圆曲线 y^2 = x^3 + ax + b
265
+ */
266
+class ECCurveFp {
267
+  constructor(q, a, b) {
268
+    this.q = q
269
+    this.a = this.fromBigInteger(a)
270
+    this.b = this.fromBigInteger(b)
271
+    this.infinity = new ECPointFp(this, null, null) // 无穷远点
272
+  }
273
+
274
+  /**
275
+   * 判断两个椭圆曲线是否相等
276
+   */
277
+  equals(other) {
278
+    if (other === this) return true
279
+    return (this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b))
280
+  }
281
+
282
+  /**
283
+   * 生成椭圆曲线域元素
284
+   */
285
+  fromBigInteger(x) {
286
+    return new ECFieldElementFp(this.q, x)
287
+  }
288
+
289
+  /**
290
+   * 解析 16 进制串为椭圆曲线点
291
+   */
292
+  decodePointHex(s) {
293
+    switch (parseInt(s.substr(0, 2), 16)) {
294
+      // 第一个字节
295
+      case 0:
296
+        return this.infinity
297
+      case 2:
298
+      case 3:
299
+        // 压缩
300
+        const x = this.fromBigInteger(new BigInteger(s.substr(2), 16))
301
+        // 对 p ≡ 3 (mod4),即存在正整数 u,使得 p = 4u + 3
302
+        // 计算 y = (√ (x^3 + ax + b) % p)^(u + 1) modp
303
+        let y = this.fromBigInteger(x.multiply(x.square()).add(
304
+          x.multiply(this.a)
305
+        ).add(this.b).toBigInteger()
306
+          .modPow(
307
+            this.q.divide(new BigInteger('4')).add(BigInteger.ONE), this.q
308
+          ))
309
+        // 算出结果 2 进制最后 1 位不等于第 1 个字节减 2 则取反
310
+        if (!y.toBigInteger().mod(TWO).equals(new BigInteger(s.substr(0, 2), 16).subtract(TWO))) {
311
+          y = y.negate()
312
+        }
313
+        return new ECPointFp(this, x, y)
314
+      case 4:
315
+      case 6:
316
+      case 7:
317
+        const len = (s.length - 2) / 2
318
+        const xHex = s.substr(2, len)
319
+        const yHex = s.substr(len + 2, len)
320
+
321
+        return new ECPointFp(this, this.fromBigInteger(new BigInteger(xHex, 16)), this.fromBigInteger(new BigInteger(yHex, 16)))
322
+      default:
323
+        // 不支持
324
+        return null
325
+    }
326
+  }
327
+}
328
+
329
+module.exports = {
330
+  ECPointFp,
331
+  ECCurveFp,
332
+}

+ 260 - 0
anyangWebAPP/node_modules/sm-crypto/src/sm2/index.js

@@ -0,0 +1,260 @@
1
+/* eslint-disable no-use-before-define */
2
+const {BigInteger} = require('jsbn')
3
+const {encodeDer, decodeDer} = require('./asn1')
4
+const _ = require('./utils')
5
+const sm3 = require('./sm3').sm3
6
+
7
+const {G, curve, n} = _.generateEcparam()
8
+const C1C2C3 = 0
9
+
10
+/**
11
+ * 加密
12
+ */
13
+function doEncrypt(msg, publicKey, cipherMode = 1) {
14
+  msg = typeof msg === 'string' ? _.hexToArray(_.utf8ToHex(msg)) : Array.prototype.slice.call(msg)
15
+  publicKey = _.getGlobalCurve().decodePointHex(publicKey) // 先将公钥转成点
16
+
17
+  const keypair = _.generateKeyPairHex()
18
+  const k = new BigInteger(keypair.privateKey, 16) // 随机数 k
19
+
20
+  // c1 = k * G
21
+  let c1 = keypair.publicKey
22
+  if (c1.length > 128) c1 = c1.substr(c1.length - 128)
23
+
24
+  // (x2, y2) = k * publicKey
25
+  const p = publicKey.multiply(k)
26
+  const x2 = _.hexToArray(_.leftPad(p.getX().toBigInteger().toRadix(16), 64))
27
+  const y2 = _.hexToArray(_.leftPad(p.getY().toBigInteger().toRadix(16), 64))
28
+
29
+  // c3 = hash(x2 || msg || y2)
30
+  const c3 = _.arrayToHex(sm3([].concat(x2, msg, y2)))
31
+
32
+  let ct = 1
33
+  let offset = 0
34
+  let t = [] // 256 位
35
+  const z = [].concat(x2, y2)
36
+  const nextT = () => {
37
+    // (1) Hai = hash(z || ct)
38
+    // (2) ct++
39
+    t = sm3([...z, ct >> 24 & 0x00ff, ct >> 16 & 0x00ff, ct >> 8 & 0x00ff, ct & 0x00ff])
40
+    ct++
41
+    offset = 0
42
+  }
43
+  nextT() // 先生成 Ha1
44
+
45
+  for (let i = 0, len = msg.length; i < len; i++) {
46
+    // t = Ha1 || Ha2 || Ha3 || Ha4
47
+    if (offset === t.length) nextT()
48
+
49
+    // c2 = msg ^ t
50
+    msg[i] ^= t[offset++] & 0xff
51
+  }
52
+  const c2 = _.arrayToHex(msg)
53
+
54
+  return cipherMode === C1C2C3 ? c1 + c2 + c3 : c1 + c3 + c2
55
+}
56
+
57
+/**
58
+ * 解密
59
+ */
60
+function doDecrypt(encryptData, privateKey, cipherMode = 1, {
61
+  output = 'string',
62
+} = {}) {
63
+  privateKey = new BigInteger(privateKey, 16)
64
+
65
+  let c3 = encryptData.substr(128, 64)
66
+  let c2 = encryptData.substr(128 + 64)
67
+
68
+  if (cipherMode === C1C2C3) {
69
+    c3 = encryptData.substr(encryptData.length - 64)
70
+    c2 = encryptData.substr(128, encryptData.length - 128 - 64)
71
+  }
72
+
73
+  const msg = _.hexToArray(c2)
74
+  const c1 = _.getGlobalCurve().decodePointHex('04' + encryptData.substr(0, 128))
75
+
76
+  const p = c1.multiply(privateKey)
77
+  const x2 = _.hexToArray(_.leftPad(p.getX().toBigInteger().toRadix(16), 64))
78
+  const y2 = _.hexToArray(_.leftPad(p.getY().toBigInteger().toRadix(16), 64))
79
+
80
+  let ct = 1
81
+  let offset = 0
82
+  let t = [] // 256 位
83
+  const z = [].concat(x2, y2)
84
+  const nextT = () => {
85
+    // (1) Hai = hash(z || ct)
86
+    // (2) ct++
87
+    t = sm3([...z, ct >> 24 & 0x00ff, ct >> 16 & 0x00ff, ct >> 8 & 0x00ff, ct & 0x00ff])
88
+    ct++
89
+    offset = 0
90
+  }
91
+  nextT() // 先生成 Ha1
92
+
93
+  for (let i = 0, len = msg.length; i < len; i++) {
94
+    // t = Ha1 || Ha2 || Ha3 || Ha4
95
+    if (offset === t.length) nextT()
96
+
97
+    // c2 = msg ^ t
98
+    msg[i] ^= t[offset++] & 0xff
99
+  }
100
+
101
+  // c3 = hash(x2 || msg || y2)
102
+  const checkC3 = _.arrayToHex(sm3([].concat(x2, msg, y2)))
103
+
104
+  if (checkC3 === c3.toLowerCase()) {
105
+    return output === 'array' ? msg : _.arrayToUtf8(msg)
106
+  } else {
107
+    return output === 'array' ? [] : ''
108
+  }
109
+}
110
+
111
+/**
112
+ * 签名
113
+ */
114
+function doSignature(msg, privateKey, {
115
+  pointPool, der, hash, publicKey, userId
116
+} = {}) {
117
+  let hashHex = typeof msg === 'string' ? _.utf8ToHex(msg) : _.arrayToHex(msg)
118
+
119
+  if (hash) {
120
+    // sm3杂凑
121
+    publicKey = publicKey || getPublicKeyFromPrivateKey(privateKey)
122
+    hashHex = getHash(hashHex, publicKey, userId)
123
+  }
124
+
125
+  const dA = new BigInteger(privateKey, 16)
126
+  const e = new BigInteger(hashHex, 16)
127
+
128
+  // k
129
+  let k = null
130
+  let r = null
131
+  let s = null
132
+
133
+  do {
134
+    do {
135
+      let point
136
+      if (pointPool && pointPool.length) {
137
+        point = pointPool.pop()
138
+      } else {
139
+        point = getPoint()
140
+      }
141
+      k = point.k
142
+
143
+      // r = (e + x1) mod n
144
+      r = e.add(point.x1).mod(n)
145
+    } while (r.equals(BigInteger.ZERO) || r.add(k).equals(n))
146
+
147
+    // s = ((1 + dA)^-1 * (k - r * dA)) mod n
148
+    s = dA.add(BigInteger.ONE).modInverse(n).multiply(k.subtract(r.multiply(dA))).mod(n)
149
+  } while (s.equals(BigInteger.ZERO))
150
+
151
+  if (der) return encodeDer(r, s) // asn.1 der 编码
152
+
153
+  return _.leftPad(r.toString(16), 64) + _.leftPad(s.toString(16), 64)
154
+}
155
+
156
+/**
157
+ * 验签
158
+ */
159
+function doVerifySignature(msg, signHex, publicKey, {der, hash, userId} = {}) {
160
+  let hashHex = typeof msg === 'string' ? _.utf8ToHex(msg) : _.arrayToHex(msg)
161
+
162
+  if (hash) {
163
+    // sm3杂凑
164
+    hashHex = getHash(hashHex, publicKey, userId)
165
+  }
166
+
167
+  let r; let
168
+    s
169
+  if (der) {
170
+    const decodeDerObj = decodeDer(signHex) // asn.1 der 解码
171
+    r = decodeDerObj.r
172
+    s = decodeDerObj.s
173
+  } else {
174
+    r = new BigInteger(signHex.substring(0, 64), 16)
175
+    s = new BigInteger(signHex.substring(64), 16)
176
+  }
177
+
178
+  const PA = curve.decodePointHex(publicKey)
179
+  const e = new BigInteger(hashHex, 16)
180
+
181
+  // t = (r + s) mod n
182
+  const t = r.add(s).mod(n)
183
+
184
+  if (t.equals(BigInteger.ZERO)) return false
185
+
186
+  // x1y1 = s * G + t * PA
187
+  const x1y1 = G.multiply(s).add(PA.multiply(t))
188
+
189
+  // R = (e + x1) mod n
190
+  const R = e.add(x1y1.getX().toBigInteger()).mod(n)
191
+
192
+  return r.equals(R)
193
+}
194
+
195
+/**
196
+ * sm3杂凑算法
197
+ */
198
+function getHash(hashHex, publicKey, userId = '1234567812345678') {
199
+  // z = hash(entl || userId || a || b || gx || gy || px || py)
200
+  userId = _.utf8ToHex(userId)
201
+  const a = _.leftPad(G.curve.a.toBigInteger().toRadix(16), 64)
202
+  const b = _.leftPad(G.curve.b.toBigInteger().toRadix(16), 64)
203
+  const gx = _.leftPad(G.getX().toBigInteger().toRadix(16), 64)
204
+  const gy = _.leftPad(G.getY().toBigInteger().toRadix(16), 64)
205
+  let px
206
+  let py
207
+  if (publicKey.length === 128) {
208
+    px = publicKey.substr(0, 64)
209
+    py = publicKey.substr(64, 64)
210
+  } else {
211
+    const point = G.curve.decodePointHex(publicKey)
212
+    px = _.leftPad(point.getX().toBigInteger().toRadix(16), 64)
213
+    py = _.leftPad(point.getY().toBigInteger().toRadix(16), 64)
214
+  }
215
+  const data = _.hexToArray(userId + a + b + gx + gy + px + py)
216
+
217
+  const entl = userId.length * 4
218
+  data.unshift(entl & 0x00ff)
219
+  data.unshift(entl >> 8 & 0x00ff)
220
+
221
+  const z = sm3(data)
222
+
223
+  // e = hash(z || msg)
224
+  return _.arrayToHex(sm3(z.concat(_.hexToArray(hashHex))))
225
+}
226
+
227
+/**
228
+ * 计算公钥
229
+ */
230
+function getPublicKeyFromPrivateKey(privateKey) {
231
+  const PA = G.multiply(new BigInteger(privateKey, 16))
232
+  const x = _.leftPad(PA.getX().toBigInteger().toString(16), 64)
233
+  const y = _.leftPad(PA.getY().toBigInteger().toString(16), 64)
234
+  return '04' + x + y
235
+}
236
+
237
+/**
238
+ * 获取椭圆曲线点
239
+ */
240
+function getPoint() {
241
+  const keypair = _.generateKeyPairHex()
242
+  const PA = curve.decodePointHex(keypair.publicKey)
243
+
244
+  keypair.k = new BigInteger(keypair.privateKey, 16)
245
+  keypair.x1 = PA.getX().toBigInteger()
246
+
247
+  return keypair
248
+}
249
+
250
+module.exports = {
251
+  generateKeyPairHex: _.generateKeyPairHex,
252
+  compressPublicKeyHex: _.compressPublicKeyHex,
253
+  comparePublicKeyHex: _.comparePublicKeyHex,
254
+  doEncrypt,
255
+  doDecrypt,
256
+  doSignature,
257
+  doVerifySignature,
258
+  getPoint,
259
+  verifyPublicKey: _.verifyPublicKey,
260
+}

+ 170 - 0
anyangWebAPP/node_modules/sm-crypto/src/sm2/sm3.js

@@ -0,0 +1,170 @@
1
+// 消息扩展
2
+const W = new Uint32Array(68)
3
+const M = new Uint32Array(64) // W'
4
+
5
+/**
6
+ * 循环左移
7
+ */
8
+function rotl(x, n) {
9
+  const s = n & 31
10
+  return (x << s) | (x >>> (32 - s))
11
+}
12
+
13
+/**
14
+ * 二进制异或运算
15
+ */
16
+function xor(x, y) {
17
+  const result = []
18
+  for (let i = x.length - 1; i >= 0; i--) result[i] = (x[i] ^ y[i]) & 0xff
19
+  return result
20
+}
21
+
22
+/**
23
+ * 压缩函数中的置换函数 P0(X) = X xor (X <<< 9) xor (X <<< 17)
24
+ */
25
+function P0(X) {
26
+  return (X ^ rotl(X, 9)) ^ rotl(X, 17)
27
+}
28
+
29
+/**
30
+ * 消息扩展中的置换函数 P1(X) = X xor (X <<< 15) xor (X <<< 23)
31
+ */
32
+function P1(X) {
33
+  return (X ^ rotl(X, 15)) ^ rotl(X, 23)
34
+}
35
+
36
+/**
37
+ * sm3 本体
38
+ */
39
+function sm3(array) {
40
+  let len = array.length * 8
41
+
42
+  // k 是满足 len + 1 + k = 448mod512 的最小的非负整数
43
+  let k = len % 512
44
+  // 如果 448 <= (512 % len) < 512,需要多补充 (len % 448) 比特'0'以满足总比特长度为512的倍数
45
+  k = k >= 448 ? 512 - (k % 448) - 1 : 448 - k - 1
46
+
47
+  // 填充
48
+  const kArr = new Array((k - 7) / 8)
49
+  const lenArr = new Array(8)
50
+  for (let i = 0, len = kArr.length; i < len; i++) kArr[i] = 0
51
+  for (let i = 0, len = lenArr.length; i < len; i++) lenArr[i] = 0
52
+  len = len.toString(2)
53
+  for (let i = 7; i >= 0; i--) {
54
+    if (len.length > 8) {
55
+      const start = len.length - 8
56
+      lenArr[i] = parseInt(len.substr(start), 2)
57
+      len = len.substr(0, start)
58
+    } else if (len.length > 0) {
59
+      lenArr[i] = parseInt(len, 2)
60
+      len = ''
61
+    }
62
+  }
63
+  const m = new Uint8Array([...array, 0x80, ...kArr, ...lenArr])
64
+  const dataView = new DataView(m.buffer, 0)
65
+
66
+  // 迭代压缩
67
+  const n = m.length / 64
68
+  const V = new Uint32Array([0x7380166f, 0x4914b2b9, 0x172442d7, 0xda8a0600, 0xa96f30bc, 0x163138aa, 0xe38dee4d, 0xb0fb0e4e])
69
+  for (let i = 0; i < n; i++) {
70
+    W.fill(0)
71
+    M.fill(0)
72
+
73
+    // 将消息分组B划分为 16 个字 W0, W1,……,W15
74
+    const start = 16 * i
75
+    for (let j = 0; j < 16; j++) {
76
+      W[j] = dataView.getUint32((start + j) * 4, false)
77
+    }
78
+
79
+    // W16 ~ W67:W[j] <- P1(W[j−16] xor W[j−9] xor (W[j−3] <<< 15)) xor (W[j−13] <<< 7) xor W[j−6]
80
+    for (let j = 16; j < 68; j++) {
81
+      W[j] = (P1((W[j - 16] ^ W[j - 9]) ^ rotl(W[j - 3], 15)) ^ rotl(W[j - 13], 7)) ^ W[j - 6]
82
+    }
83
+
84
+    // W′0 ~ W′63:W′[j] = W[j] xor W[j+4]
85
+    for (let j = 0; j < 64; j++) {
86
+      M[j] = W[j] ^ W[j + 4]
87
+    }
88
+
89
+    // 压缩
90
+    const T1 = 0x79cc4519
91
+    const T2 = 0x7a879d8a
92
+    // 字寄存器
93
+    let A = V[0]
94
+    let B = V[1]
95
+    let C = V[2]
96
+    let D = V[3]
97
+    let E = V[4]
98
+    let F = V[5]
99
+    let G = V[6]
100
+    let H = V[7]
101
+    // 中间变量
102
+    let SS1
103
+    let SS2
104
+    let TT1
105
+    let TT2
106
+    let T
107
+    for (let j = 0; j < 64; j++) {
108
+      T = j >= 0 && j <= 15 ? T1 : T2
109
+      SS1 = rotl(rotl(A, 12) + E + rotl(T, j), 7)
110
+      SS2 = SS1 ^ rotl(A, 12)
111
+
112
+      TT1 = (j >= 0 && j <= 15 ? ((A ^ B) ^ C) : (((A & B) | (A & C)) | (B & C))) + D + SS2 + M[j]
113
+      TT2 = (j >= 0 && j <= 15 ? ((E ^ F) ^ G) : ((E & F) | ((~E) & G))) + H + SS1 + W[j]
114
+
115
+      D = C
116
+      C = rotl(B, 9)
117
+      B = A
118
+      A = TT1
119
+      H = G
120
+      G = rotl(F, 19)
121
+      F = E
122
+      E = P0(TT2)
123
+    }
124
+
125
+    V[0] ^= A
126
+    V[1] ^= B
127
+    V[2] ^= C
128
+    V[3] ^= D
129
+    V[4] ^= E
130
+    V[5] ^= F
131
+    V[6] ^= G
132
+    V[7] ^= H
133
+  }
134
+
135
+  // 转回 uint8
136
+  const result = []
137
+  for (let i = 0, len = V.length; i < len; i++) {
138
+    const word = V[i]
139
+    result.push((word & 0xff000000) >>> 24, (word & 0xff0000) >>> 16, (word & 0xff00) >>> 8, word & 0xff)
140
+  }
141
+
142
+  return result
143
+}
144
+
145
+/**
146
+ * hmac 实现
147
+ */
148
+const blockLen = 64
149
+const iPad = new Uint8Array(blockLen)
150
+const oPad = new Uint8Array(blockLen)
151
+for (let i = 0; i < blockLen; i++) {
152
+  iPad[i] = 0x36
153
+  oPad[i] = 0x5c
154
+}
155
+function hmac(input, key) {
156
+  // 密钥填充
157
+  if (key.length > blockLen) key = sm3(key)
158
+  while (key.length < blockLen) key.push(0)
159
+
160
+  const iPadKey = xor(key, iPad)
161
+  const oPadKey = xor(key, oPad)
162
+
163
+  const hash = sm3([...iPadKey, ...input])
164
+  return sm3([...oPadKey, ...hash])
165
+}
166
+
167
+module.exports = {
168
+  sm3,
169
+  hmac,
170
+}

+ 194 - 0
anyangWebAPP/node_modules/sm-crypto/src/sm2/utils.js

@@ -0,0 +1,194 @@
1
+/* eslint-disable no-bitwise, no-mixed-operators, no-use-before-define, max-len */
2
+const {BigInteger, SecureRandom} = require('jsbn')
3
+const {ECCurveFp} = require('./ec')
4
+
5
+const rng = new SecureRandom()
6
+const {curve, G, n} = generateEcparam()
7
+
8
+/**
9
+ * 获取公共椭圆曲线
10
+ */
11
+function getGlobalCurve() {
12
+  return curve
13
+}
14
+
15
+/**
16
+ * 生成ecparam
17
+ */
18
+function generateEcparam() {
19
+  // 椭圆曲线
20
+  const p = new BigInteger('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF', 16)
21
+  const a = new BigInteger('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC', 16)
22
+  const b = new BigInteger('28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93', 16)
23
+  const curve = new ECCurveFp(p, a, b)
24
+
25
+  // 基点
26
+  const gxHex = '32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7'
27
+  const gyHex = 'BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0'
28
+  const G = curve.decodePointHex('04' + gxHex + gyHex)
29
+
30
+  const n = new BigInteger('FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123', 16)
31
+
32
+  return {curve, G, n}
33
+}
34
+
35
+/**
36
+ * 生成密钥对:publicKey = privateKey * G
37
+ */
38
+function generateKeyPairHex(a, b, c) {
39
+  const random = a ? new BigInteger(a, b, c) : new BigInteger(n.bitLength(), rng)
40
+  const d = random.mod(n.subtract(BigInteger.ONE)).add(BigInteger.ONE) // 随机数
41
+  const privateKey = leftPad(d.toString(16), 64)
42
+
43
+  const P = G.multiply(d) // P = dG,p 为公钥,d 为私钥
44
+  const Px = leftPad(P.getX().toBigInteger().toString(16), 64)
45
+  const Py = leftPad(P.getY().toBigInteger().toString(16), 64)
46
+  const publicKey = '04' + Px + Py
47
+
48
+  return {privateKey, publicKey}
49
+}
50
+
51
+/**
52
+ * 生成压缩公钥
53
+ */
54
+function compressPublicKeyHex(s) {
55
+  if (s.length !== 130) throw new Error('Invalid public key to compress')
56
+
57
+  const len = (s.length - 2) / 2
58
+  const xHex = s.substr(2, len)
59
+  const y = new BigInteger(s.substr(len + 2, len), 16)
60
+
61
+  let prefix = '03'
62
+  if (y.mod(new BigInteger('2')).equals(BigInteger.ZERO)) prefix = '02'
63
+
64
+  return prefix + xHex
65
+}
66
+
67
+/**
68
+ * utf8串转16进制串
69
+ */
70
+function utf8ToHex(input) {
71
+  input = unescape(encodeURIComponent(input))
72
+
73
+  const length = input.length
74
+
75
+  // 转换到字数组
76
+  const words = []
77
+  for (let i = 0; i < length; i++) {
78
+    words[i >>> 2] |= (input.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8)
79
+  }
80
+
81
+  // 转换到16进制
82
+  const hexChars = []
83
+  for (let i = 0; i < length; i++) {
84
+    const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff
85
+    hexChars.push((bite >>> 4).toString(16))
86
+    hexChars.push((bite & 0x0f).toString(16))
87
+  }
88
+
89
+  return hexChars.join('')
90
+}
91
+
92
+/**
93
+ * 补全16进制字符串
94
+ */
95
+function leftPad(input, num) {
96
+  if (input.length >= num) return input
97
+
98
+  return (new Array(num - input.length + 1)).join('0') + input
99
+}
100
+
101
+/**
102
+ * 转成16进制串
103
+ */
104
+function arrayToHex(arr) {
105
+  return arr.map(item => {
106
+    item = item.toString(16)
107
+    return item.length === 1 ? '0' + item : item
108
+  }).join('')
109
+}
110
+
111
+/**
112
+ * 转成utf8串
113
+ */
114
+function arrayToUtf8(arr) {
115
+  const words = []
116
+  let j = 0
117
+  for (let i = 0; i < arr.length * 2; i += 2) {
118
+    words[i >>> 3] |= parseInt(arr[j], 10) << (24 - (i % 8) * 4)
119
+    j++
120
+  }
121
+
122
+  try {
123
+    const latin1Chars = []
124
+
125
+    for (let i = 0; i < arr.length; i++) {
126
+      const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff
127
+      latin1Chars.push(String.fromCharCode(bite))
128
+    }
129
+
130
+    return decodeURIComponent(escape(latin1Chars.join('')))
131
+  } catch (e) {
132
+    throw new Error('Malformed UTF-8 data')
133
+  }
134
+}
135
+
136
+/**
137
+ * 转成字节数组
138
+ */
139
+function hexToArray(hexStr) {
140
+  const words = []
141
+  let hexStrLength = hexStr.length
142
+
143
+  if (hexStrLength % 2 !== 0) {
144
+    hexStr = leftPad(hexStr, hexStrLength + 1)
145
+  }
146
+
147
+  hexStrLength = hexStr.length
148
+
149
+  for (let i = 0; i < hexStrLength; i += 2) {
150
+    words.push(parseInt(hexStr.substr(i, 2), 16))
151
+  }
152
+  return words
153
+}
154
+
155
+/**
156
+ * 验证公钥是否为椭圆曲线上的点
157
+ */
158
+function verifyPublicKey(publicKey) {
159
+  const point = curve.decodePointHex(publicKey)
160
+  if (!point) return false
161
+
162
+  const x = point.getX()
163
+  const y = point.getY()
164
+
165
+  // 验证 y^2 是否等于 x^3 + ax + b
166
+  return y.square().equals(x.multiply(x.square()).add(x.multiply(curve.a)).add(curve.b))
167
+}
168
+
169
+/**
170
+ * 验证公钥是否等价,等价返回true
171
+ */
172
+function comparePublicKeyHex(publicKey1, publicKey2) {
173
+  const point1 = curve.decodePointHex(publicKey1)
174
+  if (!point1) return false
175
+
176
+  const point2 = curve.decodePointHex(publicKey2)
177
+  if (!point2) return false
178
+
179
+  return point1.equals(point2)
180
+}
181
+
182
+module.exports = {
183
+  getGlobalCurve,
184
+  generateEcparam,
185
+  generateKeyPairHex,
186
+  compressPublicKeyHex,
187
+  utf8ToHex,
188
+  leftPad,
189
+  arrayToHex,
190
+  arrayToUtf8,
191
+  hexToArray,
192
+  verifyPublicKey,
193
+  comparePublicKeyHex,
194
+}

+ 94 - 0
anyangWebAPP/node_modules/sm-crypto/src/sm3/index.js

@@ -0,0 +1,94 @@
1
+const {sm3, hmac} = require('../sm2/sm3')
2
+
3
+/**
4
+ * 补全16进制字符串
5
+ */
6
+function leftPad(input, num) {
7
+  if (input.length >= num) return input
8
+
9
+  return (new Array(num - input.length + 1)).join('0') + input
10
+}
11
+
12
+/**
13
+ * 字节数组转 16 进制串
14
+ */
15
+function ArrayToHex(arr) {
16
+  return arr.map(item => {
17
+    item = item.toString(16)
18
+    return item.length === 1 ? '0' + item : item
19
+  }).join('')
20
+}
21
+
22
+/**
23
+ * 转成字节数组
24
+ */
25
+function hexToArray(hexStr) {
26
+  const words = []
27
+  let hexStrLength = hexStr.length
28
+
29
+  if (hexStrLength % 2 !== 0) {
30
+    hexStr = leftPad(hexStr, hexStrLength + 1)
31
+  }
32
+
33
+  hexStrLength = hexStr.length
34
+
35
+  for (let i = 0; i < hexStrLength; i += 2) {
36
+    words.push(parseInt(hexStr.substr(i, 2), 16))
37
+  }
38
+  return words
39
+}
40
+
41
+/**
42
+ * utf8 串转字节数组
43
+ */
44
+function utf8ToArray(str) {
45
+  const arr = []
46
+
47
+  for (let i = 0, len = str.length; i < len; i++) {
48
+    const point = str.codePointAt(i)
49
+
50
+    if (point <= 0x007f) {
51
+      // 单字节,标量值:00000000 00000000 0zzzzzzz
52
+      arr.push(point)
53
+    } else if (point <= 0x07ff) {
54
+      // 双字节,标量值:00000000 00000yyy yyzzzzzz
55
+      arr.push(0xc0 | (point >>> 6)) // 110yyyyy(0xc0-0xdf)
56
+      arr.push(0x80 | (point & 0x3f)) // 10zzzzzz(0x80-0xbf)
57
+    } else if (point <= 0xD7FF || (point >= 0xE000 && point <= 0xFFFF)) {
58
+      // 三字节:标量值:00000000 xxxxyyyy yyzzzzzz
59
+      arr.push(0xe0 | (point >>> 12)) // 1110xxxx(0xe0-0xef)
60
+      arr.push(0x80 | ((point >>> 6) & 0x3f)) // 10yyyyyy(0x80-0xbf)
61
+      arr.push(0x80 | (point & 0x3f)) // 10zzzzzz(0x80-0xbf)
62
+    } else if (point >= 0x010000 && point <= 0x10FFFF) {
63
+      // 四字节:标量值:000wwwxx xxxxyyyy yyzzzzzz
64
+      i++
65
+      arr.push((0xf0 | (point >>> 18) & 0x1c)) // 11110www(0xf0-0xf7)
66
+      arr.push((0x80 | ((point >>> 12) & 0x3f))) // 10xxxxxx(0x80-0xbf)
67
+      arr.push((0x80 | ((point >>> 6) & 0x3f))) // 10yyyyyy(0x80-0xbf)
68
+      arr.push((0x80 | (point & 0x3f))) // 10zzzzzz(0x80-0xbf)
69
+    } else {
70
+      // 五、六字节,暂时不支持
71
+      arr.push(point)
72
+      throw new Error('input is not supported')
73
+    }
74
+  }
75
+
76
+  return arr
77
+}
78
+
79
+module.exports = function (input, options) {
80
+  input = typeof input === 'string' ? utf8ToArray(input) : Array.prototype.slice.call(input)
81
+
82
+  if (options) {
83
+    const mode = options.mode || 'hmac'
84
+    if (mode !== 'hmac') throw new Error('invalid mode')
85
+
86
+    let key = options.key
87
+    if (!key) throw new Error('invalid key')
88
+
89
+    key = typeof key === 'string' ? hexToArray(key) : Array.prototype.slice.call(key)
90
+    return ArrayToHex(hmac(input, key))
91
+  }
92
+
93
+  return ArrayToHex(sm3(input))
94
+}

+ 358 - 0
anyangWebAPP/node_modules/sm-crypto/src/sm4/index.js

@@ -0,0 +1,358 @@
1
+/* eslint-disable no-bitwise, no-mixed-operators, complexity */
2
+const DECRYPT = 0
3
+const ROUND = 32
4
+const BLOCK = 16
5
+
6
+const Sbox = [
7
+  0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05,
8
+  0x2b, 0x67, 0x9a, 0x76, 0x2a, 0xbe, 0x04, 0xc3, 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99,
9
+  0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef, 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62,
10
+  0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, 0x80, 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6,
11
+  0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, 0x83, 0x59, 0x3c, 0x19, 0xe6, 0x85, 0x4f, 0xa8,
12
+  0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d, 0x35,
13
+  0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87,
14
+  0xd4, 0x00, 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e,
15
+  0xea, 0xbf, 0x8a, 0xd2, 0x40, 0xc7, 0x38, 0xb5, 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1,
16
+  0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55, 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3,
17
+  0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, 0xc0, 0x29, 0x23, 0xab, 0x0d, 0x53, 0x4e, 0x6f,
18
+  0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b, 0x51,
19
+  0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8,
20
+  0x0a, 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0,
21
+  0x89, 0x69, 0x97, 0x4a, 0x0c, 0x96, 0x77, 0x7e, 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84,
22
+  0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d, 0x20, 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48
23
+]
24
+
25
+const CK = [
26
+  0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269,
27
+  0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9,
28
+  0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249,
29
+  0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9,
30
+  0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229,
31
+  0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299,
32
+  0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209,
33
+  0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279
34
+]
35
+
36
+/**
37
+ * 16 进制串转字节数组
38
+ */
39
+function hexToArray(str) {
40
+  const arr = []
41
+  for (let i = 0, len = str.length; i < len; i += 2) {
42
+    arr.push(parseInt(str.substr(i, 2), 16))
43
+  }
44
+  return arr
45
+}
46
+
47
+/**
48
+ * 字节数组转 16 进制串
49
+ */
50
+function ArrayToHex(arr) {
51
+  return arr.map(item => {
52
+    item = item.toString(16)
53
+    return item.length === 1 ? '0' + item : item
54
+  }).join('')
55
+}
56
+
57
+/**
58
+ * utf8 串转字节数组
59
+ */
60
+function utf8ToArray(str) {
61
+  const arr = []
62
+
63
+  for (let i = 0, len = str.length; i < len; i++) {
64
+    const point = str.codePointAt(i)
65
+
66
+    if (point <= 0x007f) {
67
+      // 单字节,标量值:00000000 00000000 0zzzzzzz
68
+      arr.push(point)
69
+    } else if (point <= 0x07ff) {
70
+      // 双字节,标量值:00000000 00000yyy yyzzzzzz
71
+      arr.push(0xc0 | (point >>> 6)) // 110yyyyy(0xc0-0xdf)
72
+      arr.push(0x80 | (point & 0x3f)) // 10zzzzzz(0x80-0xbf)
73
+    } else if (point <= 0xD7FF || (point >= 0xE000 && point <= 0xFFFF)) {
74
+      // 三字节:标量值:00000000 xxxxyyyy yyzzzzzz
75
+      arr.push(0xe0 | (point >>> 12)) // 1110xxxx(0xe0-0xef)
76
+      arr.push(0x80 | ((point >>> 6) & 0x3f)) // 10yyyyyy(0x80-0xbf)
77
+      arr.push(0x80 | (point & 0x3f)) // 10zzzzzz(0x80-0xbf)
78
+    } else if (point >= 0x010000 && point <= 0x10FFFF) {
79
+      // 四字节:标量值:000wwwxx xxxxyyyy yyzzzzzz
80
+      i++
81
+      arr.push((0xf0 | (point >>> 18) & 0x1c)) // 11110www(0xf0-0xf7)
82
+      arr.push((0x80 | ((point >>> 12) & 0x3f))) // 10xxxxxx(0x80-0xbf)
83
+      arr.push((0x80 | ((point >>> 6) & 0x3f))) // 10yyyyyy(0x80-0xbf)
84
+      arr.push((0x80 | (point & 0x3f))) // 10zzzzzz(0x80-0xbf)
85
+    } else {
86
+      // 五、六字节,暂时不支持
87
+      arr.push(point)
88
+      throw new Error('input is not supported')
89
+    }
90
+  }
91
+
92
+  return arr
93
+}
94
+
95
+/**
96
+ * 字节数组转 utf8 串
97
+ */
98
+function arrayToUtf8(arr) {
99
+  const str = []
100
+  for (let i = 0, len = arr.length; i < len; i++) {
101
+    if (arr[i] >= 0xf0 && arr[i] <= 0xf7) {
102
+      // 四字节
103
+      str.push(String.fromCodePoint(((arr[i] & 0x07) << 18) + ((arr[i + 1] & 0x3f) << 12) + ((arr[i + 2] & 0x3f) << 6) + (arr[i + 3] & 0x3f)))
104
+      i += 3
105
+    } else if (arr[i] >= 0xe0 && arr[i] <= 0xef) {
106
+      // 三字节
107
+      str.push(String.fromCodePoint(((arr[i] & 0x0f) << 12) + ((arr[i + 1] & 0x3f) << 6) + (arr[i + 2] & 0x3f)))
108
+      i += 2
109
+    } else if (arr[i] >= 0xc0 && arr[i] <= 0xdf) {
110
+      // 双字节
111
+      str.push(String.fromCodePoint(((arr[i] & 0x1f) << 6) + (arr[i + 1] & 0x3f)))
112
+      i++
113
+    } else {
114
+      // 单字节
115
+      str.push(String.fromCodePoint(arr[i]))
116
+    }
117
+  }
118
+
119
+  return str.join('')
120
+}
121
+
122
+/**
123
+ * 32 比特循环左移
124
+ */
125
+function rotl(x, y) {
126
+  return x << y | x >>> (32 - y)
127
+}
128
+
129
+/**
130
+ * 非线性变换
131
+ */
132
+function byteSub(a) {
133
+  return (Sbox[a >>> 24 & 0xFF] & 0xFF) << 24 |
134
+    (Sbox[a >>> 16 & 0xFF] & 0xFF) << 16 |
135
+    (Sbox[a >>> 8 & 0xFF] & 0xFF) << 8 |
136
+    (Sbox[a & 0xFF] & 0xFF)
137
+}
138
+
139
+/**
140
+ * 线性变换,加密/解密用
141
+ */
142
+function l1(b) {
143
+  return b ^ rotl(b, 2) ^ rotl(b, 10) ^ rotl(b, 18) ^ rotl(b, 24)
144
+}
145
+
146
+/**
147
+ * 线性变换,生成轮密钥用
148
+ */
149
+function l2(b) {
150
+  return b ^ rotl(b, 13) ^ rotl(b, 23)
151
+}
152
+
153
+/**
154
+ * 以一组 128 比特进行加密/解密操作
155
+ */
156
+function sms4Crypt(input, output, roundKey) {
157
+  const x = new Array(4)
158
+
159
+  // 字节数组转成字数组(此处 1 字 = 32 比特)
160
+  const tmp = new Array(4)
161
+  for (let i = 0; i < 4; i++) {
162
+    tmp[0] = input[4 * i] & 0xff
163
+    tmp[1] = input[4 * i + 1] & 0xff
164
+    tmp[2] = input[4 * i + 2] & 0xff
165
+    tmp[3] = input[4 * i + 3] & 0xff
166
+    x[i] = tmp[0] << 24 | tmp[1] << 16 | tmp[2] << 8 | tmp[3]
167
+  }
168
+
169
+  // x[i + 4] = x[i] ^ l1(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ roundKey[i]))
170
+  for (let r = 0, mid; r < 32; r += 4) {
171
+    mid = x[1] ^ x[2] ^ x[3] ^ roundKey[r + 0]
172
+    x[0] ^= l1(byteSub(mid)) // x[4]
173
+
174
+    mid = x[2] ^ x[3] ^ x[0] ^ roundKey[r + 1]
175
+    x[1] ^= l1(byteSub(mid)) // x[5]
176
+
177
+    mid = x[3] ^ x[0] ^ x[1] ^ roundKey[r + 2]
178
+    x[2] ^= l1(byteSub(mid)) // x[6]
179
+
180
+    mid = x[0] ^ x[1] ^ x[2] ^ roundKey[r + 3]
181
+    x[3] ^= l1(byteSub(mid)) // x[7]
182
+  }
183
+
184
+  // 反序变换
185
+  for (let j = 0; j < 16; j += 4) {
186
+    output[j] = x[3 - j / 4] >>> 24 & 0xff
187
+    output[j + 1] = x[3 - j / 4] >>> 16 & 0xff
188
+    output[j + 2] = x[3 - j / 4] >>> 8 & 0xff
189
+    output[j + 3] = x[3 - j / 4] & 0xff
190
+  }
191
+}
192
+
193
+/**
194
+ * 密钥扩展算法
195
+ */
196
+function sms4KeyExt(key, roundKey, cryptFlag) {
197
+  const x = new Array(4)
198
+
199
+  // 字节数组转成字数组(此处 1 字 = 32 比特)
200
+  const tmp = new Array(4)
201
+  for (let i = 0; i < 4; i++) {
202
+    tmp[0] = key[0 + 4 * i] & 0xff
203
+    tmp[1] = key[1 + 4 * i] & 0xff
204
+    tmp[2] = key[2 + 4 * i] & 0xff
205
+    tmp[3] = key[3 + 4 * i] & 0xff
206
+    x[i] = tmp[0] << 24 | tmp[1] << 16 | tmp[2] << 8 | tmp[3]
207
+  }
208
+
209
+  // 与系统参数做异或
210
+  x[0] ^= 0xa3b1bac6
211
+  x[1] ^= 0x56aa3350
212
+  x[2] ^= 0x677d9197
213
+  x[3] ^= 0xb27022dc
214
+
215
+  // roundKey[i] = x[i + 4] = x[i] ^ l2(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ CK[i]))
216
+  for (let r = 0, mid; r < 32; r += 4) {
217
+    mid = x[1] ^ x[2] ^ x[3] ^ CK[r + 0]
218
+    roundKey[r + 0] = x[0] ^= l2(byteSub(mid)) // x[4]
219
+
220
+    mid = x[2] ^ x[3] ^ x[0] ^ CK[r + 1]
221
+    roundKey[r + 1] = x[1] ^= l2(byteSub(mid)) // x[5]
222
+
223
+    mid = x[3] ^ x[0] ^ x[1] ^ CK[r + 2]
224
+    roundKey[r + 2] = x[2] ^= l2(byteSub(mid)) // x[6]
225
+
226
+    mid = x[0] ^ x[1] ^ x[2] ^ CK[r + 3]
227
+    roundKey[r + 3] = x[3] ^= l2(byteSub(mid)) // x[7]
228
+  }
229
+
230
+  // 解密时使用反序的轮密钥
231
+  if (cryptFlag === DECRYPT) {
232
+    for (let r = 0, mid; r < 16; r++) {
233
+      mid = roundKey[r]
234
+      roundKey[r] = roundKey[31 - r]
235
+      roundKey[31 - r] = mid
236
+    }
237
+  }
238
+}
239
+
240
+function sm4(inArray, key, cryptFlag, {
241
+  padding = 'pkcs#7', mode, iv = [], output = 'string'
242
+} = {}) {
243
+  if (mode === 'cbc') {
244
+    // CBC 模式,默认走 ECB 模式
245
+    if (typeof iv === 'string') iv = hexToArray(iv)
246
+    if (iv.length !== (128 / 8)) {
247
+      // iv 不是 128 比特
248
+      throw new Error('iv is invalid')
249
+    }
250
+  }
251
+
252
+  // 检查 key
253
+  if (typeof key === 'string') key = hexToArray(key)
254
+  if (key.length !== (128 / 8)) {
255
+    // key 不是 128 比特
256
+    throw new Error('key is invalid')
257
+  }
258
+
259
+  // 检查输入
260
+  if (typeof inArray === 'string') {
261
+    if (cryptFlag !== DECRYPT) {
262
+      // 加密,输入为 utf8 串
263
+      inArray = utf8ToArray(inArray)
264
+    } else {
265
+      // 解密,输入为 16 进制串
266
+      inArray = hexToArray(inArray)
267
+    }
268
+  } else {
269
+    inArray = [...inArray]
270
+  }
271
+
272
+  // 新增填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7
273
+  if ((padding === 'pkcs#5' || padding === 'pkcs#7') && cryptFlag !== DECRYPT) {
274
+    const paddingCount = BLOCK - inArray.length % BLOCK
275
+    for (let i = 0; i < paddingCount; i++) inArray.push(paddingCount)
276
+  }
277
+
278
+  // 生成轮密钥
279
+  const roundKey = new Array(ROUND)
280
+  sms4KeyExt(key, roundKey, cryptFlag)
281
+
282
+  const outArray = []
283
+  let lastVector = iv
284
+  let restLen = inArray.length
285
+  let point = 0
286
+  while (restLen >= BLOCK) {
287
+    const input = inArray.slice(point, point + 16)
288
+    const output = new Array(16)
289
+
290
+    if (mode === 'cbc') {
291
+      for (let i = 0; i < BLOCK; i++) {
292
+        if (cryptFlag !== DECRYPT) {
293
+          // 加密过程在组加密前进行异或
294
+          input[i] ^= lastVector[i]
295
+        }
296
+      }
297
+    }
298
+
299
+    sms4Crypt(input, output, roundKey)
300
+
301
+
302
+    for (let i = 0; i < BLOCK; i++) {
303
+      if (mode === 'cbc') {
304
+        if (cryptFlag === DECRYPT) {
305
+          // 解密过程在组解密后进行异或
306
+          output[i] ^= lastVector[i]
307
+        }
308
+      }
309
+
310
+      outArray[point + i] = output[i]
311
+    }
312
+
313
+    if (mode === 'cbc') {
314
+      if (cryptFlag !== DECRYPT) {
315
+        // 使用上一次输出作为加密向量
316
+        lastVector = output
317
+      } else {
318
+        // 使用上一次输入作为解密向量
319
+        lastVector = input
320
+      }
321
+    }
322
+
323
+    restLen -= BLOCK
324
+    point += BLOCK
325
+  }
326
+
327
+  // 去除填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7
328
+  if ((padding === 'pkcs#5' || padding === 'pkcs#7') && cryptFlag === DECRYPT) {
329
+    const len = outArray.length
330
+    const paddingCount = outArray[len - 1]
331
+    for (let i = 1; i <= paddingCount; i++) {
332
+      if (outArray[len - i] !== paddingCount) throw new Error('padding is invalid')
333
+    }
334
+    outArray.splice(len - paddingCount, paddingCount)
335
+  }
336
+
337
+  // 调整输出
338
+  if (output !== 'array') {
339
+    if (cryptFlag !== DECRYPT) {
340
+      // 加密,输出转 16 进制串
341
+      return ArrayToHex(outArray)
342
+    } else {
343
+      // 解密,输出转 utf8 串
344
+      return arrayToUtf8(outArray)
345
+    }
346
+  } else {
347
+    return outArray
348
+  }
349
+}
350
+
351
+module.exports = {
352
+  encrypt(inArray, key, options) {
353
+    return sm4(inArray, key, 1, options)
354
+  },
355
+  decrypt(inArray, key, options) {
356
+    return sm4(inArray, key, 0, options)
357
+  }
358
+}

+ 26 - 0
anyangWebAPP/node_modules/sm-crypto/webpack.config.js

@@ -0,0 +1,26 @@
1
+const path = require('path');
2
+const webpack = require('webpack');
3
+
4
+module.exports = {
5
+    entry: {
6
+        sm2: './src/sm2/index.js',
7
+        sm3: './src/sm3/index.js',
8
+        sm4: './src/sm4/index.js',
9
+    },
10
+    output: {
11
+        path: path.resolve(__dirname, 'dist'),
12
+        filename: '[name].js',
13
+        library: '[name]',
14
+        libraryTarget: 'umd',
15
+    },
16
+    module: {    
17
+        loaders: [{    
18
+            test: /\.js$/,    
19
+            exclude: /node_modules/,    
20
+            loader: 'babel-loader'    
21
+        }]    
22
+    },
23
+    plugins: [
24
+        new webpack.optimize.UglifyJsPlugin(),
25
+    ]
26
+};

+ 5 - 3
anyangWebAPP/pages/adressBook/adressBook.vue

@@ -6,6 +6,7 @@
6 6
 
7 7
 <script>
8 8
   import txl from '@/components/yt-txl/index.vue';
9
+  import { encrypt,decrypt } from "@/utils/secretKey"
9 10
   export default {
10 11
     components: {
11 12
       txl
@@ -20,8 +21,9 @@
20 21
     },
21 22
     methods: {
22 23
       evFunc(data) {
24
+		console.log(decrypt(data.mobileShow))
23 25
         uni.makePhoneCall({
24
-            phoneNumber: data.mobile //仅为示例
26
+            phoneNumber: decrypt(data.mobileShow) //仅为示例    
25 27
         });
26 28
       },
27 29
       
@@ -39,8 +41,8 @@
39 41
                 "employeeName":response.rows[i].F_Name,  // F_Department
40 42
                 "departmentName":response.rows[i].F_Department,	
41 43
                 "phone":response.rows[i].F_Telephone,
42
-                "mobile":response.rows[i].F_Mobile
43
-                
44
+                "mobile":response.rows[i].F_Mobile,
45
+                "mobileShow":response.rows[i].F_MobileShow
44 46
               })
45 47
             }
46 48
            

+ 24 - 0
anyangWebAPP/utils/secretKey.js

@@ -0,0 +1,24 @@
1
+/**
2
+ * txt:要加解密的字符串
3
+ *
4
+ * @return {string}
5
+ */
6
+const sm2 = require('sm-crypto').sm2
7
+// 加密
8
+export const encrypt = (txt) => {
9
+  const publicKey = '042DBA45E7B03394F603CADAFCDDEC854D3E01A4E9C52CD799B85B1A14BDB970137AE58BA553D79F058604DC1CD4B77DE5408BA3308E767584100C2B663510C819'
10
+  const cipherMode = 0 // 1 - C1C3C2,0 - C1C2C3,默认为1
11
+  const encryptData = sm2.doEncrypt(txt, publicKey, cipherMode) // 加密结果
12
+  return encryptData
13
+}
14
+// 解密
15
+export const decrypt = (txt) => {
16
+  const privateKey = 'BF1F907B4E0487F798DC80AFD7BC2A6201E8514233002272EA3BE2FC6F797843'
17
+  const cipherMode = 0 // 1 - C1C3C2,0 - C1C2C3,默认为1
18
+  if (!txt) {
19
+    return
20
+  }
21
+  txt = txt.substr(2)
22
+  const decryptData = sm2.doDecrypt(txt, privateKey, cipherMode) // 解密结果
23
+  return decryptData
24
+}