1// js 模åå¼å代ç 示ä¾(æåè½éå åå²) 2;(async function (doc, win) { 3 // ç»éå¤ç 4 const onLogin = () => { 5 // æ ¡éªç¨æ·å 6 const checkUsername = () => { 7 // 1.è·åç¨æ·åçå¼ 8 var username = document.getElementById("username")?.value 9 // 2.å®ä¹æ£åè¡¨è¾¾å¼ 10 var reg_username = /^.{6,12}$/ 11 // 3.夿弿¯å¦ç¬¦å表达å¼çè§å 12 var flag = reg_username.test(username) 13 var s_username = document.getElementById("s_username") 14 if (!flag) { 15 s_username.innerHTML = "ç¨æ·å6-12ä½å符" 16 return false 17 } else { 18 s_username.innerHTML = "" 19 return username 20 } 21 } 22 23 // æ ¡éªå¯ç 24 const checkPassword = () => { 25 var password = document.getElementById("password")?.value 26 var reg_password = /^.{6,12}$/ 27 var flag = reg_password.test(password) 28 var s_password = document.getElementById("s_password") 29 if (!flag) { 30 s_password.innerHTML = "å¯ç 6-12ä½å符" 31 return false 32 } else { 33 s_password.innerHTML = "" 34 return password 35 } 36 } 37 38 function handleLoginEvent(e) { 39 const el = e.target.closest(".side-toolbar-login-authz"); 40 if (!el) return; 41 42 if (!$UserManager.isLogin()) { 43 e.preventDefault(); 44 win.$WinOpen({ 45 event: "open", 46 datas: { key: "LOGIN", url: `/ai/login/` } 47 }); 48 } 49 } 50 51 // ç»å®äºä»¶ 52 document.addEventListener("click", handleLoginEvent); 53 document.addEventListener("touchend", handleLoginEvent); 54 55 // äºä»¶å¤ç 56 doc.addEventListener("click", function (e) { 57 // å¼¹åº 58 e.target.closest(".side-toolbar-login-settings") && win.$WinOpen({ 59 event: "open", 60 datas: { key: "LOGIN", url: `/ai/login/` } 61 }) 62 63 // å ³é 64 e.target.closest(".side-toolbar-login-close") && win.$WinOpen({ 65 event: "close", 66 datas: { key: "LOGIN" } 67 }) 68 69 // ç»é 70 if (e.target.closest(".side-toolbar-login-submit")) { 71 const account = $("#account").parsley() 72 const password = $("#password").parsley() 73 const accountVal = account.$element.val().trim() 74 const passwordVal = password.$element.val().trim() 75 account.$element.val(accountVal) 76 password.$element.val(passwordVal) 77 78 const aOk = account.validate() === true 79 const pOk = password.validate() === true 80 if (!aOk || !pOk) return 81 82 const id = e.currentTarget.id 83 console.log("éªè¯éè¿", id, accountVal, passwordVal) 84 85 // æ¥å£è¯·æ± 86 $Http({ 87 method: "POST", 88 url: "/api/account/loginByPassword", 89 data: { 90 username: accountVal, 91 password: passwordVal 92 } 93 }).then(e => { 94 console.log("@ååºæ°æ®", e) 95 const { data, status, msg } = e 96 if (status === 1) { 97 // åè´®Token 98 $LocalStorage.set("__token__", data) 99 100 // æåæç¤º 101 $Alert(msg || "ç»å½æå") 102 103 // ç»å½è¡¨åå¨ iframe ä¸ï¼é¡»åæ¥é¡¶å±çªå£ç $UserStoreï¼é iframe åºæ¯ä¸ top å³èªèº« 104 const um = (win.top && win.top.$UserManager) ? win.top.$UserManager : $UserManager; 105 um.notifyChanged().finally(() => { 106 win.$WinOpen({ 107 event: "close", 108 datas: { key: "LOGIN" } 109 }) 110 }) 111 } else { 112 $Alert(msg || "ç»é失败") 113 } 114 }) 115 } 116 117 // 注å 118 if (e.target.closest(".side-toolbar-register-submit")) { 119 const account = $("#account").parsley() 120 const password = $("#password").parsley() 121 const accountVal = account.$element.val().trim() 122 const passwordVal = password.$element.val().trim() 123 account.$element.val(accountVal) 124 password.$element.val(passwordVal) 125 126 const aOk = account.validate() === true 127 const pOk = password.validate() === true 128 if (!aOk || !pOk) return 129 130 const id = e.currentTarget.id 131 console.log("éªè¯éè¿", id, accountVal, passwordVal) 132 133 // 注ååéæ°çæ oauth_idï¼è®©æ°è´¦å·ç»å®å ¨æ° IM 身份ï¼ä¸å¤ç¨æ¬æºä¸ä¸ä¸ªç¨æ·æ®çç ___USER__OAUTHIDã 134 // æ¬å¸§ $Oauth 便¬æ¬¡æ³¨å请æ±ç¨ï¼é¡¶å± $Oauth ä¾é¡¶å±é¡µ IM ç¨ï¼reset ä¼åå ¥å ±äº« localStorageï¼ã 135 try { 136 win.$Oauth && win.$Oauth.reset && win.$Oauth.reset() 137 if (win.top && win.top.$Oauth && win.top.$Oauth !== win.$Oauth) win.top.$Oauth.reset() 138 } catch (err) { 139 console.warn("[user] 注ååéæ°çæ oauth_id 失败", err) 140 } 141 142 // æ¥å£è¯·æ± 143 $Http({ 144 method: "POST", 145 url: "/api/account/registerByPassword", 146 data: { 147 username: accountVal, 148 password: passwordVal 149 } 150 }).then(e => { 151 console.log("@ååºæ°æ®", e) 152 const { data, status, msg } = e 153 if (status === 1) { 154 // åè´®Token 155 $LocalStorage.set("__token__", data) 156 157 // æåæç¤º 158 $Alert(msg || "注åæå") 159
160 // 注å表åå¨ iframe ä¸ï¼é¡»åæ¥é¡¶å±çªå£ç $UserStore 161 const um = (win.top && win.top.$UserManager) ? win.top.$UserManager : $UserManager; 162 um.notifyChanged().finally(() => { 163 win.$WinOpen({ 164 event: "close", 165 datas: { key: "LOGIN" } 166 }) 167 }) 168 } else { 169 $Alert(msg || "注å失败") 170 } 171 }) 172 } 173 174 // éåº 175 if (e.target.closest(".side-toolbar-logout-submit")) { 176 $UserManager.logOut() 177 } 178 }) 179 } 180 181 // ç¨æ·èå 182 const onNavMenu = () => { 183 // 1) 头å/触åæé®ï¼å°±è¿æä½åå±å å¼ .user_menuï¼ä¸è¦æ±ç´§é»ï¼ 184 $(document) 185 .off("click.userMenu", ".user_target") 186 .on("click.userMenu", ".user_target", function (e) { 187 e.stopPropagation() 188 e.preventDefault() 189 // æªç»å½æå¼ç»å½å¼¹çª 190 if (!$UserManager.isLogin()) { 191 win.$WinOpen({ 192 event: "open", 193 datas: { key: "LOGIN", url: `/ai/login/` } 194 }); 195 return 196 } 197 198 const $menu = $(this).parent().children(".user_menu") // æ®éå å¼ 199 $(".user_menu.is-open").not($menu).removeClass("is-open") // å å ³å ¶å® 200 $menu.toggleClass("is-open") 201 }) 202 203 // 2) ç¹å»èåé¡¹å ³éå½åèå 204 $(document) 205 .off("click.userMenu", ".user_menu a") 206 .on("click.userMenu", ".user_menu a", function () { 207 $(this).closest(".user_menu").removeClass("is-open") 208 }) 209 210 // 3) ç»å½æé® 211 $(document) 212 .off("click.userMenu", ".user_menu .login_btn") 213 .on("click.userMenu", ".user_menu .login_btn", function (e) { 214 e.stopPropagation() 215 $(".login_dialog").show() 216 $(this).closest(".user_menu").removeClass("is-open") 217 }) 218 219 // 4) éåºæé® 220 $(document) 221 .off("click.userMenu", ".user_menu .logout_btn") 222 .on("click.userMenu", ".user_menu .logout_btn", function (e) { 223 e.stopPropagation() 224 $(this).closest(".user_menu").removeClass("is-open") 225 // TODO: è°ç¨éåºæ¥å£ 226 }) 227 228 // 5) ç¹å»ç©ºç½å¤å ³é 229 $(document) 230 .off("click.userMenuBlank") 231 .on("click.userMenuBlank", function (e) { 232 if (!$(e.target).closest(".user_target, .user_menu").length) { 233 $(".user_menu").removeClass("is-open") 234 } 235 }) 236 } 237 238 // ç¨æ·ç¶æ 239 const onUserMian = () => Launcher({ 240 container: "ai-navigation-container", 241 }) 242 243 // å å¼ä¸å¿(page) 244 const onLoadUserRecharge = () => Launcher({ 245 container: "ai-user-recharge-container", 246 data() { 247 return { 248 isVip: false, 249 userCoins: 0, 250 user_recharge_configs: [], 251 curr_recharge_product: {}, 252 curr_recharge_payment: {}, 253 } 254 }, 255 // 彿°å®ä¹ 256 methods: { 257 // å å¼é ç½® 258 onLoadRechargeMain() { 259 const _this = this; 260 261 // 262 $MessageLoading("å è½½ä¸...") 263 264 // æ¥å£è¯·æ± 265 $Http({ 266 url: "/api/order/goodsList", 267 data: { 268 type: 2 269 } 270 }).then((e)=> { 271 const { data, status, msg, isVip } = e; 272 if (status === 1 && data?.product?.[0].pay?.length) { 273 _this.isVip = isVip; 274 _this.user_recharge_configs = data; 275 _this.curr_recharge_product = data.product[0]; 276 _this.curr_recharge_payment = data.product[0].pay[0]; 277 } 278 }).catch((error) => { 279 console.error('å¤çé误:', error); 280 }).finally(() => { 281 $MessageClose() 282 }); 283 }, 284 285 // æ¸ ééæ© 286 onChangeProduct(e) { 287 const _this = this; 288 if (e?.pay?.length) { 289 _this.curr_recharge_product = e; 290 _this.curr_recharge_payment = e.pay[0]; 291 } 292 }, 293 294 // æ¯ä»éæ© 295 onChangePayment(e) { 296 const _this = this; 297 _this.curr_recharge_payment = e; 298 }, 299 300 // æ¯ä»æäº¤ 301 onPay() { 302 const _this = this; 303 if(!(_this.curr_recharge_product?.id && _this.curr_recharge_payment?.channel)) { 304 $Alert("è¯·éæ©æ¯ä»æ¹å¼") 305 return; 306 } 307 308 $MessageLoading() 309 310 $Http({ 311 method: "POST", 312 url: "/api/order/createPaying", 313 data: { 314 pay_type: _this.user_recharge_configs.channel[0].name, 315 product_id: _this.curr_recharge_product.id, 316 pay_way: _this.curr_recharge_payment.channel 317, 318 } 319 }).then(e => { 320 $MessageClose() 321 const { data, status, msg } = e 322 if (data?.payUrl) { 323 $ShowConfirmDialog({ 324 title: 'æ¯ä»ç¡®è®¤', 325 message: 'æ¯å¦æ¯ä»æå? 请ç¹å»ç¡®è®¤', 326 cancelButtonText: "å ³é", 327 closeable: true 328 }).then(() => { 329 // _this.onLoadRechargeMain(); 330 location.reload(); 331 }).catch(() => { 332 location.reload(); 333 }); 334 const link = document.createElement('a'); 335 link.href = `${data.payUrl}`; 336 link.target = '_blank'; 337 link.rel = 'noopener noreferrer'; 338 document.body.appendChild(link); 339 link.click(); 340 } else { 341 $Alert(msg) 342 } 343 }) 344 }, 345 }, 346 347 // å¯å¨å ¥å£ 348 mounted() { 349 const _this = this 350 $UserManager.refresh().then(res => { 351 this.userCoins = res.money || 0 352 }); //æ´æ°ç¨æ·éå¸ä¿¡æ¯ 353 _this.onLoadRechargeMain(); 354 } 355 }) 356 357 // é叿ç»(page) 358 const onLoadUserRechargeRecord = () => Launcher({ 359 container: "ai-user-recharge-record-container", 360 data() { 361 return { 362 user_recharge_record_list: [], 363 pageOptions: { 364 page: 1, 365 limit: 10, 366 total: 0 367 } 368 } 369 }, 370 // 彿°å®ä¹ 371 methods: { 372 // å å¼é ç½® 373 onLoadUserRechargeRecordList() { 374 const _this = this; 375 $MessageLoading("å è½½ä¸...") 376 const page = _this.pageOptions.page++ 377 // æ¥å£è¯·æ± 378 $Http({ 379 url: "/api/order/pc_orderList", 380 data: { 381 page, 382 limit: _this.pageOptions.limit, 383 type: 2 384 } 385 }).then((e)=> { 386 const { data: { list = [], count = 0 }, status } = e 387 console.log("@e", e); 388 if (status === 1 && list?.length) { 389 _this.user_recharge_record_list = list; 390 _this.pageOptions.total = count; 391 initPageNavigator(page, count, _this.pageOptions.limit, _this.onLoadUserRechargeRecordList) 392 } 393 }).catch((error) => { 394 console.error('å¤çé误:', error); 395 $Alert(msg); 396 }).finally(() => { 397 $MessageClose() 398 }); 399 }, 400 }, 401 beforeDestroy() { 402 this.clip && this.clip.destroy(); 403 }, 404 405 // å¯å¨å ¥å£ 406 mounted() { 407 const _this = this 408 _this.onLoadUserRechargeRecordList(); 409 this.$nextTick(() => { 410 this.clip = new ClipboardJS('.recharge_records_item_title'); // è¿éé¢èªå¨ç»å® clickï¼å§æï¼ 411 this.clip.on('success', e => { $Alert('å¤å¶æå'); e.clearSelection(); }); 412 this.clip.on('error', e => { $Alert('å¤å¶å¤±è´¥'); console.error(e); }); 413 }); 414 } 415 }) 416 417 // #### åå§åå§æ¨¡å(åå§å) #########################################
418 $LoadrManager.moduleExecutor({ 419 // å ¨å±å¤ç 420 'all-funcs': () => { 421 onUserMian(); 422 onNavMenu(); 423 onLogin() 424 }, 425 // é±å å å¼(å表) 426 'ai-user-recharge': () => onLoadUserRecharge(), 427 // é±å å å¼(è®°å½) 428 'ai-user-recharge-record': () => onLoadUserRechargeRecord(), 429 }); 430})(document, window)
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.