Compare commits

..

2 Commits

Author SHA1 Message Date
78597f1c68 [FIX] 移除個人檔案姓名輸入框的 autofocus 並恢復開發規範文件內容
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 49s
2026-03-13 10:47:39 +08:00
588704642b [DOC] 更新 framework.md 加入 IP 偵測特性說明 2026-03-13 10:43:38 +08:00
2 changed files with 18 additions and 2 deletions

View File

@@ -92,4 +92,20 @@ trigger: always_on
* **預設管理員密碼**`password`
> [!IMPORTANT]
> 在執行 `open_browser_url` 或進行 E2E 測試時,請務必優先確認 Port 是否為 `8090`,以避免連線至錯誤的服務環境。
> 在執行 `open_browser_url` 或進行 E2E 測試時,請務必優先確認 Port 是否為 `8090`,以避免連線至錯誤的服務環境。
## 10. 環境與時區規範 (Environment & Timezone Standards)
### 10.1 時區與語系設定
* **預設時區**:必須設定為 `Asia/Taipei` (UTC+8)。
* **實作細節**
* `.env`:必須包含 `APP_TIMEZONE=Asia/Taipei`
* `config/app.php`:必須改為讀取環境變數 `env('APP_TIMEZONE', 'Asia/Taipei')`
* **目的**:確保資料庫時間戳記與日誌紀錄與台灣當地時間完全一致。
### 10.2 開發慣例與效能優化
* **登入日誌機制**
* 實作 **10 秒防重覆 (Debouncing)**:同一 IP 與帳號在 10 秒內的連續登入僅記錄一筆,以避免行動網路環境下的重複上報。
* **監聽器註冊**:嚴禁在多個 ServiceProvider 中重複註冊 `Login` 事件監聽器,應統一在 `EventServiceProvider` 中管理。
* **裝置識別**
* 使用 `jenssegers/agent` 進行裝置偵測,並將 `device_type`, `browser`, `platform` 儲存於 `user_login_logs` 表。

View File

@@ -24,7 +24,7 @@
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<x-input-label for="name" :value="__('Name')" class="text-xs font-black text-slate-500 uppercase tracking-widest mb-2 ml-1" />
<input id="name" name="name" type="text" class="py-3 px-4 block w-full border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-900 rounded-2xl text-sm font-bold text-slate-700 dark:text-slate-200 focus:ring-4 focus:ring-cyan-500/10 focus:border-cyan-500 transition-all outline-none" value="{{ old('name', $user->name) }}" required autofocus autocomplete="name" />
<input id="name" name="name" type="text" class="py-3 px-4 block w-full border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-900 rounded-2xl text-sm font-bold text-slate-700 dark:text-slate-200 focus:ring-4 focus:ring-cyan-500/10 focus:border-cyan-500 transition-all outline-none" value="{{ old('name', $user->name) }}" required autocomplete="name" />
<x-input-error class="mt-2" :messages="$errors->get('name')" />
</div>