2025年7月31日 星期四

打造高效居家照護:從零開始建構照護派遣平台 (Laravel 11 + Vue.js 3 + Docker)

打造高效居家照護:從零開始建構照護派遣平台 (Laravel 11 + Vue.js 3 + Docker)

大家好!今天我將分享一個我最近著手開發的專案——一個現代化的照護派遣平台。這個平台的目標是簡化居家照護服務的營運管理,整合個案管理、排班、打卡、請假審批到最終的薪資計算,為超級管理員、督導和照護人員提供一套流暢、高效的解決方案。

您可以透過以下 GitHub 連結檢閱本專案的原始碼:https://github.com/BpsEason/care_dispatch_platform.git

為什麼是這個平台?

在居家照護領域,排程和行政工作往往複雜且耗時。我希望透過這個平台,實現以下核心目標:

  • 多角色協同: 精心設計了超級管理員、督導和照護人員三種角色,確保每個人都能在自己的權限範圍內高效工作。

  • 端到端管理: 從個案資料建立、照護計畫制定、任務派發,到考勤記錄、請假申請,再到自動化的薪資結算,涵蓋了整個服務流程。

  • 流程自動化: 減少人工干預,特別是在考勤和薪資計算方面,降低錯誤率並提升效率。

  • 數據透明化: 提供清晰的數據總覽和報告,幫助管理者做出更明智的決策。

技術棧選型:現代化與效率兼顧

為了打造一個既穩定又具備良好開發體驗的平台,我選擇了以下技術組合:

  • 後端: Laravel 11 (PHP 8.3) – 作為一個成熟且功能豐富的 PHP 框架,Laravel 提供了強大的 RESTful API 構建能力、Eloquent ORM 簡化資料庫操作,以及內建的認證(初期使用 Laravel Sanctum)。其簡潔的語法和活躍的社區為開發提供了極大便利。

  • 前端: Vue.js 3 (搭配 Vite) – 作為一個輕量級且高效的漸進式 JavaScript 框架,Vue.js 3 讓構建互動式使用者介面變得輕鬆。結合 Vite 驚人的熱重載速度,前端開發體驗極佳。狀態管理則選用了 Pinia,路由管理則使用 Vue Router

  • 資料庫: MySQL 8.0 – 穩定的關聯式資料庫,用於持久化所有業務數據。

  • 伺服器: Nginx – 作為高效能的反向代理伺服器,負責將前端請求導向 Vue 應用,將 API 請求轉發給 Laravel 後端。

  • 容器化: Docker & Docker Compose – 這是整個專案的基石。透過 Docker,我可以將所有應用程式(Laravel、Vue、MySQL、Nginx)打包成獨立的容器,確保開發、測試到部署環境的高度一致性,從而避免「在我機器上可以跑」的問題。

核心架構:前後端分離與容器化

專案採用了經典的前後端分離架構,配合 Docker 容器化 管理各個服務。

![圖片示意:Docker 圖示,Nginx 指向 Laravel 和 Vue,Laravel 指向 MySQL] (這裡可以放一張你畫的架構圖,例如:用戶透過瀏覽器訪問 Nginx,Nginx 將靜態文件和 Vue App 傳給用戶,將 /api 請求轉發給 Laravel App,Laravel App 與 MySQL DB 互動。)

  1. Nginx 容器: 作為入口點,負責將 /api/ 路徑的請求代理到 Laravel 後端,而其他前端資源請求則導向 Vue 應用。

  2. Laravel 後端容器: 提供所有業務邏輯的 RESTful API。它處理數據驗證、業務規則、與資料庫的互動以及用戶的認證與授權。

  3. Vue.js 前端開發容器: 運行 Vite 開發伺服器,提供熱重載功能,專注於構建豐富的使用者介面。

  4. MySQL 資料庫容器: 獨立的資料庫服務,所有應用數據都安全地儲存在此。

這種架構模式使得每個服務都能獨立開發、部署和擴展,大大提升了專案的可維護性和彈性。

資料庫設計:支撐核心業務

專案的核心資料庫結構涵蓋了居家照護的各個方面,主要表格包括:

  • users: 管理所有平台使用者及其角色(超級管理員、督導、照護人員、營養師、物理治療師)。

  • patients: 個案的基本資訊,並關聯負責的督導。

  • service_items: 定義服務項目(例如:身體清潔、膳食準備)及其計費單位。

  • care_plans: 每個個案的詳細照護計畫,指定服務項目、頻率和時長。

  • assignments: 根據照護計畫生成的具體派工任務,分配給特定的照護人員。

  • clock_records: 照護人員的打卡記錄,用於考勤。

  • leave_requests: 照護人員的請假申請及審批狀態。

  • compensation_rules: 定義不同服務或角色的薪資計算規則。

  • payrolls: 生成的薪資單記錄。

這些表格協同工作,確保了整個照護派遣流程的數據完整性和可追溯性。

快速設置與運行

我的專案設計了一個腳本來自動化初始化過程。如果你想試用這個平台,只需簡單幾步:

  1. 下載專案倉庫:

    Bash
    git clone https://github.com/BpsEason/care_dispatch_platform.git
    cd care_dispatch_platform
    
  2. 運行腳本生成基礎結構:

    (假設你已取得 care_dispatch_platform.sh 腳本)

    Bash
    chmod +x care_dispatch_platform.sh
    ./care_dispatch_platform.sh
    

    這個腳本會自動生成 docker-compose.yml、Laravel 後端(包括 Dockerfile、控制器、模型、遷移等)、Vue 前端(包括 Dockerfile.devpackage.jsonVue RouterPinia 配置)以及 Nginx 配置。

  3. 啟動 Docker 服務並安裝依賴:

    Bash
    docker-compose up --build -d # 啟動所有容器並重新構建映像
    docker-compose exec laravel_app composer install --optimize-autoloader # 安裝 Laravel 後端依賴
    docker-compose exec laravel_app php artisan key:generate # 生成 Laravel 應用金鑰
    docker-compose exec vue_app_dev npm install # 安裝 Vue 前端依賴
    
  4. 初始化資料庫:

    Bash
    docker-compose exec laravel_app php artisan migrate --seed
    

    這將創建所有必要的資料表並填充初始測試用戶。

  5. 訪問應用程式:

    打開你的瀏覽器,訪問 http://localhost。

    你可以使用以下測試帳號進行登入:

    • 超級管理員: admin@example.com / password

    • 督導: supervisor@example.com / password

    • 照護人員: caregiver@example.com / password

核心程式碼亮點 (示例)

儘管這是一個骨架專案,但其核心認證、路由和狀態管理機制已預先設置好。

後端認證 (Laravel LoginController)

PHP
// laravel/app/Http/Controllers/Auth/LoginController.php
class LoginController extends Controller
{
    public function login(Request $request)
    {
        $request->validate(['email' => ['required', 'string', 'email'], 'password' => ['required', 'string'],]);
        if (! Auth::attempt($request->only('email', 'password'))) {
            throw ValidationException::withMessages(['email' => [trans('auth.failed')],]);
        }
        return response()->json(['message' => 'Logged in successfully','user' => $request->user(),]);
    }
    // ... logout 方法
}

這段程式碼處理用戶登入,利用 Laravel Sanctum 進行認證。

前端認證狀態管理 (Pinia)

JavaScript
// vue_app/src/stores/auth.js
export const useAuthStore = defineStore('auth', {
    state: () => ({ /* ... */ }),
    getters: { /* ... */ },
    actions: {
        async login(credentials) {
            try {
                await axios.get(`${API_BASE_URL}/sanctum/csrf-cookie`); // 獲取 CSRF cookie
                const response = await axios.post(`${API_BASE_URL}/login`, credentials);
                this.user = response.data.user;
                localStorage.setItem('user', JSON.stringify(this.user));
                // 根據角色導向不同頁面
            } catch (error) { /* ... */ }
        },
        // ... logout 方法
    },
});

Pinia store 負責管理用戶登入狀態,與後端 API 互動並處理本地儲存。

未來展望與可擴展性

目前這個專案是一個功能完善的骨架,但許多業務邏輯仍待填充。這正是它的魅力所在——提供了一個堅實的基礎,讓開發者可以專注於以下任務:

  1. 實作完整的 CRUD 邏輯: 針對個案、照護計畫、派工、薪資規則等實體,完善控制器和前端視圖的增刪改查功能。

  2. 自動化排程與計算: 利用 Laravel 的任務排程功能,實現薪資單的自動生成。

  3. 報表與分析: 開發更多管理員視角的報表,提供數據洞察。

  4. 前端 UI/UX 優化: 豐富前端組件,提升使用者體驗。

  5. 生產環境部署優化: 調整 Dockerfile,採用多階段構建,進一步縮小映像大小,並為生產環境配置 Nginx 靜態文件服務。

結語

這個「照護派遣平台」專案展示了如何結合 Laravel、Vue.js 和 Docker,快速搭建一個現代化、可擴展的應用程式。它不僅解決了居家照護管理中的痛點,也為未來的功能擴展留下了足夠的空間。

如果你對這個專案感興趣,歡迎訪問我的 GitHub 倉庫。也歡迎在評論區分享你的想法或提出任何問題!


沒有留言:

張貼留言

熱門文章