1/** 2 * <ããã³ãå´> assets/js/new_booking.js 3 * å½¹å²ï¼APIéä¿¡ã»ãã¼ã¿ç®¡çã»ããªãã¼ã·ã§ã³ã»ã¤ãã³ãå¶å¾¡ãªã©ã®ãã¸ã㯠4 * ä¾åï¼view.js (HTMLå´ã§å ã«èªã¿è¾¼ãã§ãããã¨) 5 */ 6 7// ========================================== 8// âï¸ è¨å®ã»å®æ°ã»ã«ã¼ã«å®ç¾© 9// ========================================== 10//const API_BASE_URL = 'https://epi-reserve.com/reserve/api/reserve'; 11//api_client.jsã§ç®¡ç 12 13const urlParams = new URLSearchParams(window.location.search); 14const CURRENT_DEPARTMENT = urlParams.get('department') || 'datsumou'; 15let CURRENT_NINZU = urlParams.get('ninzu') || 1; 16const CURRENT_REFMEDIA = urlParams.get('refmedia') || ''; 17const CURRENT_DEBUG = urlParams.get('debug') || document.querySelector('input[name="debug"]')?.value || ''; 18function getCurrentBrand() { 19 // 1. ã¾ã head.php ã§è¨å®ãããæå¼·ã®èº«å証ã確èªï¼ 20 if (window.CURRENT_BRAND) { 21 return window.CURRENT_BRAND; 22 } 23 24 // 2. ãªããã°ç©çã¿ã°ï¼ä¸ãä¸ã®ä¿éºï¼ã確èªï¼ 25 const brandInput = document.getElementById('sys-current-brand'); 26 if (brandInput && brandInput.value) { 27 return brandInput.value; 28 } 29 30 // 3. ã©ã£ã¡ããªããã°æçµææ®µ 31 return 'ã¬ãã£ã¼ã¹ã¨ããã«'; 32} 33const MENU_RULES = { 34 'datsumou': { allowUnderage: true, requireBmi: false }, 35 'diet': { allowUnderage: false, requireBmi: true }, 36 'default': { allowUnderage: false, requireBmi: false } 37}; 38 39let currentSelectedShopName = ''; 40 41// ========================================== 42// ð åæåå¦ç 43// ========================================== 44document.addEventListener('DOMContentLoaded', () => { 45 loadShopList(); 46 setupNinzuToggle(); 47 setupFormEvents(); 48 setupBackButtonEvents(); 49 50 // ã¢ã¼ãã«ãéããã¤ãã³ãï¼Viewã«ä¸¸æãï¼ 51 document.getElementById('js-modal-close')?.addEventListener('click', View.closeModal); 52 document.getElementById('js-modal-btn')?.addEventListener('click', View.closeModal); 53 document.getElementById('js-modal-overlay')?.addEventListener('click', View.closeModal); 54 // ========================================== 55 // ð¡ï¸ ãã©ã¦ã¶ããã¯ï¼æ»ããã¿ã³ï¼ã®é¢è±é²æ¢ 56 // ========================================== 57 // ãã¼ã¸èªã¿è¾¼ã¿æã«ããã©ã¦ã¶ã®å±¥æ´ã«ãç¾å¨ã®ãã¼ã¸ããããä¸ã¤ããã¼ã¨ãã¦è¿½å ãã¦ãã 58 history.pushState(null, null, location.href); 59 60 window.addEventListener('popstate', (e) => { 61 // ã¦ã¼ã¶ã¼ããæ»ãããæ¼ãã¦ããã¼å±¥æ´ãæ¶è²»ãããç¬éã«ã¢ã¼ãã«çºå 62 View.showModal({ 63 title: '確èª', 64 body: '<p style="text-align: center;">å ¥åå 容ã¯ä¿åããã¾ããã<br>ãã®ãã¼ã¸ããç§»åãã¦ãããããã§ããï¼</p>', 65 isLocked: true, // å³ä¸ã®Ããã¿ã³ã¯ä¸æ¦é ããä¸ã®2æãå¼·å¶ãã 66 buttonsHTML: ` 67 <div style="display: flex; gap: 10px; justify-content: center; width: 100%;"> 68 <button type="button" id="btn-leave-page" style="flex: 1; padding: 10px; background: #AAA; color: #fff; border: none; border-radius: 4px; cursor: pointer;"> 69 ãã¼ã¸ãé¢ãã 70 </button> 71 <button type="button" id="btn-cancel-leave" class="btn-primary" style="flex: 1; padding: 10px;"> 72 ãã£ã³ã»ã« 73 </button> 74 </div> 75 ` 76 }); 77 78 // ããã¼ã¸ãé¢ããããæ¼ãããããæ¬å½ã®åã®ãã¼ã¸ã¸æ»ã 79 document.getElementById('btn-leave-page').addEventListener('click', () => { 80 history.back(); 81 }); 82 83 // ããã£ã³ã»ã«ããæ¼ãããããã¢ã¼ãã«ãéãã¦åã³ããã¼å±¥æ´ãã»ããï¼ç½ ã®åè¨ç½®ï¼ 84 document.getElementById('btn-cancel-leave').addEventListener('click', () => { 85 history.pushState(null, null, location.href); 86 View.closeModal(); 87 }); 88 }); 89 // ========================================================= 90 // ð ãç¹æ¥å¸ã·ã¹ãã ã 91 // ========================================================= 92 const initialMcd = window.AppConfig?.initialMcd || new URLSearchParams(window.location.search).get('mcd') || ''; 93 94 if (initialMcd !== '') { 95 console.log(`ð ç¹æ¥å¸æ¤ç¥: åºèCD [${initialMcd}] ã®ãã¿ã³åºç¾ãå¾ æ©ä¸...`); 96 97 const checkInterval = setInterval(() => { 98 // ð¯ ãä¿®æ£ãdata-id ã§æ£ç¢ºã«ããã¯ãªã³ï¼ 99 const targetShopBtn = document.querySelector(`.btn-shop[data-id="${initialMcd}"]`); 100
101 if (targetShopBtn) { 102 clearInterval(checkInterval); 103 console.log(`ð¯ åºèãã¿ã³çºè¦ï¼èªåé·ç§»ãå®è¡ãã¾ãã`); 104 105 targetShopBtn.click(); 106 107 setTimeout(() => { 108 View.changeSections(['section-step1'], ['section-step2']); 109 View.updateStepIndicator(2); 110 window.scrollTo({ top: 0, behavior: 'smooth' }); 111 }, 200); 112 } 113 }, 100); 114 115 setTimeout(() => { 116 clearInterval(checkInterval); 117 }, 5000); 118 } 119 // ========================================================= 120}); 121 122// ========================================== 123// ð¢ STEP 1: åºèãªã¹ãã®åå¾ã¨æç» 124// ========================================== 125async function loadShopList() { 126 const listContainer = document.getElementById('shop-list'); 127 try { 128 // ä¸ãä¸ã®ä¿éºã¨ãã¦ããã空ãªããã¬ãã£ã¼ã¹ã¨ããã«ããããã©ã«ãã«ãã¾ãã 129 const targetBrand = window.CURRENT_BRAND || 'ã¬ãã£ã¼ã¹ã¨ããã«'; 130 131 // APIã¸ãç§ã¯ãã®ãã©ã³ãã§ãï¼ãã¨åæï¼brandãã©ã¡ã¼ã¿ï¼ãä»ãã¦éä¿¡ï¼ 132 const json = await callApi('get_shops.php', { 133 department: CURRENT_DEPARTMENT, 134 refmedia: CURRENT_REFMEDIA, 135 brand: targetBrand, 136 debug: CURRENT_DEBUG 137 }); 138 if (json.status !== 'success') throw new Error(json.message); 139 140 listContainer.innerHTML = ''; 141 const fragment = document.createDocumentFragment(); 142 const areas = json.data; 143 144 for (const areaCode in areas) { 145 const area = areas[areaCode]; 146 const accordionItem = document.createElement('div'); 147 accordionItem.className = 'c-accordion-item'; 148 149 const headerBtn = document.createElement('button'); 150 headerBtn.type = 'button'; 151 headerBtn.className = 'c-accordion-header js-accordion-toggle'; 152 headerBtn.innerHTML = ` 153 <span class="area-name">${area.area_name}</span> 154 <span class="shop-count">ã${area.shops.length}é¢ã <span class="toggle-mark">ï¼</span></span> 155 `; 156 157 const accordionBody = document.createElement('div'); 158 accordionBody.className = 'c-accordion-body'; 159 accordionBody.style.display = 'none'; 160 161 const btnGroup = document.createElement('div'); 162 btnGroup.className = 'shop-grid'; 163 164 area.shops.forEach(shop => { 165 const btn = document.createElement('button'); 166 btn.type = 'button'; 167 btn.className = 'btn-shop'; 168 btn.innerHTML = shop.name_html; 169 btn.dataset.id = shop.id; 170 btn.addEventListener('click', (e) => selectShop(shop.id, shop.name_html, e.currentTarget)); 171 btnGroup.appendChild(btn); 172 }); 173 174 accordionBody.appendChild(btnGroup); 175 176 // ð ã¢ã³ã¼ãã£ãªã³ééã®è¦ãç®ã¯ View ã«ä»»ãã 177 headerBtn.addEventListener('click', function () { 178 View.toggleAccordion(this, accordionBody); 179 }); 180 181 accordionItem.appendChild(headerBtn); 182 accordionItem.appendChild(accordionBody); 183 fragment.appendChild(accordionItem); 184 } 185 listContainer.appendChild(fragment); 186 187 } catch (error) { 188 console.error('éä¿¡ã¨ã©ã¼:', error); 189 listContainer.innerHTML = '<p style="color:red;">åºèã®èªã¿è¾¼ã¿ã«å¤±æãã¾ããã</p>'; 190 } 191} 192 193// ========================================== 194// ð¥ 人æ°åãæ¿ãã¹ã¤ããã®å¶å¾¡ 195// ========================================== 196function setupNinzuToggle() { 197 const ninzuBtns = document.querySelectorAll('.btn-ninzu'); 198 if (ninzuBtns.length === 0) return; 199 200 ninzuBtns.forEach(btn => { 201 btn.addEventListener('click', (e) => { 202 // ãã¸ãã¯ï¼ç¶æ ï¼ã®æ´æ° 203 CURRENT_NINZU = parseInt(e.currentTarget.dataset.ninzu, 10); 204 // è¦ãç®ã®æ´æ°ã¯ View ã«ä»»ãã 205 View.updateNinzuButtons(ninzuBtns, e.currentTarget); 206 }); 207 }); 208} 209 210// ========================================== 211// ð¢ STEP 1 -> STEP 2 (åºè鏿æã®å¦ç) 212// ========================================== 213function selectShop(shopId, shopName, clickedBtn) { 214 // ð æ°è¨ãããã¤ã©ã¤ã颿°ãçºåï¼ 215 if (clickedBtn) { 216 View.highlightSelectedShop(clickedBtn); 217 } 218 // ð ç»é¢åãæ¿ãã¨ã¹ããããã¼ã®é²è¡ã View ã«ä¾é ¼ 219 View.changeSections(['step-tenpo', 'step-form', 'step-kakunin'], ['step-date']); 220 View.updateStepIndicator(2); 221 222 let form = document.getElementById('customer-form'); 223 if (form) { 224 if (!document.getElementById('hidden-shop-name')) { 225 form.insertAdjacentHTML('beforeend', `<input type="hidden" id="hidden-shop-name" value="">`); 226 } 227 document.getElementById('hidden-shop-name').value = shopName; 228 } 229 currentSelectedShopName = shopName; 230 loadCalendar(shopId, ''); 231} 232 233// ========================================== 234// ð STEP 2: ã«ã¬ã³ãã¼APIã¨æç» 235// ========================================== 236// <ããã³ãå´> assets/js/booking.js ã® loadCalendar ãæ¹ä¿® 237 238async function loadCalendar(shopId, targetDate = '') { 239 console.log("ð¥ çªæåã®ID確èªï¼ shopId:", shopId); 240 const calendarWrapper = document.getElementById('calendar-wrapper'); 241 242 const currentHeight = calendarWrapper.offsetHeight; 243 if (currentHeight > 0) calendarWrapper.style.minHeight = currentHeight + 'px'; 244 calendarWrapper.innerHTML = '<div class="loading-spinner">æ å ±ãèªã¿è¾¼ãã§ãã¾ã...</div>'; 245 246 try { 247 // ã«ã¬ã³ãã¼ãéãæã«ã身å証ãåå¾ 248 const targetBrand = getCurrentBrand(); 249 250 // â callApiã«æ¸¡ãè·ç©ï¼ãã©ã¡ã¼ã¿ï¼ãæºå 251 const calParams = { 252 shop_id: shopId, 253 department: CURRENT_DEPARTMENT, 254 ninzu: CURRENT_NINZU, 255 brand: targetBrand, 256 debug: CURRENT_DEBUG 257 }; 258 if (targetDate) calParams.date = targetDate; // æ¥ä»ãããã°è¿½å 259 260 // â¡ toolsãµã¼ãã¼ã¸ã®URLï¼åºè詳細ï¼ã targetBrand ã«ç´ã 261 const toolsApiUrl = 'https://eminalclinic.jp/tools/api/get_shop_detail.php'; 262 const apiKey = 'eminal_yM6*VqY9lNm'; 263 const detailUrl = `${toolsApiUrl}?facility_code=${shopId}&brand=${encodeURIComponent(targetBrand)}&api_key=${apiKey}`; 264 265 console.log("ð¨ JSãå®éã«å©ããã¨ãã¦ããURLã¯ããã ï¼ð", detailUrl); 266 const calPromise = callApi('get_new_calendar.php', calParams); 267 const detailPromise = fetch(detailUrl) 268 .then(res => res.json()) 269 .catch(err => {
270 console.warn('â ï¸åºè詳細APIã®éä¿¡ã¨ã©ã¼ï¼ã«ã¬ã³ãã¼ã®ã¿ã§ç¶è¡ãã¾ãï¼:', err); 271 return { status: 'error', data: {} }; // 失ææã¯ç©ºãã¼ã¿ãè¿ã 272 }); 273 274 // 両æ¹ã®å¦çãå¾ ã¤ï¼detailPromiseãã¨ã©ã¼ã§ãå ¨ä½ã¯æ¢ã¾ããªãï¼ï¼ 275 const [calJson, detailJson] = await Promise.all([calPromise, detailPromise]); 276 console.log('ð¥toolsããã®çãã¼ã¿:', detailJson); 277 if (calJson.status !== 'success') throw new Error(calJson.message); 278 279 // 失æãã¦ãã«ã¬ã³ãã¼ã¯åºãããã®ãã©ã¼ã«ãã㯠280 const shopDetailData = detailJson.status === 'success' ? detailJson.data : {}; 281 282 // ðæµãè¾¼ã¿ãå®è¡ 283 renderShopInfoHeader(shopDetailData); 284 // æç»é¢æ°ã¸ãã«ã¬ã³ãã¼ãã¼ã¿ãã¨ãåºè詳細ãã¼ã¿ãã®ä¸¡æ¹ã渡ã 285 calendarWrapper.innerHTML = CalendarView.buildHTML( 286 currentSelectedShopName, 287 calJson.start_date, 288 calJson.calendar, 289 false 290 ); 291 292 // ã¤ãã³ãä»ä¸æã«è©³ç´°ãã¼ã¿ã渡ã 293 attachCalendarEvents(shopId, shopDetailData); 294 295 calendarWrapper.style.minHeight = ''; 296 297 if (targetDate !== '') { 298 // ã¹ã¯ãã¼ã«å¦ç (以åã®ã³ã¼ããã®ã¾ã¾) 299 setTimeout(() => { 300 const anchor = document.getElementById('calendar-top-anchor'); 301 if (anchor) window.scrollTo({ top: anchor.getBoundingClientRect().top + (window.pageYOffset || document.documentElement.scrollTop) - 20, behavior: 'smooth' }); 302 }, 50); 303 } 304 305 } catch (error) { 306 console.error('éä¿¡ã¨ã©ã¼:', error); 307 calendarWrapper.innerHTML = '<p class="error-msg">æ å ±ã®åå¾ã«å¤±æãã¾ããã</p>'; 308 calendarWrapper.style.minHeight = ''; 309 } 310} 311 312function attachCalendarEvents(shopId) { 313 document.querySelectorAll('.btn-nav').forEach(btn => { 314 btn.addEventListener('click', (e) => { 315 const targetBtn = e.currentTarget; 316 if (!targetBtn.disabled) loadCalendar(shopId, targetBtn.dataset.date); 317 }); 318 }); 319 320 // ð ã追å ãç¾å¨æå»ãã60å以å ã®æ ï¼æºåãéã«åããªãæ ï¼ãå°éããï¼ 321 const now = new Date(); 322 const thresholdTime = new Date(now.getTime() + 60 * 60 * 1000); // ç¾å¨æå» + 60å 323 324 document.querySelectorAll('.btn-slot.ok').forEach(btn => { 325 const dateStr = btn.dataset.date; // ä¾: "2026-03-20" 326 const timeStr = btn.dataset.time; // ä¾: "10:30" 327 328 if (dateStr && timeStr) { 329 // Safariçã®ãã¼ã¹ã¨ã©ã¼ãé²ãããããã¤ãã³ãã¹ã©ãã·ã¥ã«å¤æï¼2026/03/20 10:30 ã®å½¢å¼ã¸ï¼ 330 const slotDateTime = new Date(`${dateStr.replace(/-/g, '/')} ${timeStr}`); 331 332 // æ ã®æéããç¾å¨æå»ãã60åå¾ããããåããªããããã¯ï¼ 333 if (slotDateTime < thresholdTime) { 334 btn.classList.remove('ok'); 335 btn.classList.add('ng'); // äºç´ä¸å¯ã®ã¯ã©ã¹ã«å¤æ´ 336 btn.innerHTML = 'å仿éãéãã¦ãã¾ã'; // ãâããªã©ã®ããã¹ããäºç´ä¸å¯ã®ãã¼ã¯ï¼ã¼ ã Ãï¼ã«å¤æ´ 337 btn.disabled = true; // ãã¿ã³ãç¡å¹å 338 return; // ã¯ãªãã¯ã¤ãã³ããä»ããã«æ¬¡ã®ãã¿ã³ã®å¦çã¸ã¹ããã 339 } 340 } 341 342 // 60å以ä¸ã®ç¶äºãããå®å ¨ãªæ ã®ã¿ãã¯ãªãã¯ã¤ãã³ããä»ä¸ããï¼ 343 btn.addEventListener('click', (e) => { 344 const targetBtn = e.currentTarget; 345 selectDateTime(shopId, targetBtn.dataset.date, targetBtn.dataset.time); 346 }); 347 }); 348} 349 350function selectDateTime(shopId, date, time) { 351 // 1. ãã©ã¼ã ã®é ããã£ã¼ã«ãã«é¸ææ å ±ãã»ãã 352 let form = document.getElementById('customer-form'); 353 if (form) { 354 if (!document.getElementById('hidden-shop-id')) { 355 form.insertAdjacentHTML('beforeend', ` 356 <input type="hidden" id="hidden-shop-id" name="shop_id" value=""> 357 <input type="hidden" id="hidden-date" name="date" value=""> 358 <input type="hidden" id="hidden-time" name="time" value=""> 359 `); 360 } 361 document.getElementById('hidden-shop-id').value = shopId; 362 document.getElementById('hidden-date').value = date; 363 document.getElementById('hidden-time').value = time; 364 } 365 366 // 2. å ¥åç»é¢ï¼STEP 3ï¼ã®ãããã¼æ å ±ãæ´æ° 367 // renderShopInfoHeader ã§ã»ãããããåºèåã¨ã鏿ããæ¥æã表示 368 const summaryShopname = document.getElementById('summary-shopname'); 369 if (summaryShopname) summaryShopname.innerHTML = currentSelectedShopName; 370 371 const summaryDatetime = document.getElementById('summary-datetime'); 372 if (summaryDatetime) { 373 // ç¡æ©è³ªãªãYYYY-MM-DDããããYYYYå¹´MæDæ¥ãã«å¤æãã 374 // ãã¤ãã³ã§åãå»ãã§é åã«ãã ['2026', '05', '05'] 375 const [year, month, day] = date.split('-'); 376 377 // parseInt() ã使ããã¨ã§ãã05æããã5æãã®ããã«ã¼ãåããæ¶ãã¦ç¶ºéºã«ãã¾ã 378 const formattedDate = `${year}å¹´${parseInt(month, 10)}æ${parseInt(day, 10)}æ¥`; 379 380 // 夿ããæ¥ä»ã¨æéãåä½ããã¦è¡¨ç¤ºï¼ããã«ã¯HTMLã¿ã°ã¯ç¡ãã®ã§ textContent ã§OKï¼ 381 summaryDatetime.textContent = `${formattedDate} ${time}`; 382 } 383 384 // ð 3. ãéè¦ã2åäºç´æã®ãäºäººç®å ¥åã¨ãªã¢ãã®è¡¨ç¤ºå¶å¾¡
385 // CURRENT_NINZU ã 2 ã®å ´åã®ã¿ãäºäººç®ã®å ¥åã»ã¯ã·ã§ã³ã表示ãã 386 const secSecond = document.getElementById('sec-second-person'); 387 if (secSecond) { 388 if (CURRENT_NINZU === 2) { 389 secSecond.style.display = 'block'; 390 // äºäººç®ã表示ãããéã¯ãããªãã¼ã·ã§ã³å¯¾è±¡ã«ãªããã¨ãæè 391 } else { 392 secSecond.style.display = 'none'; 393 } 394 } 395 396 // 4. ã¡ãã¥ã¼ãã¨ã®åå¥ã«ã¼ã«é©ç¨ï¼BMIè¡¨ç¤ºãæªæå¹´è¦åãªã©ï¼ 397 const rule = MENU_RULES[CURRENT_DEPARTMENT] || MENU_RULES['default']; 398 View.toggleDisplay('sec-bmi', rule.requireBmi); 399 View.toggleDisplay('label-job-10', rule.allowUnderage, 'inline-block'); 400 401 // 5. ç»é¢åãæ¿ãï¼ã«ã¬ã³ãã¼ããå ¥åãã©ã¼ã ã¸ï¼ 402 View.changeSections(['step-date'], ['step-form']); 403 View.scrollTo('step-form'); 404} 405// ========================================== 406// ð¢ åºèãããã¼ã¸ã®ãã¼ã¿æµãè¾¼ã¿å¦ç 407// ========================================== 408function renderShopInfoHeader(shopData, shopId) { 409 console.log('ð¥ æµãè¾¼ã¿é¨éå°çï¼åãåã£ããã¼ã¿:', shopData); 410 411 const headerWrap = document.getElementById('js-shop-info-header'); 412 if (!headerWrap) { 413 console.error('ð¨ ãç·æ¥ãindex.phpã« "js-shop-info-header" ã®æ ãè¦ã¤ããã¾ããï¼'); 414 return; 415 } 416 417 try { 418 // 1. åºèåï¼å¤æ°ãç¡ãã¨ã©ã¼ãé²ããããç´æ¥æååããã©ã¼ã«ããã¯ã«ï¼ 419 const nameEl = document.getElementById('js-shop-name'); 420 if (nameEl) nameEl.textContent = shopData.facility_name || 'åºèå åå¾ä¸...'; 421 422 // 2. 使 423 const addressEl = document.getElementById('js-shop-address'); 424 if (addressEl) addressEl.innerHTML = shopData.address || 'æ å ±åå¾ä¸...'; 425 426 // 3. é»è©±çªå· 427 const telEl = document.getElementById('js-shop-tel'); 428 if (telEl) telEl.textContent = shopData.tel || 'æ å ±åå¾ä¸...'; 429 430 // 4. ãç¥ããï¼ããã°è¡¨ç¤ºããªããã°é ãï¼ 431 const noticeEl = document.getElementById('js-shop-notice'); 432 if (noticeEl) { 433 // APIããçã®é åãã¼ã¿(notices)ãå±ãã¦ããã確èªï¼ 434 if (shopData.notices && shopData.notices.length > 0) { 435 436 // ð æ°è¦äºç´ï¼new_bookingï¼å°ç¨ã®æ¤åï¼ 437 // 'all'ï¼å ¨å¡ï¼ã¨ 'new'ï¼æ°è¦ï¼ã ããéãã'existing'ï¼æ¢åä¼å¡åãï¼ã¯å¼¾ãï¼ï¼ 438 const targetNotices = shopData.notices.filter(notice => 439 notice.info_type === 'all' || notice.info_type === 'new' 440 ); 441 442 // priorityã®å¤ãå°ããã»ã©ä¸ã«è¡¨ç¤ºããã¾ã 443 const noticePriority = { 'happening': 1, 'holiday': 2, 'normal': 3 }; 444 targetNotices.sort((a, b) => (noticePriority[a.type] || 99) - (noticePriority[b.type] || 99)); 445 446 if (targetNotices.length > 0) { 447 // ééãããç¥ããã <br><br> ã§ç¾ããé£çµãã 448 const combinedHtml = targetNotices.map(n => n.body).join('<br><br>'); 449 450 noticeEl.innerHTML = combinedHtml; 451 noticeEl.style.display = 'block'; 452 } else { 453 // æ°è¦åãã®ãç¥ããã1ä»¶ãç¡ãã£ãå ´åã¯é ã 454 noticeEl.style.display = 'none'; 455 } 456 } else { 457 // ãããããç¥ããèªä½ãç¡ãå ´åãé ã 458 noticeEl.style.display = 'none'; 459 } 460 } 461 462 // 5. 詳細ãã¿ã³ã®ã¤ãã³ãä»ä¸ 463 const oldBtn = document.getElementById('btn-top-shop-detail'); 464 if (oldBtn) { 465 const newBtn = oldBtn.cloneNode(true); 466 oldBtn.parentNode.replaceChild(newBtn, oldBtn); 467 468 // ãã¼ã¿ãã¡ããã¨ããã°ãã¿ã³ã表示ãã¦ã¯ãªãã¯ã¤ãã³ããä»ãã 469 if (shopData && Object.keys(shopData).length > 0) { 470 newBtn.addEventListener('click', () => { 471 View.showShopModal(shopData); 472 }); 473 newBtn.style.display = 'inline-block'; 474 } else { 475 newBtn.style.display = 'none'; // ãã¼ã¿ãç¡ãæã¯é ã 476 } 477 } 478 479 // ð å ¨ã¦ã®æºåãæ´ã£ãããæ å ¨ä½ã表示ããï¼ 480 headerWrap.style.display = 'block'; 481 console.log('â æµãè¾¼ã¿å®äºï¼ãããã¼ã表示ãã¾ãã'); 482 483 } catch (e) { 484 console.error('ð¨ æµãè¾¼ã¿å¦çä¸ã«ã¨ã©ã¼ãçºçãã¾ãã:', e); 485 } 486} 487// ========================================== 488// ð STEP 3: ãã©ã¼ã ã®å¶å¾¡ã¨ããªãã¼ã·ã§ã³ 489// ========================================== 490function setupFormEvents() { 491 // ð å¹´é½¢å ¥åæã®ç£è¦ 492 document.getElementById('age')?.addEventListener('input', checkUnderageCondition); 493 document.getElementById('age_2')?.addEventListener('input', checkUnderageCondition); 494 495 // ð è·æ¥å¤æ´æã®ç£è¦ï¼æ¢åã® forEach(radio => ...) ã«è¿½å ãã¦ãOKã§ããã以ä¸ã®ããã«ã¾ã¨ãã¦ãåãã¾ãï¼ 496 document.querySelectorAll('input[name="job"], input[name="job_2"]').forEach(radio => { 497 radio.addEventListener('change', checkUnderageCondition); 498 }); 499 const jobRadios = document.querySelectorAll('input[name="job"]'); 500 jobRadios.forEach(radio => { 501 radio.addEventListener('change', (e) => { 502 const val = e.target.value; 503 // ð ãä¿®æ£ãallowUnderageã®æ¡ä»¶ãæ¤å»ï¼ 504 // PHPå´ã§ã¡ãã»ã¼ã¸ãåãæ¿ãã¦ãããããä¸å¦ç(10)ã髿 ¡ç(20)ãªãç¡æ¡ä»¶ã§è¦åç®±ã表示ããï¼ 505 const showWarning = (val === '10' || val === '20'); 506 View.toggleDisplay('warning-underage', showWarning); 507 }); 508 }); 509 510 const jobRadios2 = document.querySelectorAll('input[name="job_2"]'); 511 jobRadios2.forEach(radio => { 512 radio.addEventListener('change', (e) => { 513 const val = e.target.value; 514 // ð 2人ç®ãåæ§ã«ãä¸é«çãªãç¡æ¡ä»¶ã§è¡¨ç¤ºï¼ 515 const showWarning = (val === '10' || val === '20'); 516 View.toggleDisplay('warning-underage-2', showWarning); 517 }); 518 }); 519 const btnCalcBmi = document.getElementById('btn-calc-bmi'); 520 if (btnCalcBmi) { 521 btnCalcBmi.addEventListener('click', () => { 522 const hei = parseFloat(document.getElementById('hei').value); 523 const wei = parseFloat(document.getElementById('wei').value); 524 const resultBox = document.getElementById('bmi_result'); 525 526 if (hei > 0 && wei > 0) { 527 resultBox.value = (wei / Math.pow(hei * 0.01, 2)).toFixed(2); 528 View.showInputError('err-bmi', ''); 529 } else { 530 resultBox.value = ''; 531 View.showInputError('err-bmi', '身é·ã¨ä½éãæ£ããå ¥åãã¦ãã ããã'); 532 } 533 }); 534 } 535 536 const btnSubmit = document.getElementById('btn-submit-form'); 537 if (btnSubmit) { 538 btnSubmit.addEventListener('click', () => { 539 const errors = validateForm(); 540 541 if (errors.length === 0) { 542 goToConfirmStep(); 543 } else { 544 let errorHtml = '<ul style="color: #e43a6e; padding-left: 20px; margin: 0;">';
545 errors.forEach(msg => errorHtml += `<li style="margin-bottom: 8px;">${msg}</li>`); 546 errorHtml += '</ul>'; 547 548 View.showModal({ 549 type: 'error', 550 title: '<span class="material-icons" style="vertical-align: bottom;">warning</span> å ¥åã¨ã©ã¼', 551 body: errorHtml, 552 btnText: '確èªãã¦ä¿®æ£ãã' 553 }); 554 555 View.scrollToFirstError(); 556 } 557 }); 558 } 559 560 const btnFinalSubmit = document.getElementById('btn-final-submit'); 561 if (btnFinalSubmit) { 562 btnFinalSubmit.addEventListener('click', () => { 563 // --- 1. å ±éæ å ±ã®åå¾ --- 564 const shopId = document.getElementById('hidden-shop-id').value; 565 const date = document.getElementById('hidden-date').value; 566 const time = document.getElementById('hidden-time').value; 567 568 // --- 2. ä¸äººç®ã®æ å ±åå¾ã¨æ´å½¢ --- 569 const sei = document.getElementById('name_sei').value.trim(); 570 const mei = document.getElementById('name_mei').value.trim(); 571 const age = document.getElementById('age').value; 572 const jobVal = document.querySelector('input[name="job"]:checked')?.value; 573 const bmi = document.getElementById('bmi_result')?.value || ''; 574 const hei = document.getElementById('hei')?.value || ''; 575 const wei = document.getElementById('wei')?.value || ''; 576 const tel = document.getElementById('tel').value.trim(); 577 const email = document.getElementById('email').value.trim(); 578 579 // ð æ§ã·ã¹ãã 仿§ï¼å§ã¨åãå ¨è§ã¹ãã¼ã¹ã§çµå 580 document.getElementById('post-name').value = `${sei}ã${mei}`; 581 document.getElementById('post-age').value = age; 582 document.getElementById('post-job').value = jobVal; 583 document.getElementById('post-bmi').value = bmi; 584 document.getElementById('post-hei').value = hei; 585 document.getElementById('post-wei').value = wei; 586 document.getElementById('post-tel').value = tel; 587 document.getElementById('post-email').value = email; 588 589 // --- 3. äºäººç®ã®æ å ±åå¾ï¼2åäºç´æã®ã¿å®è¡ï¼ --- 590 if (CURRENT_NINZU === 2) { 591 const sei2 = document.getElementById('name_sei_2').value.trim(); 592 const mei2 = document.getElementById('name_mei_2').value.trim(); 593 const age2 = document.getElementById('age_2').value; 594 const jobVal2 = document.querySelector('input[name="job_2"]:checked')?.value; 595 const tel2 = document.getElementById('tel_2').value.trim(); 596 const email2 = document.getElementById('email_2').value.trim(); 597 598 // ð äºäººç®ãå ¨è§ã¹ãã¼ã¹çµåã§å°åº 599 document.getElementById('post-name-2').value = `${sei2}ã${mei2}`; 600 document.getElementById('post-age-2').value = age2; 601 document.getElementById('post-job-2').value = jobVal2; 602 document.getElementById('post-tel-2').value = tel2; 603 document.getElementById('post-email-2').value = email2; 604 } else { 605 // ð ã追å ã1åäºç´æã¯é ããã£ã¼ã«ãã®æ®éª¸ï¼ã´ã¼ã¹ããã¼ã¿ï¼ãæ¶ãå»ã 606 document.getElementById('post-name-2').value = ''; 607 document.getElementById('post-age-2').value = ''; 608 document.getElementById('post-job-2').value = ''; 609 document.getElementById('post-tel-2').value = ''; 610 document.getElementById('post-email-2').value = ''; 611 } 612 613 // --- 4. äºç´ã¡ã¿æ å ± --- 614 document.getElementById('post-shop-id').value = shopId; 615 document.getElementById('post-date').value = date; 616 document.getElementById('post-time').value = time; 617 document.getElementById('post-department').value = CURRENT_DEPARTMENT; 618 document.getElementById('post-ninzu').value = CURRENT_NINZU; 619 620 // ð è±æ¯ã¡ãã¥ã¼ã®å ´åã鏿ããããã©ã³IDãã»ãã 621 const planVal = document.querySelector('input[name="plan"]:checked')?.value || ''; 622 const postPlan = document.getElementById('post-plan'); 623 if (postPlan) postPlan.value = planVal; 624 625 // --- 5. éä¿¡æ¼åºã¨å®è¡ --- 626 View.showModal({ 627 title: 'äºç´å¦çä¸...', 628 body: ` 629 <div style="text-align: center; padding: 20px 0;"> 630 <div class="loader"></div> 631 <p style="margin-top: 20px; font-size: 0.95rem; color: #E63074; font-weight: bold;"> 632 â»äºç´ç¢ºå®å¦çä¸ã§ãã<br>ãã©ã¦ã¶ãéããã«ãå¾ ã¡ãã ããã 633 </p> 634 </div> 635 `, 636 isLocked: true, 637 hideFooter: true 638 }); 639 640 // äºééä¿¡é²æ¢ã®ããã¯
641 btnFinalSubmit.disabled = true; 642 643 // åºå¹¹ã·ã¹ãã ã¸éä¿¡ 644 document.getElementById('real-form').submit(); 645 }); 646 } 647} 648// ð æªæå¹´æ¡ä»¶ãå¤å®ãã¦åæããã¯ã¹ãåºãåãã颿° 649function checkUnderageCondition() { 650 let isUnderage = false; 651 652 // æå®ãã人ç©ãæªæå¹´æ¡ä»¶ã«å½ã¦ã¯ã¾ãããã§ãã¯ããå é¨é¢æ° 653 const checkPerson = (ageId, jobName) => { 654 const ageStr = document.getElementById(ageId)?.value; 655 const jobChecked = document.querySelector(`input[name="${jobName}"]:checked`); 656 if (ageStr && jobChecked) { 657 const age = parseInt(ageStr, 10); 658 const job = jobChecked.value; 659 // æ¡ä»¶: 18æ³ä»¥ä¸ ã㤠(ä¸å¦ç[10] ã¾ãã¯ é«æ ¡ç[20]) 660 if (age < 18 || job === '10' || job === '20') { 661 return true; 662 } 663 } 664 return false; 665 }; 666 667 // ä¸äººç®ã®ãã§ã㯠668 if (checkPerson('age', 'job')) isUnderage = true; 669 670 // äºäººç®ã®ãã§ã㯠(2åäºç´æã®ã¿) 671 if (CURRENT_NINZU === 2) { 672 if (checkPerson('age_2', 'job_2')) isUnderage = true; 673 } 674 675 // æ¡ä»¶ã«åè´ããã°è¡¨ç¤ºãããªããã°é ã 676 View.toggleDisplay('sec-confirm-underage', isUnderage); 677} 678function validateForm() { 679 let errorMessages = []; 680 View.clearAllErrors(); 681 682 const setError = (id, msg) => { 683 View.showInputError(id, msg); 684 errorMessages.push(msg); 685 }; 686 687 const rule = MENU_RULES[CURRENT_DEPARTMENT] || MENU_RULES['default']; 688 689 const sei = document.getElementById('name_sei').value.trim(); 690 const mei = document.getElementById('name_mei').value.trim(); 691 const hiraganaRegex = /^[ã-ãã¼]+$/; 692 693 if (!sei) setError('err-name-sei', 'å§ãå ¥åãã¦ãã ããã'); 694 else if (!hiraganaRegex.test(sei)) setError('err-name-sei', 'å§ã¯ã²ãããªã§å ¥åãã¦ãã ããã'); 695 696 if (!mei) setError('err-name-mei', 'åãå ¥åãã¦ãã ããã'); 697 else if (!hiraganaRegex.test(mei)) setError('err-name-mei', 'åã¯ã²ãããªã§å ¥åãã¦ãã ããã'); 698 699 const ageStr = document.getElementById('age').value; 700 const jobChecked = document.querySelector('input[name="job"]:checked'); 701 const age = parseInt(ageStr, 10); 702 const job = jobChecked ? jobChecked.value : null; 703 704 if (!ageStr) setError('err-age', 'å¹´é½¢ãå ¥åãã¦ãã ããã'); 705 if (!job) setError('err-job', 'è·æ¥ã鏿ãã¦ãã ããã'); 706 707 if (ageStr && job) { 708 if (rule.allowUnderage) { 709 if (age < 13) setError('err-age', 'å°å¦æ ¡åæ¥åã®æ¹ã¯ãç³ãè¾¼ã¿ããã ãã¾ããã'); 710 } else { 711 if (age < 18) setError('err-age', 'æªæå¹´ã®æ¹ã¯ãå¥ç´ããã ãã¾ããã'); 712 if (job === '20') setError('err-job', '髿 ¡çã®æ¹ã¯ãå¥ç´ããã ãã¾ããï¼åæ¥å¾3ææ«ã¾ã§ä¸å¯ï¼ã'); 713 } 714 } 715 716 if (rule.requireBmi) { 717 const bmiVal = parseFloat(document.getElementById('bmi_result').value); 718 if (!bmiVal || isNaN(bmiVal)) { 719 setError('err-bmi', '身é·ã¨ä½éãå ¥åããBMIãç®åºãã¦ãã ããã'); 720 } else if (bmiVal <= 1) { 721 setError('err-bmi', 'BMIã®æ°å¤ãæ£ããããã¾ããã'); 722 } 723 } 724 725 // ========================================================= 726 // ð ä¸äººç®ã®é»è©±çªå·ãã§ãã¯ï¼æ¥æ¬ã®åºå®é»è©±ã»æºå¸¯ã»IPã»ããªã¼ãã¤ã¤ã«ã®ã¿ï¼ 727 // ========================================================= 728 // ð ã追å ããã¹ãç¨ã®é»è©±çªå·ãªã¹ã 729 const testPhones = ['00000001234', '01000001234', '02000001234', '03000001234', '04000001234']; 730 731 // ========================================================= 732 // ð ä¸äººç®ã®é»è©±çªå·ãã§ã㯠733 // ========================================================= 734 const tel = document.getElementById('tel').value.trim(); 735 const telRegex = /^(050|070|080|090)\d{8}$|^0120\d{6}$|^0800\d{7}$|^0[2-9]\d{8}$|^01[1-9]\d{7}$/; 736 737 if (!tel) { 738 setError('err-tel', 'é»è©±çªå·ãå ¥åãã¦ãã ããã'); 739 } else if (!testPhones.includes(tel) && !telRegex.test(tel)) { 740 // ð¥ãä¿®æ£ããã¹ãçªå·ãªã¹ãã«å«ã¾ãã¦ããªãããã¤æ£è¦è¡¨ç¾ã«ãåè´ããªãå ´åã®ã
740¿ã¨ã©ã¼ï¼ 741 setError('err-tel', 'æ£ããæ¥æ¬ã®é»è©±çªå·ï¼æºå¸¯ã¾ãã¯åºå®ï¼ããã¤ãã³ãªãã§å ¥åãã¦ãã ããã'); 742 } 743 744 const email = document.getElementById('email').value.trim(); 745 const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; 746 if (!email) setError('err-email', 'ã¡ã¼ã«ã¢ãã¬ã¹ãå ¥åãã¦ãã ããã'); 747 else if (!emailRegex.test(email)) setError('err-email', 'æ£ããã¡ã¼ã«ã¢ãã¬ã¹ãå ¥åãã¦ãã ããã'); 748 749 let isAllRulesChecked = true; 750 const requiredCheckboxes = document.querySelectorAll('.js-required-rule'); 751 752 requiredCheckboxes.forEach(checkbox => { 753 if (!checkbox.checked) { 754 isAllRulesChecked = false; 755 } 756 }); 757 758 if (requiredCheckboxes.length > 0 && !isAllRulesChecked) { 759 setError('err-confirm', 'ãã¹ã¦ã®ç¢ºèªäºé ã«ãã§ãã¯ãå ¥ãã¦ãã ããã'); 760 } else { 761 const errConfirm = document.getElementById('err-confirm'); 762 if (errConfirm) errConfirm.innerText = ''; 763 } 764 765 const secUnderage = document.getElementById('sec-confirm-underage'); 766 if (secUnderage && secUnderage.style.display !== 'none') { 767 const confirmUnderage = document.getElementById('confirm_underage'); 768 if (!confirmUnderage.checked) { 769 setError('err-confirm-underage', 'æªæå¹´ã®åä¼´æ¡ä»¶ãã確èªã®ããããã§ãã¯ãå ¥ãã¦ãã ããã'); 770 } 771 } 772 773 // ========================================================= 774 // ð äºäººç®ã®é»è©±çªå·ãã§ã㯠775 // ========================================================= 776 if (CURRENT_NINZU === 2) { 777 const sei2 = document.getElementById('name_sei_2').value.trim(); 778 const mei2 = document.getElementById('name_mei_2').value.trim(); 779 const age2 = document.getElementById('age_2').value; 780 const job2 = document.querySelector('input[name="job_2"]:checked'); 781 const hiraganaRegex = /^[ã-ãã¼]+$/; 782 const tel2 = document.getElementById('tel_2').value.trim(); 783 const telRegex2 = /^(050|070|080|090)\d{8}$|^0120\d{6}$|^0800\d{7}$|^0[2-9]\d{8}$|^01[1-9]\d{7}$/; 784 785 if (!sei2) setError('err-name-sei-2', 'äºäººç®ã®å§ãå ¥åãã¦ãã ããã'); 786 else if (!hiraganaRegex.test(sei2)) setError('err-name-sei-2', 'äºäººç®ã®å§ã¯ã²ãããªã§å ¥åãã¦ãã ããã'); 787 788 if (!mei2) setError('err-name-mei-2', 'äºäººç®ã®åãå ¥åãã¦ãã ããã'); 789 else if (!hiraganaRegex.test(mei2)) setError('err-name-mei-2', 'äºäººç®ã®åã¯ã²ãããªã§å ¥åãã¦ãã ããã'); 790 791 if (!age2) setError('err-age-2', 'äºäººç®ã®å¹´é½¢ãå ¥åãã¦ãã ããã'); 792 if (!job2) setError('err-job-2', 'äºäººç®ã®è·æ¥ã鏿ãã¦ãã ããã'); 793 794 if (tel2 !== "") { 795 // ð¥ãä¿®æ£ãäºäººç®ãVIPéè¡è¨¼ï¼ãã¹ãçªå·ï¼ãªãæ£è¦è¡¨ç¾ãã¹ã«ã¼ãããï¼ 796 if (!testPhones.includes(tel2) && !telRegex2.test(tel2)) { 797 setError('err-tel-2', 'äºäººç®ã®é»è©±çªå·ãæ£ããå ¥åãã¦ãã ããï¼ãã¤ãã³ãªãï¼ã'); 798 } else if (tel2 === tel) { 799 setError('err-tel-2', 'é»è©±çªå·ããä¸äººç®ã¨åãã§ããäºäººç®ã®æ¹ã®çªå·ãå ¥åãã¦ãã ããã'); 800 } 801 } 802 803 const email2 = document.getElementById('email_2').value.trim(); 804 const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; 805 if (email2 !== "") { 806 if (!emailRegex.test(email2)) { 807 setError('err-email-2', 'äºäººç®ã®ã¡ã¼ã«ã¢ãã¬ã¹ãæ£ããå ¥åãã¦ãã ããã'); 808 } 809 } 810 } 811 812 return errorMessages; 813} 814 815// ========================================== 816// ð STEP 3 -> STEP 4 (確èªç»é¢) 817// ========================================== 818function goToConfirmStep() { 819 const shopName = document.getElementById('hidden-shop-name').value; 820 const datetime = document.getElementById('summary-datetime').textContent; 821 const sei = document.getElementById('name_sei').value.trim(); 822 const mei = document.getElementById('name_mei').value.trim(); 823 const age = document.getElementById('age').value; 824 const jobVal = document.querySelector('input[name="job"]:checked').value; 825 const tel = document.getElementById('tel').value.trim(); 826 const email = document.getElementById('email').value.trim(); 827 828 const menuName = DEPARTMENT_CONFIG.getLabel(CURRENT_DEPARTMENT); 829 const jobLabels = { '10': 'ä¸å¦ç', '20': '髿 ¡ç', '30': '大å¦ã»å°éå¦ç', '40': 'ä¼ç¤¾å¡ ç', '999': 'ãã®ä»' }; 830 831 document.getElementById('confirm-menu').textContent = menuName; 832 document.getElementById('confirm-shop').innerHTML = shopName; 833 document.getElementById('confirm-datetime').textContent = datetime; 834 document.getElementById('confirm-name').textContent = `${sei} ${mei}`; 835 document.getElementById('confirm-age').textContent = `${age} æ³`; 836 document.getElementById('confirm-job').textContent = jobLabels[jobVal] || 'æªè¨å®'; 837 document.getElementById('confirm-tel').textContent = tel; 838 document.getElementById('confirm-email').textContent = email; 839 840 const rule = MENU_RULES[CURRENT_DEPARTMENT] || MENU_RULES['default']; 841 if (rule.requireBmi) { 842 document.getElementById('confirm-bmi').textContent = document.getElementById('bmi_result').value; 843 View.toggleDisplay('row-confirm-bmi', true, 'table-row'); 844 } else { 845 View.toggleDisplay('row-confirm-bmi', false); 846 } 847 // --- 2. äºäººç®ã®æ å ±ã®åå¾ã¨æµãè¾¼ã¿ï¼2åäºç´æã®ã¿ï¼ ---
848 // äºäººç®ã®å ¥åæ¬ãåå¨ããããã§ã㯠849 if (CURRENT_NINZU === 2) { 850 const sei2 = document.getElementById('name_sei_2').value.trim(); 851 const mei2 = document.getElementById('name_mei_2').value.trim(); 852 const age2 = document.getElementById('age_2').value; 853 const jobVal2 = document.querySelector('input[name="job_2"]:checked')?.value; 854 855 // ð ã追å ãäºäººç®ã®é£çµ¡å ãåå¾ 856 const tel2 = document.getElementById('tel_2').value.trim(); 857 const email2 = document.getElementById('email_2').value.trim(); 858 859 document.getElementById('confirm-name-2').textContent = `${sei2} ${mei2}`; 860 document.getElementById('confirm-age-2').textContent = `${age2} æ³`; 861 document.getElementById('confirm-job-2').textContent = jobLabels[jobVal2] || 'æªè¨å®'; 862 863 // ð ã追å ãé£çµ¡å ã¯ä»»æãªã®ã§ã空ãªããæªå ¥åãã¨è¡¨ç¤ºãã親åè¨è¨ï¼ 864 document.getElementById('confirm-tel-2').textContent = tel2 || 'æªå ¥å'; 865 document.getElementById('confirm-email-2').textContent = email2 || 'æªå ¥å'; 866 867 // äºäººç®ç¨ã»ã¯ã·ã§ã³ã表示 868 View.toggleDisplay('sec-confirm-second-person', true); 869 } else { 870 // 1åäºç´ãªãäºäººç®ã»ã¯ã·ã§ã³ãé ã 871 View.toggleDisplay('sec-confirm-second-person', false); 872 } 873 874 // ð ç»é¢åãæ¿ãã¨ã¹ããããã¼ã®é²è¡ãã¹ã¯ãã¼ã«ã View ã«ä¾é ¼ 875 View.changeSections([], ['step-kakunin']); 876 877 // ð ã追å ãã¦ã¼ã¶ã¼ãæ··ä¹±ãããéä¸ã®ãã¿ã³ãé ãï¼ 878 View.toggleDisplay('js-submit-area', false); 879 View.toggleDisplay('js-form-back-btn', false); 880 881 View.updateStepIndicator(3); 882 View.scrollTo('step-kakunin'); 883} 884 885// ========================================== 886// ð æ»ãï¼ä¿®æ£ããï¼ãã¿ã³ã®å¶å¾¡ 887// ========================================== 888function setupBackButtonEvents() { 889 document.querySelectorAll('.btn-back').forEach(btn => { 890 btn.addEventListener('click', (e) => { 891 const currentSection = e.target.closest('section'); 892 893 if (currentSection.id === 'step-date') { 894 View.changeSections(['step-date'], ['step-tenpo']); 895 View.updateStepIndicator(1); 896 } 897 else if (currentSection.id === 'step-form') { 898 View.changeSections(['step-form', 'step-kakunin'], ['step-date']); 899 View.updateStepIndicator(2); 900 } 901 else if (currentSection.id === 'step-kakunin') { 902 // ð ã追å ã»ä¿®æ£ã確èªç»é¢ã䏿¦æ¶ãã¦ãå ¥åç»é¢ã®ãã¿ã³ã復活ãããï¼ 903 View.changeSections(['step-kakunin'], []); 904 View.toggleDisplay('js-submit-area', true); 905 906 // â»å¤§ããªæ»ããã¿ã³ã¯ display: flex ãªã®ã§ç¬¬3弿°ã§æå® 907 View.toggleDisplay('js-form-back-btn', true, 'flex'); 908 909 View.scrollTo('step-form'); 910 // ä¿®æ£ã«æ»ãï¼ã¾ã 確å®ãã¦ããªãã®ã§ã¹ããã2ã«æ»ã 911 View.updateStepIndicator(2); 912 } 913 }); 914 }); 915}
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.