03f8caf3e9
後端 - 新增 6 個 Notification class(預約建立/確認/拒絕/取消/完成、收到評價),database + mail 雙 channel - 新增 NotificationController(list / unread-count / markRead / markAllRead / destroy) - 整合通知觸發至 MemberBookingController、ProviderBookingController、CompleteFinishedBookings、ReviewController - 新增 notifications / jobs / failed_jobs migration - Docker Compose 加入 queue-worker、mailpit service - DivingOffer 補上 provider() 關聯 前端 - 新增 notificationStore(Polling 30s/60s 自適應 + Page Visibility API) - 新增 NotificationBell(未讀 Badge)、NotificationDrawer(側邊通知中心) - main.js:auth store init 前置於 router.use(),修正 beforeEach guard 時序問題 - notificationAxios:依路徑動態選擇 member/coach token - NotificationDrawer:改用 new URL().pathname 提取 action_url 路徑 OpenSpec - 歸檔 notification-system change - 同步 notification-core / notification-email / notification-triggers specs 至主規格 - 更新 booking-lifecycle / review-lifecycle spec(補充通知觸發 requirement) Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
22 lines
807 B
JavaScript
22 lines
807 B
JavaScript
import axios from 'axios'
|
|
|
|
const notificationApi = axios.create({
|
|
baseURL: import.meta.env.VITE_API_URL + '/api',
|
|
headers: { Accept: 'application/json' },
|
|
})
|
|
|
|
notificationApi.interceptors.request.use((config) => {
|
|
// 優先用 coach_token,因為 coach 身份通知優先;member 也可用自己的 token
|
|
// 兩者都存在時(測試情境),以當前頁面路徑決定:/coach 開頭用 coach_token,其餘用 token
|
|
const isCoachPage = window.location.pathname.startsWith('/coach')
|
|
const token = isCoachPage
|
|
? (localStorage.getItem('coach_token') || localStorage.getItem('token'))
|
|
: (localStorage.getItem('token') || localStorage.getItem('coach_token'))
|
|
if (token) {
|
|
config.headers.Authorization = `Bearer ${token}`
|
|
}
|
|
return config
|
|
})
|
|
|
|
export default notificationApi
|