import { defineStore, } from 'pinia'; export const useMainStore = defineStore('mainStore', { state: () => ({ count: 0, token: "", loginState: false, // 登入狀態 loginDialog: false, // 登入視窗 profile: {}, // 使用者資訊 }), getters: { isMobile: () => { // 判斷是否為手機裝置 return /Mobile|Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( window.navigator.userAgent ); }, }, actions: { // 檢查登入狀態 checkToken() { const token = localStorage.getItem('token'); console.log('checkToken', token); if (token) { this.token = token; this.loginState = true; } else { this.token = null; this.loginState = false; } return this.loginState; }, logout() { localStorage.removeItem("token"); return this.router.push("/"); }, getImageUrl(name) { return new URL(`/src/assets/img/${name}`, import.meta.url).href; }, getTotalPages(totalRecords, recordsPerPage) { // 計算頁數 return Math.ceil(totalRecords / recordsPerPage); }, setProfile(data) { this.profile = data; }, // 將日期格式轉成純字串 formatDate(date) { const isTimestamp = !isNaN(date) && Number(date) >= 0; // 判斷是否為時間戳記 if (!date) return ""; // 若選取的日期為空,回傳空字串 if (!isTimestamp) { return date; } else { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, "0"); const day = String(date.getDate()).padStart(2, "0"); // 組成 YYYY-MM-DD return `${year}-${month}-${day}`; } }, // DatePicker datePickerFormat(date) { const day = date.getDate(); const month = date.getMonth() + 1; const year = date.getFullYear(); return `${year}-${month}-${day}`; }, getPDF(name) { return `https://ntcri.org/pdf/${name}.pdf`; }, // 過濾圖片標籤 removeHtmlImages(value) { return value.replace(/]*>/gi, ""); }, // 開啟登入視窗 openLoginDialog() { this.loginDialog = true; }, // 調整字串 formatString(content) { if (content) { content = content.replace(/</g, "<"); content = content.replace(/>/g, ">"); content = content.replace(/&nbsp;/g, " "); content = content.replace(/&times;/g, "×"); content = content.replace(/&#39;/g, "'"); content = content.replace(/·/g, "·"); return content; } }, checkTokenExpiration() { if (this.token) { // 解碼 JWT const base64Url = this.token.split(".")[1]; // 取得 JWT 的 payload const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); // 處理 URL 安全的 Base64 字串 const decodedPayload = atob(base64); // Base64 解碼 // 將解碼後的 payload 轉換為 JSON 物件 const payload = JSON.parse(decodedPayload); // 獲取過期時間(exp) const expirationTime = payload.exp; // 過期時間的 UNIX 時間戳 // 創建 Date 物件並設定時間戳 const expirationDate = new Date(expirationTime * 1000); // JS 時間戳以毫秒為單位故乘以 1000 // 取得日期和時間的字串表示 const formattedExpiration = expirationDate.toLocaleString(); console.log("JWT 過期時間:", formattedExpiration); // 取得當前時間戳 const currentTimestamp = Math.floor(Date.now() / 1000); let isTokenExpired; // 判斷 Token 是否已過期 if (currentTimestamp > expirationTime) { isTokenExpired = true; } else { isTokenExpired = false; } return isTokenExpired; } } }, })