PageSourceSearch

https://gogocare.com.tw/tw/mem/login

html gogocare.com.tw collected 2026-09-24 14:06:34 UTC 57,821 bytes, 1,563 lines download raw bytes

1<!doctype html>
2<html lang="zh-TW">
3<head>
4	<meta charset="utf-8">
5	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
7	<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon">
8	<link rel="icon" href="/images/favicon-32.png" sizes="32x32">
9	<link rel="icon" href="/images/favicon-48.png" sizes="48x48">
10	<link rel="icon" href="/images/favicon-96.png" sizes="96x96">
11	
12	<link rel="stylesheet" href="/css/bootstrap.min.css">
13	<link rel="stylesheet" href="/css/style.css?r=20260924220634">
14	<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700%7CMontserrat:300,400,600,700">
15	
16	<link rel="stylesheet" href="/icons/fontawesome/css/fontawesome-all.min.css"><!-- FontAwesome Icons -->
17	<link rel="stylesheet" href="/icons/Iconsmind__Ultimate_Pack/Line%20icons/styles.min.css"><!-- iconsmind.com Icons -->
18	
19	<title>GOGO CARE|台灣長照課程影音平台</title>
20    <meta name="description" content="徹底掌握照護員的基本概念。課程均由專業發證單位培訓員設計,提供豐富的實用練習與真實範例,幫您學以致用。通過結業考試,就能取得認證。" />
vendor: 64 bytes, lines 20-21
20
21		<script src="https://www.google.com/recaptcha/api.js?render=
216LfOSpYiAAAAAL3PIBUBT9gis1j7y43K0g84b2BG
vendor: 14 bytes, lines 21-22
21"></script>
22	
22<script src="/js/libs/jquery-3.3.1.min.js"></script>
22<!--jQuery -->
23	<link href="/js/sweetalert2/sweetalert2.min.css" rel="stylesheet" type="text/css" />
24	
24<script src="/js/sweetalert2/es6-promise.auto.js"></script>
24
25	
25<script src="/js/sweetalert2/sweetalert2.min.js"></script>
25
26	<link rel="stylesheet" href="/js/jquery-ui-1.13.3.custom/jquery-ui.css">
27	
27<script src="/js/jquery-ui-1.13.3.custom/jquery-ui.min.js" defer></script>
27
28	<!-- Google tag (gtag.js) -- LS -->
vendor: 66 bytes, lines 28-29
28
29	<script async src="https://www.googletagmanager.com/gtag/js?id=
29G-QCPS3JN0HE
vendor: 14 bytes, lines 29-30
29"></script>
30	
30<script>
31		
vendor: 138 bytes, lines 31-35
31window.dataLayer = window.dataLayer || [];
32		function gtag(){dataLayer.push(arguments);}
33		gtag('js', new Date());
34
35		gtag('config', '
35G-QCPS3JN0HE
vendor: 6 bytes, lines 35-36
35');
36	
36</script>
36
37	<!-- Google tag (gtag.js) -->
vendor: 66 bytes, lines 37-38
37
38	<script async src="https://www.googletagmanager.com/gtag/js?id=
38G-0TGJ2BVFRH
vendor: 14 bytes, lines 38-39
38"></script>
39	
39<script>
40	
vendor: 135 bytes, lines 40-44
40window.dataLayer = window.dataLayer || [];
41	function gtag(){dataLayer.push(arguments);}
42	gtag('js', new Date());
43
44	gtag('config', '
44G-0TGJ2BVFRH
vendor: 6 bytes, lines 44-45
44');
45	
45</script>
45
46	<style>
47	.autocomplete-item {
48		display: flex;
49		align-items: center;
50	}
51	.autocomplete-item img {
52		margin-right: 10px;
53	}
54	.ui-autocomplete {
55		z-index: 999;
56	}
57	#video-search-header input{
58		width: auto;
59		text-align: left;
60	}
61	#video-search-header select.custom-select{
62		font-size: .9rem;
63		font-weight: bold;
64		border-radius: 0;
65		height: calc(2.25rem + 4px);
66		background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") #f9f9f9 no-repeat right .75rem center/8px 23px;
67	}
68	#video-search-header select.custom-select optgroup{
69		padding: 0.5rem 1.5rem;
70		font-size: 0.875rem;
71		color: #6c757d;
72		white-space: nowrap;
73	}
74	#video-search-header select.custom-select option{
75		padding: 0.25rem 1.5rem;
76		font-size: .9rem;
77		font-weight: 400;
78		color: #212529;
79		white-space: nowrap;
80	}
81	#search-mobile{
82		border :2px solid rgba(0,0,0,.09);
83		background:none;
84		padding: 9px 20px;
85		/* padding: 9px 15px 9px 20px; */
86		margin: 15px auto;
87		/* margin: 15px 0 15px auto; */
88		font-size: 15px;
89		color: #444444;
90		font-family: 'Montserrat', sans-serif;
91		font-weight: 400;
92		width: calc(100% - 40px);
93		/* width: 18%; */
94		height: 49px;
95		border-radius: 30px;
96		/* border-bottom-left-radius: 30px ;
97		border-top-left-radius: 30px; */
98	}
99	#search-mobile:focus{
100		transition-duration: 250ms;
101    	transition-property: all;
102    	transition-timing-function: ease-in-out;	border-color: #80bdff;
103	}
104	#search-mobile:focus {
105		border-color: #80bdff;
106		outline: none;
107	}
108	#search-mobile-nav-pro{
109		position: relative;
110	}
111	#search-mobile-nav-pro input {
112		background-image: none;
113		border-radius: 30px;
114		/*border-bottom-right-radius: 30px;
115		border-top-right-radius: 30px;*/
116		width: calc(100% - 94px);
117		font-size: 15px;
118		margin-top: 0px;
119	}
120	@media only screen and (max-width: 760px) {
121		#search-mobile-nav-pro input {
122			/*width: 60%;*/
123		}
124	}
125		
126		#search-mobile{
127			/* 確保不會遮擋到客製的 arrow */
128            position: relative;
129            z-index: 1;
130
131            /* 隱藏 <select> 預設的箭頭樣式 */
132            appearance: none; /* For modern browsers */
133            -webkit-appearance: none; /* For Safari and Chrome */
134            -moz-appearance: none; /* For Firefox */
135            background: transparent; /* 讓背景透明以防止顯示預設的箭頭背景 */
136		}
137		#search-mobile-nav-pro:before{
138			position: absolute;
139			pointer-events: none;
140			right: 40px;
141			top: 40px;
142			transform: translateY(-25%);
143			width: 0px;
144			height: 0px;
145			content: '';
146			border: 5px solid transparent;
147			border-top: 5px solid #000;
148		}
149	</style>
150</head>
151<body>
152	<div id="sidebar-bg">
153		<header id="videohead-pro" class="sticky-header">
154			<div id="video-logo-background"><a href="/tw/index.html"><img src="/images/logo.svg" alt="Logo"></a></div> 
155			<div id="mobile-bars-icon-pro" class="noselect"><i class="fas fa-bars"></i></div>
156			<div id="mobile-bars-icon-pro" class="noselect mobile_search_btn"><i class="fas fa-search"></i></div>
157			<button class="btn btn-header-pro noselect dis_no_md" onclick="location.href='/tw/mem/login';">登入</button>
158			<button class="btn btn-header-pro noselect dis_no_md" onclick="location.href='/tw/bebusiness.html'">企業加入GOGO CARE</button>
159						<div class="clearfix dis-none m-dis-block"></div>
160			
161							<button onclick="location.href='/tw/help.html'" class="btn btn-header-pro noselect dis_no_md">常見問答</button>
162						
163			<button onclick="location.href='/tw/question.html'" class="btn btn-header-pro noselect dis_no_md">我要提問</button>
164							<!-- 多語系新增 Start -->
165				<button onclick="location.href='/en/global_login.html'" class="btn btn-header-pro noselect dis_no_md"><i class="fas fa-globe"></i> Global Versions</button>
166				<!-- 多語系新增 End -->
167							<form action="/tw/course/search.html" id='srh_form2' name='srh_form2' method='GET'>
168				<div id="search-mobile-nav-pro" class="mobile-searchbar dis-none">
169					<select name="course_kind" id="search-mobile">
170						<!-- <option value="">請選擇</option> -->
171						<option value="" disabled selected hidden style="background: #545b62;">分類找課</option>
172							<!-- <optgroup label="速補積分">
173								<option value="1">當月積分課程</option>
174								<option value="2">下月積分課程</option>
175							</optgroup> -->
176							<optgroup label="積分主類">
177													<option value="p_01">專業課程</option>
178															<option value="p_02">專業品質</option>
179															<option value="p_03">專業倫理</option>
180															<option value="p_04">專業法規</option>
181															<option value="p_05">非積分課程</option>
182															<option value="p_06">積分申請中</option>
183														</optgroup>
184							<optgroup label="特找積分">
185													<option value="c_10">感染管制</option>
186															<option value="c_11">緊急應變</option>
187															<option value="c_12">消防安全</option>
188															<option value="c_13">性別敏感度</option>
189															<option value="c_19">原住民族文化敏感度及能力</option>
190															<option value="c_14">多元族群文化敏感度及能力</option>
191															<option value="c_16">非積分課程</option>
192															<option value="c_20">其他</option>
193															<option value="c_21">積分申請中</option>
194													</optgroup>
195					</select>
196					<input type="text" id="srh_key_word" name="srh_key_word" value="" placeholder="關鍵字,如:消防、緊急應變" aria-label="Search">
197					<button type='submit' class="btn btn-green-pro noselect"><i class="fas fa-search"></i></button>
198				</div>
199			</form>
200			<form action="/tw/course/search.html" id='srh_form' name='srh_form' method='GET'>
201				<div id="video-search-header">
202					<div class="input-group" style="margin-top: 20px; margin-bottom: 20px; margin-left: 20px;">
203						<div class="input-group-prepend">
204						<select name="course_kind" style="width:120px;" class="custom-select form-control">
205							<!-- <option value="">請選擇</option> -->
206							<option value="" disabled selected hidden style="background: #545b62;">分類找課</option>
207							<!-- <optgroup label="速補積分">
208								<option value="1">當月積分課程</option>
209								<option value="2">下月積分課程</option>
210							</optgroup> -->
211							<optgroup label="積分主類">
212													<option value="p_01">專業課程</option>
213															<option value="p_02">專業品質</option>
214															<option value="p_03">專業倫理</option>
215															<option value="p_04">專業法規</option>
216															<option value="p_05">非積分課程</option>
217															<option value="p_06">積分申請中</option>
218														</optgroup>
219							<optgroup label="特找積分">
220													<option value="c_10">感染管制</option>
221															<option value="c_11">緊急應變</option>
222															<option value="c_12">消防安全</option>
223															<option value="c_13">性別敏感度</option>
224															<option value="c_19">原住民族文化敏感度及能力</option>
225															<option value="c_14">多元族群文化敏感度及能力</option>
226															<option value="c_16">非積分課程</option>
227															<option value="c_20">其他</option>
228															<option value="c_21">積分申請中</option>
229														</optgroup>
230						</select>
231						</div>
232						<input style="width:180px;" class="form-control" autocomplete="off" type="text" id="keyword" name="srh_key_word" value="" placeholder="關鍵字,如:消防、緊急應變" aria-label="Search">
233						<button class="btn btn-header-pro noselect dis_no_md btn-green-pro" type="submit">搜尋</button> 
234					</div>
235					<input type="hidden" id="srh_sort" name="srh_sort" value="">
236				</div>
237			</form>
238			<!-- 待完成 end -->
239			<div class="clearfix"></div>
240			<nav id="mobile-navigation-pro">
241			    				<div style="width: 100%; padding: 20px;">
242					<button class="btn btn-mobile-pro btn-green-pro noselect mb-10" onclick="location.href='/tw/teach/login';">教師登入 / 註冊</button>
243					<button class="btn btn-mobile-pro btn-green-pro noselect" onclick="location.href='/tw/mem/login';">學員登入 / 註冊</button>
244					<!-- 多語系新增 Start -->
245					<button class="btn btn-mobile-pro btn-green-pro noselect mt-10" onclick="location.href='/en/global_login.html';"><i class="fas fa-globe"></i> Global Versions</button>
246					<!-- 多語系新增 End -->
247				</div>
248                				<ul id="mobile-menu-pro">
249					<!-- <li class="normal-item-pro ">
250						<a href="/tw/index.html" title="精選推薦"><img class="nav_img nav_1" src="/images/icon/nav_1.svg" alt="精選推薦" /> 精選推薦</a> -->
251					</li>
252										<li class="normal-item-pro ">
253						<a href="/tw/course/list.html" title="所有課程"><img class="nav_img nav_3" src="/images/icon/nav_3.svg" alt="所有課程" /> 所有課程</a>
254					<li>
255					<li class="normal-item-pro ">
256						<a href="/tw/package/list.html" alt="/tw/package/list.html" title="學習套餐"><img class="nav_img nav_4" src="/images/icon/nav_4.svg" alt="學習套餐" /> 學習套餐</a>
257					</li>
258					<li class="normal-item-pro ">
259						<a href="/tw/article.html" title="閱讀好文"><img class="nav_img nav_5" src="/images/icon/nav_5.svg" alt="閱讀好文" /> 閱讀好文</a>
260					</li>
261					<li class="normal-item-pro ">
262						<a href="/tw/events.html" title="最新活動"><img class="nav_img nav_6" src="/images/icon/nav_6.svg" alt="最新活動" /> 最新活動</a>
263					</li>
264					<li class="normal-item-pro ">
265						<a href="/tw/about.html" title="關於我們"><img class="nav_img nav_7" src="/images/icon/nav_7.svg" alt="關於我們" /> 關於我們</a>
266					</li>
267					<li class="normal-item-pro ">
268						<a href="/tw/help.html" title="常見問答"><span class="fa fa-question" style="width: 35px; text-align: center; padding: 3px 0 3px 15px; margin-right: 10px;"></span>常見問答</a>
269					</li>
270				</ul>
271				<div class="clearfix"></div>
272			</nav>
273		</header>
274
275
276
277		<nav id="sidebar-nav">
278			<ul id="vertical-sidebar-nav" class="sf-menu">
279								<li class="normal-item-pro ">
280					<a href="/tw/course/list.html" title="所有課程"><img class="nav_img nav_3" src="/images/icon/nav_3.svg" alt="所有課程" /><br />所有課程</a>
281				</li>
282				<li class="normal-item-pro ">
283					<a href="/tw/package/list.html" alt="/tw/package/list.html" title="學習套餐"><img class="nav_img nav_4" src="/images/icon/nav_4.svg" alt="學習套餐" /><br />學習套餐</a>
284				</li>
285				<li class="normal-item-pro ">
286					<a href="/tw/article.html" title="閱讀好文"><img class="nav_img nav_5" src="/images/icon/nav_5.svg" alt="閱讀好文" /><br />閱讀好文</a>
287				</li>
288				<li class="normal-item-pro ">
289					<a href="/tw/events.html" title="最新活動"><img class="nav_img nav_6" src="/images/icon/nav_6.svg" alt="最新活動" /><br />最新活動</a>
290				</li>
291				<li class="normal-item-pro ">
292					<a href="/tw/about.html" title="關於我們"><img class="nav_img nav_7" src="/images/icon/nav_7.svg" alt="關於我們" /><br />關於我們</a>
293				</li>
294
295			</ul>
296			<div class="clearfix"></div>
297		</nav>
298	
299	<div class="clearfix"></div><style>
300	.mem_logor{
301		position: relative;
302	}
303	.mem_logor:before{
304		content: '';
305		background: #e7e7e7;
306		height: 1px;
307		width: 100%;
308		top: 12px;
309		left: 0;
310		position: absolute;
311	}
312	
313</style>
314
315		<main id="col-main">
316			<div id="pricing-plans-background-image">
317				<div class="container">
318					<div class="registration-steps-page-container">
319					<div class="centered-headings-pro pricing-plans-headings">
320						<h2 style="padding-top: 50px;">歡迎回來GOGO CARE</h2>
321						<!-- <h6>Lorem ipsum dolor sit amet consectetur adipisicing elit. </h6> -->
322					</div>
323					<hr>
324					<div class="p-40" style="padding: 40px;">
325						<h4>快速登入</h4>
326						<p><i class="fas fa-info-circle"></i> 初次使用需先完成一般註冊申請及快速登入設定。</p>
327						<div class="d-flex flex-row justify-content-around col-12 text-center">
328							<a href="javascript:" onclick="google_api('mem','')"><i class="fab fa-google" style="font-size: 3.5em;"></i><p style="padding-top: 5px;">GOOGLE</p></a>
329							<a href="javascript:" onclick="line_api('mem')"><i class="fab fa-line" style="font-size: 3.5em;"></i><p style="padding-top: 5px;">LINE</p></a>
330							<a href="javascript:" data-toggle="modal" data-target="#idno_login"><i class="fas fa-id-card" style="font-size: 3.5em;"></i><p style="padding-top: 5px;">身分證號</p></a>
331						</div>
332						<h4 class="text-center my-3 col-12 mem_logor"><span style="background: #fff; padding: 15px; position:relative; z-index: 3;">或</span></h4>
333						<h4>學員登入</h4>
334						<div id="login_tabs">
335							<div class="login_tabs">
336								<button type="button" class="login_tabs_btn is-active" data-tab="tab2"><i class="far fa-envelope"></i> 帳號密碼</button>
337								<button type="button" class="login_tabs_btn" data-tab="tab1"><i class="fas fa-mobile-alt"></i> 手機號碼</button>
338							</div>
339							<div class="login_tabs_content">
340								<div class="login_tabs_panel" data-tab-panel="tab1">
341									<form class="col-12" id="mem_login_form_mobile" name="mem_login_form_mobile" method="post" onSubmit="mem_getToken('mem_login_form_mobile', event)">
342										<div class="form-group row">
343											<label for="nphone" class="col-sm-2 col-form-label">手機號碼:</label>
344											<div class="col-sm-10">
345												<input class="form-control" type="phone" name="phone" id="phone">
346											</div>
347										</div>
348										<div class="form-group row">
349											<label for="fm-smscode" class="col-sm-2 col-form-label">驗證碼:</label>
350											<div class="input-wrap-vercode col-sm-10">
351												<input name="vcode" type="text" class="form-control" id="fm-smscode">
352												<div class="vercode-send-btn">
353													<a href="JavaScript:void(0)" class="send-btn-link" id="send_verify">獲取驗證碼 <i class="fas fa-mouse-pointer"></i>
354													</a>
355												</div>
356											</div>
357										</div>
358										<div class="form-group row">
359											<div class="col-sm-2"></div>
360											<div class="col-sm-10">
361												<button type="submit" onclick="login_type='mobile'" class="btn btn-green-pro btn-display-block ml-0">登入</button>
362											</div>
363										</div>
364									</form>
365								</div>
366								<div class="login_tabs_panel is-active" data-tab-panel="tab2">
367									<form class="col-12" id="mem_login_form" name="mem_login_form" method="post" onSubmit="mem_getToken('mem_login_form', event)">
368										<div class="form-group row">
369											<label for="login_account" class="col-sm-2 col-form-label">帳號:</label>
370											<div class="col-sm-10">
371												<input type="email" class="form-control" id="login_account" placeholder="請輸入帳號" name="login_account">
372											</div>
373										</div>
374										<div class="form-group row">
375											<label for="login_password" class="col-sm-2 col-form-label">密碼:</label>
376											<div class="col-sm-10 input-group">
377												<input type="password" class="form-control" id="login_password" placeholder="請輸入密碼" name="login_password">
378												<div class="input-group-append" id="password_show">
379													<span class="input-group-text" id="basic-addon2">
380														<i class="fa fa-eye-slash"></i>
381													</span>
382												</div>
383											</div>
384										</div>
385										<div class="form-group row">
386											<div class="col-sm-2"></div>
387											<div class="col-sm-10">
388												<button type="submit" onclick="login_type='account'" class="btn btn-green-pro btn-display-block ml-0">登入</button>
389											</div>
390										</div>
391									</form>
392								</div>
393							</div>
394						</div>
395						<!-- <form class="col-12" id="mem_login_form" name="mem_login_form" method="post" onSubmit="mem_getToken('mem_login_form', event)">
396							<div class="form-group row">
397								<label for="login_account" class="col-sm-2 col-form-label">帳號:</label>
398								<div class="col-sm-10">
399									<input type="email" class="form-control" id="login_account" placeholder="請輸入帳號" name="login_account">
400								</div>
401							</div>
402							<div class="form-group row">
403								<label for="login_password" class="col-sm-2 col-form-label">密碼:</label>
404								<div class="col-sm-10 input-group">
405									<input type="password" class="form-control" id="login_password" placeholder="請輸入密碼" name="login_password">
406									<div class="input-group-append" id="password_show">
407										<span class="input-group-text" id="basic-addon2">
408											<i class="fa fa-eye-slash"></i>
409										</span>
410									</div>
411								</div>
412							</div>
413							<div class="form-group row">
414								<div class="col-sm-2"></div>
415								<div class="col-sm-10">
416									<button type="submit" class="btn btn-green-pro btn-display-block ml-0">登入</button>
417								</div>
418							</div>
419						</form> -->
420						<hr>
421						<h4>其他協助</h4>
422						<div class="col-12 row m-0_sm">
423							<div class="col-sm text-center pb-10">
424								<a href="/tw/mem/register" class="btn btn-warning btn-display-block ml-0">學員註冊</a>
425							</div>
426							<div class="col-sm text-center pb-10">
427								<a href="/tw/mem/forget_password" class="btn btn-success btn-display-block ml-0">忘記密碼</a>
428							</div>
429							<!-- <div class="col-sm text-center pb-10">
430								<a href="/tw/mem/resend_email" class="btn btn-success btn-display-block ml-0">重發註冊驗證信</a>
431							</div> -->
432						</div>
433						<hr>								
434						<div class="col-12 row m-0_sm">
435							<div class="col-sm text-center pb-10">
436								<a href="/lsback_site/" class="btn btn-secondary btn-display-block ml-0">GOGOCARE 企業用戶登入</a>
437							</div>
438							<div class="col-sm text-center pb-10">
439								<a href="/tw/teach/login" class="btn btn-green btn-display-block ml-0">GOGOCARE 教師登入</a>
440							</div>
441							
442						</div>	
443					</div>
444				</div><!-- close .container -->
445			</div><!-- close #pricing-plans-background-image -->
446		</main>
447	</body>
448</html>
449<div class="modal fade" id="idno_login" tabindex="-1" role="dialog" aria-labelledby="idno_login" aria-hidden="true">
450    <div class="modal-dialog" role="document">
451        <div class="modal-content">
452            <div class="modal-header">
453                <h5 class="modal-title" id="exampleModalLabel">快速登入</h5>
454                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
455                <span aria-hidden="true">&times;</span>
456                </button>
457            </div>
458            <form id="idno_login_form">
459                <div class="modal-body">
460                    <div class="form-group form-inline">
461                        <label class="mr-3" for="login_idno">身分證字號/居留證號:</label><input class="form-control" type="password" id="login_idno" name="login_idno">
462                    </div>
463                </div>
464                <div class="modal-footer">
465                    <button type="submit" id="idno_login_btn" class="btn btn-green-pro">登入</button>
466                </div>
467            </form>
468        </div>
469    </div>
470</div>
471
472<script>
473let has_submit = false;
474let login_type;
475
476$(document).ready(function() {
477	// tab
478	var $tabs = $('#login_tabs');
479    function openTab(tabId, pushHash) {
480      	//	切按鈕 active
481    	$tabs.find('.login_tabs_btn').removeClass('is-active');
482    	$tabs.find('.login_tabs_btn[data-tab="' + tabId + '"]').addClass('is-active');
483	  // 切內容 active
484	  	$tabs.find('.login_tabs_panel').removeClass('is-active');
485	  	$tabs.find('.login_tabs_panel[data-tab-panel="' + tabId + '"]').addClass('is-active');
486
487      // 可選:更新網址 hash
488		//   if (pushHash) {
489		//     window.location.hash = tabId;
490		//   }
491    }
492
493    // 點擊切換(事件委派,動態新增 tab 也可用)
494    $tabs.on('click', '.login_tabs_btn', function () {
495      	var tabId = $(this).data('tab');
496      	openTab(tabId, true);
497    });
498
499    // 可選:如果網址有 hash(#tab2),就開它;否則保持預設
500    var hash = (window.location.hash || '').replace('#', '');
501    if (hash && $tabs.find('.login_tabs_btn[data-tab="' + hash + '"]').length) {
502      	openTab(hash, false);
503    }
504	// 事件綁定
505	$("#send_verify").on("click", send_mobile_verify);
506    $('#idno_login_form').on('submit', async function(event) {
507        event.preventDefault();
508        if (has_submit) return;
509        has_submit = true;
510        try {
511            let idno = $('#login_idno').val();
512            let res = await $.ajax({
513                url: '/mem/save.php?action=quick_login_idno',
514                method: 'post',
515                dataType: 'JSON',
516                data: {
517                    idno: idno
518                }
519            });
520            $('#idno_login').modal('hide');
521            await swal('登入成功', '', 'success');
522            if (res && res.data && res.data.redirectURL) {
523                window.location.href = res.data.redirectURL;
524            } else {
525                // 若後端未回傳 redirectURL,回到首頁或重新整理
526                window.location.reload();
527            }
528        } catch (error) {
529            $('#idno_login').modal('hide');
530            $("#login_idno").val('');
531            const data = (error && error.responseJSON) ? error.responseJSON : null;
532            if (data && data.status) {
533                switch (data.status) {
534                    case '404':
535                        await swal(data.message, '', 'error');
536                        break;
537                    default:
538                        await swal(data.message || '發生錯誤,請稍後再試', '', 'error');
539                        break;
540                }
541            } else {
542                await swal('系統錯誤,請稍後再試', '', 'error');
543            }
544            console.error(error);
545        } finally {
546            has_submit = false;
547        }
548    });
549});
550
551function mem_getToken(fname, event) {
552
553	event.preventDefault();
554	switch (login_type) {
555		case 'mobile':
556			let phone = $('#phone').val().trim();
557			let vcode = $('#fm-smscode').val().trim();
558			if (phone == '') {
559				swal('請輸入手機號碼.', '', 'error');
560				return false;
561			}
562			if (vcode == '') {
563				swal('請輸入驗證碼.', '', 'error');
564				return false;
565			}
566			break;
567		case 'account':
568			var login_account  = $('#login_account').val();
569			var login_password = $('#login_password').val();
570
571			if (IsEmail(login_account) == 0)
572			{
573				swal('電子郵件格式有誤, 請重新確認.', '', 'error');
574				return false;
575			}
576
577			if (login_password == '') {
578				swal('請填寫密碼.', '', 'error');
579				return false;
580			}
581			break;
582		default:
583			window.location.reload();
584			break;
585	}
586
587
588	grecaptcha.ready(function() {
589		grecaptcha.execute('6LfOSpYiAAAAAL3PIBUBT9gis1j7y43K0g84b2BG', { action: fname }).then(function(token) {
590			var button   = document.createElement('input');
591			button.type  = 'hidden';
592			button.name  = 'recaptcha_token';
593			button.id    = 'recaptcha_token';
594			button.value = token;
595
596			var form = document.getElementById(fname);
597			form.appendChild(button);
598
599			var formData = new FormData($("#"+fname)[0]);
600			// 將login_type加入formData
601			formData.append('login_type', login_type);
602
603			$.ajax({
604				type: "POST",
605				url: "/member_save.php?action=login",
606				data: formData,
607				cache: false,
608				contentType: false,
609				processData: false,
610				success: function(msg) {
611					console.log(msg);
612					if (msg == 'login_error')
613					{
614						swal('登入失敗, 請重新確認.', '', 'warning');
615						return false;
616					}
617					if(msg == 'no_account') {
618						swal('此帳號未註冊過,請重新確認。', '', 'error');
619						return false;
620					}
621					if (msg == 'login_success')
622					{
623						swal('登入成功', '', 'success').then(function() {
624							location.href= document.referrer;
625						});
626					}
627					if (msg == 'login_success_need_profile')
628					{
629						// 登入成功,但個人資料尚未填寫完整
630						// 先儲存來源頁到 intent 表,再帶使用者前往補填資料頁
631						(async function() {
632							var ref = document.referrer;
633							var returnUrl = (ref && new URL(ref).hostname === window.location.hostname) ? ref : '/tw/index.html';
634							var result = await swal({
635								title   : '登入成功',
636								html    : '您的個人資料尚未填寫完整,<br>請先補足後才能繼續購買課程。',
637								type    : 'warning',
638								showCancelButton    : true,
639								confirmButtonText   : '前往填寫',
640								cancelButtonText    : '稍後再說',
641								confirmButtonColor  : '#3085d6',
642								cancelButtonColor   : '#aaa',
643							}).catch(swal.noop);
644							if (result) {
645								$.ajax({
646									url     : '/course/save.php',
647									method  : 'POST',
648									data    : {
649										action  : 'intent',
650										arg1    : 'login',
651										arg2    : '',
652										from    : 'login',
653										link    : returnUrl
654									},
655									dataType : 'json',
656									complete : function() {
657										location.href = '/tw/mem/complete_profile';
658									}
659								});
660							} else {
661								location.href = returnUrl;
662							}
663						})();
664					}
665					if (msg == 'invalid_request')
666					{
667						swal('Invalid request.', '', 'error').then(function() {
668							location.reload();
669						});
670					}
671				},
672				error: function(){
673					alert("failure");
674				}
675			});
676		});
677	});
678}
679// 手機驗證碼
680async function send_mobile_verify(e) {
681	e.preventDefault();
682
683	const phoneValue = $('#phone').val().trim();
684	// 台灣手機號碼格式檢查:09開頭,總共10位數
685	const phoneRegex = /^09[0-9]{8}$/;
686	if (!phoneRegex.test(phoneValue)) {
687		swal('請輸入正確的台灣手機號碼(09開頭,共10位數字)', '', 'error');
688		return;
689	}
690	
691	// 點擊後立即禁用按鈕,防止重複點擊
692	$('#send_verify').off('click');
693	const originalHtml = $('#send_verify').html();
694	$('#send_verify').replaceWith(`<span id="send_verify" style="color: #999; cursor: not-allowed; text-decoration: none;">發送中...</span>`);
695	
696	try {
697		const res = await $.ajax({
698			url     : '/mem/save.php?action=send_mobile_verify_code',
699			type    : 'POST',
700			data    : { phone: phoneValue, mode: 'login' },
701			dataType: 'json'
702		});
703		await swal('驗證碼已發送至您的手機,請注意查收!', '', 'success').catch( error => swal.dismiss);
704		
705		// 只有在成功發送後才開始倒數計時
706		if (res.status === 'success') {
707			startCountdown(originalHtml);
708			// 讓手機號碼輸入框不可編輯
709			$('#phone').prop('readonly', true).addClass('disabled-input');
710		} else {
711			// 發送失敗,恢復按鈕
712			$('#send_verify').replaceWith(`<a href="#" class="send-btn-link" id="send_verify">${originalHtml}</a>`);
713			$('#send_verify').on('click', send_mobile_verify);
714		}
715	} catch (error) {
716		let err_data = error.responseJSON ?? {message: '系統錯誤!請重新操作', status: 'error' };
717		await swal(err_data.message, '', err_data.status).catch( error => swal.dismiss);
718		// 發送失敗,恢復按鈕
719		$('#send_verify').replaceWith(`<a href="#" class="send-btn-link" id="send_verify">${originalHtml}</a>`);
720		$('#send_verify').on('click', send_mobile_verify);
721	}
722}
723function startCountdown(originalHtml) {
724        // 設定倒數計時
725        let countdown = 120;
726        $('#send_verify').html(`重新發送(120s)`);
727        
728        const interval = setInterval(() => {
729            if (countdown <= 0) {
730                clearInterval(interval);
731                // 恢復為原來的按鈕
732                $('#send_verify').replaceWith(`<a href="#" class="send-btn-link" id="send_verify">${originalHtml}</a>`);
733                $('#send_verify').on('click', send_mobile_verify);
734                // 恢復手機號碼輸入框可編輯
735                $('#phone').prop('readonly', false).removeClass('disabled-input');
736            } else {
737                $('#send_verify').html(`重新發送(${countdown}s)`);
738                countdown--;
739            }
740        }, 1000);
741    }
742</script>
742
743
744</body>
745</html>    <div class="dis_no_pc dis_blo_md">
746                </div>
747        <div class="clearfix"></div>
748<footer id="footer-pro" class="footer-listlay">
749	<div class="container">
750		<div class="row">
751			<div class="col-12 col-md-6 col-lg-4 col-xl-3">
752				<p class="foot-logo"><img src="/images/logo_footer.svg" alt="GOGO CARE" width="100%" />
753				<!--<br />
754				<h5>追蹤動態</h5>
755				<ul class="social-icons-pro" style="text-align: left;">
756					<li class="facebook-color"><a href="#" target="_blank"><i class="fab fa-facebook-f"></i></a></li>
757					<li class="youtube-color"><a href="#" target="_blank"><i class="fab fa-youtube"></i></a></li>
758				</ul>-->
759			</div>
760			<div class="col-12 col-md-6 col-lg-4 col-xl-2 m-ta-center">
761				<h5>關於我們</h5>
762				<ul class="foot_list row">
763					<li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/about.html" title="關於我們">關於我們</a></li>
764					<li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/article.html" title="閱讀好文">閱讀好文</a></li>
765					<li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/events.html" title="最新活動">最新活動</a></li>
766				</ul>
767				<br />
768				<h5>學員身分</h5>
769				<ul class="foot_list row">
770					<li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/mem/login" title="我想上課">我想上課</a></li>
771					<!-- <li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/help.html" title="幫助中心">幫助中心</a></li> -->
772				</ul>
773			</div>
774			<div class="col-12 col-md-6 col-lg-4 col-xl-2 m-ta-center">
775				<h5>企業身分</h5>
776				<ul class="foot_list row">
777					<li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/bebusiness.html" title="加入GOGO CARE">加入GOGO CARE</a></li>
778					<!-- <li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/help.html" title="幫助中心">幫助中心</a></li> -->
779				</ul>
780				<br />
781				<h5>教師身分</h5>
782				<ul class="foot_list row">
783					<li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/teach/apply_teach" title="我想上課">我想開課</a></li>
784					<!-- <li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/help.html" title="幫助中心">幫助中心</a></li> -->
785				</ul>
786			</div>
787			<div class="col-12 col-md-6 col-lg-4 col-xl-2 m-ta-center">
788				<h5>幫助</h5>
789				<ul class="foot_list row">
790					<!-- <li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/alliance.html" title="異業合作洽談">異業合作洽談</a></li> -->
791					<li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/help.html" title="常見問答">常見問答</a></li>
792					<li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/c_service.html" title="服務契約">服務契約</a></li>
793					<li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/c_copyright.html" title="隱私權政策">隱私權政策</a></li>
794                    <li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/c_terms.html" title="使用者條款">使用者條款</a></li>
795                    <!-- <li class="col-6 col-md-6 col-lg-12 col-xl-12 pl-0"><a href="/tw/bebusiness.html" title="企業申請加入 GOGO 照護">企業申請加入 GOGO 照護</a></li> -->
796				</ul>
797			</div>
798			<div class="col-12 col-md-6 col-lg-4 col-xl-3 m-ta-center">
799				<h5>客服時間</h5>
800				<ul class="foot_list row">
801					<li class="col-lg-12 col-xl-12 pl-0" style="color: #ffffff; letter-spacing: 0; border-right: 0px;">週一至週五(六日與例假日公休)<br />08:30至12:00<br />13:00至17:30</li>
802				</ul>
803				<!--<h5>客服信箱</h5>
804				<ul class="foot_list row">
805					<li class="col-lg-12 col-xl-12 pl-0" style="border-right: 0px;"><a href="mailto:[email protected]?subject=GoGoCare詢問" title="客服信箱">[email protected]</a></li>
806				</ul>-->
807				<h5>LINE線上客服</h5>
808				<ul class="foot_list row">
809					<li class="col-lg-12 col-xl-12 pl-0" style="border-right: 0px;">
810						<div class="line-it-button" data-lang="zh_Hant" data-type="friend" data-lineId="@966jrytj" style="display: none;"></div>
811						<a style="display:block;" id="line_friend" href="javascript:" title="LINE線上客服">
812							<img src="/images/ttvideo_QRcode.jpg" alt="GOGO CARE Line 線上客服" style="max-width: 100%; width: 150px;" />
813						</a>
814					</li>
815				</ul>
816				
817			</div>
818		</div> 
819	</div>
820</footer>
821<footer id="footer-pro">
822	<div class="container">
823		<div class="row">
824			<div class="col-md">
825				<div class="copyright-text-pro">&copy; 知多思科技股份有限公司 版權所有|台中市烏日區烏日里新興路136號1樓|統一編號:90598296 <span class="seo"><a href="https://www.ls-design.com.tw/" title="龍心數位科技" target="_blank" rel="noopener">Design by 龍心數位科技</a></span></div>
826			</div>
827		</div><!-- close .row -->
828	</div>
829</footer>
830<a href="#0" id="pro-scroll-top"><i class="fas fa-chevron-up"></i></a>
831
832</div><!-- close #sidebar-bg-->
833<div class="m_footer_nav">
834	<div class="toolbar-inner menubar-nav" style="display: inline-flex; width: 100%; text-align: center;">
835		<a href="/tw/course/list.html" class="normal-item-pro nav-link ">
836			<img class="nav_img nav_3" src="/images/icon/nav_3.svg" alt="所有課程" style="width: 20p
836x !important; padding-bottom: 6px !important;" /><br />
837			<span>所有課程</span>
838		</a>
839								<a href="/tw/events.html" class="normal-item-pro nav-link ">
840			<img class="nav_img nav_6" src="/images/icon/nav_6.svg" alt="最新活動" style="width: 20px !important; padding-bottom: 6px !important;" /><br />
841			<span>最新活動</span>
842		</a>
843				<a href="/tw/help.html" class="normal-item-pro nav-link ">
844			<img class="nav_img nav_8" src="/images/icon/nav_8.svg" alt="常見問答" style="width: 20px !important; padding-bottom: 6px !important;" /><br />
845			<span>常見問答</span>
846		</a>
847		<a href="/tw/question.html" class="normal-item-pro nav-link ">
848			<img class="nav_img nav_q" src="/images/icon/question.svg" alt="我要提問" style="width: 20px !important; padding-bottom: 6px !important;" /><br />
849			<span>我要提問</span>
850		</a>
851	</div>
852</div>
853<!-- Modal -->
854<div class="modal fade" id="LoginModal" tabindex="-1" role="dialog" aria-labelledby="LoginModal" aria-hidden="true">
855	<button type="button" class="close float-close-pro" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
856	<div class="modal-dialog modal-dialog-centered modal-md" role="document">
857		<div class="modal-content">
858			 <div class="modal-header-pro">
859				 <h2>很高興你回來GOGO CARE!</h2>
860			 </div>
861			 <div class="modal-body-pro social-login-modal-body-pro">
862
863				 <div class="registration-social-login-container">
864					<form id="login_form" name="login_form" method="post" onSubmit="getToken('login_form', event)">
865						<div class="form-group">
866							<input type="email" class="form-control" id="login_account" name="login_account" placeholder="電子郵件" required>
867						</div>
868						<div class="form-group">
869							<input type="password" class="form-control" id="login_password" name="login_password" placeholder="密碼" required>
870						</div>
871						<div class="form-group">
872							<button type="submit" class="btn btn-green-pro btn-display-block">學員登入</button>
873						</div>
874						<div class="container-fluid">
875							<div class="row no-gutters">
876								<!--<div class="col checkbox-remember-pro"><input type="checkbox" id="checkbox-remember"><label for="checkbox-remember" class="col-form-label">Remember me</label></div>-->
877								<div class="col forgot-your-password"><a href="/tw/forgetpassword.html" title="忘記密碼">忘記密碼?</a></div>
878							</div>
879						</div><!-- close .container-fluid -->
880
881					</form>
882
883					<div class="registration-social-login-or">或</div>
884
885				</div><!-- close .registration-social-login-container -->
886
887				<div class="registration-social-login-options">
888					<h6>使用社群帳號繼續</h6>
889					<a href="javascript:" onclick="google_api('mem', '');" title="使用 Google 登入"><div class="social-icon-login google-color"><i class="fab fa-google"></i> 使用 Google 登入</div></a>
890					<a href="#" title="企業用戶登入"><div class="social-icon-login facebook-color">企業用戶登入</div></a>
891					<a href="/tw/teach/login" title="教師登入"><div class="social-icon-login twitter-color">教師登入</div></a>
892				</div><!-- close .registration-social-login-options -->
893
894				<div class="clearfix"></div>
895
896			</div><!-- close .modal-body -->
897
898		<a class="not-a-member-pro" href="/tw/signup.html">不是會員?<span>立即加入職人通!</span></a>
899		</div><!-- close .modal-content -->
900	</div><!-- close .modal-dialog -->
901</div><!-- close .modal -->
902<script src="https://d.line-scdn.net/r/web/social-plugin/js/thirdparty/loader.min.js" async="async" defer="defer"></script>
902
903<script>
904let isadding = false;
905
906function getToken(fname, event)
907{
908	event.preventDefault();
909
910	var login_account  = $('#login_account').val();
911	var login_password = $('#login_password').val();
912
913	if (IsEmail(login_account) == 0)
914	{
915		swal('電子郵件格式有誤, 請重新確認.', '', 'error');
916		return true;
917	}
918
919	if (login_password == '')
920	{
921		swal('請填寫密碼.', '', 'error');
922		return true;
923	}
924
925	grecaptcha.ready(function() {
926		grecaptcha.execute('6LfOSpYiAAAAAL3PIBUBT9gis1j7y43K0g84b2BG', { action: 'login_form' }).then(function(token) {
927
928			var button   = document.createElement('input');
929			button.type  = 'hidden';
930			button.name  = 'recaptcha_token';
931			button.id    = 'recaptcha_token';
932			button.value = token;
933
934			var form = document.getElementById(fname);
935			form.appendChild(button);
936
937			var formData = new FormData($("#"+fname)[0]);
938
939			$.ajax({
940				type: "POST",
941				url: "/member_save.php?action=login",
942				data: formData,
943				cache: false,
944				contentType: false,
945				processData: false,
946				success: function(msg) {
947					console.log(msg);
948					if (msg == 'login_error')
949					{
950						swal('登入失敗, 請重新確認.', '', 'warning');
951						return true;
952					}
953
954					if (msg == 'login_success')
955					{
956						swal('登入成功.', '', 'success');
957
958						setTimeout(function () {
959							location.href= '/tw/mem/profile';
960						}, 1000);
961					}
962
963					if (msg == 'invalid_request')
964					{
965						swal('Invalid request.', '', 'error');
966					}
967				},
968				error: function(){
969					alert("failure");
970				}
971			});
972
973		});
974	});
975}
976
977function google_api(api_type, api_login_id)
978{
979	location.href = "https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https://www.gogocare.com.tw/callback.php?login_status="+api_type+"&client_id=39308485116-mofti3v7d8varrc7p5jsml41b8eodr7r.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&access_type=offline&approval_prompt=force&state="+api_login_id;
980}
981
982function line_api(api_type, api_login_id = '') {
983	const client_id = '2006013063';
984	const redirect_uri = encodeURIComponent('https://www.gogocare.com.tw/callback.php?login_type=line');
985	const state = encodeURIComponent(`${api_type}_${api_login_id}`);
986	const scope = encodeURIComponent('openid profile email');
987
988	const link = `https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id=${client_id}&redirect_uri=${redirect_uri}&state=${state}&scope=${scope}`;
989
990	window.location.href = link;
991}
992function line_friend(api_type) {
993	let client_id = '2006013063';
994	let redirect_uri = encodeURIComponent('https://www.gogocare.com.tw/callback.php?login_type=line');
995	let link = 'https://access.line.me/oauth2/v2.1/authorize?';
996	link += 'response_type=code';
997	link += '&client_id=' + client_id;
998	link += '&redirect_uri=' + redirect_uri;
999	link += '&state=' + api_type;
1000	link += '&scope=profile';
1001	window.open(link, '_blank');
1002}
1003
1004
1005async function add_course(course_id)
1006{	
1007	// 表單送出防呆
1008	if (isadding) {
1009		return false;
1010	}
1011	isadding = true;
1012	
1013	var login_id = '';
1014
1015	if (course_id == '') {
1016		isadding = false;
1017		swal('加入失敗, 請重新確認.', '', 'warning');
1018		return true;
1019	}
1020
1021	if (login_id == '') {
1022		isadding = false;
1023		swal('請先進行登入.', '', 'warning').then(function() {
1024			location.href = '/tw/mem/login';
1025		});
1026
1027		return true;
1028	}
1029
1030	try {
1031		let res = await $.ajax({
1032			type: 'POST',
1033			url : '/course/save.php?action=add',
1034			dataType: 'JSON',
1035			cache: false,
1036			data : {
1037				course_id,
1038				login_id
1039			}
1040		})
1041		await swal(res.message, '', res.status);
1042		window.location.reload();
1043	} catch (error) {
1044		let err_data = error.responseJSON ? error.responseJSON : {status: 'error', message: '系統錯誤,請稍後再試'};
1045		console.table(error);
1046		swal(err_data.message, '', err_data.status);
1047	} finally {
1048		isadding = false;
1049	}
1050}
1051
1052async function add_event(event_id)
1053{
1054	var login_id = '';
1055
1056	if (event_id == '' && true) {
1057		swal('加入失敗, 請重新確認.', '', 'warning');
1058		return true;
1059	}
1060
1061	if (login_id == '') {
1062		swal('請先進行登入.', '', 'warning').then(function() {
1063			location.href = '/tw/mem/login';
1064		});
1065
1066		return true;
1067	}
1068
1069	try {
1070		let res = await $.ajax({
1071			type: 'POST',
1072			url : '/event/save.php?action=add_event',
1073			dataType: 'JSON',
1074			cache: false,
1075			data : {
1076				event_id,
1077				login_id
1078			}
1079		})
1080		await swal(res.message, '', res.status);
1081		window.location.reload();
1082	}catch (error) {
1083		let err_data = error.responseJSON ? error.responseJSON : {status: 'error', message: '系統錯誤,請稍後再試'};
1084		console.table(error);
1085		swal(err_data.message, '', err_data.status);
1086	}
1087}
1088
1089function add_course2(course_id, course_point)
1090{
1091	var login_id   = '';
1092	var login_type = '';
1093
1094	if (course_id == '')
1095	{
1096		swal('加入失敗, 請重新確認.', '', 'warning');
1097		return true;
1098	}
1099
1100	if (login_id == '')
1101	{
1102		swal('請先進行登入.', '', 'warning').then(function() {
1103			location.href = '/tw/mem/login';
1104		});
1105
1106		return true;
1107	}
1108
1109	swal({
1110		title: '確認加入?將扣除 '+course_point+' 點',
1111		type: 'warning',
1112		showCancelButton: true,
1113		confirmButtonColor: '#3085d6',
1114		cancelButtonColor: '#d33',
1115		cancelButtonText: '取消',
1116		confirmButtonText: '確定',
1117	}).then(function() {
1118
1119		$.ajax({
1120			type: "GET",
1121			url: "/course_save.php?action=add2&course_id="+course_id,
1122			data: "html",
1123			success: function(msg) {
1124
1125				if (msg == 'offline') {
1126				swal('課程已下架!', '', 'warning')
1127					.then(res=> {
1128						window.location.href= '/';
1129					});
1130				return true;
1131				}
1132
1133				if (msg == 'not_enough')
1134				{
1135					swal('點數不足.', '', 'warning');
1136				}
1137
1138				if (msg == 'role_error')
1139				{
1140					swal('學員角色才能購買', '', 'warning');
1141				}
1142
1143				if (msg == 'success')
1144				{
1145					swal('加入完成.', '', 'success');
1146
1147					setTimeout(function () {
1148						location.href = '/tw/lesson_detail/'+course_id;
1149					}, 1000);
1150				}
1151
1152				if (msg == 'added')
1153				{
1154					swal('該課程已加入過學習課表.', '', 'warning');
1155					return true;
1156				}
1157			},
1158			error: function(){
1159				alert("failure");
1160			}
1161		});
1162	})
1163}
1164
1165function add_live_course(course_id, course_point) {
1166	
1167}
1168
1169function add_package(package_id, course_point)
1170{
1171	var login_id   = '';
1172	var login_type = '';
1173
1174	if (package_id == '')
1175	{
1176		swal('加入失敗, 請重新確認.', '', 'warning');
1177		return true;
1178	}
1179
1180	if (login_id == '')
1181	{
1182		swal('請先進行登入.', '', 'warning').then(function() {
1183			location.href = '/tw/mem/login';
1184		});
1185
1186		return true;
1187	}
1188
1189	swal({
1190		title: '確認購買?將扣除 '+course_point+' 點',
1191		type: 'warning',
1192		showCancelButton: true,
1193		confirmButtonColor: '#3085d6',
1194		cancelButtonColor: '#d33',
1195		cancelButtonText: '取消',
1196		confirmButtonText: '確定',
1197	}).then(function() {
1198
1199		$.ajax({
1200			type: "GET",
1201			url: "/package_save.php?action=add&package_id="+package_id,
1202			data: "html",
1203			success: function(msg) {
1204				if (msg == 'not_enough')
1205				{
1206					swal('點數不足.', '', 'warning');
1207				}
1208
1209				if (msg == 'role_error')
1210				{
1211					swal('學員角色才能購買', '', 'warning');
1212				}
1213
1214				if (msg == 'success')
1215				{
1216					swal('購買完成.', '', 'success');
1217
1218					setTimeout(function () {
1219						location.href = '/tw/package_detail/'+package_id;
1220					}, 1000);
1221				}
1222
1223				if (msg == 'added')
1224				{
1225					swal('該學習套餐已購買過.', '', 'warning');
1226					return true;
1227				}
1228			},
1229			error: function(){
1230				alert("failure");
1231			}
1232		});
1233	});
1234}
1235
1236// OTP按鈕功能 - 永遠載入,確保按鈕可用
1237$(function () {
1238	const $wrap = $("#rb_otp");
1239	const $btn = $("#fabBtn");
1240	const $panel = $("#fabPanel");
1241	const $overlay = $("#fabOverlay");
1242	const $close = $("#fabClose");
1243
1244	function openPanel() {
1245		$wrap.addClass("is-open");
1246		$panel.css("display", "block");
1247	}
1248
1249	function closePanel() {
1250		$wrap.removeClass("is-open");
1251		$panel.css("display", "none");
1252	}
1253
1254	$btn.on("click", function (e) {
1255		e.stopPropagation();
1256		$wrap.hasClass("is-open") ? closePanel() : openPanel();
1257	});
1258
1259	$close.on("click", closePanel);
1260	$overlay.on("click", closePanel);
1261
1262	// ESC 關閉
1263	$(document).on("keydown", function (e) {
1264		if (e.key === "Escape") closePanel();
1265	});
1266});
1267
1268
1269</script>
1269        <!-- Required Framework JavaScript -->
1270<!-- 
1270<script src="/js/libs/jquery-3.3.1.min.js"></script>
1270jQuery -->
1271<script src="/js/libs/popper.min.js" defer></script>
1271<!-- Bootstrap Popper/Extras JS -->
1272<script src="/js/libs/bootstrap.min.js" defer></script>
1272<!-- Bootstrap Main JS -->
1273<!-- All JavaScript in Footer -->
1274
1275<!-- Additional Plugins and JavaScript -->
1276<script src="/js/navigation.js" defer></script>
1276<!-- Header Navigation JS Plugin -->
1277<script src="/js/jquery.flexslider-min.js" defer></script>
1277<!-- FlexSlider JS Plugin -->
1278<script src="/js/jquery-asRange.min.js" defer></script>
1278<!-- Range Slider JS Plugin -->
1279<script src="/js/circle-progress.min.js" defer></script>
1279<!-- Circle Progress JS Plugin -->
1280<script src="/js/afterglow.min.js" defer></script>
1280<!-- Video Player JS Plugin -->
1281<script src="/js/script.js" defer></script>
1281<!-- Custom Document Ready JS -->
1282<script src="/js/script-dashboard.js" defer></script>
1282<!-- Custom Document Ready for Dashboard Only JS -->
1283
1284
1285<script src="/js/bs-stepper.min.js"></script>
1285
1286<script src="https://cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.js" type="text/javascript"></script>
1286
1287<script>
1288$(document).ready(function() {
1289
1290	$("#keyword").autocomplete({
1291		source: async function (req,res) {
1292			
1293			const data = await get_suggest(req.term)
1294			if (!data.data.length) {
1295				return res([{result: '404', name: '無相關關鍵字'}])
1296			}
1297			res(data.data)
1298		},
1299		minLength: 2,
1300		select: function(event, ui) {
1301			if(ui.item.result === '404') return;
1302			window.location.href =`/tw/course/detail/${ui.item.course_id}`;
1303		},
1304		create: function() {
1305			$(this).autocomplete("instance")._renderItem = function(ul, item) {
1306				if(item.result == '404') {
1307					return $("<li>")
1308							.append("<div class='no-results text-center'>" + item.name + "</div>")
1309							.appendTo(ul);
1310					}
1311				return $("<li>")
1312					.append(
1313						`<div class='autocomplete-item'>
1314							<img src='/includes/TimThumb.php?src=/UserFiles/course/${item.course_pic}&w=120&h=80&zc=1' alt='${item.course_name} width='80' height='80'>
1315							<span>${item.course_name}</span>
1316						</div>`
1317						)
1318					.appendTo(ul);
1319			};
1320		}
1321	});
1322
1323	$(document).on('click', '#password_show', function() {
1324		let passwordField = $(this).closest('.input-group').find('input[type="password"], input[type="text"]');
1325		// 切換密碼顯示或隱藏
1326		if (passwordField.attr('type') === 'password') {
1327			passwordField.attr('type', 'text');  // 顯示密碼
1328			$(this).find('i').removeClass('fa-eye-slash').addClass('fa-eye');
1329		} else {
1330			passwordField.attr('type', 'password');  // 隱藏密碼
1331			$(this).find('i').removeClass('fa-eye').addClass('fa-eye-slash');
1332		}
1333	})
1334});
1335
1336async function get_suggest (query) {
1337	try {
1338		const data = await $.ajax({
1339			url 	: '/course_save.php?action=get_suggest',
1340			method	: 'GET',
1341			dataType: 'JSON',
1342			data: {
1343				srh_key_word : query
1344			}
1345		})
1346		console.log(data)
1347		return data;
1348	} catch (error) {
1349		console.error(error)
1350		return [];
1351	}
1352}
1353var createPopupWin = function(sType, pageURL, pageTitle, popupWinWidth, popupWinHeight)
1354{
1355	var url = encodeURIComponent(pageURL);
1356
1357	if (sType == 'Mail')
1358	{
1359		location.href = 'mailto:?body='+url;
1360	}
1361	else
1362	{
1363		if (sType == 'LINE') url = 'https://social-plugins.line.me/lineit/share?url='+url;
1364		if (sType == 'Facebook') url = 'http://www.facebook.com/sharer.php?u='+url;
1365
1366		var left = (screen.width - popupWinWidth) / 2;
1367		var top = (screen.height - popupWinHeight) / 4;
1368
1369		var myWindow = window.open(url, pageTitle,
1370				'resizable=yes, width=' + popupWinWidth
1371				+ ', height=' + popupWinHeight + ', top='
1372				+ top + ', left=' + left);
1373	}
1374
1375};
1376
1377// For 複製連結
1378var copyLinks = function(pdfURL) {
1379
1380	var $temp = $("<input>");
1381
1382	$("body").append($temp);
1383	$temp.val(pdfURL).select();
1384	document.execCommand("copy");
1385	$temp.remove();
1386	swal("複製成功!", '', 'success');
1387};
1388
1389/* 判斷電郵地址格式 */
1390function IsEmail(email)
1391{
1392	var emailRule = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z]+$/;
1393
1394	if (email.search(emailRule)!= -1)
1395	{
1396		return 1;
1397	}
1398	else
1399	{
1400		return 0;
1401	}
1402}
1403
1404async function chg_collect(tab_id, tab, element) {
1405	
1406	try {
1407		let res = await $.ajax({
1408			url 	: '/course_save.php?action=change_collect',
1409			method	: 'POST',
1410			dataType: 'JSON',
1411			data: {
1412				tab_id,
1413				tab
1414			}
1415		})
1416		$(element).removeAttr('style').html('')
1417		if (res.type == 'del') {
1418			$(element).html('加入收藏')
1419		} else {
1420			$(element).attr('style', 'background-color:#dc3545;color:white;').html('取消收藏')
1421		}
1422		if (typeof change_list === 'function') {
1423            await change_list();
1424        }
1425	} catch (error) {
1426		let err_data = error.responseJSON;
1427		switch(error.status){
1428			case 401:
1429				await swal('進行收藏前,請先登入會員,謝謝。','', 'error');
1430				window.location.href = '/tw/mem/login'
1431				break;
1432		}
1433		console.error(error)
1434	}
1435}
1436
1437// 生成 stepper
1438function generate_stepper(id, linear = true) {
1439	const node = $(`#${id}`);
1440	const stepper = new Stepper(node[0], {
1441		linear,
1442		animation: true
1443	});
1444	return stepper;
1445}
1446
1447// 規章用 限制必須勾選才能繼續
1448function enableNextOnScroll(container, checkboxId) {
1449	console.log('scroll!')
1450	let scrollTop 		= container[0].scrollTop;
1451	let clientHeight 	= container[0].clientHeight;
1452	let nowPosition     = container[0].scrollHeight;
1453	let limit 			= 0.7;
1454	if (scrollTop + clientHeight >= nowPosition * limit) {
1455		$(checkboxId).html('我已閱讀並同意以上內容').prop('disabled', false);
1456	}
1457	return false;
1458}
1459
1460document.addEventListener("DOMContentLoaded", function () {
1461	tag_generator();
1462});
1463
1464function tag_generator() {
1465	console.log('start')
1466	document.querySelectorAll('.tag-wrapper').forEach(wrapper => {
1467		console.log('here')
1468		const tagList = wrapper.querySelector('.tag-list');
1469		const tags = tagList.querySelectorAll('li');
1470		// 取得所有li 的內容
1471		tag_list = Array.from(tags).map(tag => tag.textContent.trim());
1472		if (tags.length > 2) {
1473			// 刪除超過2個的li
1474			tags.forEach((tag, i) => {
1475				if (i >= 2) tag.style.display = 'none';
1476			});
1477
1478			// ✅ 為每個 tag-list 新建一個 toggleBtn
1479			const toggleBtn = document.createElement('li');
1480			toggleBtn.className = 'more-toggle';
1481			toggleBtn.textContent = '... 更多';
1482			toggleBtn.style.border = '#ccc 2px solid';
1483			toggleBtn.style.background = '#f8f9fa';
1484			tagList.appendChild(toggleBtn);
1485
1486			toggleBtn.addEventListener('click', () => {
1487				const expanded = tagList.classList.toggle('expanded');
1488				tags.forEach((tag, i) => {
1489				if (i >= 2) tag.style.display = expanded ? '' : 'none';
1490				});
1491				toggleBtn.textContent = expanded ? '收起 ▲' : '... 更多';
1492			});
1493		}
1494	});
1495}
1496</script>
1496        <link rel="stylesheet" href="/js/fullcalendar/packages/core/main.css">
1497<link rel="stylesheet" href="/css/bs-stepper.min.css">
1498<script src='/js/fullcalendar/packages/core/main.js'></script>
1498
1499<script src='/js/fullcalendar/packages/interaction/main.js'></script>
1499
1500<script src='/js/fullcalendar/packages/daygrid/main.js'></script>
1500
1501
1502<script lang="javaScript">
1503    // $(document).ready(function() {
1504        
1505    // });
1506    // 取得縣市
1507    function get_dist() {
1508        return new Promise(function(resolve, reject) {
1509            $.ajax({
1510                url:'/mem/save.php?action=get_dist',
1511                method:'GET',
1512                dataType:'JSON'
1513            })
1514            .then(res => {
1515                resolve(res);
1516            })
1517            .catch(err => {
1518                reject(err.responseText);
1519            });
1520        });
1521    }
1522
1523    // 取得地區
1524    function get_area(city) {
1525        return new Promise(function (resolve, reject) {
1526            $.ajax({
1527                url: '/mem/save.php?action=get_area&city=' + city,
1528                method: 'GET',
1529                dataType: 'JSON'
1530            })
1531            .then(response => {
1532                resolve(response);
1533            })
1534            .catch(error => {
1535                reject(error.responseText);
1536            });
1537        });
1538    }
1539
1540    // 取得身分
1541    function get_job() {
1542        return new Promise(function( resolve, reject) {
1543            $.ajax({
1544                url : '/mem/save.php?action=get_job',
1545                method  : 'GET',
1546                dataType    : 'JSON',
1547            })
1548            .then(response => {
1549                resolve(response)
1550            })
1551            .catch(error => {
1552                reject(error.responseText)
1553            })
1554        })
1555    }
1556    function isValidFileType(fileType) {
1557        let allowedTypes = ['image/jpeg', 'image/png'];
1558        return allowedTypes.includes(fileType);
1559    }
1560</script>
1560
1561    </body>
1562</html>
1563

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.