---
# System prepended metadata

title: Training

---

# Training
## :calendar: Week 1
### 專案建置
- 套件安裝用 `yarn` 為主，不要混用 `npm`
- 用 vite 建置 vue3 (建置過程請選擇 typescript)
- vscode 插件推薦使用 volar (不要用 vetur 會衝突)，Eslint, Prettier
- 配置 EsLint Prettier 
  - 需達成即時於 vscode 顯示錯誤，`script` 和 `template` 都要能糾錯
  - 儲存時能自動修正簡單錯誤
  - 儲存時自動完成排版
- 配置 tailwindcss (官方有 vite vue3 的配置方式)
- 配置 Pinia
- 安裝 VueUse

### :hand: 練習項目

- 只能用 Composition API 進行開發，vue 實體使用 `<script setup lang="ts">`
- 利用 VueUse 的相關功能，製作一個懸浮可拖拉的小方塊，小方塊的懸浮樣式請用 Tailwindcss
- 小方塊內容需顯示方塊的即時位置 (x, y 值，基準點隨意)
- 將小方塊即時位置資訊更新至 Pinia 的 Store State 中
- 即時顯示 Pinia State 的更新位置在首頁裡頭

## :calendar: Week 2
### 專案建置
- 延續上週的專案
- 安裝 [Mocking Service Worker](https://mswjs.io/)，完成官方建置方式，並只在 `dev` 狀態下啟動此服務，也順便了解其運作方式，因為開發時，為了要讓你們的環境類似於測試環境，讓所有 api 都可以通，才有這個東西，正式開發時我會幫你們把 `handler` 處理好，你們只需要專注在前端就好
- 安裝 `pinia-plugin-persistedstate`
- 安裝 `vue-router@4`
- 安裝 `axios`

### :hand: 練習項目
#### 目標完成情境
> ✅ 進入首頁 (未登入) → Navigation Guards 阻擋轉跳至登入頁並登入 → 登入失敗 → 登入頁面顯示回傳的錯誤訊息

> ✅ 進入首頁 (未登入) → Navigation Guards 阻擋轉跳至登入頁並登入 → 登入成功 → 轉跳至首頁 → 關掉視窗

> ✅ 進入首頁 (已登入) → Navigation Guards 檢驗已有 token 給進首頁 → 登出 → 回到第一個情境

#### 實作步驟與使用技術
- 只做簡易 login 頁面 (需有帳密與登入按鈕) 與 home 主頁 (需有主頁標題與登出按鈕)
- 用來打 api 的 axios，必須使用攔截器，先對回傳做處理，回傳型別個階段應該是 `AxiosResponse` → `MswResponse` → `string`

    :::warning
    此部分型別請特別注意
    :::

- 利用 msw 製作用來處理 login 的 rest，這個 login api，拿到帳密驗證後，會拿到回傳，回傳格式如下，且回傳成功，response headers 會帶 `Authorization: Bearer ohmytoken`，response status 都是 200

```json
// 登入成功
{
  "code": 200,
  "msg": "成功"
}

// 登入失敗
{
  "code": 30001,
  "msg": "帳號不存在或密碼錯誤，請重新輸入。"
}
```

```mermaid
sequenceDiagram
    participant Client
    participant MSW
    Client ->> MSW: POST/user/login with password and username
    Note right of MSW: It happens in <br/>your browser
    MSW ->> Client: Returns the fake JWT token
```
- 製作一個 `authStore` (pinia)，儲存帳密與登入成功回傳的 token，已經裝好的 `pinia-plugin-persistedstate` 設定好會發揮作用，相關設定請見文件，預設會存到 `localStorage`，這邊只有 token 會進 `localStorage`，請設定清楚
-  Navigation Guards 依目的描述設定好，請依據 token 存在與否
-  處理 axios 打 login api 之後的處理邏輯，處理登出邏輯，邏輯以情境為主
