1/** 2 * æè¦åä¿¡é¡µé¢ JavaScript 3 */ 4 5var pageConfig = { 6 commonUrl: "https://www.mabian.gov.cn/mbyzzzx", 7 // APIæ¥å£å°å 8 api: { 9 checkLogin: "/secure/member/checkLogin", // æ£æ¥ç»å½ç¶æ 10 getMailbox: "/front/mail/box/boxDetail?id=676425066991749", // è·åä¿¡ç®±é ç½® 11 getInfoTypes: "/front/mail/box/mailTypeTree?source=SYNC", // è·åä¿¡ä»¶ç±»å« 12 generateCaptcha: "/front/verificationcode/generate", // çæå¾çéªè¯ç 13 save: "/front/mail/box/write", // ä¿åä¿¡ä»¶ 14 sendSmsCode: "/front/sendverifycode/phone", // åéçä¿¡éªè¯ç ï¼GET ?phone=xxxï¼ 15 }, 16}; 17// ç»å½è·³è½¬å°å 18pageConfig.loginUrl = 19 "https://www.leshan.gov.cn/auth/c/login.shtml?platform=zwfw&redirect_uri=" + 20 encodeURIComponent(pageConfig.commonUrl + "/wyxx/index.html"); 21// 页颿°æ® 22var pageData = { 23 infoTypes: [], // ä¿¡ä»¶ç±»å«å表 24 department: null, // é¨é¨ä¿¡æ¯ 25 validCodeReqNo: "", // éªè¯ç /çä¿¡éªè¯ç 请æ±å· 26 isSubmitting: false, // æ¯å¦æ£å¨æäº¤ä¸ 27 mailboxConfig: null, // ä¿¡ç®±é ç½® 28 verifyType: 0, // éªè¯ç±»åï¼0=䏿 ¡éªã1=çä¿¡éªè¯ç ã2=å¾å½¢éªè¯ç 29 userInfo: null, // ç¨æ·ä¿¡æ¯ 30 smsCountdown: 0, // çä¿¡å计æ¶å©ä½ç§æ° 31 smsTimer: null, // çä¿¡å计æ¶å®æ¶å¨ 32}; 33function showDisabledNotice() { 34 if (window.layer && layer.confirm) { 35 var w = "540px"; 36 var h = "auto"; 37 if (window.screen.width < 768) { 38 w = "90%"; 39 h = "auto"; 40 } 41 var cf = layer.confirm( 42 '<div style="margin-top:6px; font-size:14px; line-height:22px; text-align:left; text-indent:2em;">为è¿ä¸æ¥ä¼åâå¿è¿å¿åä¿¡âåè½æå¡è´¨éï¼âå¿è¿å¿ä¿¡ç®±âåä¿¡åè½å°äº2025å¹´11æ26æ¥è³2026å¹´7æ17æ¥è¿è¡å级æ¹é ãå级æé´ï¼è¯¥åè½å°ææ¶æ æ³ä½¿ç¨ï¼ä¸ºç¡®ä¿æ¨çåçè¯æ±å¾å°åæ¶å¤çï¼å级æé´å¯éè¿ä»¥ä¸æ¸ éèç³»æä»¬ï¼å¿è¿å¿æå¡ç线ï¼0833-12345ã带æ¥çä¸ä¾¿æ¬è¯·è° è§£ã</div>', 43 { 44 btn: ["å ³é"], 45 title: false, 46 shade: 0.7, 47 area: [w, h], 48 shadeClose: true, 49 }, 50 function () { 51 layer.close(cf); 52 history.go(-1); 53 }, 54 ); 55 return; 56 } 57 alert( 58 "为è¿ä¸æ¥ä¼åâå¿è¿å¿åä¿¡âåè½æå¡è´¨éï¼âå¿è¿å¿ä¿¡ç®±âåä¿¡åè½å°äº2025å¹´11æ26æ¥è³2026å¹´7æ17æ¥è¿è¡å级æ¹é ãå级æé´ï¼è¯¥åè½å°ææ¶æ æ³ä½¿ç¨ï¼ä¸ºç¡®ä¿æ¨çåçè¯æ±å¾å°åæ¶å¤çï¼å级æé´å¯éè¿ä»¥ä¸æ¸ éèç³»æä»¬ï¼å¿è¿å¿æå¡ç线ï¼0833-12345ã带æ¥çä¸ä¾¿æ¬è¯·è° è§£ã", 59 ); 60 history.go(-1); 61} 62/** 63 * 页é¢åå§å主æµç¨ 64 */ 65function checkLoginAndRedirect(targetUrl) { 66 // è·åå½å URL ä¸ç token åæ°ï¼ç¨äºä¿æç»å½ç¶æï¼ 67 var urlParams = new URLSearchParams(window.location.search); 68 var tokenInUrl = urlParams.get("token"); 69 var tokenInCookie = getCookieCommon("token"); 70 71 // åªæå½ Cookie éæ²¡ä¸è¥¿ï¼ä¸ URL éæä¸è¥¿æ¶ï¼æåå ¥ 72 if (!tokenInCookie && tokenInUrl) { 73 setCookieCommon("token", tokenInUrl, 7); 74 console.log("æ£æµå°æ°ç»å½ï¼Token å·²åå ¥ cookie"); 75 } 76 // 1. å æ£æ¥ç»å½ç¶æ 77 checkLogin(function (userInfo) { 78 console.log("ç»å½æåï¼å·²å ³éå¼¹çª"); 79 // ç»å½éªè¯éè¿åï¼ç»§ç»åå§å 80 pageData.userInfo = userInfo; 81 82 // 2. è·åä¿¡ç®±é ç½®ï¼å æ¬æ¯å¦å¯ç¨éªè¯ç ï¼ 83 try { 84 window.location.href = targetUrl; 85 } catch (e) { 86 console.error("ä¸å¡é»è¾åå§åæ¥éï¼ä½ç»å½å·²æå:", e); 87 } 88 }); 89} 90function initPage() { 91 if (window.__WRITELETTER_DISABLED__) { 92 showDisabledNotice(); 93 return; 94 } 95 console.log("页é¢åå§åå¼å§"); 96 // è·åå½å URL ä¸ç token åæ°ï¼ç¨äºä¿æç»å½ç¶æï¼ 97 var urlParams = new URLSearchParams(window.location.search); 98 var token = urlParams.get("token") || ""; 99 100 // 妿 URL 䏿 tokenï¼åå ¥ cookie 101 if (token) { 102 setCookieCommon("token", token, 7);
103 console.log("Token å·²åå ¥ cookie:", getCookieCommon("token")); 104 } 105 106 // 1. å æ£æ¥ç»å½ç¶æ 107 checkLogin(function (userInfo) { 108 // ç»å½éªè¯éè¿åï¼ç»§ç»åå§å 109 pageData.userInfo = userInfo; 110 111 // 2. è·åä¿¡ç®±é ç½®ï¼å æ¬æ¯å¦å¯ç¨éªè¯ç ï¼ 112 getMailboxConfig(function () { 113 // 3. 设置å½åæ¶é´ 114 // setCurrentDate(); 115 116 // 4. å¡«å ç¨æ·ä¿¡æ¯ 117 fillUserInfo(userInfo); 118 119 // 5. å è½½ä¿¡ä»¶ç±»å« 120 loadInfoTypes(); 121 122 // 6. å è½½é¨é¨ä¿¡æ¯ 123 loadDepartmentInfo(); 124 125 // 7. æ ¹æ®éªè¯ç±»åæ§å¶æ¾ç¤º 126 toggleVerifyUIs(); 127 128 // 8. 妿æ¯å¾å½¢éªè¯ç verifyType = 2ï¼å è½½å¾çéªè¯ç 129 if (pageData.verifyType === 2) { 130 $("#validCode_form").show(); 131 loadCaptcha(); 132 } 133 134 // 9. ç»å®äºä»¶ 135 bindEvents(); 136 137 console.log("页é¢åå§å宿"); 138 }); 139 }); 140} 141 142/** 143 * 设置å½åæ¥æ 144 */ 145function setCurrentDate() { 146 var now = new Date(); 147 var year = now.getFullYear(); 148 var month = String(now.getMonth() + 1).padStart(2, "0"); 149 var day = String(now.getDate()).padStart(2, "0"); 150 151 var dateStr = year + "-" + month + "-" + day; 152 $("#addtime").val(dateStr); 153} 154 155/** 156 * å¡«å ç¨æ·ä¿¡æ¯å°è¡¨å 157 */ 158function fillUserInfo(userInfo) { 159 if (!userInfo) return; 160 161 // å¡«å å§å 162 if (userInfo.name && $("#author").val() === "") { 163 $("#author").val(userInfo.name); 164 } 165 // å¡«å å ¶ä»å¯è½çåæ®µï¼å¦æè¡¨åä¸åå¨ï¼ 166 if (userInfo.phone && $("#tel1").length && $("#tel1").val() === "") { 167 $("#tel1").val(userInfo.phone); 168 } 169 if ( 170 userInfo.idCardNumber && 171 $("#idCard").length && 172 $("#idCard").val() === "" 173 ) { 174 $("#idCard").val(userInfo.idCardNumber); 175 } 176 177 if (userInfo.email && $("#email").length && $("#email").val() === "") { 178 $("#email").val(userInfo.email); 179 } 180 181 console.log("ç¨æ·ä¿¡æ¯å·²å¡«å "); 182} 183 184/** 185 * å è½½ä¿¡ä»¶ç±»å« 186 */ 187function loadInfoTypes() { 188 console.log("å¼å§å 载信件类å«..."); 189 190 $.ajax({ 191 url: pageConfig.api.getInfoTypes, 192 type: "GET", 193 dataType: "json", 194 xhrFields: { 195 withCredentials: true, 196 }, 197 data: { 198 id: "703683639869509", 199 }, 200 success: function (response) { 201 console.log("ä¿¡ä»¶ç±»å«å è½½æå:", response); 202 if (response && response.code === 200) { 203 pageData.infoTypes = response.data; 204 renderInfoTypes(response.data); 205 } 206 }, 207 error: function (xhr, status, error) { 208 console.error("å 载信件类å«å¤±è´¥:", error); 209 }, 210 }); 211} 212 213/** 214 * 渲æä¿¡ä»¶ç±»å«ï¼ä»æ¥å£è·åï¼ 215 */ 216function renderInfoTypes(infoTypes) { 217 var html = ""; 218 219 $.each(infoTypes, function (index, item) { 220 var checked = index === 0 ? "checked" : ""; 221 var radioId = "infoType_" + item.code; 222 223 html += 224 '<input name="mailType" id="' + 225 radioId + 226 '" type="radio" value="' + 227 item.code + 228 '" ' + 229 checked + 230 ">"; 231 html += 232 '<label for="' + 233 radioId + 234 '"><span style="margin-right: 15px;">' + 235 item.name + 236 "</span></label>"; 237 }); 238 239 if (html === "") { 240 html = '<span style="color: #999;">ææ ä¿¡ä»¶ç±»å«</span>'; 241 } 242 243 $("#letterTypeContainer").html(html); 244} 245 246/** 247 * 设置åºå®æ¶ä¿¡äºº 248 */ 249function loadDepartmentInfo() { 250 // åºå®æ¶ä¿¡äººä¸ºå¤¹æ±å¿æ¿åºåå ¬å®¤ 251 var departmentName = "é©¬è¾¹å½æèªæ²»å¿æ¿åºåå ¬å®¤"; 252 var departmentId = "32335960"; // åºå®åºåID 253 254 // 设置åºåä¿¡æ¯ 255 $("#bm1").val(departmentName); 256 $("#regionId").val(departmentId); 257 258 // ä¿åå°é¡µé¢æ°æ® 259 pageData.department = { 260 id: departmentId, 261 name: departmentName, 262 }; 263} 264 265/** 266 * 忢éªè¯åºåæ¾ç¤º 267 */ 268function toggleVerifyUIs() { 269 if (pageData.verifyType === 2) { 270 // å¾å½¢éªè¯ç 271 $("#validCode_form").show(); 272 $("#phone_form").hide(); 273 $("#smsCode_form").hide(); 274 } else if (pageData.verifyType === 1) { 275 // çä¿¡éªè¯ç 276 $("#validCode_form").hide(); 277 $("#phone_form").show(); 278 $("#smsCode_form").show(); 279 } else { 280 // 䏿 ¡éª 281 $("#validCode_form").hide(); 282 $("#phone_form").hide(); 283 $("#smsCode_form").hide(); 284 } 285} 286 287/** 288 * ç»å®é¡µé¢äºä»¶ 289 */ 290function bindEvents() { 291 // æ¸ çæ§äºä»¶ 292 $("#randImage").off("click");
293 $("#submitBtn").off("click"); 294 $("#sendcode").off("click"); 295 296 // éªè¯ç±»åç¸å ³äºä»¶ 297 if (pageData.verifyType === 2) { 298 // å¾å½¢éªè¯ç ï¼ç¹å»å·æ° 299 $("#randImage").on("click", loadCaptcha); 300 } else if (pageData.verifyType === 1) { 301 // çä¿¡éªè¯ç ï¼åééªè¯ç 302 $("#sendcode").on("click", function () { 303 sendSmsCode(); 304 }); 305 } 306 307 // æäº¤æé® 308 $("#submitBtn").on("click", submitForm); 309 310 // ä¿¡ä»¶å 容é¿åº¦éªè¯ 311 $("#content").on("blur", function () { 312 if (this.value.length > 1000) { 313 alert("对ä¸èµ·ï¼è¶ è¿1000å符ï¼è¯·ç®ææè¿°ä½ çé®é¢ï¼"); 314 } 315 }); 316} 317 318/** 319 * å è½½å¾çéªè¯ç ï¼verifyType=2ï¼ 320 */ 321function loadCaptcha() { 322 if (pageData.verifyType !== 2) { 323 console.log("éªè¯ç±»å䏿¯å¾å½¢éªè¯ç ï¼è·³è¿å è½½"); 324 return; 325 } 326 327 console.log("å¼å§å è½½å¾å½¢éªè¯ç ..."); 328 329 // æ¾ç¤ºå è½½ç¶æ 330 var winpath = window.location.href; 331 var propath = window.location.pathname; 332 var pos = winpath.indexOf(propath); 333 var localpath = winpath.substring(0, pos); 334 var projectName = propath.substring(0, propath.substring(1).indexOf("/") + 1); 335 var url = localpath + projectName; 336 337 $("#randImage").attr("src", url + "/resource/picture/jiazai.gif"); 338 339 $.ajax({ 340 url: pageConfig.api.generateCaptcha, 341 type: "GET", 342 dataType: "json", 343 xhrFields: { 344 withCredentials: true, 345 }, 346 success: function (result) { 347 console.log("éªè¯ç å è½½æå:", result); 348 349 if (result.code === 200 && result.data) { 350 pageData.validCodeReqNo = result.data.validCodeReqNo; 351 $("#randImage").attr("src", result.data.validCodeBase64); 352 } else { 353 console.error("éªè¯ç å 载失败:", result.msg || "æªç¥é误"); 354 alert("éªè¯ç å 载失败ï¼è¯·å·æ°é¡µé¢éè¯"); 355 } 356 }, 357 error: function (xhr, status, error) { 358 console.error("éªè¯ç å 载失败:", error); 359 alert("éªè¯ç å 载失败ï¼è¯·å·æ°é¡µé¢éè¯"); 360 }, 361 }); 362} 363 364/** 365 * åéçä¿¡éªè¯ç ï¼verifyType=1ï¼å¹¶å¯å¨åè®¡æ¶ 366 */ 367function sendSmsCode() { 368 if (pageData.verifyType !== 1) return; 369 370 var $btn = $("#sendcode"); 371 if ($btn.prop("disabled")) return; 372 373 var phone = $("#tel1").val().trim(); 374 var phoneRe = /^1\d{10}$/; 375 if (!phoneRe.test(phone)) { 376 alert("请è¾å ¥æ£ç¡®ç11使æºå·"); 377 $("#tel1").focus(); 378 return; 379 } 380 381 // å ç¦ç¨æé®ï¼é²æ 382 $btn.prop("disabled", true); 383 384 $.ajax({ 385 url: pageConfig.api.sendSmsCode, 386 type: "GET", 387 dataType: "json", 388 data: { phone: phone }, 389 xhrFields: { withCredentials: true }, 390 success: function (res) { 391 console.log("çä¿¡åéè¿åï¼", res); 392 var ok = false; 393 if (res && res.code === 200) ok = true; 394 395 if (ok) { 396 // ä¿å请æ±å· 397 if (res.data) { 398 pageData.validCodeReqNo = res.data; 399 } 400 alert("éªè¯ç å·²åéï¼è¯·æ³¨ææ¥æ¶ï¼"); 401 startSmsCountdown($btn, 60); 402 } else { 403 var msg = 404 (res && (res.message || res.msg)) || "çä¿¡åé失败ï¼è¯·ç¨åéè¯"; 405 alert(msg); 406 $btn.prop("disabled", false); 407 } 408 }, 409 error: function (xhr, status, error) { 410 console.error("çä¿¡åé失败:", error); 411 alert("çä¿¡åé失败ï¼è¯·ç¨åéè¯"); 412 $btn.prop("disabled", false); 413 }, 414 }); 415} 416 417/** 418 * çä¿¡åè®¡æ¶ 419 */ 420function startSmsCountdown($btn, seconds) { 421 pageData.smsCountdown = seconds; 422 updateSmsButton($btn); 423 pageData.smsTimer = setInterval(function () { 424 pageData.smsCountdown--; 425 if (pageData.smsCountdown <= 0) { 426 clearInterval(pageData.smsTimer); 427 pageData.smsTimer = null; 428 $btn.prop("disabled", false).val("è·åéªè¯ç "); 429 } else { 430 updateSmsButton($btn); 431 } 432 }, 1000); 433} 434 435function updateSmsButton($btn) { 436 $btn.val("éæ°è·å(" + pageData.smsCountdown + "s)"); 437} 438 439/** 440 * æäº¤è¡¨å 441 */ 442function submitForm() { 443 // 鲿¢éå¤æäº¤ 444 if (pageData.isSubmitting) { 445 console.log("æ£å¨æäº¤ä¸ï¼è¯·å¿éå¤æäº¤"); 446 return false; 447 } 448 449 // éªè¯è¡¨å 450 if (!validateForm()) { 451 return false;
452 } 453 454 // è·åè¡¨åæ°æ® 455 var formData = getFormData(); 456 457 console.log("æäº¤æ°æ®:", formData); 458 459 // 设置æäº¤ç¶æ 460 pageData.isSubmitting = true; 461 var $submitBtn = $("#submitBtn"); 462 var originalBtnText = $submitBtn.text(); 463 $submitBtn.prop("disabled", true).text("æäº¤ä¸..."); 464 465 // æäº¤å°å端 466 $.ajax({ 467 url: pageConfig.api.save, 468 type: "POST", 469 data: formData, 470 timeout: 30000, // 30ç§è¶ æ¶ 471 xhrFields: { 472 withCredentials: true, 473 }, 474 success: function (response) { 475 console.log("æäº¤ååº:", response); 476 // å¤çæåååº 477 if (response && response.code === 200) { 478 alert("æäº¤æåï¼æ¨çä¿¡ä»¶å·²æ¶å°ï¼ä¿¡ä»¶ç¼å·ï¼" + (response.data || "")); 479 // æ¸ ç©ºè¡¨å 480 resetForm(); 481 } else { 482 // å¤çä¸å¡å¤±è´¥ 483 var errorMsg = 484 response.message || response.msg || "æäº¤å¤±è´¥ï¼è¯·ç¨åéè¯"; 485 alert(errorMsg); 486 // å¤±è´¥åæ ¹æ®ç±»åå·æ°éªè¯ç 487 if (pageData.verifyType === 2) { 488 loadCaptcha(); 489 } 490 } 491 }, 492 error: function (xhr, status, error) { 493 console.error("æäº¤å¤±è´¥:", { xhr: xhr, status: status, error: error }); 494 alert("æäº¤å¤±è´¥ï¼è¯·ç¨åéè¯"); 495 if (pageData.verifyType === 2) { 496 loadCaptcha(); 497 } 498 }, 499 complete: function () { 500 // æ¢å¤æäº¤æé®ç¶æ 501 pageData.isSubmitting = false; 502 $submitBtn.prop("disabled", false).text(originalBtnText); 503 }, 504 }); 505} 506 507/** 508 * é置表å 509 */ 510function resetForm() { 511 // åªæ¸ ç©ºç¨æ·å¡«åçåæ®µï¼ä¿çåä¿¡æ¶é´åæ¶ä¿¡äºº 512 $("#author").val(""); // æ¸ ç©ºå§å 513 $("#address").val(""); // æ¸ ç©ºèç³»å°å 514 $("#title").val(""); // æ¸ ç©ºä¿¡ä»¶ä¸»é¢ 515 $("#content").val(""); // æ¸ ç©ºä¿¡ä»¶å 容 516 517 if (pageData.verifyType === 2) { 518 // å¾å½¢éªè¯ç 519 $("#captcha").val(""); 520 loadCaptcha(); 521 } else if (pageData.verifyType === 1) { 522 // çä¿¡éªè¯ç 523 $("#tel1").val(""); 524 $("#smsCode").val(""); 525 // éç½®çä¿¡æé® 526 if (pageData.smsTimer) { 527 clearInterval(pageData.smsTimer); 528 pageData.smsTimer = null; 529 } 530 pageData.smsCountdown = 0; 531 $("#sendcode").prop("disabled", false).val("è·åéªè¯ç "); 532 } 533 534 // éæ°æ¸²æä¿¡ä»¶ç±»å«ï¼ä¿æéä¸ç¬¬ä¸ä¸ªï¼ 535 if (pageData.infoTypes && pageData.infoTypes.length > 0) { 536 renderInfoTypes(pageData.infoTypes); 537 } 538 539 console.log("表åå·²éç½®ï¼ä¿çåä¿¡æ¶é´åæ¶ä¿¡äººï¼"); 540} 541 542/** 543 * 表åéªè¯ 544 */ 545function validatePhone(value, label) { 546 if (!value) { 547 return { ok: false, errors: [label + "ä¸è½ä¸ºç©ºï¼"] }; 548 } 549 if (!/^1\d{10}$/.test(value)) { 550 return { ok: false, errors: [label + "æ ¼å¼ä¸æ£ç¡®ï¼è¯·è¾å ¥11使æºå·"] }; 551 } 552 return { ok: true }; 553} 554 555// 16.2 身份è¯å·æ ¡éªï¼åºæ¬æ ¼å¼ï¼ 556function validateIdCard(value, label) { 557 if (!value) { 558 return { ok: false, errors: [label + "ä¸è½ä¸ºç©ºï¼"] }; 559 } 560 if (!/^\d{15}(\d{2}[0-9Xx])?$/.test(value)) { 561 return { 562 ok: false, 563 errors: [label + "æ ¼å¼ä¸æ£ç¡®ï¼è¯·è¾å ¥15æ18ä½èº«ä»½è¯å·"], 564 }; 565 } 566 return { ok: true }; 567} 568 569// 16.3 é®ç®±æ ¡éª 570function validateEmail(value, label) { 571 if (!value) { 572 return { ok: false, errors: [label + "ä¸è½ä¸ºç©ºï¼"] }; 573 } 574 var re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; 575 if (!re.test(value)) { 576 return { ok: false, errors: [label + "æ ¼å¼ä¸æ£ç¡®ï¼è¯·è¾å ¥ææé®ç®±å°å"] }; 577 } 578 return { ok: true }; 579} 580 581// 16.4 䏿å å®¹æ ¡éªï¼å§åãå°åã主é¢ãå å®¹ï¼ 582function validateChineseContent(value, label, maxLength) { 583 if (!value) { 584 return { ok: false, errors: [label + "ä¸è½ä¸ºç©ºï¼"] }; 585 } 586 587 var cleaned = value 588 .replace(/[\x00-\x1F\x7F]+/g, "") 589 .replace(/\s+/g, " ") 590 .trim(); 591 if (!cleaned) { 592 return { ok: false, errors: [label + "ä¸è½ä¸ºç©ºæå ¨æ¯æ æå符ï¼"] }; 593 } 594 595 var chineseMatches = cleaned.match(/[\u4e00-\u9fff]/g); 596 if (!chineseMatches || chineseMatches.length < 2) { 597 return { ok: false, errors: [label + "æ æä¹ï¼è¯·å é¤"] }; 598 } 599 600 var punctList = [ 601 "ï¼", 602 "ã", 603 "ï¼", 604 "ï¼", 605 "ï¼", 606 "ï¼", 607 "ã", 608 "ï¼", 609 ",", 610 ".", 611 "?", 612 "!", 613 ";", 614 ":", 615 "(", 616 ")", 617 "ï¼", 618 "ï¼", 619 "[", 620 "]", 621 "ã", 622 "ã", 623 "{", 624 "}", 625 "ã", 626 "ã", 627 "â", 628 "â", 629 "-", 630 "â¦", 631 "·", 632 '"', 633 "'", 634 "ã", 635 "ã", 636 "/", 637 "\\", 638 ]; 639 var escapeForCharClass = function (s) { 640 return s.replace(/[-\\\]\^]/g, "\\$&"); 641 }; 642 var punctEscaped = punctList.map(escapeForCharClass).join(""); 643 var allowedClass = "\\u4e00-\\u9fffA-Za-z0-9\\s" + punctEscaped; 644 var forbiddenSeqRe = new RegExp("[^" + allowedClass + "]+", "gu"); 645 var forbiddenSeqMatches = cleaned.match(forbiddenSeqRe) || []; 646 647 var longForbidden = forbiddenSeqMatches.find(function (s) { 648 return s.length >= 5; 649 }); 650 if (longForbidden) { 651 return { 652 ok: false, 653 errors: [label + "ä¸åå¨è¿ç»æ æå符ï¼" + longForbidden + "ï¼è¯·å é¤"], 654 }; 655 } 656 657 var maxRepeat = 1, 658 cur = 1, 659 char = ""; 660 for (var i = 1; i < cleaned.length; i++) { 661 if (cleaned[i] === cleaned[i - 1]) { 662 cur++; 663 if (cur > maxRepeat) { 664 maxRepeat = cur; 665 char = cleaned[i]; 666 } 667 if (maxRepeat >= 5) { 668 return { 669 ok: false, 670 errors: [ 671 label + 672 "ä¸å符 " + 673 char + 674 " è¿ç»åºç°è¶ è¿ " + 675 maxRepeat + 676 " 次ï¼è¯·å é¤å¤ä½éå¤", 677 ], 678 }; 679 } 680 } else { 681 cur = 1; 682 } 683 } 684 685 var longLettersRe = /[A-Za-z]{5,}/g; 686 var longLettersMatch = cleaned.match(longLettersRe); 687 if (longLettersMatch) { 688 var example = 689 longLettersMatch[0].slice(0, 10) + 690 (longLettersMatch[0].length > 10 ? "..." : ""); 691 return { 692 ok: false, 693 errors: [label + "ä¸åå¨è¿é¿è±æåæ¯åºåï¼" + example + "ï¼ï¼è¯·å é¤"], 694 }; 695 } 696 697 var totalLen = cleaned.length; 698 var chineseRatio = totalLen > 0 ? chineseMatches.length / totalLen : 0; 699 if (chineseRatio < 0.6) { 700 return { 701 ok: false, 702 errors: [label + "æ±åå æ¯ä¸è¶³60%ï¼è¯·å 餿 æä¹å 容"], 703 }; 704 } 705 706 if (totalLen > maxLength) { 707 return { 708 ok: false, 709 errors: [label + "é¿åº¦è¶ è¿" + maxLength + "å符ï¼è¯·ç²¾ç®ã"], 710 }; 711 } 712 713 return { ok: true }; 714} 715 716// 16.5 ç»ä¸å ¥å£ 717function validateField(rule) { 718 var el = document.getElementById(rule.id); 719 var value = el ? String(el.value).trim() : ""; 720 var label = rule.label || rule.id; 721 722 if (!rule.required && !value) { 723 return { ok: true }; 724 } 725 726 switch (rule.type) { 727 case "phone": 728 return validatePhone(value, label); 729 case "idCard": 730 return validateIdCard(value, label); 731 case "email": 732 return validateEmail(value, label); 733 case "chinese": 734 default: 735 return validateChineseContent(value, label, rule.maxLength || 1000); 736 } 737} 738 739// ============================================================ 740// 17. 表åéªè¯ï¼æ´åæ ¡éªæ¹æ¡äºï¼ 741// ============================================================ 742function validateForm() { 743 var rules = [ 744 { 745 id: "author", 746 label: "å§å", 747 required: true, 748 maxLength: 100, 749 type: "chinese", 750 }, 751 { 752 id: "tel1", 753 label: "ææºå·", 754 required: true, 755 maxLength: 11, 756 type: "phone", 757 },
758 { id: "idCard", label: "身份è¯å·", required: false, type: "idCard" }, 759 { 760 id: "address", 761 label: "èç³»å°å", 762 required: true, 763 maxLength: 100, 764 type: "chinese", 765 }, 766 { 767 id: "title", 768 label: "信件主é¢", 769 required: true, 770 maxLength: 100, 771 type: "chinese", 772 }, 773 { 774 id: "content", 775 label: "ä¿¡ä»¶å 容", 776 required: true, 777 maxLength: 1000, 778 type: "chinese", 779 }, 780 // 妿页颿é®ç®±å段ï¼åæ¶æ³¨éï¼ 781 // { id: "email", label: "é®ç®±", required: false, type: 'email' } 782 ]; 783 784 for (var i = 0; i < rules.length; i++) { 785 var result = validateField(rules[i]); 786 if (!result.ok) { 787 alert(result.errors.join("\n")); 788 var el = document.getElementById(rules[i].id); 789 if (el) el.focus(); 790 return false; 791 } 792 } 793 794 // éå éªè¯ï¼éªè¯ç ãçä¿¡éªè¯ç ï¼ 795 if (pageData.verifyType === 2) { 796 var captcha = $("#captcha").val().trim(); 797 if (!captcha) { 798 alert("请填åéªè¯ç ï¼"); 799 $("#captcha").focus(); 800 return false; 801 } 802 if (captcha.length < 4) { 803 alert("éªè¯ç é¿åº¦ä¸æ£ç¡®ï¼"); 804 $("#captcha").focus(); 805 return false; 806 } 807 } else if (pageData.verifyType === 1) { 808 var sms = $("#smsCode").val().trim(); 809 if (!sms) { 810 alert("请填åçä¿¡éªè¯ç ï¼"); 811 $("#smsCode").focus(); 812 return false; 813 } 814 if (!/^\d{4,6}$/.test(sms)) { 815 alert("çä¿¡éªè¯ç æ ¼å¼ä¸æ£ç¡®ï¼"); 816 $("#smsCode").focus(); 817 return false; 818 } 819 } 820 821 var mailType = $('input[name="mailType"]:checked').val(); 822 if (!mailType) { 823 alert("è¯·éæ©ä¿¡ä»¶ç±»å«ï¼"); 824 return false; 825 } 826 827 return true; 828} 829 830/** 831 * è·åè¡¨åæ°æ® 832 */ 833function getFormData() { 834 var formData = { 835 contactName: $("#author").val().trim(), // å§å â contactName 836 contactAddress: $("#address").val().trim(), // èç³»å°å â contactAddress 837 mailType: $('input[name="mailType"]:checked').val(), // ä¿¡ä»¶ç±»å« â mailType 838 regionId: $("#regionId").val(), // åºåIDï¼æ¿ä»£å departmentIdï¼ 839 title: $("#title").val().trim(), // ä¸»é¢ 840 content: $("#content").val().trim(), // ä¿¡ä»¶å 容 841 contactPhone: $("#tel1").val().trim(), 842 contactIdCard: $("#idCard").val().trim(), 843 mailBoxId: "842843295653967", 844 }; 845 846 if (pageData.verifyType === 2) { 847 // å¾å½¢éªè¯ç 848 formData.validCode = $("#captcha").val().trim(); 849 formData.validCodeReqNo = pageData.validCodeReqNo; 850 } else if (pageData.verifyType === 1) { 851 // çä¿¡éªè¯ç ï¼ä¸å¾å½¢éªè¯ç ä¿æç¸ååæ®µå validCode 852 formData.contactPhone = $("#tel1").val().trim(); 853 formData.validCode = $("#smsCode").val().trim(); 854 formData.validCodeReqNo = pageData.validCodeReqNo || ""; 855 } 856 857 return formData; 858} 859 860/** 861 * æ£æ¥ç»å½ç¶æ 862 * @param {Function} callback - ç»å½æååçåè°å½æ°ï¼åæ°ä¸ºç¨æ·ä¿¡æ¯ 863 */ 864function checkLogin(callback) { 865 console.log("å¼å§æ£æ¥ç»å½ç¶æ..."); 866 867 $.ajax({ 868 url: pageConfig.api.checkLogin, 869 type: "GET", 870 dataType: "json", 871 xhrFields: { 872 withCredentials: true, 873 }, 874 success: function (result) { 875 console.log("ç»å½ç¶ææ£æ¥ç»æ:", result); 876 if (result.code === 401) { 877 // æªç»å½ï¼æ¾ç¤ºç¡®è®¤å¯¹è¯æ¡ 878 console.warn("ç¨æ·æªç»å½ï¼æ¾ç¤ºç»å½ç¡®è®¤å¯¹è¯æ¡"); 879 showLoginConfirm(); 880 } else if (result.code === 200) { 881 // ç»å½æå 882 console.log("ç¨æ·å·²ç»å½"); 883 if (callback && typeof callback === "function") { 884 callback(result.data || {}); 885 } 886 } 887 }, 888 error: function (xhr, status, error) { 889 console.error("ç»å½æ£æ¥è¯·æ±å¤±è´¥:", error); 890 alert("ç½ç»éè¯¯ï¼æ æ³æ£æ¥ç»å½ç¶æï¼è¯·å·æ°é¡µé¢éè¯"); 891 }, 892 }); 893} 894 895/** 896 * æ¾ç¤ºç»å½ç¡®è®¤å¯¹è¯æ¡ 897 */ 898function showLoginConfirm() { 899 // ä½¿ç¨ layer å¼¹æ¡ï¼ç»ä¸æ ·å¼ï¼ 900 var siteName = 901 $("meta[name='SiteName']").attr("content") || 902 $("meta[name='application-name']").attr("content") || 903 "é©¬è¾¹å½æèªæ²»å¿æ¿åºåå ¬å®¤"; 904 var w = "480px";
905 var h = "170px"; 906 907 // ååºå¼éé 908 if (window.screen.width < 768) { 909 w = "90%"; 910 h = "170px"; 911 } 912 913 var cf = layer.confirm( 914 '<div style="margin-top:30px; font-size:16px;">æ¨éè¦ç»å½åæè½ä½¿ç¨"æè¦åä¿¡"åè½ï¼æ¯å¦åå¾ç»å½é¡µé¢ï¼</div>', 915 { 916 btn: ["åå¾ç»å½", "è¿åä¸é¡µ"], 917 title: false, 918 shade: 0.7, 919 area: [w, h], 920 shadeClose: true, 921 }, 922 function () { 923 // ç¹å»"åå¾ç»å½"æé® 924 layer.close(cf); 925 console.log("ç¨æ·éæ©åå¾ç»å½é¡µ"); 926 window.location.href = pageConfig.loginUrl; 927 }, 928 function () { 929 // ç¹å»"è¿åä¸é¡µ"æé® 930 layer.close(cf); 931 console.log("ç¨æ·éæ©è¿åä¸é¡µ"); 932 history.go(-1); 933 }, 934 ); 935} 936 937/** 938 * è·åä¿¡ç®±é ç½®ï¼å æ¬éªè¯ç±»åçï¼ 939 * @param {Function} callback - è·åæååçåè°å½æ° 940 */ 941function getMailboxConfig(callback) { 942 console.log("å¼å§è·åä¿¡ç®±é ç½®..."); 943 944 $.ajax({ 945 url: pageConfig.api.getMailbox, 946 type: "GET", 947 dataType: "json", 948 xhrFields: { 949 withCredentials: true, 950 }, 951 success: function (result) { 952 console.log("ä¿¡ç®±é ç½®è·åç»æ:", result); 953 954 if (result.code === 200 && result.data) { 955 // ä¿åä¿¡ç®±é ç½® 956 pageData.mailboxConfig = result.data; 957 958 // 设置éªè¯ç±»åï¼0=䏿 ¡éªã1=çä¿¡éªè¯ç ã2=å¾å½¢éªè¯ç ï¼ 959 pageData.verifyType = result.data.verifyType || 0; 960 961 console.log( 962 "éªè¯ç±»å:", 963 pageData.verifyType, 964 "(0=䏿 ¡éªã1=çä¿¡éªè¯ç ã2=å¾å½¢éªè¯ç )", 965 ); 966 967 if (callback && typeof callback === "function") { 968 callback(); 969 } 970 } else { 971 console.warn("ä¿¡ç®±é ç½®è·å失败ï¼ä½¿ç¨é»è®¤é ç½®"); 972 // é»è®¤ä½¿ç¨å¾å½¢éªè¯ç ï¼æ´å®å ¨ï¼ 973 pageData.verifyType = 2; 974 975 if (callback && typeof callback === "function") { 976 callback(); 977 } 978 } 979 }, 980 error: function (xhr, status, error) { 981 console.error("ä¿¡ç®±é ç½®è·å请æ±å¤±è´¥:", error); 982 // åçé误æ¶ï¼é»è®¤ä½¿ç¨å¾å½¢éªè¯ç ï¼æ´å®å ¨ï¼ 983 pageData.verifyType = 2; 984 985 if (callback && typeof callback === "function") { 986 callback(); 987 } 988 }, 989 }); 990} 991 992// 页é¢å è½½å®æååå§åï¼å ¼å®¹æ§å¤çï¼ 993// $(document).ready(function () { 994// console.log("jQuery ready"); 995// }); 996 997// å½é¡µé¢å®å ¨å è½½åæ§è¡åå§åï¼å æ¬å¾ççèµæºï¼
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.