1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs

170 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 170
Dung lượng 21,21 MB

Cấu trúc

  • 1. TÍNH CẤP THIẾT CỦA ĐỀ TÀI (5)
  • 2. ĐỐI TƯỢNG NGHIÊN CỨU (5)
  • 3. PHẠM VI NGHIÊN CỨU (5)
  • 4. MỤC TIÊU CỦA ĐỀ TÀI (5)
  • CHƯƠNG 1. KHẢO SÁT HIỆN TRẠNG VÀ MÔ HÌNH HÓA YÊU CẦU (21)
    • 1.1. KHẢO SÁT HIỆN TRẠNG (21)
    • 1.2. XÁC ĐỊNH YÊU CẦU (24)
      • 1.2.1. Yêu cầu chức năng (24)
  • CHƯƠNG 2. CƠ SỞ LÝ THUYẾT (27)
    • 2.1. CÁC CÔNG NGHỆ SỬ DỤNG Ở FRONT-END (27)
      • 2.1.1. Thư viện ReactJS (27)
      • 2.1.2. Tailwind CSS (29)
      • 2.1.3. Axios (34)
    • 2.2. CÁC CÔNG NGHỆ SỬ DỤNG Ở BACK-END (36)
      • 2.2.1. RESTFUL API (36)
      • 2.2.2. Spring Boot (37)
      • 2.2.3. MySQL (38)
      • 2.2.4. Ứng dụng Spring boot vào đề tài (38)
    • 2.3. KIẾN TRÚC CHUNG CỦA HỆ THỐNG (42)
  • CHƯƠNG 3. THIẾT KẾ PHẦN MỀM (43)
    • 3.1. MÔ HÌNH HÓA YÊU CẦU (43)
      • 3.1.1. Lược đồ Use case (43)
      • 3.1.2. Đặc tả các Use case về phía Người dùng (46)
      • 3.1.3. Đặc tả Use case về phía quản trị viên (61)
    • 3.2. LƯỢC ĐỒ TUẦN TỰ (6)
    • 3.3. LƯỢC ĐỒ LỚP (101)
    • 3.4. THIẾT KẾ CƠ SỞ DỮ LIỆU (102)
      • 3.4.1. Lược đồ thực thể kết hợp (ERD) (102)
      • 3.4.2. Chi tiết bảng dữ liệu (102)
    • 3.5. THIẾT KẾ GIAO DIỆN (114)
      • 3.5.1. Màn hình giao diện phía người dùng (114)
      • 3.5.2. Màn hình giao diện phía quản trị viên (133)
  • CHƯƠNG 4. CÀI ĐẶT VÀ KIỂM THỬ (157)
    • 4.1. CÀI ĐẶT (6)
      • 4.1.1. Yêu cầu hệ thống (157)
      • 4.1.2. Các bước tiến hành (157)
    • 4.2. KIỂM THỬ (6)
      • 4.2.1. Kế hoạch kiểm thử (158)
      • 4.2.2. Quy trình kiểm thử (161)
      • 4.2.3. Kết quả kiểm thử (162)
    • 1. KẾT QUẢ ĐẠT ĐƯỢC (6)
    • 2. ƯU ĐIỂM (2)
    • 3. NHƯỢC ĐIỂM (6)
    • 4. HƯỚNG PHÁT TRIỂN (6)
  • TÀI LIỆU THAM KHẢO (6)

Nội dung

MỤC TIÊU CỦA ĐỀ TÀI

1.1 Các công nghệ sử dụng ở front–end 1.2 Các công nghệ sử dụng ở back–end Chương

2 Khảo sát hiện trạng và mô hình hóa yêu cầu

2.2 Kiến trúc chung của hệ thống

2.4 Mô hình hóa yêu cầu

Chương 3 Thiết kế phần mềm

3.3 Thiết kế cơ sở dữ liệu

Chương 4 Cài đặt và kiểm thử

STT Thời gian Công việc Ghi chú

1 13/02/2023 – 20/03/2023  Thiết kế usecase và mô hình hóa yêu cầu.

 Thiết kế cơ sở dữ liệu.

 Tìm hiểu về thư viện ReactJS của JavaScript.

2 21/03/2023 – 07/04/2023  Tìm hiểu về Spring Boot và Spring

 Tìm hiểu về nền tảng AWS Elastic Beanstalk và AWS S3.

 Tìm hiểu về JSON Web Token để ứng dụng vào xác thực và phân quyền API

 Tìm hiểu về SQL và MySQL để áp dụng vào lưu trữ dữ liệu người dùng của hệ thống

 Tiến hành phát triển API dựa trên các kiến thức đã tìm hiểu được và các tài

 Tiến hành xây dựng giao diện người dùng cho hệ thống.

 Kết hợp các phần đã xây dựng lại với

5 09/05/2023 – 09/06/2023 nhau (giao diện, API, cơ sở dữ liệu).

 Tìm hiểu, sửa đổi hệ thống để hoàn thiện.

6 09/06/2023 – 20/06/2023  Kiểm thử chương trình và tiến hành sửa lỗi.

7 21/06/2023 – 10/07/2023  Viết và hoàn thiện báo cáo.

Ngày……tháng……năm 2023 Ý kiến của giáo viên hướng dẫn Người viết đề cương

(ký và ghi rõ họ tên)

LỜI CẢM ƠN 1 ĐỀ CƯƠNG LUẬN VĂN TỐT NGHIỆP 2

1 TÍNH CẤP THIẾT CỦA ĐỀ TÀI 15

4 MỤC TIÊU CỦA ĐỀ TÀI 16

CHƯƠNG 1 KHẢO SÁT HIỆN TRẠNG VÀ MÔ HÌNH HÓA YÊU CẦU 18

CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 24

2.1 CÁC CÔNG NGHỆ SỬ DỤNG Ở FRONT-END 24

2.2 CÁC CÔNG NGHỆ SỬ DỤNG Ở BACK-END 33

2.2.4 Ứng dụng Spring boot vào đề tài 35

2.3 KIẾN TRÚC CHUNG CỦA HỆ THỐNG 39

CHƯƠNG 3 THIẾT KẾ PHẦN MỀM 40

3.1 MÔ HÌNH HÓA YÊU CẦU 40

3.1.2 Đặc tả các Use case về phía Người dùng 43

3.1.3 Đặc tả Use case về phía quản trị viên 58

3.4 THIẾT KẾ CƠ SỞ DỮ LIỆU 99

3.4.1 Lược đồ thực thể kết hợp (ERD) 99

3.4.2 Chi tiết bảng dữ liệu 99

3.5.1 Màn hình giao diện phía người dùng 111

3.5.2 Màn hình giao diện phía quản trị viên 130

CHƯƠNG 4 CÀI ĐẶT VÀ KIỂM THỬ 154

Bảng 1.1 Bảng yêu cầu nghiệp vụ 22

Bảng 3.1 Mô tả Use case “Đăng ký” 43

Bảng 3.2 Mô tả Use case “Đăng nhập” 44

Bảng 3.3 Mô tả Use case “Chỉnh sửa thông tin tài khoản” 45

Bảng 3.4 Mô tả Use case “Đổi mật khẩu” 46

Bảng 3.5 Mô tả Use case “Xem chi tiết thông tin của một sản phẩm” 47

Bảng 3.6 Mô tả Use case “Xem chi tiết thông tin của một sản phẩm” 47

Bảng 3.7 Mô tả Use case “Xóa sản phẩm khỏi giỏ hàng” 48

Bảng 3.8 Mô tả Use case “Thêm địa chỉ nhận hàng” 49

Bảng 3.9 Mô tả Use case “Chỉnh sửa địa chỉ nhận hàng” 50

Bảng 3.10 Mô tả Use case “Xóa địa chỉ nhận hàng” 51

Bảng 3.11 Mô tả Usecase “Xem lịch sử mua hàng” 52

Bảng 3.12 Mô tả Use case “Đặt hàng” 52

Bảng 3.13 Mô tả Use case “Hủy đơn hàng” 53

Bảng 3.14 Mô tả Use case “Tìm kiếm sản phẩm” 54

Bảng 3.15 Mô tả Use case “Tìm kiếm sản phẩm” 55

Bảng 3.16 Mô tả Use case “Tìm kiếm sản phẩm” 56

Bảng 3.17 Mô tả Use case “Áp dụng voucher cho đơn hàng” 56

Bảng 3.18 Mô tả Use case “Thêm thuộc tính kích cỡ” 58

Bảng 3.19 Mô tả Use case “Sửa thuộc tính kích cỡ” 58

Bảng 3.20 Mô tả Use case “Xóa thuộc tính kích cỡ” 59

Bảng 3.21 Mô tả Use case “Thêm thuộc tính màu sắc” 60

Bảng 3.22 Mô tả Use case “Chỉnh sửa thuộc tính màu sắc” 61

Bảng 3.23 Mô tả Use case “Xóa thuộc tính màu sắc” 62

Bảng 3.24 Mô tả Use case “Thêm sản phẩm” 62

Bảng 3.25 Mô tả Use case “Chỉnh sửa sản phẩm” 63

Bảng 3.26 Mô tả Use case “Xóa sản phẩm” 64

Bảng 3.27.Mô tả Use case “Vô hiệu hóa tài khoản User” 65

Bảng 3.28 Mô tả Use case “Thêm danh mục sản phẩm” 65

Bảng 3.29 Mô tả Use case “Chỉnh sửa danh mục sản phẩm” 66

Bảng 3.30 Mô tả Use case “Xóa danh mục sản phẩm” 67

Bảng 3.31 Mô tả Usecase “Thống kê” 68

Bảng 3.32 Mô tả Use case “Kích hoạt tài khoản người dùng” 68

Bảng 3.33 Mô tả Usecase “Xác nhận đơn hàng” 69

Bảng 3.34 Mô tả Use case “Kích hoạt đánh giá” 71

Bảng 3.35 Mô tả Use case “Thêm voucher” 72

Bảng 3.36 Mô tả Use case “Chỉnh sửa voucher” 74

Bảng 3.53 Mô tả màn hình trang chủ 113

Bảng 3.54 Mô tả giao diện đăng nhập 114

Bảng 3.55 Mô tả giao diện đăng ký 115

Bảng 3.56 Mô tả giao diện danh sách sản phẩm 116

Bảng 3.57 Mô tả giao diện chi tiết sản phẩm 117

Bảng 3.58 Mô tả giao diện chi tiết sản phẩm 118

Bảng 3.59 Mô tả giao diện lịch sử mua hàng 119

Bảng 3.60 Mô tả giao diện chi tiết đơn hàng 120

Bảng 3.61 Mô tả giao diện thêm địa chỉ 122

Bảng 3.62 Mô tả giao diện giỏ hàng 123

Bảng 3.63 Mô tả giao diện chọn địa chỉ thanh toán 124

Bảng 3.64 Mô tả giao diện thanh toán 125

Bảng 3.65 Mô tả giao diện kết quả thanh toán 126

Bảng 3.66 Mô tả giao diện điều khiển 131

Bảng 3.67 Mô tả giao diện danh sách đơn hàng 132

Bảng 3.68 Mô tả giao diện chi tiết đơn hàng 133

Bảng 3.69 Mô tả giao diện danh sách sản phẩm 134

Bảng 3.70 Mô tả giao diện chi tiết sản phẩm – 1 135

Bảng 3.71 Mô tả giao diện chi tiết sản phẩm -2 137

Bảng 3.72 Mô tả giao diện danh sách phân loại 137

Bảng 3.73 Mô tả giao diện chi tiết phân loại 139

Bảng 3.74 Mô tả giao diện thêm phân loại 140

Bảng 3.75 Mô tả giao diện màu sắc/kiểu dáng 140

Bảng 3.76 Mô tả giao diện chi tiết màu sắc 141

Bảng 3.77 Mô tả giao diện thêm màu sắc 142

Bảng 3.78 Mô tả giao diện danh sách kích cỡ 143

Bảng 3.79 Mô tả giao diện chi tiết kích cỡ 144

Bảng 3.80 Mô tả giao diện thêm kích cỡ 145

Bảng 3.81 Mô tả giao diện thống kê 146

Bảng 3.82 Mô tả giao diện danh sách người dùng 147

Bảng 3.83 Mô tả giao diện chi tiết người dùng 148

Bảng 3.84 Mô tả giao diện đăng nhập của quản trị viên 149

Bảng 3.85 Mô tả giao diện chọn màu giao diện và tab thông tin cá nhân 150

Bảng 3.86 Mô tả giao diện danh sách đánh giá sản phẩm 151

Bảng 4.1 Bảng rủi ro và kế hoạch giảm nhẹ 158

Bảng 4.2 Kết quả kiểm thử chức năng phía Người dùng 159

Bảng 4.3 Kết quả kiểm thử chức năng phía quản trị viên 162

Hình 1.1.1 Hình ảnh trang chủ của website www.yame.vn 20

Hình 2.1 Khởi tạo dự án 25

Hình 2.2 Cấu trúc của dự án (bao gồm người dùng và quản trị viên) 26

Hình 2.4 Ví dụ về các className của TailwindCSS 29

Hình 2.7 Ứng dụng Axios để gọi API và đón chặn các request 32

Hình 2.8 Hình Áp dụng RESTful API vào đề tài trong AddressController 34

Hình 2.9 JWT của một user sau khi đã đăng nhập 36

Hình 2.10 Hình Áp dụng JWT trong việc sinh ra token 37

Hình 2.11 Chi tiết hàm đăng nhập 37

Hình 2.12 Áp dụng Spring Security 38

Hình 2.13 Kiến trúc hệ thống 39

Hình 3.1 Sơ đồ usecase phía người dùng - 1 40

Hình 3.2 Sơ đồ usecase phía người dùng - 2 41

Hình 3.3 Sơ đồ Use case bên phía admin - 1 42

Hình 3.4 Sơ đồ Use case phía admin - 2 43

Hình 3.7 Sequence Chức năng “đổi mật khẩu” 76

Hình 3.8 Sequence “Thêm địa chỉ nhận hàng” 77

Hình 3.9 Sequence “Sửa địa chỉ nhận hàng” 78

Hình 3.10 Sequence “Xóa địa chỉ nhận hàng” 78

Hình 3.11 Sequence “Thêm sản phẩm vào giỏ hàng” 79

Hình 3.12 Sequence “Xóa sản phẩm khỏi giỏ hàng” 79

Hình 3.13 Sequence “Chỉnh sửa thông tin tài khoản” 80

Hình 3.15 Sequence “Thêm thuộc tính Size” 81

Hình 3.16 Sequence “Sửa thuộc tính Size” 82

Hình 3.17 Sequence “Xóa thuộc tính Size” 83

Hình 3.18 Sequence “Thêm thuộc tính màu” 84

Hình 3.19 Sequence “Thêm thuộc tính màu” 85

Hình 3.20 Sequence “Xóa thuộc tính màu” 86

Hình 3.21 Sequence “Thêm danh mục” 87

Hình 3.22 Sequence “Chỉnh sửa danh mục” 88

Hình 3.23 Sequence “Xóa danh mục” 89

Hình 3.24 Sequence "Thêm sản phẩm" 90

Hình 3.25 Sequence "Chỉnh sửa thông tin sản phẩm" 90

Hình 3.26 Sequence "Xóa sản phẩm" 91

Hình 3.27 Sequence “Xác nhận đơn hàng” 92

Hình 3.28 Sequence “Hủy đơn hàng” 93

Hình 3.32 Sơ đồ luồng cho người dùng khách (Guest) 111

Hình 3.33 Sơ đồ luồng cho người dùng (User) 112

Hình 3.34 Giao diện trang chủ 113

Hình 3.35 Giao diện đăng nhập 114

Hình 3.36 Giao diện đăng ký 115

Hình 3.37 Giao diện danh sách sản phẩm 116

Hình 3.38 Giao diện chi tiết sản phẩm 117

Hình 3.39 Giao diện thông tin cá nhân người dùng 118

Hình 3.40 Giao diện danh sách lịch sử mua hàng 119

Hình 3.41 Giao diện chi tiết đơn hàng 120

Hình 3.42 Danh sách địa chỉ 121

Hình 3.43 Mô tả giao diện danh sách địa chỉ 121

Hình 3.44 Giao diện thêm địa chỉ mới 122

Hình 3.45 Giao diện giỏ hàng 123

Hình 3.46 Giao diện chọn địa chỉ thanh toán 124

Hình 3.47 Giao diện thanh toán 125

Hình 3.48 Giao diện kết quả đặt hàng 126

Hình 3.49 Sơ đồ luồng cho bên quản trị viên 130

Hình 3.50 Giao diện bảng điều khiển 130

Hình 3.51 Giao diện danh sách đơn hàng 132

Hình 3.52 Giao diện chi tiết đơn hàng 133

Hình 3.53 Giao diện danh sách sản phẩm 134

Hình 3.54 Giao diện danh sách sản phẩm - 1 135

Hình 3.55 Giao diện chi tiết sản phẩm – 2 135

Hình 3.56 Giao diện chi tiết sản phẩm - 3 136

Hình 3.57 Giao diện chi tiết sản phẩm – 4 137

Hình 3.58 Giao diện danh sách phân loại 137

Hình 3.59 Giao diện chi tiết phân loại 138

Hình 3.60 Giao diện thêm phân loại 139

Hình 3.61 Giao diện danh sách màu sắc/kiểu dáng 140

Hình 3.62 Giao diện chi tiết màu sắc 141

Hình 3.63 Giao diện thêm màu sắc 142

Hình 3.64 Giao diện danh sách kích cỡ 143

Hình 3.65 Giao diện chi tiết kích cỡ 144

Hình 3.66 Giao diện thêm kích cỡ 145

Hình 3.67 Giao diện thống kê 146

Hình 3.68 Giao diện danh sách người dùng 147

Hình 3.69 Giao diện chi tiết người dùng 148

Hình 3.70 Giao diện trang đăng nhập của quản trị viên 149

Hình 3.71 Giao diện chỉnh giao diện và tab thông tin các nhân 150

Hình 3.72 Hình giao diện đánh giá theo sản phẩm 151

Hình 4.1 Phạm vi kiểm thử 155

1 TÍNH CẤP THIẾT CỦA ĐỀ TÀI

Qua đại dịch Covid-19 vì người dân có thói quen mua sắm nhiều hơn bình thường, nhờ vào đó các hộ kinh doanh nhỏ lẻ bắt đầu mọc lên nhiều hơn Đồ ăn, dịch vụ, các nhu yếu phẩm và đặc biệt là thời trang Có thể dễ hiểu thời trang là mặt hàng được ưa chuộng bởi giới trẻ họ muốn mình được đẹp.

Nhưng cũng chính vì đại dịch covid vừa qua điều kiện đi lại tới các cửa hàng lại khó khăn, nên bán hàng online lại là nước đi tối ưu của các cửa hàng Họ có thể triển khai cửa hàng của mình dưới dạng app hoặc website, dễ dàng phục cho mọi người truy cập và mua sắm Nắm bắt được nhu cầu này nên việc xây dựng một trang web có thể tận dụng được tối đa phân khúc User là điều cần thiết Vậy nên chúng em quyết định chọn đề tài “Xây dựng website bán quần áo sử dụng Spring Boot và ReactJS” để mô hình hóa sản phẩm này Nhằm đem đến hiệu quả tốt nhất cho việc mua bán giữa người dùng và cửa hàng thuận lợi nhất.

Với đề tài này, đối tượng nghiên cứu dựa trên nhu cầu mua bán thời trang, giúp người mua tiếp cận tới các sản phẩm đẹp, khuyến mãi tốt mà không cần phải ra cửa hàng Đồng thời giúp cho bên bán hàng quản lý các sản phẩm, thu nhập, khuyến mãi, tránh để tồn kho và các vấn đề liên quan Bên cạnh đó là các công nghệ mà chúng em sử dụng trong đề tài, cụ thể như sau:

- Sử dụng ReactJS để xây dựng một giao diện tiện dụng, dễ tương tác và hợp mắt người dùng.

- Nghiên cứu RESTful API với Spring Boot của Java để xây dựng hệ thống, hỗ trợ thao tác và truy xuất thông tin nhanh chóng và chính xác nhất

- Sử dụng MySQL để làm cơ sở dữ liệu.

- Áp dụng Spring Security của Spring Framework và JWT để ứng dụng vào việc bảo mật và phân quyền người dùng.

Trang web được xây dựng vào các chức năng theo nghiệp vụ định hướng người dùng xem và mua các sản phẩm thời trang trở nên nhanh chóng, tiện lợi Như là xem danh sách các sản phẩm, đặt hàng, chọn các mặt hàng để thêm vào giỏ hàng, chọn nơi cần giao hàng,…

Ngoài ra về phía bộ phận quản trị của cửa hàng thì có các chức năng để quản lý các sản phẩm đang tồn tại ở trong cửa hàng như chỉnh sửa các thuộc tính của sản phẩm thời trang, số lượng của các mặt hàng tại thời điểm hiện hành, quản lý các tài khoản của người dùng,…

4 MỤC TIÊU CỦA ĐỀ TÀI

- Đăng nhập và đăng ký tài khoản với email.

- Xem thông tin chi tiết sản phẩm, các biến thể sản phẩm và số lượng của biến thể đó.

- Lọc sản phẩm theo các tiêu chí về phân loại, màu sắc và kích thước có sẵn.

- Thêm sản phẩm vào giỏ hàng.

- Đặt mua các sản phẩm trong giỏ hàng.

- Quản lý địa chỉ giao hàng (thêm, sửa, xóa địa chỉ).

- Xem thông tin đơn hàng đã đặt.

- Quản lý thông tin cá nhân.

- Đặt lại mật khẩu khi quên.

- Quản lý (thêm, sửa, xóa) sản phẩm, phân loại, màu sắc, kích thước của sách.

- Quản lý (xác nhận, hủy đơn) đơn hàng của người dùng.

- Xem danh sách người dùng, vô hiệu hóa tài khoản của người dùng.

- Xem danh sách đánh giá sản phẩm, vô hiệu hóa đánh giá của người dùng.

- Thống kê doanh thu của cửa hàng bao gồm: xem thông tin doanh thu, xuất file excel (.xlsx) danh sách hóa đơn theo khoảng ngày chỉ định.

KHẢO SÁT HIỆN TRẠNG VÀ MÔ HÌNH HÓA YÊU CẦU

KHẢO SÁT HIỆN TRẠNG

1.1.1 Website “ROUTINE | THƯƠNG HIỆU QUẦN ÁO THỜI TRANG NAM NỮ CAO CẤP”

Hình 1.1 Hình ảnh trang chủ của website Routine

- Giao diện hiển thị các sản phẩm theo từng danh mục.

- Tìm sản phẩm theo tên.

- Chức năng đặt hàng, giỏ hàng, thanh toán sản phẩm.

- Chat trực tiếp với cửa hàng thông qua plug-in messenger.

- Xem thông tin tài khoản.

- Có lượng mặt hàng nhiều, chức năng lọc sản phẩm chi tiết.

- Có áp dụng plug-in chat messenger.

- Chưa tối ưu được không gian hiển thị với danh sách các sản phẩm.

- Chưa tích hợp thanh toán online.

1.1.2 Website “HARDMODE – THIẾT KẾ VÀ THỜI TRANG”

Hình 1.2 Hình ảnh trang chủ của trang Hardmode

- Quản lý các mặt hàng và các danh mục sản phẩm.

- Đăng nhập, đăng ký tài khoản.

- Xác nhận đơn đặt hàng.

- Giao diện hiển thị các sản phẩm.

- Xem lịch sử đặt hàng.

- Chức năng đặt hàng, giỏ hàng, thanh toán sản phẩm.

- Chat trực tiếp với cửa hàng thông qua plug-in messenger.

- Thiết kế đơn giản, dễ nhìn, dễ sử dụng.

- Có áp dụng plug-in chat messenger.

- Chưa tích hợp thanh toán online.

1.1.3 Website “YaMe | Mua Online Quần Áo Thời Trang Nam Nữ Giá Rẻ - YaMe.vn”

Hình 1.1.1 Hình ảnh trang chủ của website www.yame.vn

- Quản lý các mặt hàng và các danh mục sản phẩm.

- Giao diện hiển thị các sản phẩm.

- Chức năng đặt hàng, giỏ hàng, thanh toán sản phẩm.

- Thiết kế đơn giản, dễ nhìn, dễ sử dụng, phân thành nhiều category trên sidebar.

- Ngoài nhận tại địa chỉ của mình Yame cho phép nhận hàng tại cửa hàng mà mình

- Chưa tích hợp thanh toán online.

- Chức năng thanh toán chưa tối ưu, người dùng có thể cho thông tin ảo.

- Chức năng đăng ký, đăng nhập chưa hoàn thiện.

1.1.4 Kết luận khảo sát thực trạng

Qua những dữ liệu mà nhóm chúng em đã thu thập được của 3 hệ thống web app về buôn bán sản phẩm thời trang và để phù hợp với hiện hành chúng em đã chọn cái tên đề tài là “Xây dựng website bán quần áo sử dụng Spring Boot và ReactJS” bao gồm:

- Đây là trang web về thương mại nên sẽ tập trung vào trải nghiệm người dùng cũng với các tính năng quan trọng thiết yếu.

- Xây dựng với các chức năng thêm sửa xóa của các phần quản lý cho người quản trị viên.

- Về hệ thống thì đảm nhiệm tốc độ xử lý hiển thị giao diện nhanh chóng không để người dùng phải chờ đợi lâu.

- Sử dụng plugin chat Messenger từ Facebook (Meta) để có thể dễ dàng trao đổi trực tiếp với khách hàng một cách nhanh chóng.

- Sử dụng API thanh toán online bằng Momo giúp cho người dùng có thể dễ dàng thanh toán trước đơn hàng.

XÁC ĐỊNH YÊU CẦU

1.2.1.1 Yêu cầu chức năng phía người dùng

- Tìm kiếm sản phẩm theo tên.

- Xem danh sách tất cả sản phẩm.

- Xem chi tiết thông tin của một sản phẩm.

- Xem lịch sử đơn hàng đã đặt.

- Chỉnh sửa thông tin tài khoản.

- Quản lý địa chỉ giao hàng.

- Hủy đơn hàng đã đặt.

- Lấy lại mật khẩu khi người dùng đã quên mật khẩu

- Áp dụng voucher để giảm giá tiền

1.2.1.2 Yêu cầu chức năng phía quản trị viên

- Quản lý thông tin sản phẩm.

- Quản lý các danh mục.

- Quản lý tài khoản người dùng.

- Quản lý các thuộc tính sản phẩm.

- Quản lý các bình luận đánh giá sản phẩm

- Kích hoạt tài khoản người dùng.

- Vô hiệu hóa tài khoản người dùng.

- Thống kê số lượng các thành phần trong cửa hàng

1.2.1.3 Yêu cầu chức năng hệ thống

- Cung cấp chức năng phân quyền.

- Cung cấp chức năng thanh toán trực tuyến.

- Cung cấp chức năng chat trực tuyến từ plugin Messenger của Facebook.

- Thông báo mail cho người dùng khi đơn hàng được cập nhật ở trạng thái mới

Bảng 1.1 Bảng yêu cầu nghiệp vụ

STT Yêu cầu nghiệp vụ Loại yêu cầu Ghi chú

1 Thêm, chỉnh sửa thông tin sản phẩm mới Lưu trữ

2 Thêm thông tin tài khoản mới Lưu trữ

3 Thêm, chỉnh sửa thông tin danh mục Lưu trữ

4 Thêm, chỉnh sửa thông tin kích cỡ Lưu trữ

5 Thêm, chỉnh sửa thông tin màu Lưu trữ

6 Thêm, chỉnh sửa voucher Lưu trữ

7 Xem, lọc danh sách tài khoản Tra cứu (tìm kiếm)

8 Xem danh sách danh mục Tra cứu (tìm kiếm)

9 Xem danh sách kích cỡ Tra cứu (tìm kiếm)

10 Xem danh sách màu Tra cứu (tìm kiếm)

11 Xem danh sách đơn hàng Tra cứu (tìm kiếm)

12 Tính doanh thu của cửa hàng Tính toán

13 Thống kê số lượng sản phẩm Kết xuất

14 Áp dụng voucher khi thanh toán Tính toán

1.2.1.4 Yêu cầu phi chức năng

- Giao diện bắt mắt, thân thiện với người dùng.

- Tốc độ xử lý và tìm kiếm nhanh chóng, chính xác.

- Có độ tin cậy cao.

- Các thông tin của người dùng phải được bảo mật và mã hóa.

- Có thể dễ dàng mở rộng quy mô hệ thống.

CƠ SỞ LÝ THUYẾT

CÁC CÔNG NGHỆ SỬ DỤNG Ở FRONT-END

ReactJS là một thư viện chứa nhiều JavaScript mã nguồn mở được Facebook xây dựng và phát triển Thư viện này được sử dụng để tạo ra các ứng dụng trang web hấp dẫn với hiệu quả cao, tốc độ tải nhanh và khả năng tái sử dụng mã nguồn cao Thư viện này ban đầu được phát triển và duy trì bởi Facebook nay còn được gọi với cái tên Meta, và sau đó dần được ứng dụng WhatsApp và Instagram [1]

ReactJS được dùng để viết các ứng dựng web Single Page Application (SPA).

Và nó sẽ so sánh sự thay đổi giữa các giá trị của lần render này với lần render trước để cập nhật ít thay đổi nhất trên DOM [1]

ReactJS sử dụng cơ chế one-way data binding (luồng dữ liệu 1 chiều) Dữ liệu được truyền từ parent đến child thông qua props Luồng dữ liệu đơn giản giúp chúng ta dễ dàng kiểm soát cũng như sửa lỗi [1]

Các thành phần nổi bật của thư viện ReactJS:

JSX là một dạng ngôn ngữ cho phép viết các mã HTML trong Javascript Hơn thế nữa là JSX, một tính năng mà làm cho ReactJS thân thiện hơn Các thuộc tính trong JSX được viết theo camelCase như class thành className Mã này sẽ dịch ngược lại Js thuần túy thông qua công cụ Babel, chuẩn hóa phiên bản ES6 thành ES5 [1]

Lập trình viên có thể chia nhỏ các cấu trúc của trang web hay còn gọi là component để tái sử dụng hoặc dễ quản lý hơn trong các folder khác nhau.

Dom ảo (Virtual DOM) giúp cho ứng dụng nhanh hơn DOM ảo hỗ trợ rất tốt cho việc cấu trúc UI phản ứng kịp thời với trước những thay đổi nhằm tăng trải nghiệm người dùng Khi tạo ra ReactJS, các nhà thiết kế đã dự đoán đúng việc cập nhật cácHTML cũ là cực kỳ quan trọng nhưng cũng khá tốn kém chi phí Vì thế ý tưởng sử dụng DOM ảo giúp ReactJS biết chính xác khi nào cần render lại hoặc khi nào bỏ đi những phần tử của DOM chính vì phát hiện ra những thay đổi trên data.

Props: giúp các component tương tác với nhau, component nhận input gọi là props, và trả thuộc tính mô tả những gì component con sẽ render.

State là thể hiện trạng thái của ứng dụng, khi state thay đổi thì component đồng thời render lại để cập nhật lại giao diện mới.

2.1.1.2 Cách khởi tạo dự án ReactJS Điều kiện khởi tạo:

Cách khởi tạo 1 dự án ReactJS khá là đơn giản ta chỉ cần chọn thư mục cần lưu và mở cmd gõ các lệnh sau: npx create-react-app react-app cd react-app npm start

Sau khi thành công trình duyệt mặc định sẽ hiển thị như hình dưới đây.

Hình 2.1 Khởi tạo dự án

2.1.1.3 Ứng dụng ReactJS vào đề tài

React có cơ chế phân chia các thành phần của trang web thành các component, nhằm để tiện tái sử dụng nhiều lần ở các trang khác nhau của website.

Sử dụng react router dom để áp dụng vào việc phân các router, đường dẫn của trang web Giúp cho cơ chế định vị trang trở nên dễ dàng hơn bao giờ hết.

Hình 2.2 Cấu trúc của dự án (bao gồm người dùng và quản trị viên)

Tailwind CSS là một utility-first CSS framework nó hỗ trợ phát triển xây dựng nhanh chóng giao diện người dùng, nó cũng có điểm chung giống như Bootstrap & điểm làm nó nổi bật hơn cả đó là chúng ta có thể tùy biến phát triển CSS theo cách mà chúng ta định nghĩa ra.

Cơ chế hoạt động của Tailwind CSS là sẽ tiến hành quét hết tất cả các tệp HTML, thành phần JavaScript hoặc bất kì các template nào khác để tìm tên lớp (class name), sau đó sẽ tạo ra các kiểu CSS tương ứng với các tên lớp vừa quét được rồi ghi vào một tệp tĩnh CSS [2]

2.1.2.2 Cài đặt Tailwind CSS tích hợp trong thư viện ReactJS

Chúng ta tiến hành thực thi các câu lệnh dưới đây để tiến hành tạo project

ReactJS sử dụng Vite. npm create vite@latest my-project template react cd my-project

Bước 2: Cài đặt Tailwind CSS.

Cài đặt Tailwind CSS và các thư viện kèm theo thông qua npm, sau đó chạy lệnh init để tạo cả tailwind.config.cjs và postcss.config.cjs. Để làm điều đó ta tiến hành tạo thực thi câu lệnh dưới đây. npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p

Sau khi thực thi hai câu lệnh trên npx sẽ tiến hành tạo cho chúng ta 2 tệp tailwind.config.cjs và postcss.config.cjs.

Bước 3: Cấu hình đường dẫn cho template của project.

Chúng ta sẽ tiến hành thêm đường dẫn đến tất cả các tệp mẫu trong tệp tailwind.config.cjs vừa được tạo ở Bước 2 Lúc này chúng ta sẽ thêm đoạn code dưới đây vào trong tệp tailwind.config.cjs để nhận Tailwind CSS có thể nhận dạng để lấy được tất cả các tên class trong file js, ts, jsx, tsx và html trong thư mục đã được định sẵn.

{import('tailwindcss').Config} */ module.exports = { content: [

"./src/**/*.{js,ts,jsx,tsx}", ], theme: { extend: {}, }, plugins: [],

Bước 4: Thêm chỉ thị (anotation) Tailwind vào trong tệp index.css.

Chúng ta sẽ tiến hành thêm các lệnh dưới đây vào trọng tệp index.css.

Bước 5: Bắt đầu tiến trình build. Để tiến hành build, ta thực thi câu lệnh dưới đây. npm run dev

- Sau khi build xong thì chúng ta có thể sử dụng Taildwind CSS như bình thường và hoàn tất quá trình tích hợp Tailwind CSS cùng với ReactJS.

2.1.2.3 Ứng dụng TailwindCSS vào đề tài

- Việc sử dụng Tailwind css khiến cho việc thiết kế trang web dễ dàng hơn bằng cách nhúng các thuộc tính được định nghĩa sẵn vào class của component đó Nó sẽ hỗ trợ biến các component đó có định dạng css theo như người lập trình mong muốn, mà không cần phải tạo các file css rườm rà.

- Dưới đây là ví dụ về cách triển khai các thuộc tính cho class.

Hình 2.4 Ví dụ về các className của TailwindCSS

Trong hình trên flex sẽ đại diện cho đoạn mã display: flex trong mã CSS, hay items-center sẽ đại diện cho đoạn mã align-items: center trong mã CSS.

Mọi tài liệu tham khảo về className của TailwindCSS sẽ được cập nhật tại trang chủ của TailwindCSS, https://tailwindcss.com/docs

Trong đoạn mã trên đã áp dụng tính năng config các tên lớp do người phát triển tự định nghĩa để tối ưu hơn trong việc thay đổi toàn bộ màu sắc hay các thuộc tính khác của toàn trang web khi sử dụng các tên lớp tự định nghĩa.

Axios là một thư viện HTTP Client dựa trên Promise dành cho node.js và trình duyệt Nó có tính đẳng hình (tức là cùng codebase có thể chạy trong cả trình duyệt và node.js) Ở phía server thì nó sử dụng native module http trong node.js, còn ở phía client (trình duyệt) thì nó sử dụng XMLHttpRequest [3]

2.1.3.2 Ứng dụng của Axios vào đề tài

- Tạo request từ trình duyệt bằng XMLHttpRequest.

- Tạo request từ node.js bằng http.

- Đón chặn request và response.

- Biến đổi dữ liệu request và response.

- Tự động chuyển đổi cho dữ liệu JSON.

- Hỗ trợ phía client bảo vệ chống lại XSRF.

Hình 2.7 Ứng dụng Axios để gọi API và đón chặn các request để làm mới token

Sau đây là một số cách cài đặt Axios sử dụng các câu lệnh trên command line thông qua các công cụ quản lí package.

CÁC CÔNG NGHỆ SỬ DỤNG Ở BACK-END

REST: là một dạng chuyển đổi cấu trúc dữ liệu, một kiểu kiến trúc để viết API

Nó sử dụng phương thức HTTP đơn giản để tạo cho giao tiếp giữa các máy, REST gửi một yêu cầu HTTP như GET, POST, DELETE … đến một URL để xử lý dữ liệu Hoạt động dựa chủ yếu trên phương thức CRUD ( Create, Read, Update, Delete) tương đương với 4 giao thức HTTP: POST, GET, PUT, DELETE.

RESTful API là một tiêu chuẩn dùng trong việc thiết kế các API cho các ứng dụng web để quản lý các tài nguyên RESTful là một trong những kiểu thiết kế API được sử dụng phổ biến ngày nay để cho các ứng dụng khác nhau (như web, mobile) giao tiếp với nhau.

2.2.1.2 Các phương thức của RESTFUL API

REST hoạt động chủ yếu dựa vào giao thức HTTP Các hoạt động cơ bản nêu trên sẽ sử dụng những phương thức HTTP riêng.

- GET (SELECT): Trả về một resource hoặc một danh sách các resource.

- POST (CREATE): Tạo mới một resource.

- PUT (UPDATE): Cập nhật thông tin cho resource.

- DELETE (DELETE): Xoá một resource

- PATCH (UPDATE): Dùng để cập nhật 1 hoặc nhiều trường cho resource Ứng dụng vào trong đề tài bằng cách xây dựng các phương thức tương ứng với các phương thức HTTP

Hình 2.8 Hình Áp dụng RESTful API vào đề tài trong AddressController

Spring Boot nằm trong hệ sinh thái của Spring Framework Nó cung cấp nền tảng tốt cho lập trình viên để lập trình ứng dụng độc lập Ngoài ra nó còn là công cụ để xây dựng các ứng dụng web và các microservice Hơn thế nữa chúng ta không cần phải cài đặt cấu hình nhiều bước rườm rà cho dự án [2]

- Các tính năng của Spring Boot

- Khởi tạo ứng dụng Spring một cách độc lập

- Có nhúng sẵn trực tiếp các server như Tomcat, Jetty, Undertow

- Cung cấp các dependency cơ bản để đơn giản hóa các cấu hình

- Tự động cấu hình thư viện Spring hay của các bên thứ ba khi khả thi

- Cung cấp các chỉ số, độ ổn định và cấu hình ngoại hóa

- Tuyệt đối không sinh them code và không yêu cầu về cấu hình XML

2.2.2.2 Các bước khởi tạo dự án Spring boot

Bước 2: Khai báo thông tin Project như loại project, ngôn ngữ code là Java, phiên bản Spring Boot, phiên bản Java,…

Bước 3: Chọn các Dependencies cần dùng.

Bước 4: Nhấn nút Generate là hoàn thành.

MySQL là 1 hệ thống quản trị về cơ sở dữ liệu với mã nguồn mở (được gọi tắt là RDBMS) và đang hoạt động theo mô hình dạng client-server [3]

- Mạnh mẽ và khả năng mở rộng

Cho phép dữ liệu được lưu trữ và truy cập trên nhiều công cụ lưu trữ

Khả năng sao chép dữ liệu và phân vùng bảng để có hiệu suất và độ bền tốt hơn Truy cập dữ liệu của mình bằng các lệnh SQL tiêu chuẩn Để bảo mật, MySQL sử dụng một đặc quyền truy cập và hệ thống mật khẩu được mã hóa cho phép xác minh dựa trên máy chủ Các máy khách MySQL có thể kết nối với Máy chủ MySQL bằng một số giao thức, bao gồm cả giao thức TCP/IP trên bất kỳ nền tảng nào [3]

2.2.4 Ứng dụng Spring boot vào đề tài

Là 1 tiêu chuẩn mở (RFC 7519) định nghĩa cách thức truyền tin an toàn giữa các thành viên bằng 1 đối tượng JSON Thông tin này có thể được xác thực và đánh dấu tin cậy nhờ vào "chữ ký" của nó Phần chữ ký của JWT sẽ được mã hóa lại bằngHMAC hoặc RSA Trong đó chuỗi Token phải có 3 phần là header, phần payload và phần signature được ngăn bằng dấu “.” [4]

Người ta thường sử dụng JWT trong authentication Khi người dùng đã đăng nhập vào hệ thống thì những request tiếp theo từ phía người dùng sẽ chứa thêm mã JWT Điều này cho phép BE kiểm tra được quyền của người dùng và cấp quyền truy cập vào các url, service, các tài nguyên của hệ thống [4]

Phần Header của token sẽ chứa kiểu dữ liệu , và thuật toán sử dụng để mã hóa ra chuỗi JWT.

Phần Payload sẽ chứa các thông tin mình muốn đặt trong chuỗi Token.

Phần Signature được tạo ra bằng cách mã hóa phần header, payload kèm theo một chuỗi secret (khóa bí mật).

Hình 2.9 JWT của một user sau khi đã đăng nhập Áp dụng JWT trong việc tạo ra token, khởi tạo token và refresh token Khi người dùng tạo request tới server thì hệ thống sẽ xác thực xem token của người đó còn thời hạn không Nếu không còn thời hạn, thì request đó sẽ không được thực hiện.

Dưới đây là thể hiện cho sự sinh ra token và refresh token dựa trên các thuộc tính id, email Với loại mã hóa là HS512.

Hình 2.10 Hình Áp dụng JWT trong việc sinh ra token

Khi người dùng đăng nhập thành công thì hệ thống sẽ gọi tới hàm sinh ra token

Hình 2.11 Chi tiết hàm đăng nhập

Là một framework trong hệ sinh thái của Spring Framework, nó giúp chúng ta phân quyền và xác thực người dùng trước khi cho phép họ truy cập vào các tài nguyên của hệ thống. Ởphần này chúng ta cần quan tâm đến 2 việc đó là authentication và authorization.Với authentication thì framework sẽ cung cấp các service giúp lập trình viên dễ dàng xác thực người dùng khi người dung đăng nhập vào hệ thống Còn với authorization sau khi người dung đăng nhập xong, hệ thống sẽ xác định những chức năng hay tài nguyên nào mà người dung đó chỉ được phép sử dụng [5] Áp dụng vào trong đề tài là sử dụng lớp User Detail Service để kiểm tra tài khoản, mật khẩu của người dùng khi đăng nhập vào hệ thống Cách mà lớp User Detail Service sẽ lấy username, password và role từ payload, đồng thời truy vấn xuống database lấy password, role theo username của người dùng đó Sau đó sẽ so sánh mật khẩu, role từ database và mật khẩu, role từ payload, nếu đúng thì cho phép người dùng truy cập vào hệ thống Việc sử dụng User detail service được cung cấp từ spring framework thì giúp cho người lập trình viên tiện dụng trong việc phân quyền và bảo mật hệ thống.

Hình 2.12 Hình Áp dụng Spring Security trong việc xác thực người dùng hệ thống

KIẾN TRÚC CHUNG CỦA HỆ THỐNG

Hình 2.13 Kiến trúc hệ thống

Trong hệ thống trên, sử dụng ReactJS làm phần giao diện người dùng (front-end) và Spring Boot làm phần xử lý logic và dữ liệu (back-end), ta có một kiến trúc phân tách (client-server) giữa hai thành phần này.

 Máy chủ (Server-side): o Spring Boot được sử dụng để xử lý các yêu cầu HTTP từ ReactJS và cung cấp các API (Application Programming Interface) để truy xuất và cập nhật dữ liệu dưới cơ sở dữ liệu MySQL. o Spring Boot cũng có thể kết hợp với các thư viện ORM (Object-Relational

Mapping) như Spring Data JPA để tương tác với cơ sở dữ liệu.

 Máy khách (Client-side): o ReactJS được sử dụng để xây dựng giao diện người dùng tương tác trên trình duyệt. o ReactJS thực hiện các yêu cầu HTTP (sử dụng axios) đến các API được cung cấp bởi Spring Boot để truy xuất và cập nhật dữ liệu. o ReactJS cung cấp các thành phần (components) để xây dựng giao diện người dùng, quản lý trạng thái và tương tác với các API của Spring Boot.

 Giao tiếp (Communication): o ReactJS và Spring Boot giao tiếp thông qua các yêu cầu HTTP (GET, POST, PUT, DELETE) và truyền dữ liệu dưới dạng JSON hoặc XML. o ReactJS gửi yêu cầu HTTP đến các API của Spring Boot để truy xuất dữ liệu từ máy chủ và cập nhật trạng thái giao diện người dùng. o Spring Boot xử lý các yêu cầu, thực hiện logic kinh doanh, và trả về phản hồi (response) dưới dạng JSON hoặc XML cho ReactJS.

THIẾT KẾ PHẦN MỀM

LƯỢC ĐỒ TUẦN TỰ

3.3 Thiết kế cơ sở dữ liệu

Chương 4 Cài đặt và kiểm thử

STT Thời gian Công việc Ghi chú

1 13/02/2023 – 20/03/2023  Thiết kế usecase và mô hình hóa yêu cầu.

 Thiết kế cơ sở dữ liệu.

 Tìm hiểu về thư viện ReactJS của JavaScript.

2 21/03/2023 – 07/04/2023  Tìm hiểu về Spring Boot và Spring

 Tìm hiểu về nền tảng AWS Elastic Beanstalk và AWS S3.

 Tìm hiểu về JSON Web Token để ứng dụng vào xác thực và phân quyền API

 Tìm hiểu về SQL và MySQL để áp dụng vào lưu trữ dữ liệu người dùng của hệ thống

 Tiến hành phát triển API dựa trên các kiến thức đã tìm hiểu được và các tài

 Tiến hành xây dựng giao diện người dùng cho hệ thống.

 Kết hợp các phần đã xây dựng lại với

5 09/05/2023 – 09/06/2023 nhau (giao diện, API, cơ sở dữ liệu).

 Tìm hiểu, sửa đổi hệ thống để hoàn thiện.

6 09/06/2023 – 20/06/2023  Kiểm thử chương trình và tiến hành sửa lỗi.

7 21/06/2023 – 10/07/2023  Viết và hoàn thiện báo cáo.

Ngày……tháng……năm 2023 Ý kiến của giáo viên hướng dẫn Người viết đề cương

(ký và ghi rõ họ tên)

LỜI CẢM ƠN 1 ĐỀ CƯƠNG LUẬN VĂN TỐT NGHIỆP 2

1 TÍNH CẤP THIẾT CỦA ĐỀ TÀI 15

4 MỤC TIÊU CỦA ĐỀ TÀI 16

CHƯƠNG 1 KHẢO SÁT HIỆN TRẠNG VÀ MÔ HÌNH HÓA YÊU CẦU 18

CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 24

2.1 CÁC CÔNG NGHỆ SỬ DỤNG Ở FRONT-END 24

2.2 CÁC CÔNG NGHỆ SỬ DỤNG Ở BACK-END 33

2.2.4 Ứng dụng Spring boot vào đề tài 35

2.3 KIẾN TRÚC CHUNG CỦA HỆ THỐNG 39

CHƯƠNG 3 THIẾT KẾ PHẦN MỀM 40

3.1 MÔ HÌNH HÓA YÊU CẦU 40

3.1.2 Đặc tả các Use case về phía Người dùng 43

3.1.3 Đặc tả Use case về phía quản trị viên 58

3.4 THIẾT KẾ CƠ SỞ DỮ LIỆU 99

3.4.1 Lược đồ thực thể kết hợp (ERD) 99

3.4.2 Chi tiết bảng dữ liệu 99

3.5.1 Màn hình giao diện phía người dùng 111

3.5.2 Màn hình giao diện phía quản trị viên 130

CHƯƠNG 4 CÀI ĐẶT VÀ KIỂM THỬ 154

Bảng 1.1 Bảng yêu cầu nghiệp vụ 22

Bảng 3.1 Mô tả Use case “Đăng ký” 43

Bảng 3.2 Mô tả Use case “Đăng nhập” 44

Bảng 3.3 Mô tả Use case “Chỉnh sửa thông tin tài khoản” 45

Bảng 3.4 Mô tả Use case “Đổi mật khẩu” 46

Bảng 3.5 Mô tả Use case “Xem chi tiết thông tin của một sản phẩm” 47

Bảng 3.6 Mô tả Use case “Xem chi tiết thông tin của một sản phẩm” 47

Bảng 3.7 Mô tả Use case “Xóa sản phẩm khỏi giỏ hàng” 48

Bảng 3.8 Mô tả Use case “Thêm địa chỉ nhận hàng” 49

Bảng 3.9 Mô tả Use case “Chỉnh sửa địa chỉ nhận hàng” 50

Bảng 3.10 Mô tả Use case “Xóa địa chỉ nhận hàng” 51

Bảng 3.11 Mô tả Usecase “Xem lịch sử mua hàng” 52

Bảng 3.12 Mô tả Use case “Đặt hàng” 52

Bảng 3.13 Mô tả Use case “Hủy đơn hàng” 53

Bảng 3.14 Mô tả Use case “Tìm kiếm sản phẩm” 54

Bảng 3.15 Mô tả Use case “Tìm kiếm sản phẩm” 55

Bảng 3.16 Mô tả Use case “Tìm kiếm sản phẩm” 56

Bảng 3.17 Mô tả Use case “Áp dụng voucher cho đơn hàng” 56

Bảng 3.18 Mô tả Use case “Thêm thuộc tính kích cỡ” 58

Bảng 3.19 Mô tả Use case “Sửa thuộc tính kích cỡ” 58

Bảng 3.20 Mô tả Use case “Xóa thuộc tính kích cỡ” 59

Bảng 3.21 Mô tả Use case “Thêm thuộc tính màu sắc” 60

Bảng 3.22 Mô tả Use case “Chỉnh sửa thuộc tính màu sắc” 61

Bảng 3.23 Mô tả Use case “Xóa thuộc tính màu sắc” 62

Bảng 3.24 Mô tả Use case “Thêm sản phẩm” 62

Bảng 3.25 Mô tả Use case “Chỉnh sửa sản phẩm” 63

Bảng 3.26 Mô tả Use case “Xóa sản phẩm” 64

Bảng 3.27.Mô tả Use case “Vô hiệu hóa tài khoản User” 65

Bảng 3.28 Mô tả Use case “Thêm danh mục sản phẩm” 65

Bảng 3.29 Mô tả Use case “Chỉnh sửa danh mục sản phẩm” 66

Bảng 3.30 Mô tả Use case “Xóa danh mục sản phẩm” 67

Bảng 3.31 Mô tả Usecase “Thống kê” 68

Bảng 3.32 Mô tả Use case “Kích hoạt tài khoản người dùng” 68

Bảng 3.33 Mô tả Usecase “Xác nhận đơn hàng” 69

Bảng 3.34 Mô tả Use case “Kích hoạt đánh giá” 71

Bảng 3.35 Mô tả Use case “Thêm voucher” 72

Bảng 3.36 Mô tả Use case “Chỉnh sửa voucher” 74

Bảng 3.53 Mô tả màn hình trang chủ 113

Bảng 3.54 Mô tả giao diện đăng nhập 114

Bảng 3.55 Mô tả giao diện đăng ký 115

Bảng 3.56 Mô tả giao diện danh sách sản phẩm 116

Bảng 3.57 Mô tả giao diện chi tiết sản phẩm 117

Bảng 3.58 Mô tả giao diện chi tiết sản phẩm 118

Bảng 3.59 Mô tả giao diện lịch sử mua hàng 119

Bảng 3.60 Mô tả giao diện chi tiết đơn hàng 120

Bảng 3.61 Mô tả giao diện thêm địa chỉ 122

Bảng 3.62 Mô tả giao diện giỏ hàng 123

Bảng 3.63 Mô tả giao diện chọn địa chỉ thanh toán 124

Bảng 3.64 Mô tả giao diện thanh toán 125

Bảng 3.65 Mô tả giao diện kết quả thanh toán 126

Bảng 3.66 Mô tả giao diện điều khiển 131

Bảng 3.67 Mô tả giao diện danh sách đơn hàng 132

Bảng 3.68 Mô tả giao diện chi tiết đơn hàng 133

Bảng 3.69 Mô tả giao diện danh sách sản phẩm 134

Bảng 3.70 Mô tả giao diện chi tiết sản phẩm – 1 135

Bảng 3.71 Mô tả giao diện chi tiết sản phẩm -2 137

Bảng 3.72 Mô tả giao diện danh sách phân loại 137

Bảng 3.73 Mô tả giao diện chi tiết phân loại 139

Bảng 3.74 Mô tả giao diện thêm phân loại 140

Bảng 3.75 Mô tả giao diện màu sắc/kiểu dáng 140

Bảng 3.76 Mô tả giao diện chi tiết màu sắc 141

Bảng 3.77 Mô tả giao diện thêm màu sắc 142

Bảng 3.78 Mô tả giao diện danh sách kích cỡ 143

Bảng 3.79 Mô tả giao diện chi tiết kích cỡ 144

Bảng 3.80 Mô tả giao diện thêm kích cỡ 145

Bảng 3.81 Mô tả giao diện thống kê 146

Bảng 3.82 Mô tả giao diện danh sách người dùng 147

Bảng 3.83 Mô tả giao diện chi tiết người dùng 148

Bảng 3.84 Mô tả giao diện đăng nhập của quản trị viên 149

Bảng 3.85 Mô tả giao diện chọn màu giao diện và tab thông tin cá nhân 150

Bảng 3.86 Mô tả giao diện danh sách đánh giá sản phẩm 151

Bảng 4.1 Bảng rủi ro và kế hoạch giảm nhẹ 158

Bảng 4.2 Kết quả kiểm thử chức năng phía Người dùng 159

Bảng 4.3 Kết quả kiểm thử chức năng phía quản trị viên 162

Hình 1.1.1 Hình ảnh trang chủ của website www.yame.vn 20

Hình 2.1 Khởi tạo dự án 25

Hình 2.2 Cấu trúc của dự án (bao gồm người dùng và quản trị viên) 26

Hình 2.4 Ví dụ về các className của TailwindCSS 29

Hình 2.7 Ứng dụng Axios để gọi API và đón chặn các request 32

Hình 2.8 Hình Áp dụng RESTful API vào đề tài trong AddressController 34

Hình 2.9 JWT của một user sau khi đã đăng nhập 36

Hình 2.10 Hình Áp dụng JWT trong việc sinh ra token 37

Hình 2.11 Chi tiết hàm đăng nhập 37

Hình 2.12 Áp dụng Spring Security 38

Hình 2.13 Kiến trúc hệ thống 39

Hình 3.1 Sơ đồ usecase phía người dùng - 1 40

Hình 3.2 Sơ đồ usecase phía người dùng - 2 41

Hình 3.3 Sơ đồ Use case bên phía admin - 1 42

Hình 3.4 Sơ đồ Use case phía admin - 2 43

Hình 3.7 Sequence Chức năng “đổi mật khẩu” 76

Hình 3.8 Sequence “Thêm địa chỉ nhận hàng” 77

Hình 3.9 Sequence “Sửa địa chỉ nhận hàng” 78

Hình 3.10 Sequence “Xóa địa chỉ nhận hàng” 78

Hình 3.11 Sequence “Thêm sản phẩm vào giỏ hàng” 79

Hình 3.12 Sequence “Xóa sản phẩm khỏi giỏ hàng” 79

Hình 3.13 Sequence “Chỉnh sửa thông tin tài khoản” 80

Hình 3.15 Sequence “Thêm thuộc tính Size” 81

Hình 3.16 Sequence “Sửa thuộc tính Size” 82

Hình 3.17 Sequence “Xóa thuộc tính Size” 83

Hình 3.18 Sequence “Thêm thuộc tính màu” 84

Hình 3.19 Sequence “Thêm thuộc tính màu” 85

Hình 3.20 Sequence “Xóa thuộc tính màu” 86

Hình 3.21 Sequence “Thêm danh mục” 87

Hình 3.22 Sequence “Chỉnh sửa danh mục” 88

Hình 3.23 Sequence “Xóa danh mục” 89

Hình 3.24 Sequence "Thêm sản phẩm" 90

Hình 3.25 Sequence "Chỉnh sửa thông tin sản phẩm" 90

Hình 3.26 Sequence "Xóa sản phẩm" 91

Hình 3.27 Sequence “Xác nhận đơn hàng” 92

Hình 3.28 Sequence “Hủy đơn hàng” 93

Hình 3.32 Sơ đồ luồng cho người dùng khách (Guest) 111

Hình 3.33 Sơ đồ luồng cho người dùng (User) 112

Hình 3.34 Giao diện trang chủ 113

Hình 3.35 Giao diện đăng nhập 114

Hình 3.36 Giao diện đăng ký 115

Hình 3.37 Giao diện danh sách sản phẩm 116

Hình 3.38 Giao diện chi tiết sản phẩm 117

Hình 3.39 Giao diện thông tin cá nhân người dùng 118

Hình 3.40 Giao diện danh sách lịch sử mua hàng 119

Hình 3.41 Giao diện chi tiết đơn hàng 120

Hình 3.42 Danh sách địa chỉ 121

Hình 3.43 Mô tả giao diện danh sách địa chỉ 121

Hình 3.44 Giao diện thêm địa chỉ mới 122

Hình 3.45 Giao diện giỏ hàng 123

Hình 3.46 Giao diện chọn địa chỉ thanh toán 124

Hình 3.47 Giao diện thanh toán 125

Hình 3.48 Giao diện kết quả đặt hàng 126

Hình 3.49 Sơ đồ luồng cho bên quản trị viên 130

Hình 3.50 Giao diện bảng điều khiển 130

Hình 3.51 Giao diện danh sách đơn hàng 132

Hình 3.52 Giao diện chi tiết đơn hàng 133

Hình 3.53 Giao diện danh sách sản phẩm 134

Hình 3.54 Giao diện danh sách sản phẩm - 1 135

Hình 3.55 Giao diện chi tiết sản phẩm – 2 135

Hình 3.56 Giao diện chi tiết sản phẩm - 3 136

Hình 3.57 Giao diện chi tiết sản phẩm – 4 137

Hình 3.58 Giao diện danh sách phân loại 137

Hình 3.59 Giao diện chi tiết phân loại 138

Hình 3.60 Giao diện thêm phân loại 139

Hình 3.61 Giao diện danh sách màu sắc/kiểu dáng 140

Hình 3.62 Giao diện chi tiết màu sắc 141

Hình 3.63 Giao diện thêm màu sắc 142

Hình 3.64 Giao diện danh sách kích cỡ 143

Hình 3.65 Giao diện chi tiết kích cỡ 144

Hình 3.66 Giao diện thêm kích cỡ 145

Hình 3.67 Giao diện thống kê 146

Hình 3.68 Giao diện danh sách người dùng 147

Hình 3.69 Giao diện chi tiết người dùng 148

Hình 3.70 Giao diện trang đăng nhập của quản trị viên 149

Hình 3.71 Giao diện chỉnh giao diện và tab thông tin các nhân 150

Hình 3.72 Hình giao diện đánh giá theo sản phẩm 151

Hình 4.1 Phạm vi kiểm thử 155

1 TÍNH CẤP THIẾT CỦA ĐỀ TÀI

Qua đại dịch Covid-19 vì người dân có thói quen mua sắm nhiều hơn bình thường, nhờ vào đó các hộ kinh doanh nhỏ lẻ bắt đầu mọc lên nhiều hơn Đồ ăn, dịch vụ, các nhu yếu phẩm và đặc biệt là thời trang Có thể dễ hiểu thời trang là mặt hàng được ưa chuộng bởi giới trẻ họ muốn mình được đẹp.

Nhưng cũng chính vì đại dịch covid vừa qua điều kiện đi lại tới các cửa hàng lại khó khăn, nên bán hàng online lại là nước đi tối ưu của các cửa hàng Họ có thể triển khai cửa hàng của mình dưới dạng app hoặc website, dễ dàng phục cho mọi người truy cập và mua sắm Nắm bắt được nhu cầu này nên việc xây dựng một trang web có thể tận dụng được tối đa phân khúc User là điều cần thiết Vậy nên chúng em quyết định chọn đề tài “Xây dựng website bán quần áo sử dụng Spring Boot và ReactJS” để mô hình hóa sản phẩm này Nhằm đem đến hiệu quả tốt nhất cho việc mua bán giữa người dùng và cửa hàng thuận lợi nhất.

Với đề tài này, đối tượng nghiên cứu dựa trên nhu cầu mua bán thời trang, giúp người mua tiếp cận tới các sản phẩm đẹp, khuyến mãi tốt mà không cần phải ra cửa hàng Đồng thời giúp cho bên bán hàng quản lý các sản phẩm, thu nhập, khuyến mãi, tránh để tồn kho và các vấn đề liên quan Bên cạnh đó là các công nghệ mà chúng em sử dụng trong đề tài, cụ thể như sau:

- Sử dụng ReactJS để xây dựng một giao diện tiện dụng, dễ tương tác và hợp mắt người dùng.

- Nghiên cứu RESTful API với Spring Boot của Java để xây dựng hệ thống, hỗ trợ thao tác và truy xuất thông tin nhanh chóng và chính xác nhất

- Sử dụng MySQL để làm cơ sở dữ liệu.

- Áp dụng Spring Security của Spring Framework và JWT để ứng dụng vào việc bảo mật và phân quyền người dùng.

Trang web được xây dựng vào các chức năng theo nghiệp vụ định hướng người dùng xem và mua các sản phẩm thời trang trở nên nhanh chóng, tiện lợi Như là xem danh sách các sản phẩm, đặt hàng, chọn các mặt hàng để thêm vào giỏ hàng, chọn nơi cần giao hàng,…

Ngoài ra về phía bộ phận quản trị của cửa hàng thì có các chức năng để quản lý các sản phẩm đang tồn tại ở trong cửa hàng như chỉnh sửa các thuộc tính của sản phẩm thời trang, số lượng của các mặt hàng tại thời điểm hiện hành, quản lý các tài khoản của người dùng,…

4 MỤC TIÊU CỦA ĐỀ TÀI

- Đăng nhập và đăng ký tài khoản với email.

- Xem thông tin chi tiết sản phẩm, các biến thể sản phẩm và số lượng của biến thể đó.

- Lọc sản phẩm theo các tiêu chí về phân loại, màu sắc và kích thước có sẵn.

- Thêm sản phẩm vào giỏ hàng.

- Đặt mua các sản phẩm trong giỏ hàng.

- Quản lý địa chỉ giao hàng (thêm, sửa, xóa địa chỉ).

- Xem thông tin đơn hàng đã đặt.

- Quản lý thông tin cá nhân.

- Đặt lại mật khẩu khi quên.

- Quản lý (thêm, sửa, xóa) sản phẩm, phân loại, màu sắc, kích thước của sách.

- Quản lý (xác nhận, hủy đơn) đơn hàng của người dùng.

- Xem danh sách người dùng, vô hiệu hóa tài khoản của người dùng.

- Xem danh sách đánh giá sản phẩm, vô hiệu hóa đánh giá của người dùng.

- Thống kê doanh thu của cửa hàng bao gồm: xem thông tin doanh thu, xuất file excel (.xlsx) danh sách hóa đơn theo khoảng ngày chỉ định.

CHƯƠNG 1 KHẢO SÁT HIỆN TRẠNG VÀ MÔ HÌNH HÓA YÊU CẦU 1.1 KHẢO SÁT HIỆN TRẠNG

1.1.1 Website “ROUTINE | THƯƠNG HIỆU QUẦN ÁO THỜI TRANG NAM NỮ CAO CẤP”

Hình 1.1 Hình ảnh trang chủ của website Routine

- Giao diện hiển thị các sản phẩm theo từng danh mục.

- Tìm sản phẩm theo tên.

- Chức năng đặt hàng, giỏ hàng, thanh toán sản phẩm.

- Chat trực tiếp với cửa hàng thông qua plug-in messenger.

- Xem thông tin tài khoản.

- Có lượng mặt hàng nhiều, chức năng lọc sản phẩm chi tiết.

- Có áp dụng plug-in chat messenger.

- Chưa tối ưu được không gian hiển thị với danh sách các sản phẩm.

- Chưa tích hợp thanh toán online.

1.1.2 Website “HARDMODE – THIẾT KẾ VÀ THỜI TRANG”

Hình 1.2 Hình ảnh trang chủ của trang Hardmode

- Quản lý các mặt hàng và các danh mục sản phẩm.

- Đăng nhập, đăng ký tài khoản.

- Xác nhận đơn đặt hàng.

- Giao diện hiển thị các sản phẩm.

- Xem lịch sử đặt hàng.

- Chức năng đặt hàng, giỏ hàng, thanh toán sản phẩm.

- Chat trực tiếp với cửa hàng thông qua plug-in messenger.

- Thiết kế đơn giản, dễ nhìn, dễ sử dụng.

- Có áp dụng plug-in chat messenger.

- Chưa tích hợp thanh toán online.

1.1.3 Website “YaMe | Mua Online Quần Áo Thời Trang Nam Nữ Giá Rẻ - YaMe.vn”

Hình 1.1.1 Hình ảnh trang chủ của website www.yame.vn

- Quản lý các mặt hàng và các danh mục sản phẩm.

- Giao diện hiển thị các sản phẩm.

- Chức năng đặt hàng, giỏ hàng, thanh toán sản phẩm.

- Thiết kế đơn giản, dễ nhìn, dễ sử dụng, phân thành nhiều category trên sidebar.

- Ngoài nhận tại địa chỉ của mình Yame cho phép nhận hàng tại cửa hàng mà mình

- Chưa tích hợp thanh toán online.

- Chức năng thanh toán chưa tối ưu, người dùng có thể cho thông tin ảo.

- Chức năng đăng ký, đăng nhập chưa hoàn thiện.

1.1.4 Kết luận khảo sát thực trạng

Qua những dữ liệu mà nhóm chúng em đã thu thập được của 3 hệ thống web app về buôn bán sản phẩm thời trang và để phù hợp với hiện hành chúng em đã chọn cái tên đề tài là “Xây dựng website bán quần áo sử dụng Spring Boot và ReactJS” bao gồm:

- Đây là trang web về thương mại nên sẽ tập trung vào trải nghiệm người dùng cũng với các tính năng quan trọng thiết yếu.

- Xây dựng với các chức năng thêm sửa xóa của các phần quản lý cho người quản trị viên.

- Về hệ thống thì đảm nhiệm tốc độ xử lý hiển thị giao diện nhanh chóng không để người dùng phải chờ đợi lâu.

- Sử dụng plugin chat Messenger từ Facebook (Meta) để có thể dễ dàng trao đổi trực tiếp với khách hàng một cách nhanh chóng.

- Sử dụng API thanh toán online bằng Momo giúp cho người dùng có thể dễ dàng thanh toán trước đơn hàng.

1.2.1.1 Yêu cầu chức năng phía người dùng

- Tìm kiếm sản phẩm theo tên.

- Xem danh sách tất cả sản phẩm.

- Xem chi tiết thông tin của một sản phẩm.

- Xem lịch sử đơn hàng đã đặt.

- Chỉnh sửa thông tin tài khoản.

- Quản lý địa chỉ giao hàng.

- Hủy đơn hàng đã đặt.

- Lấy lại mật khẩu khi người dùng đã quên mật khẩu

- Áp dụng voucher để giảm giá tiền

1.2.1.2 Yêu cầu chức năng phía quản trị viên

- Quản lý thông tin sản phẩm.

- Quản lý các danh mục.

- Quản lý tài khoản người dùng.

- Quản lý các thuộc tính sản phẩm.

- Quản lý các bình luận đánh giá sản phẩm

- Kích hoạt tài khoản người dùng.

- Vô hiệu hóa tài khoản người dùng.

- Thống kê số lượng các thành phần trong cửa hàng

1.2.1.3 Yêu cầu chức năng hệ thống

- Cung cấp chức năng phân quyền.

- Cung cấp chức năng thanh toán trực tuyến.

- Cung cấp chức năng chat trực tuyến từ plugin Messenger của Facebook.

- Thông báo mail cho người dùng khi đơn hàng được cập nhật ở trạng thái mới

Bảng 1.1 Bảng yêu cầu nghiệp vụ

STT Yêu cầu nghiệp vụ Loại yêu cầu Ghi chú

1 Thêm, chỉnh sửa thông tin sản phẩm mới Lưu trữ

2 Thêm thông tin tài khoản mới Lưu trữ

3 Thêm, chỉnh sửa thông tin danh mục Lưu trữ

4 Thêm, chỉnh sửa thông tin kích cỡ Lưu trữ

5 Thêm, chỉnh sửa thông tin màu Lưu trữ

6 Thêm, chỉnh sửa voucher Lưu trữ

7 Xem, lọc danh sách tài khoản Tra cứu (tìm kiếm)

8 Xem danh sách danh mục Tra cứu (tìm kiếm)

9 Xem danh sách kích cỡ Tra cứu (tìm kiếm)

10 Xem danh sách màu Tra cứu (tìm kiếm)

11 Xem danh sách đơn hàng Tra cứu (tìm kiếm)

12 Tính doanh thu của cửa hàng Tính toán

13 Thống kê số lượng sản phẩm Kết xuất

14 Áp dụng voucher khi thanh toán Tính toán

1.2.1.4 Yêu cầu phi chức năng

- Giao diện bắt mắt, thân thiện với người dùng.

- Tốc độ xử lý và tìm kiếm nhanh chóng, chính xác.

- Có độ tin cậy cao.

- Các thông tin của người dùng phải được bảo mật và mã hóa.

- Có thể dễ dàng mở rộng quy mô hệ thống.

CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 2.1 CÁC CÔNG NGHỆ SỬ DỤNG Ở FRONT-END

ReactJS là một thư viện chứa nhiều JavaScript mã nguồn mở được Facebook xây dựng và phát triển Thư viện này được sử dụng để tạo ra các ứng dụng trang web hấp dẫn với hiệu quả cao, tốc độ tải nhanh và khả năng tái sử dụng mã nguồn cao Thư viện này ban đầu được phát triển và duy trì bởi Facebook nay còn được gọi với cái tên Meta, và sau đó dần được ứng dụng WhatsApp và Instagram [1]

ReactJS được dùng để viết các ứng dựng web Single Page Application (SPA).

Và nó sẽ so sánh sự thay đổi giữa các giá trị của lần render này với lần render trước để cập nhật ít thay đổi nhất trên DOM [1]

ReactJS sử dụng cơ chế one-way data binding (luồng dữ liệu 1 chiều) Dữ liệu được truyền từ parent đến child thông qua props Luồng dữ liệu đơn giản giúp chúng ta dễ dàng kiểm soát cũng như sửa lỗi [1]

Các thành phần nổi bật của thư viện ReactJS:

JSX là một dạng ngôn ngữ cho phép viết các mã HTML trong Javascript Hơn thế nữa là JSX, một tính năng mà làm cho ReactJS thân thiện hơn Các thuộc tính trong JSX được viết theo camelCase như class thành className Mã này sẽ dịch ngược lại Js thuần túy thông qua công cụ Babel, chuẩn hóa phiên bản ES6 thành ES5 [1]

Lập trình viên có thể chia nhỏ các cấu trúc của trang web hay còn gọi là component để tái sử dụng hoặc dễ quản lý hơn trong các folder khác nhau.

Dom ảo (Virtual DOM) giúp cho ứng dụng nhanh hơn DOM ảo hỗ trợ rất tốt cho việc cấu trúc UI phản ứng kịp thời với trước những thay đổi nhằm tăng trải nghiệm người dùng Khi tạo ra ReactJS, các nhà thiết kế đã dự đoán đúng việc cập nhật cácHTML cũ là cực kỳ quan trọng nhưng cũng khá tốn kém chi phí Vì thế ý tưởng sử dụng DOM ảo giúp ReactJS biết chính xác khi nào cần render lại hoặc khi nào bỏ đi những phần tử của DOM chính vì phát hiện ra những thay đổi trên data.

Props: giúp các component tương tác với nhau, component nhận input gọi là props, và trả thuộc tính mô tả những gì component con sẽ render.

State là thể hiện trạng thái của ứng dụng, khi state thay đổi thì component đồng thời render lại để cập nhật lại giao diện mới.

2.1.1.2 Cách khởi tạo dự án ReactJS Điều kiện khởi tạo:

Cách khởi tạo 1 dự án ReactJS khá là đơn giản ta chỉ cần chọn thư mục cần lưu và mở cmd gõ các lệnh sau: npx create-react-app react-app cd react-app npm start

Sau khi thành công trình duyệt mặc định sẽ hiển thị như hình dưới đây.

Hình 2.1 Khởi tạo dự án

2.1.1.3 Ứng dụng ReactJS vào đề tài

React có cơ chế phân chia các thành phần của trang web thành các component, nhằm để tiện tái sử dụng nhiều lần ở các trang khác nhau của website.

Sử dụng react router dom để áp dụng vào việc phân các router, đường dẫn của trang web Giúp cho cơ chế định vị trang trở nên dễ dàng hơn bao giờ hết.

Hình 2.2 Cấu trúc của dự án (bao gồm người dùng và quản trị viên)

Tailwind CSS là một utility-first CSS framework nó hỗ trợ phát triển xây dựng nhanh chóng giao diện người dùng, nó cũng có điểm chung giống như Bootstrap & điểm làm nó nổi bật hơn cả đó là chúng ta có thể tùy biến phát triển CSS theo cách mà chúng ta định nghĩa ra.

Cơ chế hoạt động của Tailwind CSS là sẽ tiến hành quét hết tất cả các tệp HTML, thành phần JavaScript hoặc bất kì các template nào khác để tìm tên lớp (class name), sau đó sẽ tạo ra các kiểu CSS tương ứng với các tên lớp vừa quét được rồi ghi vào một tệp tĩnh CSS [2]

2.1.2.2 Cài đặt Tailwind CSS tích hợp trong thư viện ReactJS

Chúng ta tiến hành thực thi các câu lệnh dưới đây để tiến hành tạo project

ReactJS sử dụng Vite. npm create vite@latest my-project template react cd my-project

Bước 2: Cài đặt Tailwind CSS.

LƯỢC ĐỒ LỚP

THIẾT KẾ CƠ SỞ DỮ LIỆU

3.4.1 Lược đồ thực thể kết hợp (ERD)

3.4.2 Chi tiết bảng dữ liệu

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã địa chỉ Khóa chính

2 address_line varchar Địa chỉ chi tiết

3 ward varchar Tên xã/ phường

4 district varchar Tên quận/huyện

5 province varchar Tên tỉnh/thành phố

6 ward_id varchar Mã xã/phường Mã được lấy theo

7 district_id bigint Mã quận/huyện Mã được lấy theo

8 province_id bigint Mã tỉnh/thành phố Mã được lấy theo

9 is_default bit Địa chỉ mặc định 0 - Bình thường

10 user_id bigint Mã tài khoản người dùng

11 phone varchar Số điện thoại

12 full_name varchar Họ tên đầy đủ

13 created_date datetime Thời gian tạo

14 update_date datetime Thời gian cập nhật

15 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã của giỏ hàng Khóa chính

2 user_id bigint Mã tài khoản của người dùng

3 grand_total bigint Tổng số tiền tạm tính

4 created_date datetime Thời gian tạo

5 update_date datetime Thời gian cập nhật

6 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã chi tiết giỏ hàng Khóa chính

2 variant_id bigint Mã biến thể sản phẩm

3 cart_id bigint Mã giỏ hàng

4 quantity bigint Số lượng sản phẩm

5 total bigint Tổng tiền tạm tính

6 created_date datetime Thời gian tạo

7 update_date datetime Thời gian cập nhật

8 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã phân loại/danh mục Khóa chính

2 parent_id bigint Mã của phân loại lớn

3 name varchar Tên phân loại

4 decription varchar Mô tả về loại sản phẩm

5 created_date datetime Thời gian tạo

6 update_date datetime Thời gian cập nhật

7 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã màu sắc/kiểu dáng Khóa chính

2 color varchar Tên màu sắc Do người dùng tự đặt

3 code varchar Mã màu sắc dạng hex Do người dụng tự chọn

4 created_date datetime Thời gian tạo

5 update_date datetime Thời gian cập nhật

6 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã hình ảnh Khóa chính

2 product_id bigint Mã sản phẩm

3 path varchar Đường dẫn/tên file hình ảnh

4 created_date datetime Thời gian tạo

5 update_date datetime Thời gian cập nhật

6 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã hóa đơn Khóa chính

2 user_id bigint Mã tài khoản người dùng

3 grand_total bigint Tổng tiền

PENDING - đang được xử lý

4 delivery_status varchar Trạng thái giao hàng DELIVERING - đang giao hàng COMPLETED - đã giao hàng

5 payment_status varchar Trạng thái thanh toán PENDING - chưa thanh toán

6 payment_method varchar Phương thức thanh toán

PENDING - đang đợi xử lý

IN PRORESS - đã xử lý, đợi giao hàng

7 status varchar Trạng thái đơn hàng

COMPLETED - đã hoàn thành đơn hàng CANCELLED - đã hủy

8 address_id bigint Mã địa chỉ giao hàng

9 note varchar Ghi chú thêm cho đơn hàng

10 delivery_fee bigint Phí vận chuyển được tính theo hệ thống của GHN

11 created_date datetime Thời gian tạo

12 update_date datetime Thời gian cập nhật

13 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã chi tiết hóa đơn Khóa chính

2 variant_id bigint Mã biến thể sản phẩm

3 invoice_id bigint Mã hóa đơn

4 quantity bigint Số lượng sản phẩm

5 unit_price bigint Đơn giá của sản phẩm

7 created_date datetime Thời gian tạo

8 updated_date datetime Thời gian cập nhật

9 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã sản phẩm Khóa chính

2 category_id bigint Mã phân loại sản phẩm

3 name varchar Tên/Tiêu đề sản phẩm

4 code varchar Mã hàng hóa

5 list_price bigint Giá niêm yết

6 stand_cost bigint Giá nhập

7 image varchar Đường dẫn/tên tệp hình ảnh

MALE - sản phẩm dành cho nam FEMALE - sản

8 gender varchar Giới tính sản phẩm phẩm dành cho nữ

UNISEX - sản phẩm cho cả nam và nữ

9 description text Mô tả về sản phẩm

10 created_date datetime Thời gian tạo

11 update_date datetime Thời gian cập nhật sản phẩm

12 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã vai trò Khóa chính

2 code varchar Tên vai trò

3 title varchar Mô tả về vai trò/quyền

Cash – giảm theo giá tiền

4 type varchar Loại voucher Percent – giảm theo phần trăm đơn hàng

5 discountAmount double Giá trị voucher

6 issueDate date Ngày phát hành voucher

8 expiredDate date Ngày hết hạn voucher

9 minimumAmount double Giá trị đơn hàng tối thiểu

10 maximumDiscount double Giảm trị giảm tối đa

11 description varchar Mô tả voucher

12 created_date datetime Thời gian tạo

13 update_date datetime Thời gian cập nhật

14 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã vai trò Khóa chính

2 name varchar Tên vai trò

3 description varchar Mô tả về vai trò/quyền

4 created_date datetime Thời gian tạo

5 update_date datetime Thời gian cập nhật

6 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã của kích cỡ/size Khóa chính

2 size varchar Tên kích cỡ/size

3 description varchar Mô tả về kích cỡ/size

4 created_date datetime Thời gian tạo

5 update_date datetime Thời gian cập nhật

6 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã tài khoản của người Khóa chính dùng

2 role_id bigint Mã của quyền/vai trò

3 full_name varchar Họ tên đầy đủ của người dùng

4 gender varchar Giới tính của người dùng

5 dob varchar Ngày tháng năm sinh của người dùng

6 phone varchar Số điện thoại của người dùng

7 email varchar Email của người dùng

8 password varchar Mật khẩu của người dùng

9 photo varchar dùng để hiển thị trên hệ thống

10 enable bit Trạng thái của tài khoản

11 created_date datetime Thời gian tạo

12 update_date datetime Thời gian cập nhật

13 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã biến thể sản phẩm Khóa chính

2 color_id bigint Mã màu sắc/kiểu dáng

3 size_id bigint Mã kích thước/size

4 product_id bigint Mã sản phẩm

5 image varchar Hình ảnh của biến thể sản phẩm

6 imventory bigint Số lượng sản phẩm còn lại trong kho

7 created_date datetime Thời gian tạo

8 update_date datetime Thời gian cập nhật

9 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã banner Khóa chính

2 end_date datetime Ngày kết thúc

3 start_date datetime Ngày bắt đầu

4 image varchar Đường dẫn hình ảnh

5 link_to varchar Đường dẫn đến sản phẩm

6 type varchar Loại sản phẩm

7 created_date datetime Thời gian tạo

8 update_date datetime Thời gian cập nhật

9 deleted_date datetime Thời gian xóa

STT Tên thuộc tính Kiểu dữ liệu Ý nghĩa Ghi chú

1 id bigint Mã banner Khóa chính

2 comment varchar Nội dung đánh giá

3 rating bigint Điểm đánh giá

4 user_id bigint Mã người dùng

6 invoice_detail_id bigint Mã chi tiết hóa đơn

7 variant_id bigint Mã biến thể sản phẩm

8 created_date datetime Thời gian tạo

9 update_date datetime Thời gian cập nhật

10 deleted_date datetime Thời gian xóa

THIẾT KẾ GIAO DIỆN

3.5.1 Màn hình giao diện phía người dùng

Sơ đồ luồng màn hình (Screen Flow) cho người dùng khách (Guest) trên trang web dành cho người dùng cuối Bao gồm các màn hình có thể truy cập không cần xác thực người dùng dưới quyền người dùng đã đăng nhập (User).

Hình 3.32 Sơ đồ luồng cho người dùng khách (Guest)

Sơ đồ luồng màn hình cho người dùng (User) trên Website dành cho người dùng cuối Bao gồm các màn hình để có thể truy cập người dùng cần phải xác thực bằng cách đăng nhập.

Hình 3.33 Sơ đồ luồng cho người dùng (User)

Hình 3.34 Giao diện trang chủ Bảng 3.53 Mô tả màn hình trang chủ

STT Tên Định dạng Mô tả

1 Giới tính Link Chuyển sang trang tất cả sản phẩm mà chỉ có sản phẩm theo giới tính đó

2 Tìm kiếm Text Nhấn để hệ thống bắt đầu tìm những sản phẩm theo thông tin người dùng đã nhập

3 Banner Hình ảnh Hình ảnh quảng cáo của trang chủ

4 Khám phá Button Người dùng nhấn vào sẽ chuyển sang trang tất cả sản phẩm

5 Đăng nhập Link Người dùng nhấn vào sẽ chuyển sang trang đăng nhập

Hình 3.35 Giao diện đăng nhập Bảng 3.54 Mô tả giao diện đăng nhập

STT Tên Định dạng Mô tả

1 Email Text Người dùng nhập số điện thoại

2 Mật Text Người dùng nhập mật khẩu khẩu

3 Đăng Button Người dùng nhấn để đăng nhập nhập

4 Đăng Button Người dùng nhấn để chuyển sang trang đăng ký ký

Hình 3.36 Giao diện đăng ký Bảng 3.55 Mô tả giao diện đăng ký

STT Tên Định dạng Mô tả

1 Họ và tên Text Người dùng nhập họ và tên

2 Email Text Người dùng nhập số điện thoại

3 Mật khẩu Text Người dùng nhập mật khẩu

4 Nhập lại mật khẩu Text Người dùng nhập lại mật khẩu

5 Đăng ký Button Người dùng nhấn để đăng ký tài khoản

3.5.1.4 Giao diện trang danh sách sản phẩm

Hình 3.37 Giao diện danh sách sản phẩm Bảng 3.56 Mô tả giao diện danh sách sản phẩm

STT Tên Định dạng Mô tả

1 Danh sách các Checkbox Người dùng chọn các danh mục danh mục

2 Danh sách màu Checkbox Người dùng chọn các màu sắc sắc

3 Các hình ảnh của Image Người dùng nhấn hình ảnh để xem hình sản phẩm ảnh rõ hơn trên hình lớn

4 Tên sản phẩm Link Người dùng nhấn để vào trang chi tiết sản phẩm của sản phẩm đó

3.5.1.5 Giao diện chi tiết sản phẩm

Hình 3.38 Giao diện chi tiết sản phẩm Bảng 3.57 Mô tả giao diện chi tiết sản phẩm

STT Tên Định dạng Mô tả

1 - Button Nhấn để số lượng sản phẩm giảm 1

2 + Button Nhấn để số lượng sản phẩm tăng 1

3 Số lượng sản Text Nhập số lượng sản phẩm muốn mua phẩm

4 Thêm vào giỏ Button Nhấn để thêm sản phẩm vào giỏ hàng hàng

5 Chọn màu Image Người dùng chọn màu

6 Chọn size Button Người dùng chọn size

7 Các hình ảnh của Image Người dùng nhấn chọn hình để hiển thị rõ sản phẩm hơn trên hình chính

3.5.1.6 Giao diện thông tin cá nhân người dùng

Hình 3.39 Giao diện thông tin cá nhân người dùng Bảng 3.58 Mô tả giao diện chi tiết sản phẩm

STT Tên Định dạng Mô tả

1 Họ và tên Text Hiện thị Họ và tên

2 Email Text Hiển thị Email

3 Số điện thoại Text Hiển thị số điện thoại

4 Ngày sinh Date Hiện thị ngày sinh

5 Giới tính ComboBox Hiển thị giới tính

6 Cập nhập thông tin Button Nhấn để cập nhật thông tin người dùng

7 Chọn hình ảnh Button Chọn hỉnh ảnh để thay đổi ảnh đại diện

8 Mật khẩu cũ Text Nhập mật khẩu cũ

9 Mật khẩu mới Text Người dùng nhập mật khẩu mới

10 Nhập lại mật khẩu Text Người dùng nhập lại mật khẩu mới mới

11 Cập nhật mật khẩu Button Khi bấm sẽ tiến hành cập nhật mật khẩu mới cho người dùng.

3.5.1.7 Giao diện lịch sử mua hàng

Hình 3.40 Giao diện danh sách lịch sử mua hàng Bảng 3.59 Mô tả giao diện lịch sử mua hàng

STT Tên Định dạng Mô tả

1 Chi tiết Button Nhấn để xem chi tiết đơn hàng

2 Xem thêm Button Nhấn để hiển thị thêm nhiều đơn hàng đã mua

3 Trạng thái Button Nhấn để hiển thị đơn hàng theo trạng thái

3.5.1.8 Giao diện chi tiết lịch sử mua hàng

Hình 3.41 Giao diện chi tiết đơn hàng Bảng 3.60 Mô tả giao diện chi tiết đơn hàng

STT Tên Định dạng Mô tả

1 Trở về Button Nhấn để trở về trang lịch sử mua hàng

3.5.1.9 Giao diện danh sách địa chỉ

Hình 3.42 Danh sách địa chỉ Hình 3.43 Mô tả giao diện danh sách địa chỉ

STT Tên Định dạng Mô tả

1 Chỉnh sửa địa chỉ Button Nhấn để chuyển sang trang chỉnh sửa địa chỉ đó

2 Xóa địa chỉ Button Nhấn để xóa địa chỉ đó

3 Xem thêm Button Nhấn để xem thêm địa chỉ đã lưu

4 Thêm địa chỉ mới Button Nhấn để chuyển sang trang thêm địa chỉ mới

3.5.1.10 Giao diện thêm địa chỉ mới

Hình 3.44 Giao diện thêm địa chỉ mới Bảng 3.61 Mô tả giao diện thêm địa chỉ

STT Tên Định dạng Mô tả

1 Tỉnh/Thành Combobox Người dùng chọn tỉnh, thành phố phố

2 Quận/Huyện Combobox Người dùng chọn quận, huyện

3 Xã/Phường Combobox Người dùng chọn xã, phường

4 Địa chỉ Text Người dùng nhập địa chỉ

5 Họ và tên Text Người dùng nhập họ và tên

6 Số điện Text Người dùng nhập số điện thoại thoại

7 Lưu Button Người dùng nhấn Lưu để lưu thông tin địa chỉ

8 Hủy Button Người dùng nhấn hủy

9 Thông tin Button Người dùng nhấn để chuyển sang trang thông tài khoản tin tài khoản

10 Lịch sử mua Button Người dùng nhấn để chuyển sang trang Lịch sử hàng mua hàng

11 Danh sách Button Người dùng nhấn để chuyển sang trang quản lý địa chỉ các địa chỉ

12 Đăng xuất Button Người dùng nhấn để chuyển đăng xuất tài khoản

Hình 3.45 Giao diện giỏ hàng Bảng 3.62 Mô tả giao diện giỏ hàng

STT Tên Định dạng Mô tả

1 - Button Nhấn để giảm số lượng là 1

2 + Button Nhấn để tăng số lượng là 1

3 Số lượng Text Nhập số lượng mong muốn sản phẩm

4 Xóa sản Button Xóa sản phẩm khỏi giỏ hàng phẩm

5 Cập nhập Button Cập nhật lại giỏ hàng sau khi thực hiện thao tác giỏ hàng chỉnh sửa số lượng

6 Thanh Button Chuyển sang trang thanh toán toán

3.5.1.12 Giao diện chọn địa chỉ thanh toán

Hình 3.46 Giao diện chọn địa chỉ thanh toán Bảng 3.63 Mô tả giao diện chọn địa chỉ thanh toán

STT Tên Định dạng Mô tả

1 Trở về giỏ hàng Button Quay lại trang giỏ hàng

2 Danh sách địa Radio Button Chọn địa chỉ trong danh sách địa chỉ chỉ

3 Giao đến địa chỉ Button Nhấn để xác nhận chọn địa chỉ đã được đã chọn chọn sẵn

4 Giao đến địa chỉ Button Nhấn để xác nhận thêm và chọn địa chỉ đã chọn mới thêm làm địa chỉ giao hàng

Hình 3.47 Giao diện thanh toán Bảng 3.64 Mô tả giao diện thanh toán

STT Tên Định dạng Mô tả

1 Phương thức vận chuyển Radio Button Chọn phương thức vận chuyển

2 Phương thức thanh toán Radio Button Chọn phương thức thanh toán

3 Ghi chú đơn hàng Text Người dùng nhập ghi chú nếu họ muốn

4 Thanh toán Button Chọn thanh toán để đặt hàng

3.5.1.14 Giao diện kết quả đặt hàng

Hình 3.48 Giao diện kết quả đặt hàng

STT Tên Định dạng Mô tả

1 Tiếp tục mua sắm Button Quay về trang chủ

Bảng 3.65 Mô tả giao diện kết quả thanh toán

3.5.1.15 Giao diện “Quên mật khẩu”

Hình 3.50 Giao diện quên mật khẩu – 1

Bảng 3.27 Mô tả giao diện quên mật khẩu - 1

STT Tên Định dạng Mô tả

1 Số điện thoại, email Text Nhập số điện thoại hoặc gmail

2 Đặt lại mật khẩu Button Nhấn nút để đặt lại mật khẩu

3 Về trang đăng nhập Button Quay lại trang đăng nhập

Hình 3.51 Giao diện quên mật khẩu -2 Bảng 3.28 Mô tả giao diện quên mật khẩu - 2

STT Tên Định dạng Mô tả

1 Mở hộp thư điện Button Chuyển đến hộp thư điện tử gmail tử

Hình 3.52 Giao diện Quên mật khẩu – 3 Bảng 3.29 Mô tả giao diện quên mật khẩu – 3

STT Tên Định dạng Mô tả

1 Mật khẩu mới Text Nhập mật khẩu mới

2 Nhập lại mật khẩu mới Text Nhập lại mật khẩu mới

3 Đặt lại mật khẩu Button Nhấn để đặt lại mật khẩu

3.5.1.16 Giao diện “Đánh giá sản phẩm”

Hình 3.52 Giao diện Quên mật khẩu – 3 Bảng 3.29 Mô tả giao diện quên mật khẩu – 3

STT Tên Định dạng Mô tả

1 Sao Button Nhập số sao đánh giá

2 Nhận xét Text Lời nhận xét của khách hàng

3 Đánh giá Button Nút để gửi lời đánh giá

3.5.2 Màn hình giao diện phía quản trị viên

Sơ đồ luồng màn hình dành cho phân quyền quản trị viên.

Hình 3.49 Sơ đồ luồng cho bên quản trị viên

3.5.2.1 Giao diện trang điều khiển

Hình 3.50 Giao diện bảng điều khiển

Bảng 3.66 Mô tả giao diện điều khiển

STT Tên Định Mô tả dạng

1 Bảng điều khiển Button Chọn để vào trang bảng điều khiển

2 Tất cả đơn hàng Button Chọn để vào trang Quản lý đơn hàng

3 Đang chờ xử lý Button Chọn để vào trang các đơn hàng đang chờ xử lý

4 Đã xử lý Button Chọn để vào trang các đơn hàng đã xử lý

5 Đã thanh toán Button Chọn để vào trang các đơn hàng đã thanh toán

6 Đã hủy Button Chọn để vào trang các đơn hàng đã hủy

7 Sản phẩm Button Chọn để chuyển qua trang Quản lý sản phẩm

8 Phân loại Button Chọn để chuyển qua trang Quản lý các danh mục

9 Màu sắc Button Chọn để chuyển qua trang Quản lý thuộc tính màu sắc

10 Kích cỡ Button Chọn để chuyển qua trang Quản lý thuộc tính kích cỡ

11 Thống kê Button Chọn để chuyển qua trang thống kê

3.5.2.2 Giao diện trang danh sách đơn hàng

Hình 3.51 Giao diện danh sách đơn hàng Bảng 3.67 Mô tả giao diện danh sách đơn hàng

STT Tên Định dạng Mô tả

1 Chi tiết Button Nhấn nút để vào trang chi tiết đơn hàng đó

2 Trở về Button Nhấn nút để quay trở về trang trước

3 Số trang Button Chọn số trang của danh sách đơn hàng

3.5.2.3 Giao diện chi tiết đơn hàng

Hình 3.52 Giao diện chi tiết đơn hàng Bảng 3.68 Mô tả giao diện chi tiết đơn hàng

STT Tên Định dạng Mô tả

1 Số trang Button Chọn số trang của danh sách sản phẩm

2 Xác nhận đơn hàng Button Xác nhận đơn hàng do người dùng đặt hàng

3 Hủy đơn hàng Button Nhấn để hủy đơn hàng

4 Chi tiết Button Chọn để xem chi tiết người dùng đó

3.5.2.4 Giao diện danh sách sản phẩm

Hình 3.53 Giao diện danh sách sản phẩm Bảng 3.69 Mô tả giao diện danh sách sản phẩm

STT Tên Định dạng Mô tả

1 Sửa Button Nhấn để chuyển qua trang sửa thông tin sản phẩm

2 Xóa Button Nhấn để xóa sản phẩm

3 Thêm sản phẩm Button Nhấn để chuyển qua trang thêm sản phẩm

3.5.2.5 Giao diện chi tiết sản phẩm

Hình 3.54 Giao diện danh sách sản phẩm - 1

Hình 3.55 Giao diện chi tiết sản phẩm – 2 Bảng 3.70 Mô tả giao diện chi tiết sản phẩm – 1

STT Tên Định dạng Mô tả

1 Tiêu đề Text Nhập tiêu đề sản phẩm

2 Loại sản phẩm Combobox Chọn loại sản phẩm

3 Giới tính Combobox Chọn loại giới tính

4 Barcode Text Nhập mã sản phẩm

5 Màu, kiểu dáng Combobox Chọn loại màu

6 Size Combobox Chọn kiểu size

7 Số lượng Text Nhập số lượng

8 Hình ảnh Image Chọn để thêm hình ảnh

9 Thêm biến thể Button Chọn để xuất hiện biến thể mới bao gồm các thuộc tính màu, size và số lượng

10 Giá nhập Text Nhập giá tiền nhập của sản phẩm

11 Giá bán Text Nhập giá bán của sản phẩm

12 Mô tả Text Nhập mô tả, ghi chú của sản phẩm đó

Hình 3.57 Giao diện chi tiết sản phẩm – 4 Bảng 3.71 Mô tả giao diện chi tiết sản phẩm -2

STT Tên Định dạng Mô tả

1 Choose File Button Upload hình ảnh từ máy tính lên

2 Hình ảnh Image Hiển thị hình ảnh chính

3 Choose Files Button Upload hình ảnh từ máy tính lên

4 Danh sách hình ảnh Image Hiển thị hình ảnh phụ của sản phẩm đó

5 Hủy Button Chọn để hủy bỏ tác vụ đang làm và trở về trang quản lý sản phẩm

6 Lưu Button Nhấn để lưu sản phẩm vào cơ sở dữ liệu

3.5.2.6 Giao diện danh sách phân loại

Hình 3.58 Giao diện danh sách phân loại

STT Tên Định dạng Mô tả

1 Sửa Button Chọn sửa để chuyển sang trang chi tiết phân loại

2 Xóa Button Chọn để xóa “phân loại”

3 Số trang Button Dùng để phân trang

4 Thêm phân loại mới Button Nhấn để mở hộp thoại thêm phân loại mới

3.5.2.7 Giao diện chi tiết phân loại

Hình 3.59 Giao diện chi tiết phân loại

Bảng 3.73 Mô tả giao diện chi tiết phân loại

STT Tên Định dạng Mô tả

1 Tên danh mục Text Nhập tên danh mục

2 Mô tả Text Nhập mô tả của danh mục đó

3 Danh mục lớn Combobox Chọn các loại danh mục lớn (nếu có)

4 Hủy Button Chọn hủy để hủy thao tác hiện thời đang làm và quay về trang quản lý danh mục

5 Lưu Button Nhấn để lưu các thông tin vào database

3.5.2.8 Giao diện thêm phân loại

Hình 3.60 Giao diện thêm phân loại

STT Tên Định dạng Mô tả

1 Tên loại Text Nhập tên phân loại

2 Mô tả Text Nhập mô tả của phân loại

3 Danh mục lớn Combobox Chọn danh mục lớn

4 Hủy Button Chọn để tắt hộp thoại

5 Lưu Button Nhấn để Lưu các thông tin vào database

Bảng 3.74 Mô tả giao diện thêm phân loại

3.5.2.9 Giao diện danh sách màu sắc

Hình 3.61 Giao diện danh sách màu sắc/kiểu dáng Bảng 3.75 Mô tả giao diện màu sắc/kiểu dáng

STT Tên Định dạng Mô tả

1 Sửa Button Chọn sửa để chuyển sang trang chi tiết màu sắc

2 Xóa Button Chọn để xóa màu đó

3 Thêm màu Button Chọn để mở hộp thoại thêm màu sản phẩm mới

3.5.2.10 Giao diện chi tiết màu sắc/kiểu dáng

Hình 3.62 Giao diện chi tiết màu sắc Bảng 3.76 Mô tả giao diện chi tiết màu sắc

STT Tên Định dạng Mô tả

1 Tên màu Text Nhập tên màu

2 Mã màu Color Chọn màu cần muốn

3 Hủy Button Nhấn để hủy thao tác hiện hành và quay lại trang quản lý màu sắc

4 Lưu Button Nhấn để lưu các thông tin vào database

3.5.2.11 Giao diện thêm màu sắc

Hình 3.63 Giao diện thêm màu sắc Bảng 3.77 Mô tả giao diện thêm màu sắc

STT Tên Định dạng Mô tả

1 Tên màu Text Nhập tên màu

2 Mã màu Text Hiển thị mã màu

3 Hình ảnh màu Color Picker Chọn màu mong muốn

4 Hủy Button Nhấn để hủy thao tác hiện hành và quay lại trang quản lý màu

5 Lưu Button Nhấn để lưu thông tin vào database

3.5.2.12 Giao diện danh sách kích cỡ

Hình 3.64 Giao diện danh sách kích cỡ Bảng 3.78 Mô tả giao diện danh sách kích cỡ

STT Tên Định dạng Mô tả

1 Sửa Button Chọn sửa để chuyển sang trang chi tiết size

2 Xóa Button Chọn để xóa size đó

3 Thêm kích cỡ mới Button Chọn để mở hộp thoại thêm size

4 Số trang Button Dùng để phân trang

3.5.2.13 Giao diện chi tiết kích cỡ

Hình 3.65 Giao diện chi tiết kích cỡ Bảng 3.79 Mô tả giao diện chi tiết kích cỡ

STT Tên Định dạng Mô tả

1 Tên size Text Nhập tên size

2 Mô tả Text Nhập mô tả

3 Hủy Button Nhấn hủy thao tác hiện hành và quay lại trang quản lý size

4 Lưu Button Nhấn để lưu thông tin vào database

3.5.2.14 Giao diện thêm kích cỡ

Hình 3.66 Giao diện thêm kích cỡ Bảng 3.80 Mô tả giao diện thêm kích cỡ

STT Tên Định dạng Mô tả

1 Tên kích cỡ Text Nhập tên kích cỡ

2 Mô tả Text Nhập mô tả

3 Hủy Button Nhấn để hủy thao tác hiện hành và quay lại trang quản lý size

4 Lưu Button Nhấn để lưu thông tin vào database

3.5.2.15 Giao diện trang thống kê

Hình 3.67 Giao diện thống kê Bảng 3.81 Mô tả giao diện thống kê

STT Tên Định dạng Mô tả

1 Doanh thu Text Tổng doanh thu của cửa hàng

2 Số người dùng Text Tổng số người dùng

3 Sản phẩm Text Tổng số sản phẩm đang hiện hữu

4 Đơn hàng Text Tổng số đơn hàng

5 Đã bán Text Tổng số đơn hàng đã bán

6 Đơn chưa xử lý Text Tổng số đơn hàng chưa xử lý

7 Đơn đã xử lý Text Tổng số đơn hàng đã xử lý

8 Đơn đã hoàn Text Tổng số đơn hàng đã hoàn thành thành

9 Đơn đã hủy Text Tổng số đơn hàng đã hủy

10 Biểu đồ thống kê Biểu đồ thống kê các đơn hàng trong 7 ngày gần nhất

11 Tổng quan đơn Biểu đồ tổng quan các đơn hàng hàng

3.5.2.16 Giao diện danh sách người dùng

Hình 3.68 Giao diện danh sách người dùng Bảng 3.82 Mô tả giao diện danh sách người dùng

STT Tên Định dạng Mô tả

1 Trạng thái Button Nhấn để vô hiệu hóa hoặc kích hoạt lại tài khoản

2 Chi tiết Button Nhấn để xem thông tin chi tiết của khách hàng

3 Số trang Button Dùng để phân trang

4 Họ và tên Text Nhập tên để tiến hành thêm thông tin bộ lọc thông tin người dùng theo họ tên.

5 Số điện thoại Text Nhập tên để tiến hành thêm thông tin bộ lọc thông tin người dùng theo số điện thoại.

6 Email Text Nhập tên để tiến hành thêm thông tin bộ lọc thông tin người dùng theo email.

7 Giới tính ComboBox Nhập tên để tiến hành thêm thông tin bộ lọc thông tin người dùng theo giới tính.

8 Hiển thị ComboBox Chọn số lượng thông tin người dùng hiển thị trên một trang.

3.5.2.17 Giao diện chi tiết người dùng

Hình 3.69 Giao diện chi tiết người dùng Bảng 3.83 Mô tả giao diện chi tiết người dùng

STT Tên Định dạng Mô tả

1 Trạng thái Button Nhấn để vô hiện hóa hoặc kích hoạt lại tài khoản

2 Cập nhập quyền Button Cập nhật quyền hạn của tài khoản

3 Trở về Button Nhấn để quay lại trang quản lý người dùng

3.5.2.18 Giao diện trang đăng nhập

Hình 3.70 Giao diện trang đăng nhập của quản trị viên Bảng 3.84 Mô tả giao diện đăng nhập của quản trị viên

STT Tên Định dạng Mô tả

1 Tên tài khoản Text Nhập tên tài khoản

2 Mật khẩu Text Nhập mật khẩu

3 Đăng nhập Button Nhấn để tiến hành đăng nhập

3.5.2.19 Thiết lập giao diện và thông tin người dùng

Hình 3.71 Giao diện chỉnh giao diện và tab thông tin các nhân Bảng 3.85 Mô tả giao diện chọn màu giao diện và tab thông tin cá nhân

STT Tên Định dạng Mô tả

1 Bánh răng Button Nhấn để hiển thị giao diện thiết lập

2 Giao diện Radio Chọn giao diện sáng hoặc tối

3 Màu giao Button Nhấn để chọn màu giao diện diện

4 Đăng xuất Button Nhấn để đăng xuất tài khoản và trở về trang đăng nhập của admin

3.5.2.20 Giao diện danh sách đánh giá

Hình 3.72 Hình giao diện đánh giá theo sản phẩm Bảng 3.86 Mô tả giao diện danh sách đánh giá sản phẩm

STT Tên Định dạng Mô tả

1 Chi tiết Button Bấm để hiển thị trang chi tiết đánh giá

Hình 3.78 Giao diện danh sách các đánh giá Bảng 3.52 Mô tả giao diện danh sách đánh giá

STT Tên Định dạng Mô tả

1 Tên khách hàng Link Vào trang thông tin của khách hàng

2 Tên sản phẩm Link Vào trang thông tin của sản phẩm

3 Số sao Hình ảnh Hiển thị số lượng sao đánh giá của khách hàng

4 Bình luận Text Hiển thị bình luận của khách hàng

5 Chi tiết Button Bấm để hiển thị trang chi tiết đánh giá

6 Số trang Button Phân trang

3.5.2.21 Giao diện chi tiết đánh giá

Hình 3.79 Giao diện chi tiết đánh giá Bảng 3.53 Mô tả giao chi tiết đánh giá

STT Tên Định dạng Mô tả

1 Vô hiệu hóa Button Vô hiệu hóa đánh giá của khách hàng

2 Sao Hình ảnh Hiển thị số sao của khách hàng

3 Tên khách hàng Link Vào trang thông tin của khách hàng

4 Tên sản phẩm Link Vào trang thông tin của sản phẩm

5 Bình luận Text Hiển thị bình luận của khách hàng

CÀI ĐẶT VÀ KIỂM THỬ

KIỂM THỬ

ƯU ĐIỂM

4 Đề nghị cho bảo vệ hay không?

TP Hồ Chí Minh, ngày tháng năm 2023

Giáo viên hướng dẫn (Ký và ghi rõ họ tên) ĐH SƯ PHẠM KỸ THUẬT TP HCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA CÔNG NGHỆ THÔNG TIN Độc lập – Tự do – Hạnh phúc

PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN

Họ và tên sinh viên 1: Phạm Đinh Quốc Hòa

Họ và tên sinh viên 2: Trần Anh Tiến

Ngành: Công nghệ Thông tin

Tên đề tài: Xây dựng website bán quần áo sử dụng Spring Boot và

ReactJS Họ và tên Giáo viên phản biện: ThS Mai Anh Thơ NHẬN XÉT

1 Về nội dung đề tài và khối lượng thực hiện

4 Đề nghị cho bảo vệ hay không?

TP Hồ Chí Minh, ngày tháng năm 2023

Giáo viên phản biện (Ký và ghi rõ họ tên)

Lời đầu tiên, nhóm xin phép được gửi lời cảm ơn chân thành đến với Khoa Công Nghệ Thông Tin – Trường Đại Học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh đã tạo điều kiện cho nhóm chúng em được trau dồi, học tập và phát triển nền tảng kiến thức vững chắc để thực hiện đề tài này.

Bên cạnh đó, nhóm chúng em xin gửi đến thầy Lê Văn Vinh lời cảm ơn chân thành và sâu sắc nhất Thầy đã tận tâm hướng dẫn nhiệt tình và đưa ra những góp ý quý báu cho nhóm chúng em trong suốt quá trình từ lúc bắt đầu cũng như kết thúc đề tài này.

Nhờ có những nền tảng kiến thức chuyên ngành vững chắc cộng thêm với những kinh nhiệm và yêu cầu thực tế ngoài xã hội thông qua việc học ở trường và thực tập ở các công ty Tập thể các thầy cô Khoa Công Nghệ Thông Tin và đặc biệt thầy Lê Văn Vinh đã đem đến cho chúng em một khối lượng kiến thức và kinh nghiệm khổng lồ về chuyên ngành và công việc trong tương lai Đặc biệt điều này đã giúp và thôi thúc chúng em hoàn thành được đề tài Đây sẽ là hành trang vô cùng lớn của chúng em trước khi bước ra một cuộc sống mới.

Tuy nhiên lượng kiến thức là vô tận và với khả năng hạn hẹp chúng em đã rất cố gắng để hoàn thành một cách tốt nhất Chính vì vậy việc xảy ra những thiếu sót là điều khó có thể tránh khỏi Chúng em hi vọng nhận được sự góp ý tận tình của quý thầy (cô) qua đó chúng em có thể rút ra được bài học kinh nghiệm và hoàn thiện và cải thiện nâng cấp lại sản phẩm của mình một cách tốt nhất có thể.

Chúng em xin chân thành cảm ơn!

Trường Đại học Sư phạm Kỹ thuật TP.HCM

Khoa Công nghệ Thông tin ĐỀ CƯƠNG LUẬN VĂN TỐT NGHIỆP

Họ và tên sinh viên 1: Phạm Đinh Quốc Hòa

Họ và tên sinh viên 2: Trần Anh Tiến

Thời gian làm luận văn: Từ 13/02/2023 đến 10/07/2023.

Chuyên ngành: Công nghệ phần mềm

Tên luận văn: Xây dựng website bán quần áo sử dụng Spring Boot và ReactJS Giáo viên hướng dẫn: TS Lê Văn Vinh

Nhiệm vụ của luận văn:

- Tìm hiểu về các công nghệ: ReactJS, JSON Web Token, Spring Boot.

- Sử dụng Spring Boot để xây dưng Back-end, xây dựng các API cho các module của hệ thống.

- Sử dụng MySQL làm hệ quản trị cơ sở dữ liệu để lưu trữ dữ liệu của hệ thống.

- Ứng dụng JSON Web Token để xác thực và phân quyền cho hệ thống API cho từng người dùng.

- Ứng dụng thư viện ReactJS để xây dựng và xử lý giao diện Website cho người dùng Đề cương:

1 Tính cấp thiết của đề tài

4 Mục tiêu của đề tài

1.1 Các công nghệ sử dụng ở front–end 1.2 Các công nghệ sử dụng ở back–end Chương

2 Khảo sát hiện trạng và mô hình hóa yêu cầu

2.2 Kiến trúc chung của hệ thống

2.4 Mô hình hóa yêu cầu

Chương 3 Thiết kế phần mềm

3.3 Thiết kế cơ sở dữ liệu

Chương 4 Cài đặt và kiểm thử

Ngày đăng: 11/12/2023, 08:47

HÌNH ẢNH LIÊN QUAN

Hình 1.2. Hình ảnh trang chủ của trang Hardmode - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 1.2. Hình ảnh trang chủ của trang Hardmode (Trang 22)
Hình 2.10. Hình Áp dụng JWT trong việc sinh ra token - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 2.10. Hình Áp dụng JWT trong việc sinh ra token (Trang 40)
Hình 3.2. Sơ đồ usecase phía người dùng - 2 - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.2. Sơ đồ usecase phía người dùng - 2 (Trang 44)
Hình 3.3. Sơ đồ Use case bên phía admin - 1 - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.3. Sơ đồ Use case bên phía admin - 1 (Trang 45)
Hình 3.4. Sơ đồ Use case phía admin - 2 - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.4. Sơ đồ Use case phía admin - 2 (Trang 46)
Hình 3.5. Sequence “Đăng nhập” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.5. Sequence “Đăng nhập” (Trang 78)
Hình 3.7. Sequence Chức năng “đổi mật khẩu” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.7. Sequence Chức năng “đổi mật khẩu” (Trang 79)
Hình 3.8. Sequence “Thêm địa chỉ nhận hàng” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.8. Sequence “Thêm địa chỉ nhận hàng” (Trang 80)
Hình 3.9. Sequence “Sửa địa chỉ nhận hàng” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.9. Sequence “Sửa địa chỉ nhận hàng” (Trang 81)
Hình 3.11. Sequence “Thêm sản phẩm vào giỏ hàng” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.11. Sequence “Thêm sản phẩm vào giỏ hàng” (Trang 82)
Hình 3.13. Sequence “Chỉnh sửa thông tin tài khoản” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.13. Sequence “Chỉnh sửa thông tin tài khoản” (Trang 83)
Hình 3.16. Sequence “Sửa thuộc tính Size” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.16. Sequence “Sửa thuộc tính Size” (Trang 85)
Hình 3.18. Sequence “Thêm thuộc tính màu” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.18. Sequence “Thêm thuộc tính màu” (Trang 87)
Hình 3.22. Sequence “Chỉnh sửa danh mục” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.22. Sequence “Chỉnh sửa danh mục” (Trang 91)
Hình 3.23. Sequence “Xóa danh mục” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.23. Sequence “Xóa danh mục” (Trang 92)
Hình 3.24. Sequence "Thêm sản phẩm" - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.24. Sequence "Thêm sản phẩm" (Trang 93)
Hình 3.26. Sequence "Xóa sản phẩm" - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.26. Sequence "Xóa sản phẩm" (Trang 94)
Hình 3.27. Sequence “Xác nhận đơn hàng” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.27. Sequence “Xác nhận đơn hàng” (Trang 95)
Hình 3.28. Sequence “Hủy đơn hàng” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.28. Sequence “Hủy đơn hàng” (Trang 96)
Hình 3.29. Sequence “Tìm kiếm” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.29. Sequence “Tìm kiếm” (Trang 97)
Hình 3.34 Sequence “Áp dụng voucher” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.34 Sequence “Áp dụng voucher” (Trang 98)
Hình 3.34 Sequence “Thêm mới voucher” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.34 Sequence “Thêm mới voucher” (Trang 99)
Hình 3.34 Sequence “Chỉnh sửa voucher” - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.34 Sequence “Chỉnh sửa voucher” (Trang 100)
Hình 3.31. Database Design - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.31. Database Design (Trang 102)
Hình 3.34. Giao diện trang chủ Bảng 3.53. Mô tả màn hình trang chủ - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.34. Giao diện trang chủ Bảng 3.53. Mô tả màn hình trang chủ (Trang 116)
Hình 3.41. Giao diện chi tiết đơn hàng Bảng 3.60. Mô tả giao diện chi tiết đơn hàng - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.41. Giao diện chi tiết đơn hàng Bảng 3.60. Mô tả giao diện chi tiết đơn hàng (Trang 123)
Hình 3.63. Giao diện thêm màu sắc Bảng 3.77. Mô tả giao diện thêm màu sắc - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.63. Giao diện thêm màu sắc Bảng 3.77. Mô tả giao diện thêm màu sắc (Trang 145)
Hình 3.72. Hình giao diện đánh giá theo sản phẩm Bảng 3.86. Mô tả giao diện danh sách đánh giá sản phẩm - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.72. Hình giao diện đánh giá theo sản phẩm Bảng 3.86. Mô tả giao diện danh sách đánh giá sản phẩm (Trang 154)
Hình 3.78. Giao diện danh sách các đánh giá Bảng 3.52. Mô tả giao diện danh sách đánh giá - Đồ án xây dựng website bán quần áo sử dụng spring boot và reactjs
Hình 3.78. Giao diện danh sách các đánh giá Bảng 3.52. Mô tả giao diện danh sách đánh giá (Trang 155)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w