1// cache: 2026-10-01 13:37:00 2new Vue({ 3 el: '#app', 4 mixins: [_V], 5 data() { 6 return { 7 convert_redirect : { 8 '/member/baccarat': '/member#/games/baccarat', 9 '/member/poker': '/member#/games/poker', 10 '/member/slot' : '/member#/games/slot', 11 '/member?game=sport': 'sport', 12 '/member?game=lotto': 'lotto', 13 '/member/recommended':'/member#/ref', 14 '/member/deposit': '/member#/deposit', 15 '/member/withdraw': '/member#/withdraw', 16 'member/baccarat': '/member#/games/baccarat', 17 'member/poker': '/member#/games/poker', 18 'member/slot' : '/member#/games/slot', 19 'member?game=sport': 'sport', 20 'member?game=lotto': 'lotto', 21 'member/recommended':'/member#/ref', 22 'member/deposit': '/member#/deposit', 23 'member/withdraw': '/member#/withdraw', 24 }, 25 fm: {tel: '', pin: ''}, 26 remember: false, 27 loading: false, 28 } 29 }, 30 methods: { 31 async submit() { 32 // Prevent spam clicking 33 if (this.loading) return; 34 35 this.redirect_hold = true; 36 if (!/0\d{9}/.test(this.fm.tel)) return modal.error('à¸à¸£à¸¸à¸à¸²à¸à¸£à¸à¸à¹à¸à¸à¸£à¹à¹à¸à¸£à¸¨à¸±à¸à¸à¹à¹à¸«à¹à¸à¸¹à¸à¸à¹à¸à¸'); 37 if (!/^\d{4}$/.test(this.fm.pin)) return modal.error('à¸à¸£à¸¸à¸à¸²à¸à¸£à¸à¸ Pin à¹à¸«à¹à¸à¸¹à¸à¸à¹à¸à¸'); 38 39 // Set loading state and show loading indicator 40 this.loading = true; 41 Swal.fire({ 42 title: 'à¸à¸³à¸¥à¸±à¸à¹à¸à¹à¸²à¸ªà¸¹à¹à¸£à¸°à¸à¸...', 43 allowOutsideClick: false, 44 allowEscapeKey: false,
45 showConfirmButton: false, 46 didOpen: () => { 47 Swal.showLoading(); 48 } 49 }); 50 51 try { 52 if(this.sch.has('target') || this.sch.has('game')) this.force_target = true; 53 let res = await this.easy.callApi('login_pin', this.fm); 54 55 // Close loading indicator 56 Swal.close(); 57 58 if (!res.success) { 59 if(res.data === "à¹à¸à¸à¸£à¹à¹à¸à¸£à¸«à¸£à¸·à¸ pin à¹à¸¡à¹à¸à¸¹à¸à¸à¹à¸à¸"){ 60 res.data = 'à¹à¸à¸à¸£à¹à¹à¸à¸£à¸«à¸£à¸·à¸ pin à¹à¸¡à¹à¸à¸¹à¸à¸à¹à¸à¸'; 61 } 62 this.loading = false; 63 return modal.error(res.data, res.title).then(r=>{ 64 if (res.code === 'ALREADY_LOGIN') return location.replace('/member'); 65 }); 66 } 67 68 Cookies.remove('member_popup_seen'); // new login session -> show welcome popup again on main page 69 70 await modal.success('', 'สำà¹à¸£à¹à¸', 71 { 72 allowOutsideClick: false, 73 showConfirmButton:false, 74 timer: 1200 75 }); 76 if (this.remember) localStorage.setItem('usr_remember', JSON.stringify(this.fm)); 77 else localStorage.removeItem('usr_remember'); 78 79 this.redirect_hold = false; 80 let sch = new URLSearchParams(window.location.search); 81 let redirect = sch.get('redirect'); 82 if(!redirect) return location.replace('/member'); 83 let pathname = this.convert_redirect[redirect] ? this.convert_redirect[redirect] : '/member#'; 84 let dest = location.origin + pathname; 85 console.log('login by click menu line !'); 86 switch (this.convert_redirect[redirect]) { 87 case 'sport': location.replace('/member?play_game=sport'); break; 88 case 'lotto': location.replace('/member?play_game=lotto'); break; 89 default: location.replace(dest); 90 } 91 } catch (error) { 92 // Handle any unexpected errors 93 console.error('Login error:', error); 94 Swal.close(); 95 this.loading = false; 96 modal.error('à¹à¸à¸´à¸à¸à¹à¸à¸à¸´à¸à¸à¸¥à¸²à¸ à¸à¸£à¸¸à¸à¸²à¸¥à¸à¸à¹à¸«à¸¡à¹à¸à¸µà¸à¸à¸£à¸±à¹à¸: ' + (error.message || error)); 97 } 98 } 99 100 }, 101 watch: { 102 'fm.tel'(val) { 103 if (val.length >= 10) $('#pinBox').focus(); 104 }, 105 'fm.pin'(val) { 106 if (val.length === 4) $('#btnLog').focus(); 107 } 108 }, 109 async created() { 110 console.log('[login created.]'); 111 112 let remember = localStorage.getItem('usr_remember'); 113 if (remember) { 114 this.fm = JSON.parse(remember); 115 this.remember = true; 116 } 117 const sch = this.sch; 118 if (sch.has('tel')) { 119 this.fm.tel = sch.get('tel'); 120 if (!sch.has('pin')) return; 121 this.fm.pin = sch.get('pin'); 122 this.submit(); 123 } 124 if (sch.has('lid') && sch.has('hid')) { 125 126 if (!sch.has('redirect')) return; 127 128 let to = sch.get('redirect'); 129 if (!this.convert_redirect[to]) return; 130 await this.$root.logout(true); 131 let rs = await this.$root.easy.callApi('login_line', {lid: sch.get('lid'), hid: sch.get('hid')}); 132 if (!rs.success) return; 133 console.log('auto login by click menu line !'); 134 switch (this.convert_redirect[to]) { 135 case 'sport': location.replace('/member?play_game=sport'); break; 136 case 'lotto': location.replace('/member?play_game=lotto'); break; 137 default: this.convert_redirect[to] ? location.replace(location.origin + this.convert_redirect[to]) : location.replace(location.origin+'/member#'); 138 } 139 } 140 }, 141});
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.