Kaynağa Gözat

民权官网,微信

miaofuhao 6 yıl önce
ebeveyn
işleme
d1ec386ba3

+ 1 - 1
WebChartNEW/fuWuZhiShi.html

@@ -11,7 +11,7 @@
11 11
 <body>
12 12
 <div class="navcon ">
13 13
 	<div class="navbox clearfix">
14
-	<p><img src="img/sqLogo.png" class="logo" alt="" />民权12345数据展示</p>
14
+	<p><img src="img/sqLogo.png" class="logo" alt="" />柘城12345数据展示</p>
15 15
     <ul class="navl clearfix">
16 16
         <li><a href="index.html">来源渠道情况</a></li>
17 17
         <li><a href="jieDanBuMen.html">接单部门情况</a></li>

+ 1 - 1
WebChartNEW/huaWuLiang.html

@@ -140,7 +140,7 @@
140 140
 		<div class="biao-title">
141 141
 			
142 142
 			<div class="biao-title-l">
143
-				坐席闲忙比例
143
+				坐席话务量
144 144
 			</div>
145 145
 			<div class="biao-title-r">
146 146
 				<input type="text" id="time3" />至<input type="text" id="time4" />

+ 0 - 4
WebChartNEW/index.html

@@ -26,7 +26,6 @@
26 26
     		border: 1px solid #151924;
27 27
     		color: #aba5a5;
28 28
     	}
29
-    	
30 29
     	.part2{
31 30
     		width: 100%;
32 31
     		border: 1px solid #151924;
@@ -53,11 +52,8 @@
53 52
 </div>
54 53
 <div class="qunzhong ">
55 54
 	<div class="clearfix">
56
-		
57
-	
58 55
 	<div class="part1">
59 56
 		<div class="biao-title clearfix">
60
-			
61 57
 			<div class="biao-title-l">
62 58
 				受理群众区域统计
63 59
 			</div>

+ 17 - 13
WebChartNEW/js/huawu.js

@@ -255,14 +255,14 @@ $('.part2Btn').click(function() {
255 255
 				var res = datas[0].name + '<br/>',
256 256
 					val;
257 257
 				for(var i = 0, length = datas.length; i < length; i++) {
258
-					val = (datas[i].value) + '%';
258
+					val = (datas[i].value);
259 259
 					res += datas[i].seriesName + ':' + val + '<br/>';
260 260
 				}
261 261
 				return res;
262 262
 			}
263 263
 		},
264 264
 		legend: {
265
-			data: ["空闲", "通话", "置忙"],
265
+			data: ["呼入量", "呼入接通量", "呼出", "呼出接通量"],
266 266
 			textStyle: {
267 267
 				color: '#fff'
268 268
 			},
@@ -278,7 +278,7 @@ $('.part2Btn').click(function() {
278 278
 			}
279 279
 		},
280 280
 		yAxis: {
281
-			name: '比率',
281
+			name: '数量',
282 282
 			splitLine: {
283 283
 				show: false
284 284
 			},
@@ -296,8 +296,8 @@ $('.part2Btn').click(function() {
296 296
 			shade: [0.5, '#030303'] //0.1透明度的白色背景
297 297
 		});
298 298
     	$.ajax({
299
-			type: "get",
300
-			url: huayi.config.callcenter_url + "info/GetUserStateCount24ByDate",
299
+			type: "get",			
300
+			url: huayi.config.callcenter_url + "info/GetAgentTelCount",
301 301
 			async: true,
302 302
 			dataType: "json",
303 303
 			data: {
@@ -308,25 +308,29 @@ $('.part2Btn').click(function() {
308 308
 				if(data.state.toLowerCase() == "success") {
309 309
 					layer.close(index);
310 310
 					var con = data.data;
311
+					//alert(JSON.stringify(con));
311 312
 //					var part3 = result.data.b;
312 313
 					main.setOption({
313 314
 						xAxis: {
314
-							data: con.hours
315
+							data: con.users
315 316
 						},
316 317
 						series: [{
317
-							name: "空闲",
318
+							name: "呼入量",
318 319
 							type: "bar",
319
-							data: con.kxpercents
320
+							data: con.inconnectcount
320 321
 						}, {
321
-							name: "通话",
322
+							name: "呼入接通量",
322 323
 							type: "bar",
323
-							data: con.thpercents
324
+							data: con.incount
324 325
 						}, {
325
-							name: "置忙",
326
+							name: "呼出",
326 327
 							type: "bar",
327
-							data: con.zmpercents
328
+							data: con.outconnectcount
329
+						}, {
330
+							name: "呼出接通量",
331
+							type: "bar",
332
+							data: con.outcount
328 333
 						}]
329
-
330 334
 					})
331 335
 
332 336
 				}

+ 3 - 3
WebChartNEW/js/zhongxin.js

@@ -85,7 +85,7 @@ $(document).ready(function(){
85 85
 				var html="";
86 86
 				
87 87
 				var dindex=Math.floor(Math.random()*10+1);
88
-				if(n.AreaName.indexOf('民权')!=-1){
88
+				if(n.AreaName.indexOf('XX县')!=-1){
89 89
 		html = '<li>' +
90 90
 				'<i class="xe-'+ color[dindex] +'"></i>'+
91 91
 //					'<span>'+n.AreaName+'</span>'+
@@ -116,7 +116,7 @@ $(document).ready(function(){
116 116
 					'</li>';
117 117
 					$('.gdmap-r ul').append(html)
118 118
 					
119
-				}if(n.AreaName.indexOf('民权')!=-1){
119
+				}if(n.AreaName.indexOf('XX县')!=-1){
120 120
 							html = '<li>' +
121 121
 				'<i class="mq"></i>'+
122 122
 					'<span>'+n.AreaName+':</span>'+
@@ -130,7 +130,7 @@ $(document).ready(function(){
130 130
 					'</div>' +
131 131
 					'</li>';
132 132
 					$('.gdmap-r ul').append(html)
133
-				}if(n.AreaName.indexOf('民权')!=-1){
133
+				}if(n.AreaName.indexOf('XX县')!=-1){
134 134
 								html = '<li>' +
135 135
 				'<i class="sx"></i>'+
136 136
 					'<span>'+n.AreaName+':</span>'+

+ 1 - 0
WebChat/Script/Common/huayi.config.js

@@ -3,4 +3,5 @@
3 3
 }
4 4
 huayi.config = {
5 5
     callcenter_url: "http://192.168.4.18:4030/"//生产环境
6
+    //callcenter_url: "http://12345.shangqiu.gov.cn:8819/"//生产环境
6 7
 };

+ 80 - 0
WebChat/css/feedback-page.css

@@ -0,0 +1,80 @@
1
+.feedback body {
2
+	background-color: #EFEFF4;
3
+}
4
+.feedback input,
5
+.feedback textarea {
6
+	border: none !important;
7
+}
8
+.feedback textarea {
9
+	height: 100px;
10
+	margin-bottom: 0 !important;
11
+	padding-bottom: 0 !important;
12
+}
13
+.feedback .row {
14
+	width: 100%;
15
+	background-color: #fff;
16
+}
17
+.feedback p {
18
+	padding: 10px 15px 0;
19
+}
20
+.feedback button#submit { 
21
+	width: 90%;
22
+	height: 46px;
23
+	left: 50%;
24
+	-webkit-transform: translate(-50%);
25
+}
26
+/*.feedback .hidden {
27
+	display: none;
28
+}*/
29
+.feedback .image-list {
30
+	width: 100%;
31
+	/*height: 90px;*/
32
+	background-size: cover;
33
+	padding: 10px 10px;
34
+	overflow: hidden;
35
+}
36
+.feedback .image-item {
37
+	width: 70px;
38
+	height: 70px;
39
+	/*background-image: url(../img/iconfont-tianjia.png);*/
40
+	background: #000000;
41
+	background-size: 100% 100%;
42
+	display: inline-block;
43
+	position: relative;
44
+	border-radius: 5px;
45
+/*	margin-right: 10px;*/
46
+	border: solid 1px #e8e8e8;
47
+}
48
+.feedback .image-item input[type="file"] {
49
+	position: absolute;
50
+	left: 0px;
51
+	top: 0px;
52
+	width: 100%;
53
+	height: 100%;
54
+	opacity: 0;
55
+	cursor: pointer;
56
+	z-index: 0;
57
+}
58
+.feedback .image-item.space {
59
+	border: none;
60
+}
61
+.feedback .image-item .image-close {
62
+	position: absolute;
63
+	display: inline-block;
64
+	right: -6px;
65
+	top: -6px;
66
+	width: 20px;
67
+	height: 20px;
68
+	text-align: center;
69
+	line-height: 20px;
70
+	border-radius: 12px;
71
+	background-color: #FF5053;
72
+	color: #f3f3f3;
73
+	border: solid 1px #FF5053;
74
+	font-size: 9px;
75
+	font-weight: 200;
76
+	z-index: 1;
77
+}
78
+.feedback .image-item.space .image-close {
79
+	display: none;
80
+}

+ 109 - 0
WebChat/css/webuploader.css

@@ -0,0 +1,109 @@
1
+.webuploader-container {
2
+	position: relative;
3
+}
4
+
5
+.webuploader-element-invisible {
6
+	position: absolute !important;
7
+	clip: rect(1px 1px 1px 1px);
8
+	/* IE6, IE7 */
9
+	clip: rect(1px, 1px, 1px, 1px);
10
+}
11
+
12
+.webuploader-pick {
13
+	position: relative;
14
+	display: inline-block;
15
+	cursor: pointer;
16
+	padding: 10px 15px;
17
+	color: #fff;
18
+	text-align: center;
19
+	border-radius: 3px;
20
+	overflow: hidden;
21
+}
22
+
23
+.webuploader-pick-disable {
24
+	opacity: 0.6;
25
+	pointer-events: none;
26
+}
27
+
28
+#filePicker {
29
+	width: 75px;
30
+	height: 75px;
31
+	background-image: url(../images/iconfont-tianjia.png);
32
+	background-size: 100% 100%;
33
+	display: inline-block;
34
+	position: relative;
35
+	border-radius: 5px;
36
+	margin: 0 10px 10px;
37
+}
38
+
39
+
40
+/*样式*/
41
+
42
+.thumbnail {
43
+	width: 75px;
44
+	height: 75px;
45
+	background-color: #fff;
46
+	border: 1px solid #ddd;
47
+	border-radius: 4px;
48
+}
49
+
50
+.file-item {
51
+	float: left;
52
+	position: relative;
53
+	margin: 0 10px 10px;
54
+	padding: 4px;
55
+	text-align: center;
56
+}
57
+
58
+.thumbnail img {
59
+	width: 100%;
60
+	height: 100%;
61
+}
62
+
63
+.file-item .error {
64
+	position: absolute;
65
+	top: 4px;
66
+	left: 4px;
67
+	right: 4px;
68
+	background: red;
69
+	color: white;
70
+	text-align: center;
71
+	height: 20px;
72
+	font-size: 14px;
73
+	line-height: 23px;
74
+}
75
+
76
+.file-item .info {
77
+	position: absolute;
78
+	left: 4px;
79
+	bottom: 4px;
80
+	right: 4px;
81
+	height: 20px;
82
+	line-height: 20px;
83
+	text-indent: 5px;
84
+	background: rgba(0, 0, 0, 0.6);
85
+	color: white;
86
+	overflow: hidden;
87
+	white-space: nowrap;
88
+	text-overflow: ellipsis;
89
+	font-size: 12px;
90
+	z-index: 10;
91
+}
92
+
93
+.image-close {
94
+	position: absolute;
95
+	display: inline-block;
96
+	right: -6px;
97
+	top: -6px;
98
+	width: 20px;
99
+	height: 20px;
100
+	text-align: center;
101
+	line-height: 20px;
102
+	border-radius: 12px;
103
+	background-color: #FF5053;
104
+	color: #f3f3f3;
105
+	border: solid 1px #FF5053;
106
+	font-size: 9px;
107
+	font-weight: 200;
108
+	z-index: 1;
109
+}

Dosya farkı çok büyük olduğundan ihmal edildi
+ 2442 - 0
WebChat/css/weui.css


+ 725 - 0
WebChat/html/myTouSu-1.html

@@ -0,0 +1,725 @@
1
+<!doctype html>
2
+<html class="feedback">
3
+
4
+	<head>
5
+		<meta charset="UTF-8">
6
+		<title></title>
7
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
8
+		<meta name="apple-mobile-web-app-capable" content="yes">
9
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
10
+		<link rel="stylesheet" href="../layui/css/layui.mobile.css" />
11
+		<link href="../css/mui.min.css" rel="stylesheet" />
12
+		<link rel="stylesheet" href="../css/app.css" />
13
+		<link href="../css/mui.picker.css" rel="stylesheet" />
14
+		<link href="../css/mui.poppicker.css" rel="stylesheet" />
15
+		<link href="../css/feedback-page.css" rel="stylesheet" />
16
+		<link rel="stylesheet" href="../css/iconfont.css" />
17
+		<link rel="stylesheet" href="../css/inits.css" />
18
+		<link rel="stylesheet" href="../css/webuploader.css" />
19
+		<style>
20
+			.mui-bar-popover {
21
+				width: 30%;
22
+			}
23
+			.mui-popover.mui-bar-popover .mui-table-view {
24
+				width: 100%;
25
+			}
26
+			.mui-table-view .mui-table-view-cell>a:not(.mui-btn) {
27
+				text-align: center;
28
+			}
29
+			
30
+			.mui-table-view-cell {
31
+				padding: 1px 15px !important;
32
+			}
33
+			
34
+			.mui-table-view {
35
+				margin-top: 0 !important;
36
+			}
37
+			
38
+			.san {
39
+				font-size: 14px;
40
+				margin-right: 5px
41
+			}
42
+			
43
+			.nav_a {
44
+				border-right: 1px solid #ccc;
45
+			}
46
+			
47
+			.radio_box {
48
+				display: inline-block;
49
+			}
50
+			
51
+			.mui-radio input[type=radio]:before {
52
+				font-size: 20px;
53
+				vertical-align: middle;
54
+			}
55
+			
56
+			.mui-radio.mui-left input[type=radio] {
57
+				line-height: 24px !important;
58
+			}
59
+			
60
+			.mui-radio.mui-left label {
61
+				padding-right: 1px !important;
62
+				padding-left: 51px !important;
63
+			}
64
+			
65
+			.ztext {
66
+				width: 100%;
67
+				margin: 0;
68
+				border: 0;
69
+			}
70
+			
71
+			.action {
72
+				padding: 11px 15px;
73
+			}
74
+			
75
+			.type_down {
76
+				float: right !important;
77
+				display: inline-block !important;
78
+				vertical-align: middle !important;
79
+				line-height: 42px;
80
+			}
81
+			
82
+			.type_con {
83
+				width: 55% !important;
84
+				float: left !important;
85
+				vertical-align: middle !important;
86
+				display: inline-block !important;
87
+				padding: 10px 0 !important;
88
+			}
89
+			
90
+			.label {
91
+				width: 30% !important;
92
+				padding: 11px 0px !important;
93
+			}
94
+			
95
+			.get_yzm {
96
+				padding: 5px !important;
97
+				width: auto !important;
98
+			}
99
+			
100
+			.yzm_con {
101
+				float: left !important;
102
+				width: 40% !important;
103
+			}
104
+			.hy_loading {
105
+				position: fixed;
106
+				left: 0;
107
+				top: 0;
108
+				width: 100%;
109
+				height: 100%;
110
+				background-color: rgba(0, 0, 0, .3);
111
+				z-index: 9998;
112
+				transition: all .2s;
113
+			}
114
+			
115
+			.hy_loading .loading_img {
116
+				position: absolute;
117
+				left: 0;
118
+				top: 0;
119
+				bottom: 0;
120
+				right: 0;
121
+				overflow: hidden;
122
+				margin: auto;
123
+				width: 60px;
124
+				height: 24px;
125
+				z-index: 9999;
126
+			}
127
+			
128
+			.hy_loading .load_percentage {
129
+				position: absolute;
130
+				left: 0;
131
+				top: 0;
132
+				bottom: 0;
133
+				right: 0;
134
+				overflow: hidden;
135
+				margin: auto;
136
+				width: 120px;
137
+				height: 120px;
138
+				z-index: 9999;
139
+			}
140
+		</style>
141
+	</head>
142
+
143
+	<body>
144
+		<!--<header id="header" class="mui-bar mui-bar-nav new_head">
145
+        <h1 class="mui-title new_head_title">我要投诉</h1>
146
+        <button class="new_head_left mui-action-back mui-btn mui-btn-blue mui-btn-link mui-btn-nav mui-pull-left">
147
+            <span class="mui-icon mui-icon-left-nav"></span>返回
148
+        </button>
149
+        <button class="new_head_right mui-btn mui-btn-blue mui-btn-link mui-pull-right"><span class="iconfont icon-unie644" style="font-size: 25px;"></span></button>
150
+    </header>-->
151
+
152
+		<div class="mui-content">
153
+			<ul class="mui-table-view">
154
+				<li class="mui-table-view-cell" id="showUserPicker">
155
+					<div class="mui-input-row">
156
+						<label class="label">诉求类型:</label>
157
+						<input type="text" id='userResult' class="ui-alert" data-index="" readonly="readonly" />
158
+						<!--<a href=""><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>-->
159
+					</div>
160
+				</li>
161
+				<li class="mui-table-view-cell" id="showZhuTiPicker">
162
+					<div class="mui-input-row">
163
+						<label class="label">主题词:</label>
164
+						<input type="text" id='zhuTiResult' class="ui-alert type_con" data-index="" readonly="readonly" />
165
+						<a href="javascript:void(0)"><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>
166
+					</div>
167
+				</li>
168
+
169
+				<li class="mui-table-view-cell baoMi">
170
+					<div class="mui-input-row">
171
+						<label class="label">保密要求:</label>
172
+						<div class="mui-input-row mui-radio mui-left radio_box">
173
+							<label>保密</label>
174
+							<input type="radio" type="radio" name="secret" value="1" />
175
+						</div>
176
+						<div class="mui-input-row mui-radio mui-left radio_box">
177
+							<label>公开</label>
178
+							<input type="radio" type="radio" name="secret" checked="checked" value="0" />
179
+						</div>
180
+					</div>
181
+				</li>
182
+				<li class="mui-table-view-cell">
183
+					<div class="mui-input-row">
184
+						<label class="label">诉求主题:</label>
185
+						<input type="text" id="title" placeholder="请填写您的诉求主题">
186
+					</div>
187
+				</li>
188
+				<li class="mui-table-view-cell">
189
+					<div class="mui-input-row">
190
+						<textarea class="ztext content" name="" id="textarea" rows="3" cols="" placeholder="请详细描述您的问题..."></textarea>
191
+					</div>
192
+				</li>
193
+				<li class="mui-table-view-cell">
194
+					<div class="mui-input-row">
195
+						<label class="label">联系人:</label>
196
+						<input type="text" id="name" placeholder="请填写您的称呼">
197
+					</div>
198
+				</li>
199
+				<li class="mui-table-view-cell">
200
+					<div class="mui-input-row">
201
+						<label class="label">联系电话:</label>
202
+						<input type="text" id="phone" placeholder="请填写联系电话">
203
+					</div>
204
+				</li>
205
+
206
+				<!--<li class="mui-table-view-cell">
207
+                    <div class="mui-input-row">
208
+                    <label>验证码:</label>
209
+                    <input type="text" placeholder="请输入短信验证码" class="yzm_con">
210
+                    <div class="mui-btn mui-btn-primary get_yzm">获取验证码</div>
211
+                </div>
212
+             </li>-->
213
+				<li class="mui-table-view-cell" id='showCityPicker3'>
214
+					<div class="mui-input-row">
215
+						<label class="label adress"></label>
216
+						<input type="text" id='cityResult3' data-index="" class="ui-alert type_con" placeholder="请选择市县" readonly="readonly" />
217
+						<a href="javascript:void(0)"><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>
218
+					</div>
219
+				</li>
220
+				<li class="mui-table-view-cell" id='showtown'>
221
+					<div class="mui-input-row">
222
+						<label class="label">街道:</label>
223
+						<input type="text" id='town' data-index="" class="ui-alert type_con" placeholder="请选择街道" readonly="readonly" />
224
+						<a href="javascript:void(0)"><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>
225
+					</div>
226
+				</li>
227
+				<li class="mui-table-view-cell" id='showvillage'>
228
+					<div class="mui-input-row">
229
+						<label class="label">村庄:</label>
230
+						<input type="text" id='village' data-index="" class="ui-alert type_con" placeholder="请选择村庄" readonly="readonly" />
231
+						<a href="javascript:void(0)"><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>
232
+					</div>
233
+				</li>
234
+				<li class="mui-table-view-cell">
235
+					<div class="mui-input-row">
236
+						<label class="label">详细地址:</label>
237
+						<input type="text" id="detail_address" class="ui-alert" placeholder="请填写详细地址" />
238
+					</div>
239
+				</li>
240
+
241
+			</ul>
242
+
243
+			<div class="mui-card">
244
+				<div class="mui-card-header">
245
+					附件
246
+					<span class="file_tips"><!--(非图片不能预览)--></span>
247
+					<span id="fileNum">0/6</span>
248
+				</div>
249
+				<div class="row image-list" id="image-list">
250
+					<div id="filePicker"></div>
251
+				</div>
252
+			</div>
253
+
254
+			<p class="action">
255
+				<i class="iconfont icon-gantanhao" style="margin-right: 5px;font-size: 20px;vertical-align: middle;"></i>
256
+				<span style="color: #f81737;">如事件内容地址填写不详细,将影响到你事件办理,请填写详细</span>
257
+			</p>
258
+			<!--<button type="button" class="mui-btn mui-btn-primary mui-btn-block block_button">提交</button>-->
259
+			<button type="button" data-loading-text="提交中" class="mui-btn mui-btn-primary mui-btn-block block_button submit">提交</button>
260
+		</div>
261
+		<script src="../js/jquery.min.js"></script>
262
+		<script src="../layui/layui.js"></script>
263
+		<script src="../js/radialIndicator.min.js"></script>
264
+		<script src="../js/mui.min.js"></script>
265
+		<script src="../js/mui.zoom.js"></script>
266
+		<script src="../js/mui.previewimage.js"></script>
267
+		<script src="../js/mui.picker.js"></script>
268
+		<script src="../js/mui.poppicker.js"></script>
269
+		<script src="../js/zepto.js"></script>
270
+		<script src="../js/webuploader.min.js"></script>
271
+		<script src="../Script/Common/huayi.config.js"></script>
272
+		<script src="../Script/Common/huayi.http.js"></script>
273
+		<script type="text/javascript">
274
+			//      $(document).ready(function () {
275
+			var townPicker, villagePicker, areaList = [],
276
+				townList = [],
277
+				villageList = [],
278
+				keyList = [];
279
+			//var openid = helper.cookies.get("openid");
280
+			var openid = 'oXF5e1mWpX5DajW5_yjNLPKb8ThE'; //微信openid 测试用
281
+			mui.previewImage();
282
+			var EnclosureList = []; //保存附件的数组
283
+			var uploader; //上传实例
284
+			Zepto(function($) {
285
+				uploaderImages(); //上传附件
286
+				$('#submit').on('tap', submitHandle);
287
+			});
288
+			if(!openid) {
289
+				window.location.replace("../html/error.html");
290
+			}
291
+			var menuCode = helper.request.queryString("menuCode");
292
+			if(menuCode == 'WYBY') {
293
+				$('.adress').html('市县:');
294
+				$('.baoMi').hide();
295
+			} else {
296
+				$('.adress').html('事发市县:');
297
+				$('.baoMi').show();
298
+			}
299
+			switch(menuCode) {
300
+				case "WYZX":
301
+					$("title").html("我要咨询");
302
+					$('#userResult').attr('data-index', '9');
303
+					$('#userResult').val('咨询');
304
+					break;
305
+				case "WYQZ":
306
+					$("title").html("我要求助");
307
+					$('#userResult').attr('data-index', '10');
308
+					$('#userResult').val('求助');
309
+					break;
310
+				case "WYTS":
311
+					$("title").html("我要投诉");
312
+					$('#userResult').attr('data-index', '11');
313
+					$('#userResult').val('投诉');
314
+					break;
315
+				case "WYJY":
316
+					$("title").html("我要建议");
317
+					$('#userResult').attr('data-index', '12');
318
+					$('#userResult').val('建议 ');
319
+					break;
320
+				case "WYBY":
321
+					$("title").html("我要表扬");
322
+					$('#userResult').attr('data-index', '13');
323
+					$('#userResult').val('表扬');
324
+					break;
325
+			}
326
+			//提交按钮
327
+			function submitHandle(){
328
+				alert(EnclosureList);
329
+				if(!openid) {
330
+					mui.alert('非法访问!');
331
+					return;
332
+				}
333
+				if(!$('#zhuTiResult').val()) {
334
+					mui.alert('请选择主题词!');
335
+					return;
336
+				}
337
+				if(!$('#title').val()) {
338
+					mui.alert('请输入诉求主题!');
339
+					return;
340
+				}
341
+				if(!$('#textarea').val()) {
342
+					mui.alert('请输入详细内容!');
343
+					return;
344
+				}
345
+				if(!$('#name').val()) {
346
+					mui.alert('请输入联系人姓名!');
347
+					return;
348
+				}
349
+				if(!$('#phone').val()) {
350
+					mui.alert('请输入联系电话!');
351
+					return;
352
+				} else {
353
+					var regTel = /^(([0\+]\d{2,3}-)?((0\d{2,3}))?(-)?)?(\d{7,8})(-(\d{3,}))?$/;
354
+					var regMobile = /^([+-]?)\d*\.?\d+$/;
355
+					if(!regMobile.test($.trim($("#phone").val()))) {
356
+						mui.alert('请输入有效的联系电话!');
357
+						return;
358
+					}
359
+				}
360
+
361
+				if($('#cityResult3').val() == '') {
362
+					mui.alert('请选择' + $('.adress').html() + '!');
363
+					return;
364
+				}
365
+				if(!$.trim($('#detail_address').val())) {
366
+					mui.alert('请填写详细地址');
367
+					return;
368
+				}
369
+				$.ajax({
370
+					type: "post",
371
+					url: huayi.config.callcenter_url + 'WxLogin/AddWorkOrder',
372
+					async: true,
373
+					data: {
374
+						openid: openid,
375
+						cusname: $('#name').val(), //投诉人姓名
376
+						cusphone: $('#phone').val(), //投诉人电话
377
+						conphone: $('#phone').val(), //客户电话
378
+						title: $('#title').val(), //投诉主题
379
+						content: $('.content').val(), //投诉内容
380
+						sourcearea: $('#cityResult3').attr('data-index'), //事发地域id
381
+						sourceaddress: $('#town').val() + " " + $('#village').val() + " " + $('#detail_address').val(), //详细地址
382
+						keys: $('#zhuTiResult').attr('data-index'), //关键词
383
+						type: $('#userResult').attr('data-index'), //诉求类型
384
+						files: EnclosureList && EnclosureList.join(','),
385
+						isprotect: $('input[name="secret"]:checked').val() //(0普通1保密)
386
+					},
387
+					success: function(data) {
388
+						var str = JSON.parse(data);
389
+						if(str.state == "success") {
390
+							mui.toast('投诉成功!');
391
+							$("#name").val('');
392
+							$("#phone").val('');
393
+							$("#title").val('');
394
+							$(".content").val('');
395
+							$("#cityResult3").val('');
396
+							$("#zhuTiResult").val('');
397
+							//		  			$("#userResult").val('');
398
+							$('#detail_address').val('');
399
+							$('input[name="secret"][value="0"]').prop("checked", "checked");
400
+							window.location.reload();
401
+						}
402
+					}
403
+				});
404
+			}
405
+			//上传附件
406
+			function uploaderImages() {
407
+				var limitNum = 6; //限制数量
408
+				// 优化retina, 在retina下这个值是2
409
+				var ratio = window.devicePixelRatio || 1;
410
+				// 缩略图大小
411
+				var thumbnailWidth = 50 * ratio;
412
+				var thumbnailHeight = 50 * ratio;
413
+				var imgBase64='';
414
+				if(uploader) {
415
+					uploader.destroy();
416
+				}
417
+				uploader = WebUploader.create({
418
+					auto: true, // 选完文件后,是否自动上传 
419
+					swf: '../js/Uploader.swf', // swf文件路径 
420
+					//http://117.160.143.195:4669/WxLogin/UpLoadProcess
421
+					server: huayi.config.callcenter_url + "Web/Upload64", // 文件接收服务端 
422
+					pick: '#filePicker', // 选择文件的按钮。可选 
423
+					formData: {},
424
+					// 只允许选择图片文件。 
425
+					accept: {
426
+						//title: 'Images',
427
+						//extensions: 'gif,jpg,jpeg,bmp,png',
428
+						//mimeTypes: 'image/*'
429
+					},
430
+					compress: false, //webuploader默认压缩图片,设置compress:false,可以按照原始比例上传图片  
431
+					//fileVal: "upFile",//设置文件上传域的name。  
432
+					threads: limitNum, //上传并发数。允许同时最大上传进程数,为了保证文件上传顺序  
433
+					fileNumLimit: limitNum,
434
+					fileSizeLimit: 120 * 1024 * 1024, // 120 M
435
+					fileSingleSizeLimit: 20 * 1024 * 1024 // 20 M
436
+				});
437
+				uploader.on('uploadBeforeSend', function(object, data, headers) {
438
+			        alert("2");
439
+			        data = $.fn.extend(data, {
440
+					        "dataurl": dataUrl,
441
+					        "filename": data.name
442
+					});
443
+					delete data.id;
444
+					delete data.lastModifiedDate;
445
+					delete data.name;
446
+					delete data.size;
447
+					delete data.type;
448
+					delete data.type;
449
+					console.log(data);
450
+			    });
451
+			    uploader.on('uploadAccept ', function(object, ret) {
452
+			        alert(ret.message);
453
+			        console.log(ret.message);
454
+			    });
455
+				uploader.on('fileQueued', function(file) {
456
+					alert("1");
457
+					var $list = $("#image-list"),
458
+						$li = $(
459
+							'<div id="' + file.id + '" class="file-item thumbnail">' +
460
+							'<div class="image-close">X</div>' +
461
+							'<img>' +
462
+							'<div class="info">' + file.name + '</div>' +
463
+							'</div>'
464
+						),
465
+						$img = $li.find('img');
466
+
467
+					$list.prepend($li);
468
+
469
+					// 创建缩略图 
470
+					uploader.makeThumb(file, function(error, src) {
471
+						dataUrl=src;
472
+						if(error) {
473
+							$img.replaceWith('<span class="noThumb mui-icon mui-icon-paperclip"></span>');
474
+							return;
475
+						}
476
+						$img.attr('src', src);
477
+						$img.attr('data-preview-src', '');
478
+						$img.attr('data-preview-group', "1");
479
+					}, thumbnailWidth, thumbnailHeight);
480
+
481
+					//绑定删除
482
+					$('#' + file.id).on('tap', '.image-close', function() {
483
+						uploader.removeFile(file);
484
+						var $fileLi = $('#' + file.id);
485
+						$fileLi.off().find('.image-close').off().end().remove();
486
+						var itemFileImgId = $fileLi.attr('data-imgid');
487
+						EnclosureList.forEach(function(v, i) {
488
+							if(v == itemFileImgId) {
489
+								EnclosureList.splice(i, 1);
490
+							}
491
+						});
492
+						$('#fileNum').text(EnclosureList.length + '/' + limitNum);
493
+					});
494
+				});
495
+
496
+				// 文件上传过程中创建进度条实时显示。 
497
+				uploader.on('uploadProgress', function(file, percentage) {
498
+					alert("3")
499
+//					var $li = $('#' + file.id),
500
+//						$percent = $li.find('.progress span');
501
+//					// 避免重复创建 
502
+//					if(!$percent.length) {
503
+//						$percent = $('<div class="progress" style="">' +
504
+//								'<span class="text">0%</span>' +
505
+//								'<span class="percentage"></span>' +
506
+//								'</div>')
507
+//							.appendTo($li)
508
+//							.find('span');
509
+//					}
510
+//
511
+//					$percent.eq(0).text(Math.round(percentage * 100) + '%');
512
+//					$percent.eq(1).css('width', Math.round(percentage * 100) + '%');
513
+//					$('.hy_loading').remove();
514
+//					$('body').prepend('<div class="hy_loading" id="hy_loading">' +
515
+//						'<div class="load_percentage" id="indicatorContainer"></div></div>');
516
+//					$('#indicatorContainer').radialIndicator({
517
+//						barColor: '#007aff',
518
+//						barWidth: 10,
519
+//						initValue: Math.round(percentage * 100),
520
+//						roundCorner: true,
521
+//						percentage: true
522
+//					});
523
+
524
+				});
525
+
526
+				// 文件上传成功,给item添加成功class, 用样式标记上传成功。 
527
+				uploader.on('uploadSuccess', function(file, res) {
528
+					alert("4")
529
+					EnclosureList.push(res.data.F_FileId);
530
+					$('#' + file.id).attr('data-imgid', res.data.F_FileId);
531
+					$('#' + file.id).find('img').attr('src', huayi.config.callcenter_url + res.data.F_FileUrl);
532
+					$('#fileNum').text(EnclosureList.length + '/' + limitNum);
533
+					$('#' + file.id).addClass('upload-state-done');
534
+					$('.hy_loading').remove();
535
+				});
536
+				// 文件上传失败,显示上传出错。 
537
+				uploader.on('uploadError', function(file) {
538
+					var $li = $('#' + file.id),
539
+						$error = $li.find('div.error');
540
+					// 避免重复创建 
541
+					if(!$error.length) {
542
+						$error = $('<div class="error"></div>').appendTo($li);
543
+					}
544
+					$('.hy_loading').remove();
545
+					$error.text('上传失败');
546
+				});
547
+				// 完成上传完了,成功或者失败,先删除进度条。 
548
+				uploader.on('uploadComplete', function(file) {
549
+					$('#' + file.id).find('.progress').remove();
550
+					$('.hy_loading').remove();
551
+				});
552
+
553
+				uploader.onError = function(code) {
554
+					//console.log('Error:' + code);
555
+					switch(code) {
556
+						case "Q_EXCEED_NUM_LIMIT":
557
+							mui.toast('只能上传六个文件。');
558
+							break;
559
+						case "Q_TYPE_DENIED":
560
+							mui.toast('图片类型不正确。');
561
+							break;
562
+						case "F_DUPLICATE":
563
+							mui.toast('该文件已上传,请选择其它文件。');
564
+							break;
565
+						case "F_EXCEED_SIZE":
566
+							mui.toast('单文件大小不能超过20M。');
567
+							break;
568
+						case "Q_EXCEED_SIZE_LIMIT":
569
+							mui.toast('总文件大小不能超过120M。');
570
+							break;
571
+						default:
572
+							break;
573
+					}
574
+				};
575
+			}
576
+//			if(openid) {
577
+//				//事发地域
578
+//				getArea(1, 0);
579
+//				//主题词
580
+//				$.ajax({
581
+//					type: "get",
582
+//					url: huayi.config.callcenter_url + 'WxLogin/GetKeyList',
583
+//					async: false,
584
+//					data: {
585
+//						openid: openid
586
+//					},
587
+//					dataType: 'json',
588
+//					success: function(data) {
589
+//						var key_data = data.data;
590
+//						$(key_data).each(function(i, n) {
591
+//							var obj = {};
592
+//							obj.value = n.F_ValueId;
593
+//							obj.text = n.F_Value;
594
+//							keyList.push(obj)
595
+//						})
596
+//					}
597
+//				});
598
+//			}
599
+			
600
+
601
+//			function getArea(arrType, ids) {
602
+//				townList = [];
603
+//				villageList = [];
604
+//				$.ajax({
605
+//					type: "get",
606
+//					url: huayi.config.callcenter_url + 'Web/GetWebAreaListById',
607
+//					async: false,
608
+//					data: {
609
+//						openid: openid,
610
+//						id: ids
611
+//					},
612
+//					dataType: 'json',
613
+//					success: function(data) {
614
+//						var area_data = data.data;
615
+//						$(area_data).each(function(i, n) {
616
+//							var obj = {};
617
+//							obj.value = n.F_AreaId;
618
+//							obj.text = n.F_AreaName;
619
+//							if(arrType == 1) {
620
+//								areaList.push(obj)
621
+//							} else if(arrType == 2) {
622
+//								
623
+//								townList.push(obj)
624
+//								townPicker.setData(townList);
625
+//							} else {
626
+//								villageList.push(obj)
627
+//								villagePicker.setData(villageList);
628
+//							}
629
+//						})
630
+//					}
631
+//				});
632
+//			}
633
+			(function($, doc) {
634
+				$.init();
635
+				$.ready(function() {
636
+					//主题词
637
+					var zhuTiPicker = new $.PopPicker();
638
+					zhuTiPicker.setData(keyList);
639
+					var showZhuTiPickerButton = doc.getElementById('showZhuTiPicker');
640
+					var zhuTiResult = doc.getElementById('zhuTiResult');
641
+					showZhuTiPickerButton.addEventListener('tap', function(event) {
642
+						if(keyList.length > 0) {
643
+							zhuTiPicker.show(function(items) {
644
+								zhuTiResult.value = items[0].text;
645
+								zhuTiResult.setAttribute("data-index", items[0].value);
646
+								//返回 false 可以阻止选择框的关闭
647
+								//return false;
648
+							});
649
+						}
650
+					}, false);
651
+					//事件地址
652
+					var cityPicker3 = new $.PopPicker({
653
+						layer: 1
654
+					});
655
+					cityPicker3.setData(areaList);
656
+					var showCityPickerButton = doc.getElementById('showCityPicker3');
657
+					var cityResult3 = doc.getElementById('cityResult3');
658
+					showCityPickerButton.addEventListener('tap', function(event) {
659
+						if(areaList.length > 0) {
660
+							cityPicker3.show(function(items) {
661
+								cityResult3.value = (items[0].text ? items[0].text : "");
662
+								cityResult3.setAttribute("data-index", items[0].value);
663
+								//返回 false 可以阻止选择框的关闭
664
+								//return false;
665
+								getArea(2, items[0].value);
666
+								if(townList.length == 0) {
667
+									doc.getElementById('town').value = "暂无数据";
668
+								} else {
669
+									doc.getElementById('town').value = "";
670
+									doc.getElementById('town').setAttribute("placeholder", "请选择街道");
671
+									doc.getElementById('village').value = "";
672
+									doc.getElementById('village').setAttribute("placeholder", "请选择村庄");
673
+								}
674
+							});
675
+						}
676
+					}, false);
677
+					//街道
678
+					townPicker = new $.PopPicker({
679
+						layer: 1
680
+					});
681
+					townPicker.setData(townList);
682
+					var townPickerPickerButton = doc.getElementById('showtown');
683
+					var townResult = doc.getElementById('town');
684
+					townPickerPickerButton.addEventListener('tap', function(event) {
685
+						if(areaList.length > 0) {
686
+							townPicker.show(function(items) {
687
+								townResult.value = (items[0].text ? items[0].text : "");
688
+								townResult.setAttribute("data-index", items[0].value);
689
+								//返回 false 可以阻止选择框的关闭
690
+								//return false;
691
+								getArea(3, items[0].value);
692
+								if(villageList.length == 0) {
693
+									doc.getElementById('village').value = "暂无数据";
694
+									doc.getElementById('village').setAttribute("placeholder", "暂无数据");
695
+								} else {
696
+									doc.getElementById('village').value = "";
697
+									doc.getElementById('village').setAttribute("placeholder", "请选择村庄");
698
+								}
699
+							});
700
+						}
701
+					}, false);
702
+					//村庄
703
+					villagePicker = new $.PopPicker({
704
+						layer: 1
705
+					});
706
+					townPicker.setData(townList);
707
+					var villagePickerPickerButton = doc.getElementById('showvillage');
708
+					var villageResult = doc.getElementById('village');
709
+					villagePickerPickerButton.addEventListener('tap', function(event) {
710
+						if(townList.length > 0) {
711
+							villagePicker.show(function(items) {
712
+								villageResult.value = (items[0].text ? items[0].text : "");
713
+								villageResult.setAttribute("data-index", items[0].value);
714
+								//返回 false 可以阻止选择框的关闭
715
+								//return false;
716
+							});
717
+						}
718
+					}, false);
719
+
720
+				})
721
+			})(mui, document);
722
+		</script>
723
+	</body>
724
+
725
+</html>

+ 344 - 392
WebChat/html/myTouSu.html

@@ -1,404 +1,356 @@
1 1
 <!doctype html>
2 2
 <html>
3 3
 
4
-	<head>
5
-		<meta charset="UTF-8">
6
-		<title></title>
7
-		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
8
-		<meta name="apple-mobile-web-app-capable" content="yes">
9
-		<meta name="apple-mobile-web-app-status-bar-style" content="black">
10
-		<link rel="stylesheet" href="../layui/css/layui.mobile.css" />
11
-		<link href="../css/mui.min.css" rel="stylesheet" />
12
-		<link rel="stylesheet" href="../css/app.css" />
13
-		<link href="../css/mui.picker.css" rel="stylesheet" />
14
-		<link href="../css/mui.poppicker.css" rel="stylesheet" />
15
-		<link rel="stylesheet" href="../css/iconfont.css" />
16
-		<link rel="stylesheet" href="../css/inits.css" />
17
-		<style>
18
-			.mui-bar-popover {
19
-				width: 30%;
20
-			}
21
-			.mui-popover.mui-bar-popover .mui-table-view{
22
-				width: 100%;
23
-			}
24
-			.mui-table-view .mui-table-view-cell>a:not(.mui-btn){
25
-				text-align: center;
26
-			}
27
-			.mui-table-view-cell{
28
-				    padding: 1px 15px!important;
29
-			}
30
-			.mui-table-view{
31
-				margin-top: 0!important;
32
-			}
33
-			.san{
34
-				    font-size: 14px;
35
-    				margin-right: 5px
36
-			}
37
-			.nav_a{
38
-				    border-right: 1px solid #ccc;
39
-			}
40
-			.radio_box{
41
-				display: inline-block;
42
-			}
43
-			.mui-radio input[type=radio]:before{
44
-				font-size: 20px;
45
-				vertical-align: middle;
46
-			}
47
-			.mui-radio.mui-left input[type=radio]{
48
-				line-height: 24px!important;
49
-			}
50
-			.mui-radio.mui-left label{
51
-				padding-right: 1px!important;
52
-   				 padding-left: 51px!important;
53
-			}
54
-			.ztext{
55
-				width: 100%;
56
-			    margin: 0;
57
-			    border: 0;
58
-			}
59
-			.action{
60
-				padding: 11px 15px;
61
-			}
62
-			.type_down{
63
-				float: right!important;
64
-			    display: inline-block!important;
65
-			    vertical-align: middle!important;
66
-			        line-height: 42px;
67
-			}
68
-			.type_con{
69
-				width: 55%!important;
70
-			    float: left!important;
71
-			    vertical-align: middle!important;
72
-			    display: inline-block!important;
73
-			    padding: 10px 0!important;
74
-			}
75
-			.label{
76
-				    width: 30%!important;
77
-   					 padding: 11px 0px!important;
78
-			}
79
-			.get_yzm{
80
-				padding: 5px!important;
81
-			    width: auto!important;
82
-			}
83
-			.yzm_con{
84
-				float: left!important;
85
-    			width: 40%!important;
86
-			}
87
-		</style>
88
-	</head>
4
+<head>
5
+    <meta charset="UTF-8">
6
+    <title></title>
7
+    <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
8
+    <meta name="apple-mobile-web-app-capable" content="yes">
9
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
10
+    <link rel="stylesheet" href="../layui/css/layui.mobile.css" />
11
+    <link href="../css/mui.min.css" rel="stylesheet" />
12
+    <link rel="stylesheet" href="../css/app.css" />
13
+    <link href="../css/mui.picker.css" rel="stylesheet" />
14
+    <link href="../css/mui.poppicker.css" rel="stylesheet" />
15
+    <link href="../css/feedback-page.css" rel="stylesheet" />
16
+    <link rel="stylesheet" href="../css/iconfont.css" />
17
+    <link rel="stylesheet" href="../css/inits.css" />
18
+    <style>
19
+        .mui-bar-popover {
20
+            width: 30%;
21
+        }
89 22
 
90
-	<body>
91
-		<!--<header id="header" class="mui-bar mui-bar-nav new_head">
92
-			<h1 class="mui-title new_head_title">我要投诉</h1>
93
-			<button class="new_head_left mui-action-back mui-btn mui-btn-blue mui-btn-link mui-btn-nav mui-pull-left">
94
-				<span class="mui-icon mui-icon-left-nav"></span>返回
95
-			</button>
96
-			<button class="new_head_right mui-btn mui-btn-blue mui-btn-link mui-pull-right"><span class="iconfont icon-unie644" style="font-size: 25px;"></span></button>
97
-		</header>-->
98
-		
99
-		<div class="mui-content">
100
-			<ul class="mui-table-view">
101
-				 <li class="mui-table-view-cell" id="showUserPicker">
102
-				 	<div class="mui-input-row" >
103
-						<label class="label">诉求类型:</label>
104
-						<input type="text" id='userResult' class="ui-alert" data-index="" readonly="readonly" />
105
-						<!--<a href=""><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>-->
106
-					</div>
107
-				 </li>
108
-				 <li class="mui-table-view-cell" id="showZhuTiPicker">
109
-				 	<div class="mui-input-row" >
110
-						<label class="label">主题词:</label>
111
-						<input type="text" id='zhuTiResult' class="ui-alert type_con" data-index="" readonly="readonly" />
112
-						<a href=""><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>
113
-					</div>
114
-				 </li>
115
-		        
116
-		        <li class="mui-table-view-cell baoMi">
117
-		         	<div class="mui-input-row">
118
-							<label class="label">保密要求:</label>
119
-							<div class="mui-input-row mui-radio mui-left radio_box">
120
-		         		 <label>保密</label>
121
-		         		<input type="radio" type="radio" name="secret" value="1"/>
122
-		         	</div>
123
-		         	<div class="mui-input-row mui-radio mui-left radio_box">
124
-		         		<label>公开</label>
125
-		         		<input type="radio" type="radio" name="secret" checked="checked" value="0"/>
126
-		         	</div>
127
-					</div>
128
-		         </li>
129
-		         <li class="mui-table-view-cell">
130
-		         		<div class="mui-input-row">
131
-						<label class="label">诉求主题:</label>
132
-						<input type="text" id="title" placeholder="请填写您的诉求主题">
133
-					</div>
134
-		         </li>
135
-		         <li class="mui-table-view-cell">
136
-		         		<div class="mui-input-row">
137
-						<textarea class="ztext content" name="" id="textarea" rows="3" cols="" placeholder="请详细描述您的问题..."></textarea>
138
-					</div>
139
-		         </li>
140
-		         <li class="mui-table-view-cell">
141
-		         		<div class="mui-input-row">
142
-						<label class="label">联系人:</label>
143
-						<input type="text" id="name" placeholder="请填写您的称呼">
144
-					</div>
145
-		         </li>
146
-		        <li class="mui-table-view-cell">
147
-		         		<div class="mui-input-row">
148
-						<label class="label">联系电话:</label>
149
-						<input type="text" id="phone" placeholder="请填写联系电话">
150
-					</div>
151
-		         </li>
152
-		         
153
-		        <!--<li class="mui-table-view-cell">
154
-		         		<div class="mui-input-row">
155
-						<label>验证码:</label>
156
-						<input type="text" placeholder="请输入短信验证码" class="yzm_con">
157
-						<div class="mui-btn mui-btn-primary get_yzm">获取验证码</div>
158
-								
159
-							
160
-					</div>
161
-		         </li>-->
162
-				 <li class="mui-table-view-cell" id='showCityPicker3'>
163
-				 	<div class="mui-input-row" >
164
-						<label class="label adress"></label>
165
-						<input type="text" id='cityResult3' data-index="" class="ui-alert type_con" placeholder="请选择具体地址" readonly="readonly" />
166
-						<a href=""><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>
167
-					</div>
168
-				 </li>
169
-				 <li class="mui-table-view-cell">
170
-				 	<div class="mui-input-row" >
171
-						<label class="label">街道:</label>
172
-						<input type="text" id="detail_address"  class="ui-alert" placeholder="请填写详细地址" />
173
-					</div>
174
-				 </li>
175
-				 <!--<li class="mui-table-view-cell">
176
-				 	<div class="mui-input-row" >
177
-						<label>附件:</label>
178
-						<!--<a href=""><span class="iconfont icon-jiahao"></span></a>-->
179
-						<!--<input type="file" />
180
-					</div>
181
-				 </li>-->
182
-			</ul>
183
-			
184
-			<p class="action">
185
-				<i class="iconfont icon-gantanhao" style="margin-right: 5px;font-size: 20px;vertical-align: middle;"></i>
186
-				<span style="color: #f81737;">以上内容都为必填内容,请如实填写</span>
187
-			</p>
188
-			<!--<button type="button" class="mui-btn mui-btn-primary mui-btn-block block_button">提交</button>-->
189
-			<button type="button" data-loading-text = "提交中" class="mui-btn mui-btn-primary mui-btn-block block_button submit" >提交</button>
190
-		</div>
191
-		<script src="../layui/layui.js"></script>
192
-		<script src="../js/mui.min.js"></script>
193
-		<script src="../js/mui.picker.js"></script>
194
-		<script src="../js/mui.poppicker.js"></script>
195
-		<script src="../js/zepto.js"></script>
196
-		<script src="../layui/layui.js"></script>
197
-        <script src="../Script/Common/huayi.config.js"></script>
198
-        <script src="../Script/Common/huayi.http.js"></script>
199
-		<script type="text/javascript">
200
-			var menuCode=helper.request.queryString("menuCode");
201
-			var regTel=/^(([0\+]\d{2,3}-)?((0\d{2,3}))?(-)?)?(\d{7,8})(-(\d{3,}))?$/;
202
-			var regMobile=/^([+-]?)\d*\.?\d+$/;
203
-			console.log(menuCode);
204
-//			mui.init()
205
-				if(menuCode=='WYBY'){
206
-					$('.adress').html('地址:');
207
-					$('.baoMi').hide();
208
-				}else{
209
-					$('.adress').html('事发地址:');
210
-					$('.baoMi').show();
211
-				}
212
-			 switch (menuCode){
213
-                    case "WYZX": $("title").html("我要咨询");$('#userResult').attr('data-index','9');$('#userResult').val('咨询'); break;
214
-                    case "WYQZ": $("title").html("我要求助");$('#userResult').attr('data-index','10');$('#userResult').val('求助'); break;
215
-                    case "WYTS": $("title").html("我要投诉");$('#userResult').attr('data-index','11');$('#userResult').val('投诉'); break;
216
-                    case "WYJY": $("title").html("我要建议");$('#userResult').attr('data-index','12');$('#userResult').val('建议 '); break;
217
-                    case "WYBY": $("title").html("我要表扬");$('#userResult').attr('data-index','13');$('#userResult').val('表扬');break;
218
-			 }
219
-		//提交按钮
220
-		  //提交按钮
221
-        $('.submit').on('tap', function () {
222
-            if (!$('#zhuTiResult').val()) {
223
-                mui.alert('请选择主题词!');
224
-                return;
225
-            }
226
-            if (!$('#title').val()) {
227
-                mui.alert('请输入诉求主题!');
228
-                return;
229
-            }
230
-            if (!$('#textarea').val()) {
231
-                mui.alert('请输入详细内容!');
232
-                return;
233
-            }
234
-            if (!$('#name').val()) {
235
-                mui.alert('请输入联系人姓名!');
236
-                return;
23
+        .mui-popover.mui-bar-popover .mui-table-view {
24
+            width: 100%;
25
+        }
26
+
27
+        .mui-table-view .mui-table-view-cell > a:not(.mui-btn) {
28
+            text-align: center;
29
+        }
30
+
31
+        .mui-table-view-cell {
32
+            padding: 1px 15px !important;
33
+        }
34
+
35
+        .mui-table-view {
36
+            margin-top: 0 !important;
37
+        }
38
+
39
+        .san {
40
+            font-size: 14px;
41
+            margin-right: 5px
42
+        }
43
+
44
+        .nav_a {
45
+            border-right: 1px solid #ccc;
46
+        }
47
+
48
+        .radio_box {
49
+            display: inline-block;
50
+        }
51
+
52
+        .mui-radio input[type=radio]:before {
53
+            font-size: 20px;
54
+            vertical-align: middle;
55
+        }
56
+
57
+        .mui-radio.mui-left input[type=radio] {
58
+            line-height: 24px !important;
59
+        }
60
+
61
+        .mui-radio.mui-left label {
62
+            padding-right: 1px !important;
63
+            padding-left: 51px !important;
64
+        }
65
+
66
+        .ztext {
67
+            width: 100%;
68
+            margin: 0;
69
+            border: 0;
70
+        }
71
+
72
+        .action {
73
+            padding: 11px 15px;
74
+        }
75
+
76
+        .type_down {
77
+            float: right !important;
78
+            display: inline-block !important;
79
+            vertical-align: middle !important;
80
+            line-height: 42px;
81
+        }
82
+
83
+        .type_con {
84
+            width: 55% !important;
85
+            float: left !important;
86
+            vertical-align: middle !important;
87
+            display: inline-block !important;
88
+            padding: 10px 0 !important;
89
+        }
90
+
91
+        .label {
92
+            width: 30% !important;
93
+            padding: 11px 0px !important;
94
+        }
95
+
96
+        .get_yzm {
97
+            padding: 5px !important;
98
+            width: auto !important;
99
+        }
100
+
101
+        .yzm_con {
102
+            float: left !important;
103
+            width: 40% !important;
104
+        }
105
+    </style>
106
+</head>
107
+
108
+<body>
109
+    <!--<header id="header" class="mui-bar mui-bar-nav new_head">
110
+        <h1 class="mui-title new_head_title">我要投诉</h1>
111
+        <button class="new_head_left mui-action-back mui-btn mui-btn-blue mui-btn-link mui-btn-nav mui-pull-left">
112
+            <span class="mui-icon mui-icon-left-nav"></span>返回
113
+        </button>
114
+        <button class="new_head_right mui-btn mui-btn-blue mui-btn-link mui-pull-right"><span class="iconfont icon-unie644" style="font-size: 25px;"></span></button>
115
+    </header>-->
116
+
117
+    <div class="mui-content">
118
+        <ul class="mui-table-view">
119
+            <li class="mui-table-view-cell" id="showUserPicker">
120
+                <div class="mui-input-row">
121
+                    <label class="label">诉求类型:</label>
122
+                    <input type="text" id='userResult' class="ui-alert" data-index="" readonly="readonly" />
123
+                    <!--<a href=""><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>-->
124
+                </div>
125
+            </li>
126
+            <li class="mui-table-view-cell" id="showZhuTiPicker">
127
+                <div class="mui-input-row">
128
+                    <label class="label">主题词:</label>
129
+                    <input type="text" id='zhuTiResult' class="ui-alert type_con" data-index="" readonly="readonly" />
130
+                    <a href="javascript:void(0)"><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>
131
+                </div>
132
+            </li>
133
+
134
+            <li class="mui-table-view-cell baoMi">
135
+                <div class="mui-input-row">
136
+                    <label class="label">保密要求:</label>
137
+                    <div class="mui-input-row mui-radio mui-left radio_box">
138
+                        <label>保密</label>
139
+                        <input type="radio" type="radio" name="secret" value="1" />
140
+                    </div>
141
+                    <div class="mui-input-row mui-radio mui-left radio_box">
142
+                        <label>公开</label>
143
+                        <input type="radio" type="radio" name="secret" checked="checked" value="0" />
144
+                    </div>
145
+                </div>
146
+            </li>
147
+            <li class="mui-table-view-cell">
148
+                <div class="mui-input-row">
149
+                    <label class="label">诉求主题:</label>
150
+                    <input type="text" id="title" placeholder="请填写您的诉求主题">
151
+                </div>
152
+            </li>
153
+            <li class="mui-table-view-cell">
154
+                <div class="mui-input-row">
155
+                    <textarea class="ztext content" name="" id="textarea" rows="3" cols="" placeholder="请详细描述您的问题..."></textarea>
156
+                </div>
157
+            </li>
158
+            <li class="mui-table-view-cell">
159
+                <div class="mui-input-row">
160
+                    <label class="label">联系人:</label>
161
+                    <input type="text" id="name" placeholder="请填写您的称呼">
162
+                </div>
163
+            </li>
164
+            <li class="mui-table-view-cell">
165
+                <div class="mui-input-row">
166
+                    <label class="label">联系电话:</label>
167
+                    <input type="text" id="phone" placeholder="请填写联系电话">
168
+                </div>
169
+            </li>
170
+            <!--<li class="mui-table-view-cell">
171
+                    <div class="mui-input-row">
172
+                    <label>验证码:</label>
173
+                    <input type="text" placeholder="请输入短信验证码" class="yzm_con">
174
+                    <div class="mui-btn mui-btn-primary get_yzm">获取验证码</div>
175
+                </div>
176
+             </li>-->
177
+            <li class="mui-table-view-cell" id='showCityPicker3'>
178
+                <div class="mui-input-row">
179
+                    <label class="label adress"></label>
180
+                    <input type="text" id='cityResult3' data-index="" class="ui-alert type_con" placeholder="请选择市县" readonly="readonly" />
181
+                    <a href="javascript:void(0)"><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>
182
+                </div>
183
+            </li>
184
+            <li class="mui-table-view-cell" id='showtown'>
185
+                <div class="mui-input-row">
186
+                    <label class="label">街道:</label>
187
+                    <input type="text" id='town' data-index="" class="ui-alert type_con" placeholder="请选择街道" readonly="readonly" />
188
+                    <a href="javascript:void(0)"><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>
189
+                </div>
190
+            </li>
191
+            <li class="mui-table-view-cell" id='showvillage'>
192
+                <div class="mui-input-row">
193
+                    <label class="label">村庄:</label>
194
+                    <input type="text" id='village' data-index="" class="ui-alert type_con" placeholder="请选择村庄" readonly="readonly" />
195
+                    <a href="javascript:void(0)"><span class="type_down mui-icon mui-icon-arrowdown mui-pull-right"></span></a>
196
+                </div>
197
+            </li>
198
+            <li class="mui-table-view-cell">
199
+                <div class="mui-input-row">
200
+                    <label class="label">详细地址:</label>
201
+                    <input type="text" id="detail_address" class="ui-alert" placeholder="请填写详细地址" />
202
+                </div>
203
+            </li>
204
+            <!--<li class="mui-table-view-cell">
205
+               <div class="mui-input-row" >
206
+                   <label>附件:</label>
207
+                   <!--<a href=""><span class="iconfont icon-jiahao"></span></a>-->
208
+            <!--<input type="file" />
209
+               </div>
210
+            </li>-->
211
+        </ul>
212
+        <div class="feedback">
213
+            <p>添加图片(选填,提供问题截图,单张20M以下,最多上传5张)</p>
214
+            <div id='image-list' class="row image-list"></div>
215
+        </div>
216
+
217
+        <p class="action">
218
+            <i class="iconfont icon-gantanhao" style="margin-right: 5px;font-size: 20px;vertical-align: middle;"></i>
219
+            <span style="color: #f81737;">如事件内容地址填写不详细,将影响到你事件办理,请填写详细</span>
220
+        </p>
221
+        <!--<button type="button" class="mui-btn mui-btn-primary mui-btn-block block_button">提交</button>-->
222
+        <button type="button" data-loading-text="提交中" class="mui-btn mui-btn-primary mui-btn-block block_button submit">提交</button>
223
+    </div>
224
+    <script src="../layui/layui.js"></script>
225
+    <script src="../js/mui.min.js"></script>
226
+    <script src="../js/mui.picker.js"></script>
227
+    <script src="../js/mui.poppicker.js"></script>
228
+    <script src="../js/zepto.js"></script>
229
+    <script src="../Script/Common/huayi.config.js"></script>
230
+    <script src="../Script/Common/huayi.http.js"></script>
231
+    <script src="../js/feedback-page.js"></script>
232
+    <script type="text/javascript">
233
+//      $(document).ready(function () {
234
+	 		var townPicker, villagePicker,areaList = [],townList = [],villageList = [],keyList = [];
235
+            var openid = helper.cookies.get("openid");
236
+//          if (!openid) {
237
+//              window.location.replace("../html/error.html");
238
+//          }
239
+            var menuCode = helper.request.queryString("menuCode");
240
+
241
+            if (menuCode == 'WYBY') {
242
+                $('.adress').html('市县:');
243
+                $('.baoMi').hide();
244
+            } else {
245
+                $('.adress').html('事发市县:');
246
+                $('.baoMi').show();
237 247
             }
238
-            if (!$('#phone').val()) {
239
-                mui.alert('请输入联系电话!');
240
-                return;
248
+            switch (menuCode) {
249
+                case "WYZX": $("title").html("我要咨询"); $('#userResult').attr('data-index', '9'); $('#userResult').val('咨询'); break;
250
+                case "WYQZ": $("title").html("我要求助"); $('#userResult').attr('data-index', '10'); $('#userResult').val('求助'); break;
251
+                case "WYTS": $("title").html("我要投诉"); $('#userResult').attr('data-index', '11'); $('#userResult').val('投诉'); break;
252
+                case "WYJY": $("title").html("我要建议"); $('#userResult').attr('data-index', '12'); $('#userResult').val('建议 '); break;
253
+                case "WYBY": $("title").html("我要表扬"); $('#userResult').attr('data-index', '13'); $('#userResult').val('表扬'); break;
241 254
             }
242
-            else {
243
-                if (!regMobile.test($.trim($("#phone").val()))) {
244
-                    mui.alert('请输入有效的联系电话!');
255
+            //提交按钮
256
+            $('.submit').on('tap', function () {
257
+//              if (!openid) {
258
+//                  mui.alert('非法访问!');
259
+//                  return;
260
+//              }
261
+                var str_ary = '';
262
+                $(".image-box").each(function (i, n) {
263
+                    var a = $(n).attr("indexs");
264
+                    if (a) {
265
+                        if (str_ary) {
266
+                            str_ary = str_ary + ',' + a;
267
+                        }
268
+                        else {
269
+                            str_ary = a;
270
+                        }
271
+                    }
272
+                })
273
+                if (!$('#zhuTiResult').val()) {
274
+                    mui.alert('请选择主题词!');
245 275
                     return;
246 276
                 }
247
-            }
277
+                if (!$('#title').val()) {
278
+                    mui.alert('请输入诉求主题!');
279
+                    return;
280
+                }
281
+                if (!$('#textarea').val()) {
282
+                    mui.alert('请输入详细内容!');
283
+                    return;
284
+                }
285
+                if (!$('#name').val()) {
286
+                    mui.alert('请输入联系人姓名!');
287
+                    return;
288
+                }
289
+                if (!$('#phone').val()) {
290
+                    mui.alert('请输入联系电话!');
291
+                    return;
292
+                }
293
+                else {
248 294
 
295
+                    var regTel = /^(([0\+]\d{2,3}-)?((0\d{2,3}))?(-)?)?(\d{7,8})(-(\d{3,}))?$/;
296
+                    var regMobile = /^([+-]?)\d*\.?\d+$/;
297
+                    if (!regMobile.test($.trim($("#phone").val()))) {
298
+                        mui.alert('请输入有效的联系电话!');
299
+                        return;
300
+                    }
301
+                }
249 302
 
250
-            if ($('#cityResult3').val() == '') {
251
-                mui.alert('请选择' + $('.adress').html() + '!');
252
-                return;
253
-            }
254
-            if (!$('#detail_address').val()) {
255
-                mui.alert('请填写详细地址');
256
-                return;
257
-            }
258
-            Submit()
259
-        })
260
-        var openid = helper.cookies.get("openid");
261
-        //工单类型
262
-//      var typeList=[];
263
-//      $.ajax({
264
-//      	type:"get",
265
-//  		url: huayi.config.callcenter_url + 'WxLogin/GetTypeList',
266
-//  		async:false,
267
-//          data: { openid: openid },
268
-//          dataType: 'json',
269
-//          success:function(data){
270
-//          	var type_data=data.data;
271
-//          	$(type_data).each(function(i,n){
272
-//          		var obj={};
273
-//          		obj.value=n.F_ValueId;
274
-//          		obj.text=n.F_Value;
275
-//          		typeList.push(obj)
276
-//          	})
277
-//          }
278
-//      });
279
-        //事发地域
280
-        var areaList=[];
281
-        $.ajax({
282
-        	type:"get",
283
-    		url: huayi.config.callcenter_url + 'WxLogin/GetAreaList',
284
-    		async:false,
285
-            data: { openid: openid },
286
-            dataType: 'json',
287
-            success:function(data){
288
-            	var area_data=data.data;
289
-            	$(area_data).each(function(i,n){
290
-            		var obj={};
291
-            		obj.value=n.F_AreaId;
292
-            		obj.text=n.F_AreaName;
293
-            		areaList.push(obj)
294
-            	})
295
-            }
296
-        });
297
-        //主题词
298
-        var keyList=[];
299
-        $.ajax({
300
-        	type:"get",
301
-    		url: huayi.config.callcenter_url + 'WxLogin/GetKeyList',
302
-    		async:false,
303
-            data: { openid: openid },
304
-            dataType: 'json',
305
-            success:function(data){
306
-            	var key_data=data.data;
307
-            	$(key_data).each(function(i,n){
308
-            		var obj={};
309
-            		obj.value=n.F_ValueId;
310
-            		obj.text=n.F_Value;
311
-            		keyList.push(obj)
312
-            	})
313
-            }
314
-        });
315
-		  function Submit(){
316
-		  	$.ajax({
317
-		  		type:"post",
318
-		  		url:huayi.config.callcenter_url + 'WxLogin/AddWorkOrder',
319
-		  		async:true,
320
-		  		data:{
321
-		  			openid: openid,
322
-			  		cusname:$('#name').val(),//投诉人姓名
323
-			  		cusphone:$('#phone').val(),//投诉人电话
324
-			  		conphone:$('#phone').val(),//客户电话
325
-			  		title:$('#title').val(),//投诉主题
326
-			  		content:$('.content').val(),//投诉内容
327
-			  		sourcearea:$('#cityResult3').attr('data-index'),//事发地域id
328
-			  		sourceaddress:$('#detail_address').val(),//详细地址
329
-			  		keys:$('#zhuTiResult').attr('data-index'),//关键词
330
-			  		type:$('#userResult').attr('data-index'),//诉求类型
331
-			  		isprotect: $('input[name="secret"]:checked').val()//(0普通1保密)
332
-		  		},
333
-		  		success:function(data){
334
-		  			var str=JSON.parse(data);
335
-		  			console.log(str)
336
-		  			console.log(str.state)
337
-		  		if(str.state=="success"){
338
-		  			mui.toast('投诉成功!');
339
-		  			$("#name").val('');
340
-		  			$("#phone").val('');
341
-		  			$("#title").val('');
342
-		  			$(".content").val('');
343
-		  			$("#cityResult3").val('');
344
-		  			$("#zhuTiResult").val('');
345
-//		  			$("#userResult").val('');
346
-		  			$('#detail_address').val('');
347
-		  			$('input[name="secret"][value="0"]').prop("checked","checked");
348
-		  		}
349
-		  		}
350
-		  	});
351
-		  }
352
-		  
353
-			(function($, doc) {
354
-				$.init();
355
-				$.ready(function() {
356
-//					console.log(typeList);
357
-//					//诉求类型
358
-//					var userPicker = new $.PopPicker();
359
-//					userPicker.setData(typeList);
360
-//					var showUserPickerButton = doc.getElementById('showUserPicker');
361
-//					var userResult = doc.getElementById('userResult');
362
-//					showUserPickerButton.addEventListener('tap', function(event) {
363
-//						userPicker.show(function(items) {
364
-//						console.log(items)
365
-//							userResult.value = items[0].text;
366
-//							userResult.setAttribute("data-index",items[0].value);
367
-//							//返回 false 可以阻止选择框的关闭
368
-//							//return false;
369
-//						});
370
-//					}, false);
371
-					//主题词
372
-					var zhuTiPicker = new $.PopPicker();
373
-					zhuTiPicker.setData(keyList);
374
-					var showZhuTiPickerButton = doc.getElementById('showZhuTiPicker');
375
-					var zhuTiResult = doc.getElementById('zhuTiResult');
376
-					showZhuTiPickerButton.addEventListener('tap', function(event) {
377
-						zhuTiPicker.show(function(items) {
378
-						console.log(items)
379
-							zhuTiResult.value = items[0].text;
380
-							zhuTiResult.setAttribute("data-index",items[0].value);
381
-							//返回 false 可以阻止选择框的关闭
382
-							//return false;
383
-						});
384
-					}, false);
385
-					//事件地址
386
-					var cityPicker3 = new $.PopPicker();
387
-					cityPicker3.setData(areaList);
388
-					var showCityPickerButton = doc.getElementById('showCityPicker3');
389
-					var cityResult3 = doc.getElementById('cityResult3');
390
-					showCityPickerButton.addEventListener('tap', function(event) {
391
-						cityPicker3.show(function(items) {
392
-							cityResult3.value = items[0].text;
393
-							cityResult3.setAttribute("data-index",items[0].value);
394
-							//返回 false 可以阻止选择框的关闭
395
-							//return false;
396
-						});
397
-					}, false);
398
-					
399
-				})
400
-		})(mui, document);
401
-		</script>
402
-	</body>
303
+
304
+                if ($('#cityResult3').val() == '') {
305
+                    mui.alert('请选择' + $('.adress').html() + '!');
306
+                    return;
307
+                }
308
+                if (!$.trim($('#detail_address').val())) {
309
+                    mui.alert('请填写详细地址');
310
+                    return;
311
+                }
312
+                $.ajax({
313
+                    type: "post",
314
+                    url: huayi.config.callcenter_url + 'WxLogin/AddWorkOrder',
315
+                    async: true,
316
+                    data: {
317
+                        openid: openid,
318
+                        cusname: $('#name').val(),//投诉人姓名
319
+                        cusphone: $('#phone').val(),//投诉人电话
320
+                        conphone: $('#phone').val(),//客户电话
321
+                        title: $('#title').val(),//投诉主题
322
+                        content: $('.content').val(),//投诉内容
323
+                        sourcearea: $('#cityResult3').attr('data-index'),//事发地域id
324
+                        sourceaddress: $('#town').val()+" "+$('#village').val()+" "+$('#detail_address').val(),//详细地址
325
+                        keys: $('#zhuTiResult').attr('data-index'),//关键词
326
+                        type: $('#userResult').attr('data-index'),//诉求类型
327
+                        files: str_ary,
328
+                        isprotect: $('input[name="secret"]:checked').val()//(0普通1保密)
329
+                    },
330
+                    success: function (data) {
331
+                        var str = JSON.parse(data);
332
+                        if (str.state == "success") {
333
+                            mui.toast('投诉成功!');
334
+                            $("#name").val('');
335
+                            $("#phone").val('');
336
+                            $("#title").val('');
337
+                            $(".content").val('');
338
+                            $("#cityResult3").val('');
339
+                            $("#zhuTiResult").val('');
340
+                            //		  			$("#userResult").val('');
341
+                            $('#detail_address').val('');
342
+                            $('input[name="secret"][value="0"]').prop("checked", "checked");
343
+                            window.location.reload();
344
+                        }
345
+                    }
346
+                });
347
+            })
348
+
349
+            
350
+//      })
351
+        
352
+
353
+    </script>
354
+</body>
403 355
 
404 356
 </html>

BIN
WebChat/images/iconfont-tianjia.png


BIN
WebChat/img/iconfont-tianjia.png


+ 18 - 18
WebChat/index.html

@@ -18,24 +18,24 @@
18 18
             var openid = helper.cookies.get("openid");
19 19
             var code = helper.request.queryString("code");
20 20
             var menucode = helper.request.queryString("menucode");
21
-            if (!openid) {
22
-                $.ajax({
23
-                    type: "get",
24
-                    url: huayi.config.callcenter_url + 'WxLogin/GetOpenId',
25
-                    data: { code: code },
26
-                    dataType: 'json',
27
-                    success: function (result) {
28
-                        if (result.state.toLowerCase() == "success") {
29
-                            helper.cookies.set("openid", result.data, 7);
30
-                            gourl()
31
-                        }
32
-                    }
33
-                });
34
-            }
35
-            else {
36
-                gourl()
37
-            }
38
-			
21
+//          if (!openid) {
22
+//              $.ajax({
23
+//                  type: "get",
24
+//                  url: huayi.config.callcenter_url + 'WxLogin/GetOpenId',
25
+//                  data: { code: code },
26
+//                  dataType: 'json',
27
+//                  success: function (result) {
28
+//                      if (result.state.toLowerCase() == "success") {
29
+//                          helper.cookies.set("openid", result.data, 7);
30
+//                          gourl()
31
+//                      }
32
+//                  }
33
+//              });
34
+//          }
35
+//          else {
36
+//              gourl()
37
+//          }
38
+			gourl()
39 39
             function gourl()
40 40
             {
41 41
                 switch (menucode)

+ 644 - 0
WebChat/js/ak.js

@@ -0,0 +1,644 @@
1
+var Ak = Ak || {};
2
+
3
+Ak.Base_URL = '';
4
+/**
5
+ * 工具模块,不依赖第三方代码
6
+ * 包含:类型判断
7
+ */
8
+Ak.Utils = {
9
+    /**
10
+    * 判断是否Array对象
11
+    * @param {Object} value 判断的对象
12
+    * @return {Boolean}
13
+    */
14
+    isArray: function (value) {
15
+        return toString.call(value) === '[object Array]';
16
+    },
17
+
18
+    /**
19
+     * 判断是否日期对象
20
+     * @param {Object} value 判断的对象
21
+     * @return {Boolean}
22
+     */
23
+    isDate: function (value) {
24
+        return toString.call(value) === '[object Date]';
25
+    },
26
+
27
+    /**
28
+     * 判断是否Object对象
29
+     * @param {Object} value 判断的对象
30
+     * @return {Boolean}
31
+     */
32
+    isObject: function (value) {
33
+        return toString.call(value) === '[object Object]';
34
+    },
35
+
36
+    /**
37
+     * 判断是否为空
38
+     * @param {Object} value 判断的对象
39
+     * @return {Boolean}
40
+     */
41
+    isEmpty: function (value) {
42
+        return (value === null) || (value === undefined) || value === '' || (this.isArray(value) && value.length === 0);
43
+    },
44
+
45
+    /**
46
+     * 判断是否移动电话
47
+     * @param {Number} value 判断的值
48
+     * @return {Boolean}
49
+     */
50
+    isMobilePhone: function (value) {
51
+        value = Number.parseInt(value);
52
+        // 1)是否非数字
53
+        if (Number.isNaN(value)) {
54
+            return false;
55
+        }
56
+
57
+        // 2)是否11位并且1开头的移动电话
58
+        return /^(1[0-9]{10})$/.test(value);
59
+    },
60
+
61
+    /**
62
+     * 判断是否为邮箱
63
+     * @param {String} value 判断的值
64
+     * @return {Boolean}
65
+     */
66
+    isEmail: function (value) {
67
+        return /^[a-zA-Z\-_0-9]+@[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+$/.test(value);
68
+    },
69
+
70
+    /**
71
+    * 转换服务器请求的对象为Js的对象:包含首字母转换为小写;属性格式转换为Js支持的格式
72
+    * @param {Object} en 服务器的获取的数据对象
73
+    */
74
+    transWebServerObj: function (en) {
75
+        if (toString.call(en) == '[object Array]') {
76
+            for (var i = 0, len = en.length; i < len; i++) {
77
+                Ak.Utils.transWebServerObj(en[i])
78
+            }
79
+
80
+        } else {
81
+
82
+            for (propertyName in en) {
83
+                /*
84
+                // 1.创建一个小写的首字母属性并赋值:ABC => aBC
85
+                var newPropertyName = propertyName.charAt(0).toLowerCase() + propertyName.substr(1);
86
+                en[newPropertyName] = en[propertyName];
87
+                */
88
+                var tmpName = propertyName;
89
+                // 2.判断此属性是否为数组,若是就执行递归
90
+                if (toString.call(en[tmpName]) == '[object Array]') {
91
+                    for (var i = 0, len = en[tmpName].length; i < len; i++) {
92
+                        Ak.Utils.transWebServerObj(en[tmpName][i]); // 数组里的每个对象再依次进行转换
93
+                    }
94
+                } else if (toString.call(en[tmpName]) == '[object Object]') {
95
+                    Ak.Utils.transWebServerObj(en[tmpName]); // 若属性的值是一个对象,也要进行转换
96
+                } else {
97
+                    // 3.若不是其他类型,把此属性的值转换为Js的数据格式
98
+                    // 3.1)日期格式:后台为2015-12-08T09:23:23.917 => 2015-12-08 09:23:23
99
+                    if (new RegExp(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/).test(en[propertyName])) {
100
+                        //  en[propertyName] = new RegExp(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/).exec(en[propertyName])[0].replace('T', ' ');
101
+
102
+                        //  若为0001年,表示时间为空,就返回''空字符串
103
+                        if (en[propertyName].indexOf('0001') >= 0) {
104
+                            en[propertyName] = '';
105
+                        }
106
+                    } else if (toString.call(en[propertyName]) == '[object Number]' && new RegExp(/\d+[.]\d{3}/).test(en[propertyName])) {
107
+                        // 3.2)溢出的float格式:1.33333 = > 1.33
108
+                        en[propertyName] = en[propertyName].toFixed(2);
109
+                    } else if (en[propertyName] == null) {
110
+                        // 3.3)null值返回空
111
+                        en[propertyName] = '';
112
+                    }
113
+                }
114
+            }
115
+        }
116
+        return en;
117
+    },
118
+
119
+    /**
120
+    *设置SessionStorage的值
121
+    * @param key:要存的键
122
+    * @param value :要存的值
123
+    */
124
+    setSessionStorage: function (key, value) {
125
+        if (this.isObject(value)) {
126
+            value = this.toJsonStr(value);
127
+        }
128
+        sessionStorage[key] = value;
129
+    },
130
+
131
+    /**
132
+    *获取SessionStorage的值
133
+    * @param key:存的键
134
+    */
135
+    getSessionStorage: function (key) {
136
+        var rs = sessionStorage[key];
137
+        try {
138
+            if (rs != undefined) {
139
+                var obj = this.toJson(rs);
140
+                rs = obj;
141
+            }
142
+        } catch (error) {
143
+
144
+        }
145
+        return rs;
146
+    },
147
+
148
+    /**
149
+    * 清除SessionStorage的值
150
+    * @param key:存的键
151
+    */
152
+    removeSessionStorage: function (key) {
153
+        return sessionStorage.removeItem(key);
154
+    },
155
+
156
+    /**
157
+    * 对传入的时间值进行格式化。后台传入前台的时间有两种个是:Sql时间和.Net时间
158
+    * @param sValue {String|Date}:传入的时间字符串
159
+    * @dateFormat {dateFormat | bool} :日期格式,日期格式:eg:'Y-m-d H:i:s'
160
+    * @return {String} :2014-03-01 这种格式
161
+    1) Sql时间格式:2015-02-24T00:00:00
162
+    2) .Net时间格式:/Date(1410744626000)/
163
+    */
164
+    getDateTimeStr: function (sValue, dateFormat) {
165
+        if (dateFormat == undefined) {
166
+            dateFormat = 'Y-m-d'; // 默认显示年月日
167
+        } else if (dateFormat == true) {
168
+            dateFormat = 'Y-m-d H:i:s'; // 若dateFormat为true,显示全部
169
+        }
170
+
171
+        var dt;
172
+        // 1.先解析传入的时间对象,
173
+        if (sValue) {
174
+            if (toString.call(sValue) !== '[object Date]') { //不为Date格式,就转换为DateTime类型
175
+                sValue = sValue + '';
176
+                if (sValue.indexOf('T') > 0) { // 1)格式:2015-02-24T00:00:00
177
+                    var timestr = sValue.replace('T', ' ').replace(/-/g, '/'); //=> 2015/02/24 00:00:00
178
+                    dt = new Date(timestr);
179
+                } else { // 2).Net格式:/Date(1410744626000)/
180
+                    //Convert date type that .NET can bind to DateTime
181
+                    //var date = new Date(parseInt(sValue.substr(6)));
182
+                    var timestr = sValue.toString().replace(/\/Date\((\d+)\)\//gi, "$1"); //
183
+                    dt = new Date(Math.abs(timestr))
184
+                }
185
+            } else {
186
+                dt = sValue;
187
+            }
188
+        }
189
+
190
+        // 2.转换
191
+        // 1)转换成对象 'Y-m-d H:i:s'
192
+        var obj = {}; //返回的对象,包含了 year(年)、month(月)、day(日)
193
+        obj.Y = dt.getFullYear(); //年
194
+        obj.m = dt.getMonth() + 1; //月
195
+        obj.d = dt.getDate(); //日期 
196
+        obj.H = dt.getHours();
197
+        obj.i = dt.getMinutes();
198
+        obj.s = dt.getSeconds;
199
+        //2.2单位的月、日都转换成双位
200
+        if (obj.m < 10) {
201
+            obj.m = '0' + obj.m;
202
+        }
203
+        if (obj.d < 10) {
204
+            obj.d = '0' + obj.d;
205
+        }
206
+
207
+        // 3.解析
208
+        var rs = dateFormat.replace('Y', obj.Y).replace('m', obj.m).replace('d', obj.d).replace('H', obj.H).replace('i', obj.i).replace('s', obj.s);
209
+
210
+        return rs;
211
+    },
212
+
213
+    /**
214
+    * 对象转换为json字符串
215
+    * @param  {jsonObj} jsonObj Json对象
216
+    * @return {jsonStr} Json字符串
217
+    */
218
+    toJsonStr: function (jsonObj) {
219
+        return JSON.stringify(jsonObj);
220
+    },
221
+
222
+    /**
223
+    * 讲json字符串转换为json对象
224
+    * @param {String} jsonStr Json对象字符串
225
+    * @return {jsonObj} Json对象
226
+    */
227
+    toJson: function (jsonStr) {
228
+        return JSON.parse(jsonStr);
229
+    },
230
+
231
+
232
+    /**
233
+     * @private
234
+     */
235
+    getCookieVal: function (offset) {
236
+        var endstr = document.cookie.indexOf(";", offset);
237
+        if (endstr == -1) {
238
+            endstr = document.cookie.length;
239
+        }
240
+        return unescape(document.cookie.substring(offset, endstr));
241
+    },
242
+
243
+    /**
244
+    * 获取指定key的cookie
245
+    * @param {String} key cookie的key
246
+    */
247
+    getCookie: function (key) {
248
+        var arg = key + "=",
249
+            alen = arg.length,
250
+            clen = document.cookie.length,
251
+            i = 0,
252
+            j = 0;
253
+
254
+        while (i < clen) {
255
+            j = i + alen;
256
+            if (document.cookie.substring(i, j) == arg) {
257
+                return this.getCookieVal(j);
258
+            }
259
+            i = document.cookie.indexOf(" ", i) + 1;
260
+            if (i === 0) {
261
+                break;
262
+            }
263
+        }
264
+        return null;
265
+    },
266
+
267
+    /**
268
+    * 设置cookie
269
+    * @param {String} key cookie的key
270
+    * @param {String} value cookie的value
271
+    */
272
+    setCookie: function (key, value) {
273
+        var argv = arguments,
274
+            argc = arguments.length,
275
+            expires = (argc > 2) ? argv[2] : null,
276
+            path = (argc > 3) ? argv[3] : '/',
277
+            domain = (argc > 4) ? argv[4] : null,
278
+            secure = (argc > 5) ? argv[5] : false;
279
+
280
+        document.cookie = key + "=" + escape(value) + ((expires === null) ? "" : ("; expires=" + expires.toGMTString())) + ((path === null) ? "" : ("; path=" + path)) + ((domain === null) ? "" : ("; domain=" + domain)) + ((secure === true) ? "; secure" : "");
281
+    },
282
+
283
+    /**
284
+    * 是否含有特殊字符
285
+    * @param  {String} value 传入的值
286
+    * @return {Boolean} true 含有特殊符号;false 不含有特殊符号
287
+    */
288
+    isHaveSpecialChar: function (value) {
289
+        var oldLength = value.length;
290
+        var newLength = value.replace(/[`~!@#$%^&*_+=\\{}:"<>?\[\];',.\/~!@#¥%……&*——+『』:“”《》?【】;‘’,。? \[\]()()]/g, '').length;
291
+        if (newLength < oldLength) {
292
+            return true;
293
+        }
294
+        return false;
295
+    }
296
+
297
+};
298
+
299
+/**
300
+ * http交互模块
301
+ * 包含:ajax
302
+ */
303
+Ak.Http = {
304
+
305
+    /**
306
+     * 将`name` - `value`对转换为支持嵌套结构的对象数组
307
+     *
308
+     *     var objects = toQueryObjects('hobbies', ['reading', 'cooking', 'swimming']);
309
+     *
310
+     *     // objects then equals:
311
+     *     [
312
+     *         { name: 'hobbies', value: 'reading' },
313
+     *         { name: 'hobbies', value: 'cooking' },
314
+     *         { name: 'hobbies', value: 'swimming' },
315
+     *     ];
316
+     *
317
+     *     var objects = toQueryObjects('dateOfBirth', {
318
+     *         day: 3,
319
+     *         month: 8,
320
+     *         year: 1987,
321
+     *         extra: {
322
+     *             hour: 4
323
+     *             minute: 30
324
+     *         }
325
+     *     }, true); // Recursive
326
+     *
327
+     *     // objects then equals:
328
+     *     [
329
+     *         { name: 'dateOfBirth[day]', value: 3 },
330
+     *         { name: 'dateOfBirth[month]', value: 8 },
331
+     *         { name: 'dateOfBirth[year]', value: 1987 },
332
+     *         { name: 'dateOfBirth[extra][hour]', value: 4 },
333
+     *         { name: 'dateOfBirth[extra][minute]', value: 30 },
334
+     *     ];
335
+     *
336
+     * @param {String} name
337
+     * @param {object | Array} value
338
+     * @param {boolean} [recursive=false] 是否递归
339
+     * @return {array}
340
+     */
341
+    toQueryObjects: function (name, value, recursive) {
342
+        var objects = [],
343
+            i, ln;
344
+
345
+        if (Ak.Utils.isArray(value)) {
346
+            for (i = 0, ln = value.length; i < ln; i++) {
347
+                if (recursive) {
348
+                    objects = objects.concat(toQueryObjects(name + '[' + i + ']', value[i], true));
349
+                }
350
+                else {
351
+                    objects.push({
352
+                        name: name,
353
+                        value: value[i]
354
+                    });
355
+                }
356
+            }
357
+        }
358
+        else if (Ak.Utils.isObject(value)) {
359
+            for (i in value) {
360
+                if (value.hasOwnProperty(i)) {
361
+                    if (recursive) {
362
+                        objects = objects.concat(toQueryObjects(name + '[' + i + ']', value[i], true));
363
+                    }
364
+                    else {
365
+                        objects.push({
366
+                            name: name,
367
+                            value: value[i]
368
+                        });
369
+                    }
370
+                }
371
+            }
372
+        }
373
+        else {
374
+            objects.push({
375
+                name: name,
376
+                value: value
377
+            });
378
+        }
379
+
380
+        return objects;
381
+    },
382
+
383
+    /**
384
+     * 把对象转换为查询字符串
385
+     * e.g.:
386
+     *     toQueryString({foo: 1, bar: 2}); // returns "foo=1&bar=2"
387
+     *     toQueryString({foo: null, bar: 2}); // returns "foo=&bar=2"
388
+     *     toQueryString({date: new Date(2011, 0, 1)}); // returns "date=%222011-01-01T00%3A00%3A00%22"
389
+     * @param {Object} object 需要转换的对象
390
+     * @param {Boolean} [recursive=false] 是否递归
391
+     * @return {String} queryString
392
+     */
393
+    toQueryString: function (object, recursive) {
394
+        var paramObjects = [],
395
+            params = [],
396
+            i, j, ln, paramObject, value;
397
+
398
+        for (i in object) {
399
+            if (object.hasOwnProperty(i)) {
400
+                paramObjects = paramObjects.concat(this.toQueryObjects(i, object[i], recursive));
401
+            }
402
+        }
403
+
404
+        for (j = 0, ln = paramObjects.length; j < ln; j++) {
405
+            paramObject = paramObjects[j];
406
+            value = paramObject.value;
407
+
408
+            if (Ak.Utils.isEmpty(value)) {
409
+                value = '';
410
+            } else if (Ak.Utils.isDate(value)) {
411
+                value = value.getFullYear() + "-"
412
+                    + Ext.String.leftPad(value.getMonth() + 1, 2, '0') + "-"
413
+                    + Ext.String.leftPad(value.getDate(), 2, '0') + "T"
414
+                    + Ext.String.leftPad(value.getHours(), 2, '0') + ":"
415
+                    + Ext.String.leftPad(value.getMinutes(), 2, '0') + ":"
416
+                    + Ext.String.leftPad(value.getSeconds(), 2, '0');
417
+            }
418
+
419
+            params.push(encodeURIComponent(paramObject.name) + '=' + encodeURIComponent(String(value)));
420
+        }
421
+
422
+        return params.join('&');
423
+    },
424
+
425
+    /**
426
+     * ajax请求
427
+     * e.g.:
428
+     *     Ak.Ajax.request({
429
+     *         url: 'ajax_demo/sample.json',
430
+     *         success: function(response, opts) {
431
+     *             var res = toJson(response.responseText);
432
+     *             console.dir(res);
433
+     *         },
434
+     *         failure: function(response, opts) {
435
+     *             console.log('server-side failure with status code ' + response.status);
436
+     *         }
437
+     *     });
438
+     *
439
+     * @param {Object} options ajax配置项,可包含以下成员:
440
+     * @param {String} options.url 请求地址
441
+     * @param {String} options.method 请求方法,默认:POST
442
+     * @param {Function} options.successCallback 成功接收内容时的回调函数
443
+     */
444
+    ajax: function (options) {
445
+        // 1.请求的参数
446
+        if (options.params && Ak.Utils.isObject(options.params)) {
447
+            options.params = this.toQueryString(options.params);
448
+        }
449
+
450
+        // 2.请求的方法
451
+        options.method = (options.method ? 'POST' : 'GET').toUpperCase();
452
+
453
+        // 3.请求的url
454
+        if (Ak.Utils.isEmpty(options.method)) {
455
+            options.method = 'POST';
456
+        } else if (options.method == 'GET' && !Ak.Utils.isEmpty(options.params)) {
457
+            options.url = options.url + '?' + options.params;
458
+        }
459
+
460
+        // 4.xhr操作
461
+        var xhr = new XMLHttpRequest();
462
+        // 1)设置请求地址和头部
463
+        xhr.open(options.method, options.url, true); // 请求地址
464
+        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); // 请求头部
465
+
466
+        // 2)接受返回数据
467
+        xhr.onreadystatechange = function () {
468
+            if (xhr.readyState == 4) {
469
+                try {
470
+                    // xhr.responseText 接收的数据
471
+                    var res = Ak.Utils.toJson(xhr.responseText);
472
+                    // 2.因为后台由C#编写,返回的对象成员名称首字母为大写,此处进行小写设置,并对C#的类型进行转换操作
473
+                    if (res.data) { // data属性是否有数据
474
+                        res.data = Ak.Utils.transWebServerObj(res.data);
475
+                    } else if (res.children) { // children属性是否有数据
476
+                        res.children = Ak.Utils.transWebServerObj(res.children);
477
+                    }
478
+                    // 3.调用成功执行的回调函数
479
+                    if (options.successCallback) {
480
+                        options.successCallback(res);
481
+                    }
482
+                } catch (error) {
483
+                    console.log(error);
484
+                }
485
+            }
486
+        };
487
+
488
+        // 3)开始请求
489
+        if (Ak.Utils.isEmpty(options.params)) {
490
+            xhr.send('');
491
+        } else {
492
+            xhr.send(options.params);
493
+        }
494
+    },
495
+
496
+
497
+    /**
498
+     * 以get方式请求获取JSON数据
499
+     * @param {Object} options 配置项,可包含以下成员:
500
+     * @param {String} options.url 请求地址
501
+     * @param {Object} options.params 附加的请求条件
502
+     * @param {Object} options.isHideLoading 是否关闭'载入中'提示框,默认false
503
+     * @param {Function} options.successCallback 成功接收内容时的回调函数
504
+     */
505
+    get: function (options) {
506
+        if (!options.isHideLoading) {
507
+            Ak.Msg.showLoading();
508
+        }
509
+        options.url = Ak.Base_URL + options.url;
510
+        if (options.params) {
511
+            options.url = options.url + '?' + this.toQueryString(options.params);
512
+        }
513
+
514
+        $.getJSON(options.url, function (res, status, xhr) {
515
+            Ak.Msg.hideLoading();
516
+            if (res.success) {
517
+                // 1.因为后台由C#编写,返回的对象成员名称首字母为大写,此处进行小写设置,并对C#的类型进行转换操作
518
+                if (Ak.Utils.isObject(res)) {
519
+                    res = Ak.Utils.transWebServerObj(res);
520
+                }
521
+                // 2.调用成功执行的回调函数
522
+                if (options.successCallback) {
523
+                    options.successCallback(res);
524
+                }
525
+            } else {
526
+                Ak.Msg.toast(res.msg);
527
+            }
528
+        });
529
+    },
530
+
531
+    /**
532
+     * 以get方式请求获取JSON数据
533
+     * @param {Object} options 配置项,可包含以下成员:
534
+     * @param {String} options.url 请求地址
535
+     * @param {Object} options.params 附加的请求条件
536
+     * @param {Function} options.successCallback 成功接收内容时的回调函数
537
+     */
538
+    post: function (options) {
539
+        Ak.Msg.showLoading();
540
+        options.url = Ak.Base_URL + options.url;
541
+        $.post(options.url, options.params, function (res, status, xhr) {
542
+            Ak.Msg.hideLoading();
543
+            if (res.success) {
544
+                // 1.因为后台由C#编写,返回的对象成员名称首字母为大写,此处进行小写设置,并对C#的类型进行转换操作
545
+                if (Ak.Utils.isObject(res)) {
546
+                    res = Ak.Utils.transWebServerObj(res);
547
+                }
548
+                // 2.调用成功执行的回调函数
549
+                if (options.successCallback) {
550
+                    options.successCallback(res);
551
+                }
552
+            } else {
553
+                Ak.Msg.toast(res.msg);
554
+            }
555
+        });
556
+    },
557
+
558
+
559
+};
560
+
561
+
562
+/**
563
+* 消息模块
564
+* 包含:确认框、信息提示框
565
+* 基于:weui库
566
+*/
567
+Ak.Msg = {
568
+
569
+    /**
570
+    * 提示框
571
+    * msg {string} :信息内容
572
+    */
573
+    alert: function (msg) {
574
+        weui.toast(msg, {
575
+	        duration: 3000,
576
+	        className: "bears"
577
+	    });
578
+    },
579
+
580
+    /**
581
+    * 确认框
582
+    * msg {string} :信息内容
583
+    * callback {function} :点击'确定'时的回调函数。
584
+    */
585
+    confirm: function (msg, callback) {
586
+	    weui.confirm('提示', function () {
587
+	        if(callback){
588
+                callback();
589
+            }
590
+	    }, function () {
591
+	    }, {
592
+	        title: msg
593
+	    });
594
+    },
595
+
596
+    /**
597
+    * 显示正在加载
598
+    */
599
+    showLoading: function () {
600
+        // 参照:$.showPreloader('加载中...')
601
+
602
+        // 1)创建遮盖层 
603
+        var backElement = document.createElement('div');
604
+        backElement.className = 'weui-mask_transparent';
605
+        backElement.id = 'msg_back_div';
606
+        document.body.appendChild(backElement);
607
+
608
+        // 2)创建loading层
609
+        var popupElement = document.createElement('div');
610
+        popupElement.className = 'weui-toast';
611
+        popupElement.id = 'msg_loading_div';
612
+        popupElement.style.display = 'block';
613
+        popupElement.innerHTML = '<i class="weui-loading weui-icon_toast"></i> <p class="weui-toast__content">加载中</p>';
614
+        document.body.appendChild(popupElement);
615
+    },
616
+
617
+    /**
618
+    * 关闭正在加载
619
+    */
620
+    hideLoading: function () {
621
+        // 参照:$.hidePreloader();
622
+        // 1)去除遮盖层
623
+        var backElement = document.getElementById('msg_back_div');
624
+        if (backElement) {
625
+            document.body.removeChild(backElement);
626
+            backElement = null;
627
+        }
628
+
629
+        // 2)去除loading层
630
+        var popupElement = document.getElementById('msg_loading_div');
631
+        if (popupElement) {
632
+            document.body.removeChild(popupElement);
633
+            popupElement = null;
634
+        }
635
+    },
636
+
637
+    /**
638
+    * 自动消失的提示框
639
+    * msg {string} :信息内容
640
+    */
641
+    toast: function (msg) {
642
+        weui.toast(msg, 2000);
643
+    }
644
+}

+ 112 - 0
WebChat/js/feedback-page.js

@@ -0,0 +1,112 @@
1
+(function (mui, window, document, undefined) {
2
+    mui.init();
3
+    var get = function (id) {
4
+        return document.getElementById(id);
5
+    };
6
+    var qsa = function (sel) {
7
+        return [].slice.call(document.querySelectorAll(sel));
8
+    };
9
+    var ui = {
10
+        question: get('question'),
11
+        contact: get('contact'),
12
+        imageList: get('image-list'),
13
+        submit: get('submit')
14
+    };
15
+    ui.clearForm = function () {
16
+        ui.question.value = '';
17
+        ui.contact.value = '';
18
+        ui.imageList.innerHTML = '';
19
+        ui.newPlaceholder();
20
+    };
21
+    ui.getFileInputArray = function () {
22
+        return [].slice.call(ui.imageList.querySelectorAll('input[type="file"]'));
23
+    };
24
+    ui.getFileInputIdArray = function () {
25
+        var fileInputArray = ui.getFileInputArray();
26
+        var idArray = [];
27
+        fileInputArray.forEach(function (fileInput) {
28
+            if (fileInput.value != '') {
29
+                idArray.push(fileInput.getAttribute('id'));
30
+            }
31
+        });
32
+        return idArray;
33
+    };
34
+    var imageIndexIdNum = 0;
35
+    ui.newPlaceholder = function () {
36
+        var fileInputArray = ui.getFileInputArray();
37
+        if (fileInputArray &&
38
+            fileInputArray.length > 0 &&
39
+            fileInputArray[fileInputArray.length - 1].parentNode.classList.contains('space')) {
40
+            return;
41
+        }
42
+        imageIndexIdNum++;
43
+        var placeholder = document.createElement('div');
44
+        placeholder.setAttribute('class', 'image-item space');
45
+        var closeButton = document.createElement('div');
46
+        closeButton.setAttribute('class', 'image-close');
47
+        closeButton.innerHTML = 'X';
48
+        closeButton.addEventListener('click', function (event) {
49
+            event.stopPropagation();
50
+            event.cancelBubble = true;
51
+            setTimeout(function () {
52
+                ui.imageList.removeChild(placeholder);
53
+            }, 0);
54
+            return false;
55
+        }, false);
56
+        var fileInput = document.createElement('input');
57
+        fileInput.setAttribute('type', 'file');
58
+        //multiple="true"
59
+        fileInput.setAttribute('class', 'image-box');
60
+        //fileInput.setAttribute('accept', 'image/*');
61
+        //fileInput.setAttribute('accept', 'image/gif,image/jpeg,image/png,image/jpg');
62
+        fileInput.accept="image/*";
63
+        fileInput.setAttribute('id', 'image-' + imageIndexIdNum);
64
+        fileInput.addEventListener('change', function (event) {
65
+            var file = fileInput.files[0];
66
+            var lengh = document.getElementsByClassName("image-item").length;
67
+            if (lengh < 6) {
68
+                if (file) {
69
+                    //var filename = $("#image-" + imageIndexIdNum).val();
70
+                    //fileName = filename.split("\\")[2];
71
+                    var fileName = file.name;//"";//
72
+                    //alert(fileName);
73
+                    var reader = new FileReader();
74
+                    reader.onload = function () {
75
+                        //处理 android 4.1 兼容问题
76
+                        var base64 = reader.result.split(',')[1];
77
+                        var dataUrl = 'data:image/png;base64,' + base64;
78
+                        placeholder.style.backgroundImage = 'url(' + dataUrl + ')';
79
+                        $.ajax({
80
+                            type: "post",
81
+                            url: huayi.config.callcenter_url + '/Web/Upload64',
82
+                            async: true,
83
+                            dataType: 'json',
84
+                            data: {
85
+                                dataurl: dataUrl,
86
+                                filename: fileName
87
+                            },
88
+
89
+                            success: function (data) {
90
+                                if (data.state == "success") {
91
+                                    fileInput.setAttribute('indexs', data.data.F_FileId);
92
+                                    mui.toast('上传成功');
93
+                                }
94
+                            }
95
+                        });
96
+                    }
97
+
98
+                    reader.readAsDataURL(file);
99
+                    placeholder.classList.remove('space');
100
+                    ui.newPlaceholder();
101
+                }
102
+            } else {
103
+                mui.toast('最多上传五张');
104
+            }
105
+
106
+        }, false);
107
+        placeholder.appendChild(closeButton);
108
+        placeholder.appendChild(fileInput);
109
+        ui.imageList.appendChild(placeholder);
110
+    };
111
+    ui.newPlaceholder();
112
+})(mui, window, document, undefined);

+ 382 - 0
WebChat/js/mui.previewimage.js

@@ -0,0 +1,382 @@
1
+(function($, window) {
2
+
3
+	var template = '<div id="{{id}}" class="mui-slider mui-preview-image mui-fullscreen"><div class="mui-preview-header">{{header}}</div><div class="mui-slider-group"></div><div class="mui-preview-footer mui-hidden">{{footer}}</div><div class="mui-preview-loading"><span class="mui-spinner mui-spinner-white"></span></div></div>';
4
+	var itemTemplate = '<div class="mui-slider-item mui-zoom-wrapper {{className}}"><div class="mui-zoom-scroller"><img src="{{src}}" data-preview-lazyload="{{lazyload}}" style="{{style}}" class="mui-zoom"></div></div>';
5
+	var defaultGroupName = '__DEFAULT';
6
+	var div = document.createElement('div');
7
+	var imgId = 0;
8
+	var PreviewImage = function(options) {
9
+		this.options = $.extend(true, {
10
+			id: '__MUI_PREVIEWIMAGE',
11
+			zoom: true,
12
+			header: '<span class="mui-preview-indicator"></span>',
13
+			footer: ''
14
+		}, options || {});
15
+		this.init();
16
+		this.initEvent();
17
+	};
18
+	var proto = PreviewImage.prototype;
19
+	proto.init = function() {
20
+		var options = this.options;
21
+		var el = document.getElementById(this.options.id);
22
+		if (!el) {
23
+			div.innerHTML = template.replace(/\{\{id\}\}/g, this.options.id).replace('{{header}}', options.header).replace('{{footer}}', options.footer);
24
+			document.body.appendChild(div.firstElementChild);
25
+			el = document.getElementById(this.options.id);
26
+		}
27
+
28
+		this.element = el;
29
+		this.scroller = this.element.querySelector($.classSelector('.slider-group'));
30
+		this.indicator = this.element.querySelector($.classSelector('.preview-indicator'));
31
+		this.loader = this.element.querySelector($.classSelector('.preview-loading'));
32
+		if (options.footer) {
33
+			this.element.querySelector($.classSelector('.preview-footer')).classList.remove($.className('hidden'));
34
+		}
35
+		this.addImages();
36
+	};
37
+	proto.initEvent = function() {
38
+		var self = this;
39
+		$(document.body).on('tap', 'img[data-preview-src]', function() {
40
+			self.open(this);
41
+			return false;
42
+		});
43
+		var laterClose = null;
44
+		var laterCloseEvent = function() {
45
+			!laterClose && (laterClose = $.later(function() {
46
+				self.loader.removeEventListener('tap', laterCloseEvent);
47
+				self.scroller.removeEventListener('tap', laterCloseEvent);
48
+				self.close();
49
+			}, 300));
50
+		};
51
+		this.scroller.addEventListener('doubletap', function() {
52
+			if (laterClose) {
53
+				laterClose.cancel();
54
+				laterClose = null;
55
+			}
56
+		});
57
+		this.element.addEventListener('webkitAnimationEnd', function() {
58
+			if (self.element.classList.contains($.className('preview-out'))) { //close
59
+				self.element.style.display = 'none';
60
+				self.element.classList.remove($.className('preview-out'));
61
+				self.element.classList.remove($.className('preview-in'));
62
+				laterClose = null;
63
+			} else { //open
64
+				self.loader.addEventListener('tap', laterCloseEvent);
65
+				self.scroller.addEventListener('tap', laterCloseEvent);
66
+			}
67
+		});
68
+		this.element.addEventListener('slide', function(e) {
69
+			if (self.options.zoom) {
70
+				var lastZoomerEl = self.element.querySelector('.mui-zoom-wrapper:nth-child(' + (self.lastIndex + 1) + ')');
71
+				if (lastZoomerEl) {
72
+					$(lastZoomerEl).zoom().setZoom(1);
73
+				}
74
+			}
75
+			var slideNumber = e.detail.slideNumber;
76
+			self.lastIndex = slideNumber;
77
+			self.indicator && (self.indicator.innerText = (slideNumber + 1) + '/' + self.currentGroup.length);
78
+			self._loadItem(slideNumber);
79
+
80
+		});
81
+	};
82
+	proto.addImages = function(group, index) {
83
+		this.groups = {};
84
+		var imgs = [];
85
+		if (group) {
86
+			if (group === defaultGroupName) {
87
+				imgs = document.querySelectorAll("img[data-preview-src]:not([data-preview-group])");
88
+			} else {
89
+				imgs = document.querySelectorAll("img[data-preview-src][data-preview-group='" + group + "']");
90
+			}
91
+		} else {
92
+			imgs = document.querySelectorAll("img[data-preview-src]");
93
+		}
94
+		if (imgs.length) {
95
+			for (var i = 0, len = imgs.length; i < len; i++) {
96
+				this.addImage(imgs[i]);
97
+			}
98
+		}
99
+	};
100
+	proto.addImage = function(img) {
101
+		var group = img.getAttribute('data-preview-group');
102
+		group = group || defaultGroupName;
103
+		if (!this.groups[group]) {
104
+			this.groups[group] = [];
105
+		}
106
+		var src = img.getAttribute('src');
107
+		if (img.__mui_img_data && img.__mui_img_data.src === src) { //已缓存且图片未变化
108
+			this.groups[group].push(img.__mui_img_data);
109
+		} else {
110
+			var lazyload = img.getAttribute('data-preview-src');
111
+			if (!lazyload) {
112
+				lazyload = src;
113
+			}
114
+			var imgObj = {
115
+				src: src,
116
+				lazyload: src === lazyload ? '' : lazyload,
117
+				loaded: src === lazyload ? true : false,
118
+				sWidth: 0,
119
+				sHeight: 0,
120
+				sTop: 0,
121
+				sLeft: 0,
122
+				sScale: 1,
123
+				el: img
124
+			};
125
+			this.groups[group].push(imgObj);
126
+			img.__mui_img_data = imgObj;
127
+		}
128
+	};
129
+
130
+
131
+	proto.empty = function() {
132
+		this.scroller.innerHTML = '';
133
+	};
134
+	proto._initImgData = function(itemData, imgEl) {
135
+		if (!itemData.sWidth) {
136
+			var img = itemData.el;
137
+			itemData.sWidth = img.offsetWidth;
138
+			itemData.sHeight = img.offsetHeight;
139
+			var offset = $.offset(img);
140
+			itemData.sTop = offset.top;
141
+			itemData.sLeft = offset.left;
142
+			itemData.sScale = Math.max(itemData.sWidth / window.innerWidth, itemData.sHeight / window.innerHeight);
143
+		}
144
+		imgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')';
145
+	};
146
+
147
+	proto._getScale = function(from, to) {
148
+		var scaleX = from.width / to.width;
149
+		var scaleY = from.height / to.height;
150
+		var scale = 1;
151
+		if (scaleX <= scaleY) {
152
+			scale = from.height / (to.height * scaleX);
153
+		} else {
154
+			scale = from.width / (to.width * scaleY);
155
+		}
156
+		return scale;
157
+	};
158
+	proto._imgTransitionEnd = function(e) {
159
+		var img = e.target;
160
+		img.classList.remove($.className('transitioning'));
161
+		img.removeEventListener('webkitTransitionEnd', this._imgTransitionEnd.bind(this));
162
+	};
163
+	proto._loadItem = function(index, isOpening) { //TODO 暂时仅支持img
164
+		var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (index + 1) + ')'));
165
+		var itemData = this.currentGroup[index];
166
+		var imgEl = itemEl.querySelector('img');
167
+		this._initImgData(itemData, imgEl);
168
+		if (isOpening) {
169
+			var posi = this._getPosition(itemData);
170
+			imgEl.style.webkitTransitionDuration = '0ms';
171
+			imgEl.style.webkitTransform = 'translate3d(' + posi.x + 'px,' + posi.y + 'px,0) scale(' + itemData.sScale + ')';
172
+			imgEl.offsetHeight;
173
+		}
174
+		if (!itemData.loaded && imgEl.getAttribute('data-preview-lazyload')) {
175
+			var self = this;
176
+			self.loader.classList.add($.className('active'));
177
+			//移动位置动画
178
+			imgEl.style.webkitTransitionDuration = '0.5s';
179
+			imgEl.addEventListener('webkitTransitionEnd', self._imgTransitionEnd.bind(self));
180
+			imgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')';
181
+			this.loadImage(imgEl, function() {
182
+				itemData.loaded = true;
183
+				imgEl.src = itemData.lazyload;
184
+				self._initZoom(itemEl, this.width, this.height);
185
+				imgEl.classList.add($.className('transitioning'));
186
+				imgEl.addEventListener('webkitTransitionEnd', self._imgTransitionEnd.bind(self));
187
+				imgEl.setAttribute('style', '');
188
+				imgEl.offsetHeight;
189
+				self.loader.classList.remove($.className('active'));
190
+			});
191
+		} else {
192
+			itemData.lazyload && (imgEl.src = itemData.lazyload);
193
+			this._initZoom(itemEl, imgEl.width, imgEl.height);
194
+			imgEl.classList.add($.className('transitioning'));
195
+			imgEl.addEventListener('webkitTransitionEnd', this._imgTransitionEnd.bind(this));
196
+			imgEl.setAttribute('style', '');
197
+			imgEl.offsetHeight;
198
+		}
199
+		this._preloadItem(index + 1);
200
+		this._preloadItem(index - 1);
201
+	};
202
+	proto._preloadItem = function(index) {
203
+		var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (index + 1) + ')'));
204
+		if (itemEl) {
205
+			var itemData = this.currentGroup[index];
206
+			if (!itemData.sWidth) {
207
+				var imgEl = itemEl.querySelector('img');
208
+				this._initImgData(itemData, imgEl);
209
+			}
210
+		}
211
+	};
212
+	proto._initZoom = function(zoomWrapperEl, zoomerWidth, zoomerHeight) {
213
+		if (!this.options.zoom) {
214
+			return;
215
+		}
216
+		if (zoomWrapperEl.getAttribute('data-zoomer')) {
217
+			return;
218
+		}
219
+		var zoomEl = zoomWrapperEl.querySelector($.classSelector('.zoom'));
220
+		if (zoomEl.tagName === 'IMG') {
221
+			var self = this;
222
+			var maxZoom = self._getScale({
223
+				width: zoomWrapperEl.offsetWidth,
224
+				height: zoomWrapperEl.offsetHeight
225
+			}, {
226
+				width: zoomerWidth,
227
+				height: zoomerHeight
228
+			});
229
+			$(zoomWrapperEl).zoom({
230
+				maxZoom: Math.max(maxZoom, 1)
231
+			});
232
+		} else {
233
+			$(zoomWrapperEl).zoom();
234
+		}
235
+	};
236
+	proto.loadImage = function(imgEl, callback) {
237
+		var onReady = function() {
238
+			callback && callback.call(this);
239
+		};
240
+		var img = new Image();
241
+		img.onload = onReady;
242
+		img.onerror = onReady;
243
+		img.src = imgEl.getAttribute('data-preview-lazyload');
244
+	};
245
+	proto.getRangeByIndex = function(index, length) {
246
+		return {
247
+			from: 0,
248
+			to: length - 1
249
+		};
250
+		//		var from = Math.max(index - 1, 0);
251
+		//		var to = Math.min(index + 1, length);
252
+		//		if (index === length - 1) {
253
+		//			from = Math.max(length - 3, 0);
254
+		//			to = length - 1;
255
+		//		}
256
+		//		if (index === 0) {
257
+		//			from = 0;
258
+		//			to = Math.min(2, length - 1);
259
+		//		}
260
+		//		return {
261
+		//			from: from,
262
+		//			to: to
263
+		//		};
264
+	};
265
+
266
+	proto._getPosition = function(itemData) {
267
+		var sLeft = itemData.sLeft - window.pageXOffset;
268
+		var sTop = itemData.sTop - window.pageYOffset;
269
+		var left = (window.innerWidth - itemData.sWidth) / 2;
270
+		var top = (window.innerHeight - itemData.sHeight) / 2;
271
+		return {
272
+			left: sLeft,
273
+			top: sTop,
274
+			x: sLeft - left,
275
+			y: sTop - top
276
+		};
277
+	};
278
+	proto.refresh = function(index, groupArray) {
279
+		this.currentGroup = groupArray;
280
+		//重新生成slider
281
+		var length = groupArray.length;
282
+		var itemHtml = [];
283
+		var currentRange = this.getRangeByIndex(index, length);
284
+		var from = currentRange.from;
285
+		var to = currentRange.to + 1;
286
+		var currentIndex = index;
287
+		var className = '';
288
+		var itemStr = '';
289
+		var wWidth = window.innerWidth;
290
+		var wHeight = window.innerHeight;
291
+		for (var i = 0; from < to; from++, i++) {
292
+			var itemData = groupArray[from];
293
+			var style = '';
294
+			if (itemData.sWidth) {
295
+				style = '-webkit-transform:translate3d(0,0,0) scale(' + itemData.sScale + ');transform:translate3d(0,0,0) scale(' + itemData.sScale + ')';
296
+			}
297
+			itemStr = itemTemplate.replace('{{src}}', itemData.src).replace('{{lazyload}}', itemData.lazyload).replace('{{style}}', style);
298
+			if (from === index) {
299
+				currentIndex = i;
300
+				className = $.className('active');
301
+			} else {
302
+				className = '';
303
+			}
304
+			itemHtml.push(itemStr.replace('{{className}}', className));
305
+		}
306
+		this.scroller.innerHTML = itemHtml.join('');
307
+		this.element.style.display = 'block';
308
+		this.element.classList.add($.className('preview-in'));
309
+		this.lastIndex = currentIndex;
310
+		this.element.offsetHeight;
311
+		$(this.element).slider().gotoItem(currentIndex, 0);
312
+		this.indicator && (this.indicator.innerText = (currentIndex + 1) + '/' + this.currentGroup.length);
313
+		this._loadItem(currentIndex, true);
314
+	};
315
+	proto.openByGroup = function(index, group) {
316
+		index = Math.min(Math.max(0, index), this.groups[group].length - 1);
317
+		this.refresh(index, this.groups[group]);
318
+	};
319
+	proto.open = function(index, group) {
320
+		if (this.isShown()) {
321
+			return;
322
+		}
323
+		if (typeof index === "number") {
324
+			group = group || defaultGroupName;
325
+			this.addImages(group, index); //刷新当前group
326
+			this.openByGroup(index, group);
327
+		} else {
328
+			group = index.getAttribute('data-preview-group');
329
+			group = group || defaultGroupName;
330
+			this.addImages(group, index); //刷新当前group
331
+			this.openByGroup(this.groups[group].indexOf(index.__mui_img_data), group);
332
+		}
333
+	};
334
+	proto.close = function(index, group) {
335
+		if (!this.isShown()) {
336
+			return;
337
+		}
338
+		this.element.classList.remove($.className('preview-in'));
339
+		this.element.classList.add($.className('preview-out'));
340
+		var itemEl = this.scroller.querySelector($.classSelector('.slider-item:nth-child(' + (this.lastIndex + 1) + ')'));
341
+		var imgEl = itemEl.querySelector('img');
342
+		if (imgEl) {
343
+			imgEl.classList.add($.className('transitioning'));
344
+			var itemData = this.currentGroup[this.lastIndex];
345
+			var posi = this._getPosition(itemData);
346
+			var sLeft = posi.left;
347
+			var sTop = posi.top;
348
+			if (sTop > window.innerHeight || sLeft > window.innerWidth || sTop < 0 || sLeft < 0) { //out viewport
349
+				imgEl.style.opacity = 0;
350
+				imgEl.style.webkitTransitionDuration = '0.5s';
351
+				imgEl.style.webkitTransform = 'scale(' + itemData.sScale + ')';
352
+			} else {
353
+				if (this.options.zoom) {
354
+					$(imgEl.parentNode.parentNode).zoom().toggleZoom(0);
355
+				}
356
+				imgEl.style.webkitTransitionDuration = '0.5s';
357
+				imgEl.style.webkitTransform = 'translate3d(' + posi.x + 'px,' + posi.y + 'px,0) scale(' + itemData.sScale + ')';
358
+			}
359
+		}
360
+		var zoomers = this.element.querySelectorAll($.classSelector('.zoom-wrapper'));
361
+		for (var i = 0, len = zoomers.length; i < len; i++) {
362
+			$(zoomers[i]).zoom().destroy();
363
+		}
364
+		$(this.element).slider().destroy();
365
+//		this.empty();
366
+	};
367
+	proto.isShown = function() {
368
+		return this.element.classList.contains($.className('preview-in'));
369
+	};
370
+
371
+	var previewImageApi = null;
372
+	$.previewImage = function(options) {
373
+		if (!previewImageApi) {
374
+			previewImageApi = new PreviewImage(options);
375
+		}
376
+		return previewImageApi;
377
+	};
378
+	$.getPreviewImage = function() {
379
+		return previewImageApi;
380
+	}
381
+
382
+})(mui, window);

+ 322 - 0
WebChat/js/mui.zoom.js

@@ -0,0 +1,322 @@
1
+(function($, window) {
2
+	var CLASS_ZOOM = $.className('zoom');
3
+	var CLASS_ZOOM_SCROLLER = $.className('zoom-scroller');
4
+
5
+	var SELECTOR_ZOOM = '.' + CLASS_ZOOM;
6
+	var SELECTOR_ZOOM_SCROLLER = '.' + CLASS_ZOOM_SCROLLER;
7
+
8
+	var EVENT_PINCH_START = 'pinchstart';
9
+	var EVENT_PINCH = 'pinch';
10
+	var EVENT_PINCH_END = 'pinchend';
11
+	if ('ongesturestart' in window) {
12
+		EVENT_PINCH_START = 'gesturestart';
13
+		EVENT_PINCH = 'gesturechange';
14
+		EVENT_PINCH_END = 'gestureend';
15
+	}
16
+	$.Zoom = function(element, options) {
17
+		var zoom = this;
18
+
19
+		zoom.options = $.extend($.Zoom.defaults, options);
20
+
21
+		zoom.wrapper = zoom.element = element;
22
+		zoom.scroller = element.querySelector(SELECTOR_ZOOM_SCROLLER);
23
+		zoom.scrollerStyle = zoom.scroller && zoom.scroller.style;
24
+
25
+		zoom.zoomer = element.querySelector(SELECTOR_ZOOM);
26
+		zoom.zoomerStyle = zoom.zoomer && zoom.zoomer.style;
27
+
28
+		zoom.init = function() {
29
+			//自动启用
30
+			$.options.gestureConfig.pinch = true;
31
+			$.options.gestureConfig.doubletap = true;
32
+			zoom.initEvents();
33
+		};
34
+
35
+		zoom.initEvents = function(detach) {
36
+			var action = detach ? 'removeEventListener' : 'addEventListener';
37
+			var target = zoom.scroller;
38
+
39
+			target[action](EVENT_PINCH_START, zoom.onPinchstart);
40
+			target[action](EVENT_PINCH, zoom.onPinch);
41
+			target[action](EVENT_PINCH_END, zoom.onPinchend);
42
+
43
+			target[action]($.EVENT_START, zoom.onTouchstart);
44
+			target[action]($.EVENT_MOVE, zoom.onTouchMove);
45
+			target[action]($.EVENT_CANCEL, zoom.onTouchEnd);
46
+			target[action]($.EVENT_END, zoom.onTouchEnd);
47
+
48
+			target[action]('drag', zoom.dragEvent);
49
+			target[action]('doubletap', zoom.doubleTapEvent);
50
+		};
51
+		zoom.dragEvent = function(e) {
52
+			if (imageIsMoved || isGesturing) {
53
+				e.stopPropagation();
54
+			}
55
+		};
56
+		zoom.doubleTapEvent = function(e) {
57
+			zoom.toggleZoom(e.detail.center);
58
+		};
59
+		zoom.transition = function(style, time) {
60
+			time = time || 0;
61
+			style['webkitTransitionDuration'] = time + 'ms';
62
+			return zoom;
63
+		};
64
+		zoom.translate = function(style, x, y) {
65
+			x = x || 0;
66
+			y = y || 0;
67
+			style['webkitTransform'] = 'translate3d(' + x + 'px,' + y + 'px,0px)';
68
+			return zoom;
69
+		};
70
+		zoom.scale = function(style, scale) {
71
+			scale = scale || 1;
72
+			style['webkitTransform'] = 'translate3d(0,0,0) scale(' + scale + ')';
73
+			return zoom;
74
+		};
75
+		zoom.scrollerTransition = function(time) {
76
+			return zoom.transition(zoom.scrollerStyle, time);
77
+		};
78
+		zoom.scrollerTransform = function(x, y) {
79
+			return zoom.translate(zoom.scrollerStyle, x, y);
80
+		};
81
+		zoom.zoomerTransition = function(time) {
82
+			return zoom.transition(zoom.zoomerStyle, time);
83
+		};
84
+		zoom.zoomerTransform = function(scale) {
85
+			return zoom.scale(zoom.zoomerStyle, scale);
86
+		};
87
+
88
+		// Gestures
89
+		var scale = 1,
90
+			currentScale = 1,
91
+			isScaling = false,
92
+			isGesturing = false;
93
+		zoom.onPinchstart = function(e) {
94
+			isGesturing = true;
95
+		};
96
+		zoom.onPinch = function(e) {
97
+			if (!isScaling) {
98
+				zoom.zoomerTransition(0);
99
+				isScaling = true;
100
+			}
101
+			scale = (e.detail ? e.detail.scale : e.scale) * currentScale;
102
+			if (scale > zoom.options.maxZoom) {
103
+				scale = zoom.options.maxZoom - 1 + Math.pow((scale - zoom.options.maxZoom + 1), 0.5);
104
+			}
105
+			if (scale < zoom.options.minZoom) {
106
+				scale = zoom.options.minZoom + 1 - Math.pow((zoom.options.minZoom - scale + 1), 0.5);
107
+			}
108
+			zoom.zoomerTransform(scale);
109
+		};
110
+		zoom.onPinchend = function(e) {
111
+			scale = Math.max(Math.min(scale, zoom.options.maxZoom), zoom.options.minZoom);
112
+			zoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale);
113
+			currentScale = scale;
114
+			isScaling = false;
115
+		};
116
+		zoom.setZoom = function(newScale) {
117
+			scale = currentScale = newScale;
118
+			zoom.scrollerTransition(zoom.options.speed).scrollerTransform(0, 0);
119
+			zoom.zoomerTransition(zoom.options.speed).zoomerTransform(scale);
120
+		};
121
+		zoom.toggleZoom = function(position, speed) {
122
+			if (typeof position === 'number') {
123
+				speed = position;
124
+				position = undefined;
125
+			}
126
+			speed = typeof speed === 'undefined' ? zoom.options.speed : speed;
127
+			if (scale && scale !== 1) {
128
+				scale = currentScale = 1;
129
+				zoom.scrollerTransition(speed).scrollerTransform(0, 0);
130
+			} else {
131
+				scale = currentScale = zoom.options.maxZoom;
132
+				if (position) {
133
+					var offset = $.offset(zoom.zoomer);
134
+					var top = offset.top;
135
+					var left = offset.left;
136
+					var offsetX = (position.x - left) * scale;
137
+					var offsetY = (position.y - top) * scale;
138
+					this._cal();
139
+					if (offsetX >= imageMaxX && offsetX <= (imageMaxX + wrapperWidth)) { //center
140
+						offsetX = imageMaxX - offsetX + wrapperWidth / 2;
141
+					} else if (offsetX < imageMaxX) { //left
142
+						offsetX = imageMaxX - offsetX + wrapperWidth / 2;
143
+					} else if (offsetX > (imageMaxX + wrapperWidth)) { //right
144
+						offsetX = imageMaxX + wrapperWidth - offsetX - wrapperWidth / 2;
145
+					}
146
+					if (offsetY >= imageMaxY && offsetY <= (imageMaxY + wrapperHeight)) { //middle
147
+						offsetY = imageMaxY - offsetY + wrapperHeight / 2;
148
+					} else if (offsetY < imageMaxY) { //top
149
+						offsetY = imageMaxY - offsetY + wrapperHeight / 2;
150
+					} else if (offsetY > (imageMaxY + wrapperHeight)) { //bottom
151
+						offsetY = imageMaxY + wrapperHeight - offsetY - wrapperHeight / 2;
152
+					}
153
+					offsetX = Math.min(Math.max(offsetX, imageMinX), imageMaxX);
154
+					offsetY = Math.min(Math.max(offsetY, imageMinY), imageMaxY);
155
+					zoom.scrollerTransition(speed).scrollerTransform(offsetX, offsetY);
156
+				} else {
157
+					zoom.scrollerTransition(speed).scrollerTransform(0, 0);
158
+				}
159
+			}
160
+			zoom.zoomerTransition(speed).zoomerTransform(scale);
161
+		};
162
+
163
+		zoom._cal = function() {
164
+			wrapperWidth = zoom.wrapper.offsetWidth;
165
+			wrapperHeight = zoom.wrapper.offsetHeight;
166
+			imageWidth = zoom.zoomer.offsetWidth;
167
+			imageHeight = zoom.zoomer.offsetHeight;
168
+			var scaledWidth = imageWidth * scale;
169
+			var scaledHeight = imageHeight * scale;
170
+			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);
171
+			imageMaxX = -imageMinX;
172
+			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);
173
+			imageMaxY = -imageMinY;
174
+		};
175
+
176
+		var wrapperWidth, wrapperHeight, imageIsTouched, imageIsMoved, imageCurrentX, imageCurrentY, imageMinX, imageMinY, imageMaxX, imageMaxY, imageWidth, imageHeight, imageTouchesStart = {},
177
+			imageTouchesCurrent = {},
178
+			imageStartX, imageStartY, velocityPrevPositionX, velocityPrevTime, velocityX, velocityPrevPositionY, velocityY;
179
+
180
+		zoom.onTouchstart = function(e) {
181
+			e.preventDefault();
182
+			imageIsTouched = true;
183
+			imageTouchesStart.x = e.type === $.EVENT_START ? e.targetTouches[0].pageX : e.pageX;
184
+			imageTouchesStart.y = e.type === $.EVENT_START ? e.targetTouches[0].pageY : e.pageY;
185
+		};
186
+		zoom.onTouchMove = function(e) {
187
+			e.preventDefault();
188
+			if (!imageIsTouched) return;
189
+			if (!imageIsMoved) {
190
+				wrapperWidth = zoom.wrapper.offsetWidth;
191
+				wrapperHeight = zoom.wrapper.offsetHeight;
192
+				imageWidth = zoom.zoomer.offsetWidth;
193
+				imageHeight = zoom.zoomer.offsetHeight;
194
+				var translate = $.parseTranslateMatrix($.getStyles(zoom.scroller, 'webkitTransform'));
195
+				imageStartX = translate.x || 0;
196
+				imageStartY = translate.y || 0;
197
+				zoom.scrollerTransition(0);
198
+			}
199
+			var scaledWidth = imageWidth * scale;
200
+			var scaledHeight = imageHeight * scale;
201
+
202
+			if (scaledWidth < wrapperWidth && scaledHeight < wrapperHeight) return;
203
+
204
+			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);
205
+			imageMaxX = -imageMinX;
206
+			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);
207
+			imageMaxY = -imageMinY;
208
+
209
+			imageTouchesCurrent.x = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageX : e.pageX;
210
+			imageTouchesCurrent.y = e.type === $.EVENT_MOVE ? e.targetTouches[0].pageY : e.pageY;
211
+
212
+			if (!imageIsMoved && !isScaling) {
213
+				//				if (Math.abs(imageTouchesCurrent.y - imageTouchesStart.y) < Math.abs(imageTouchesCurrent.x - imageTouchesStart.x)) {
214
+				//TODO 此处需要优化,当遇到长图,需要上下滚动时,下列判断会导致滚动不流畅
215
+				if (
216
+					(Math.floor(imageMinX) === Math.floor(imageStartX) && imageTouchesCurrent.x < imageTouchesStart.x) ||
217
+					(Math.floor(imageMaxX) === Math.floor(imageStartX) && imageTouchesCurrent.x > imageTouchesStart.x)
218
+				) {
219
+					imageIsTouched = false;
220
+					return;
221
+				}
222
+				//				}
223
+			}
224
+			imageIsMoved = true;
225
+			imageCurrentX = imageTouchesCurrent.x - imageTouchesStart.x + imageStartX;
226
+			imageCurrentY = imageTouchesCurrent.y - imageTouchesStart.y + imageStartY;
227
+
228
+			if (imageCurrentX < imageMinX) {
229
+				imageCurrentX = imageMinX + 1 - Math.pow((imageMinX - imageCurrentX + 1), 0.8);
230
+			}
231
+			if (imageCurrentX > imageMaxX) {
232
+				imageCurrentX = imageMaxX - 1 + Math.pow((imageCurrentX - imageMaxX + 1), 0.8);
233
+			}
234
+
235
+			if (imageCurrentY < imageMinY) {
236
+				imageCurrentY = imageMinY + 1 - Math.pow((imageMinY - imageCurrentY + 1), 0.8);
237
+			}
238
+			if (imageCurrentY > imageMaxY) {
239
+				imageCurrentY = imageMaxY - 1 + Math.pow((imageCurrentY - imageMaxY + 1), 0.8);
240
+			}
241
+
242
+			//Velocity
243
+			if (!velocityPrevPositionX) velocityPrevPositionX = imageTouchesCurrent.x;
244
+			if (!velocityPrevPositionY) velocityPrevPositionY = imageTouchesCurrent.y;
245
+			if (!velocityPrevTime) velocityPrevTime = $.now();
246
+			velocityX = (imageTouchesCurrent.x - velocityPrevPositionX) / ($.now() - velocityPrevTime) / 2;
247
+			velocityY = (imageTouchesCurrent.y - velocityPrevPositionY) / ($.now() - velocityPrevTime) / 2;
248
+			if (Math.abs(imageTouchesCurrent.x - velocityPrevPositionX) < 2) velocityX = 0;
249
+			if (Math.abs(imageTouchesCurrent.y - velocityPrevPositionY) < 2) velocityY = 0;
250
+			velocityPrevPositionX = imageTouchesCurrent.x;
251
+			velocityPrevPositionY = imageTouchesCurrent.y;
252
+			velocityPrevTime = $.now();
253
+
254
+			zoom.scrollerTransform(imageCurrentX, imageCurrentY);
255
+		};
256
+		zoom.onTouchEnd = function(e) {
257
+			if (!e.touches.length) {
258
+				isGesturing = false;
259
+			}
260
+			if (!imageIsTouched || !imageIsMoved) {
261
+				imageIsTouched = false;
262
+				imageIsMoved = false;
263
+				return;
264
+			}
265
+			imageIsTouched = false;
266
+			imageIsMoved = false;
267
+			var momentumDurationX = 300;
268
+			var momentumDurationY = 300;
269
+			var momentumDistanceX = velocityX * momentumDurationX;
270
+			var newPositionX = imageCurrentX + momentumDistanceX;
271
+			var momentumDistanceY = velocityY * momentumDurationY;
272
+			var newPositionY = imageCurrentY + momentumDistanceY;
273
+
274
+			if (velocityX !== 0) momentumDurationX = Math.abs((newPositionX - imageCurrentX) / velocityX);
275
+			if (velocityY !== 0) momentumDurationY = Math.abs((newPositionY - imageCurrentY) / velocityY);
276
+			var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
277
+
278
+			imageCurrentX = newPositionX;
279
+			imageCurrentY = newPositionY;
280
+
281
+			var scaledWidth = imageWidth * scale;
282
+			var scaledHeight = imageHeight * scale;
283
+			imageMinX = Math.min((wrapperWidth / 2 - scaledWidth / 2), 0);
284
+			imageMaxX = -imageMinX;
285
+			imageMinY = Math.min((wrapperHeight / 2 - scaledHeight / 2), 0);
286
+			imageMaxY = -imageMinY;
287
+			imageCurrentX = Math.max(Math.min(imageCurrentX, imageMaxX), imageMinX);
288
+			imageCurrentY = Math.max(Math.min(imageCurrentY, imageMaxY), imageMinY);
289
+
290
+			zoom.scrollerTransition(momentumDuration).scrollerTransform(imageCurrentX, imageCurrentY);
291
+		};
292
+		zoom.destroy = function() {
293
+			zoom.initEvents(true); //detach
294
+			delete $.data[zoom.wrapper.getAttribute('data-zoomer')];
295
+			zoom.wrapper.setAttribute('data-zoomer', '');
296
+		}
297
+		zoom.init();
298
+		return zoom;
299
+	};
300
+	$.Zoom.defaults = {
301
+		speed: 300,
302
+		maxZoom: 3,
303
+		minZoom: 1,
304
+	};
305
+	$.fn.zoom = function(options) {
306
+		var zoomApis = [];
307
+		this.each(function() {
308
+			var zoomApi = null;
309
+			var self = this;
310
+			var id = self.getAttribute('data-zoomer');
311
+			if (!id) {
312
+				id = ++$.uuid;
313
+				$.data[id] = zoomApi = new $.Zoom(self, options);
314
+				self.setAttribute('data-zoomer', id);
315
+			} else {
316
+				zoomApi = $.data[id];
317
+			}
318
+			zoomApis.push(zoomApi);
319
+		});
320
+		return zoomApis.length === 1 ? zoomApis[0] : zoomApis;
321
+	};
322
+})(mui, window);

Dosya farkı çok büyük olduğundan ihmal edildi
+ 7 - 0
WebChat/js/radialIndicator.min.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 2517 - 0
WebChat/js/webuploader.min.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 6 - 0
WebChat/js/weui.min.js


+ 7 - 2
WebSite/baoguang.html

@@ -186,6 +186,12 @@
186 186
 				</div>
187 187
 			</div>
188 188
 		</div>
189
+		<script id="switchTpl" type="text/html">
190
+		  <!-- 这里的 checked 的状态只是演示 -->
191
+		  <div class="imgs">
192
+		  	<a  href="dongtai-con.html?id={{d.id}}"> {{d.bt}}</a>
193
+		  </div>
194
+		</script>
189 195
 		<script src="js/jquery-1.8.js" ></script>
190 196
 		<script src="js/common/huayi.config.js"></script>
191 197
 		<script src="js/common/huayi.http.js"></script>
@@ -194,8 +200,7 @@
194 200
 	    <script src="js/getClient.js"></script>
195 201
 	    <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
196 202
 		<script src="js/baoguang.js"></script>
197
-		<script>
198
-		</script>
203
+		
199 204
 	</body>
200 205
 
201 206
 </html>

+ 7 - 0
WebSite/dongtai.html

@@ -184,6 +184,13 @@
184 184
 					</div>
185 185
 				</div>
186 186
 			</div>
187
+			<script id="switchTpl" type="text/html">
188
+			  <!-- 这里的 checked 的状态只是演示 -->
189
+			  <div class="imgs">
190
+			  	<a  href="dongtai-con.html?id={{d.id}}"> {{d.bt}}</a>
191
+			  </div>
192
+			</script>
193
+
187 194
 			<script src="js/jquery-1.8.js" ></script>
188 195
 			<script src="js/common/huayi.config.js"></script>
189 196
 			<script src="js/common/huayi.http.js"></script>

+ 1 - 1
WebSite/index.html

@@ -279,7 +279,7 @@
279 279
 											</li>
280 280
 											<li>
281 281
 												<i class="statistics-icon statistics-icon-2"></i>
282
-												<span>县长信箱</span>
282
+												<span>12345信箱</span>
283 283
 												<span id="szxxslCount">0</span>
284 284
 											</li>
285 285
 											<li>