Skip to content

ahwei777/GaGiO-frontend

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GaGiO Learning Platform - Frontend

網站連結:https://gagio.ahwei777.tw
此為前端程式碼,後端部分請見 GaGiO-backend

管理員功能測試:
  帳號:admin@mail.com
  密碼:Admin123
  PS:請勿隨意更動權限,避免影響他人使用體驗

此專案接續開發自 learning-platform-frontend ,原團隊成員如下:

索引

簡介

GaGiO 為一線上學習平台,使用者註冊後可購買有興趣的課程進行學習,教材內容包含影片或文字。亦可申請成為老師,於自行編訂教材後開設公開課程。

此作品為 Lidemy mentor-program-4th 的 Final Project ,主要為實作課程所學前後端相關技術。前端採用 React.js 開發,配合以 Express.js & Sequelize 建立的後端 API 實現前後端分離。

功能介紹

訪客

  • 註冊會員
  • 瀏覽已公開課程(關鍵字搜尋、自訂排序)
  • 瀏覽老師介紹資訊

會員

  • 登入
  • 編輯會員資料
  • 加入課程至購物車
  • 購買課程並結帳(模擬付款流程)
  • 觀看已購買課程
  • 查看已完成訂單

老師

  • 編輯老師介紹資訊(上傳大頭照)
  • 新增/編輯課程資訊(上傳課程縮圖)
  • 新增/編輯課程單元

管理員

  • 瀏覽所有課程
  • 編輯所有會員權限
  • 瀏覽所有會員資料及已購買課程

使用技術

  • 前端框架
    • React Hooks
  • UI 框架
  • 其他套件
    • Antd-img-crop - 圖片上傳前裁切
    • React Router - 管理路由
    • Redux Toolkit - 管理元件共用狀態,處理非同步邏輯
    • React-beautiful-dnd - 實現元素拖拉排序
    • React-responsive-carousel - 首頁橫幅圖片輪播
    • React-youtube - 內崁播放 Youtube 影片
    • React-lazyload - 延遲載入圖片,優化使用者體驗
    • React-image-webp - 依據瀏覽器支援度顯示 next-gen 格式圖片
    • Styled-components - 主題配置/動態變更樣式
    • Prettier - 統一程式碼格式
  • 第三方 API
    • Imgur - 圖片雲端儲存
  • GitHub Action - commit 後自動化部署
  • RWD - 網頁排版自適應主要瀏覽器

部署平台

  • 前端部署於 GitHub Page 並配合自訂網域。
  • 將 404 page 改為 index.html ,避免子頁面重新整理後因無指定靜態資源而產生錯誤,實現完整 SPA。

DEMO

搜尋課程

可以關鍵字搜尋課程,並自訂排序方式。

會員資料變更

會員可更改暱稱及密碼。

購物車及結帳

欲購買課程可選擇加入購物車或直接結帳,完成結帳後會收到訂單資訊,並可於訂單紀錄中查看。

影片學習

已購買課程可於 "我的課程" 頁面中查看並進入上課,教材包含影片或文字(暫以 YouTube 影片做為 DEMO )。

開設課程

一般會員申請開課後即可新增課程,老師及課程資料都可再進行修改。

專案架構

頁面結構

├── Homepage                                     
│  ├── RegisterPage             # 註冊
│  ├── LoginPage                # 登入
│  ├── CourseListPage           # 所有課程列表
│  ├── CourseInfoPage           # 特定課程介紹
│  ├── CartListPage             # 購物車
│  ├── CheckoutPage             # 結帳
│  ├── MyCoursePage             # 我的課程
│  ├── MePage                   # 帳號設定
│  │  ├── AccountSetting           # 個人資料(變更暱稱/密碼)
│  │  └── OrderHistory             # 訂單紀錄
│  ├── TeacherInfoPage          # 老師介紹
│  ├── TeacherApplyPage         # 申請開課(上傳大頭照)
│  ├── TeacherPage              # 老師後台
│  │  ├── TeacherSetting           # 老師資料(變更名稱/介紹/大頭照)
│  │  └── MyTeachCourse            # 課程管理
│  │     ├── NewCourse                # 新增課程
│  │     └── UpdateCourse             # 編輯特定課程(變更狀態/名稱/金額/敘述),新增/刪除單元
│  │        └── EditUnit                 # 編輯特定單元(變更名稱/敘述)
│  └── ConsolePage              # 管理後台
│     ├── ConsoleCoursesPage       # 課程列表
│     └── ConsoleMemberPage        # 會員管理
│        └── MemberDetailPage         # 特定會員資料(變更權限)

資料夾結構

├── src/
│  ├── components/              # 放置跨頁面共用元件
│  ├── constants/               # 放置常態設定如 theme, breakpoints
│  ├── img/                     # 放置各頁面所使用圖片
│  ├── pages/                   # 放置具完整功能頁面
│  ├── redux/                   # 放置 Redux store & reducers
│  ├── routes/                  # 放置主要路由及各子路由
│  ├── WebAPI/                  # 串接後端 API
│  ├── App.css                  # 設定通用樣式及修正 UI
│  ├── App.js                   # 設定主要 layout 及路由
│  ├── index.js                 # 程式主要入口點
│  ├── setupTests.js            # 測試相關設定
│  └── utils.js                 # 放置跨元件使用函式
├── package-lock.json
├── package.json                # module 及 script 設定
└── README.md

DesignSystem

Color

  • Primary
    • main: #3483cd
    • light: #70b2ff
    • dark: #00579c
    • text: #000000
  • Secondary
    • main: #f89f3c
    • light: #ffd06c85
    • dark: #c07000
    • text: #000000

Breakpoints

Breakpoint Class infix Dimensions
X-Small xs <576px
Small sm ≥576px
Medium md ≥768px
Large lg ≥992px
Extra large xl ≥1200px

專案安裝流程

  1. clone 此專案至本機
$ git clone https://github.com/ahwei777/GaGiO-frontend.git
  1. 安裝相依套件
$ npm install
  1. 在本機運行專案(預設 port:3000)
$ npm run start

聲明

本專案僅作為個人練習用途,註冊時請勿使用任何真實資料。另本作品所包含之圖片與內容不作任何商業用途使用。

MIT

版本紀錄

  • 1.0 - 2021.01.28
    • 完成基本功能
  • 1.1 - 2021.02.27
    • 增加 lazyload 參數設定,增進瀏覽體驗(offset 提前載入,placeholder 正確定位,debounce 優化)

資料引用來源

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 98.8%
  • Other 1.2%