21 Commits

Author SHA1 Message Date
basketballcantho e9909784c7 chore: update Oracle database service name to FREEPDB1 in docker-compose.yml 2026-06-28 21:48:45 +07:00
basketballcantho 554ef1d15d chore: configure app service to wait for oracle database health check 2026-06-28 21:43:02 +07:00
basketballcantho 39443b95ab chore: update oracle data volume to use a named volume instead of a host path 2026-06-28 21:34:31 +07:00
basketballcantho 23134517ce update index.html 2026-06-28 21:28:38 +07:00
basketballcantho 47ce0da13a Update logo and docker compose configuration 2026-06-28 20:06:37 +07:00
basketballcantho d4d9543a98 build project 2026-06-28 17:28:16 +07:00
basketballcantho 0326535eb6 Phần Post đã thiết kế xong chỉ cần sửa lại tempalte nữa là được 2026-06-28 16:25:51 +07:00
basketballcantho 38d6b8234a Hoan thanh chuc nang Page 2026-06-25 21:34:36 +07:00
basketballcantho 6fe098bc5b hoàn thành block editor của Pages 2026-06-25 16:38:03 +07:00
basketballcantho 5c644545b8 init 2 2026-06-25 09:36:05 +07:00
basketballcantho d3fef38796 init database to pve machine 2026-06-25 09:33:27 +07:00
NAS\NASPC 381115a443 update các file thiết kế mới cho dự án 2026-06-23 15:21:40 +07:00
NAS\NASPC 6eff207bbc update file pdf thiết kế 2026-06-20 16:32:47 +07:00
NAS\NASPC 9439662328 cập nhật thêm 1 số thiết kế 2026-06-20 16:08:11 +07:00
NAS\NASPC 9b6e188df8 realease lần 1 2026-06-09 08:09:51 +07:00
NAS\NASPC ee6b2a8919 update 02 2026-06-08 10:52:47 +07:00
NAS\NASPC 0f551bd5c7 fix remain html code 01 2026-06-07 16:06:50 +07:00
NAS\NASPC 109c09d2a3 update backgrounnd video for header.html 2026-06-05 09:49:06 +07:00
NAS\NASPC 1fd3b689c8 layout cuối cùng, chỉ chỉnh hình ảnh nữa thôi 2026-06-04 15:10:12 +07:00
NAS\NASPC bab7e02b02 init backend and sbadmin 2026-06-03 14:35:31 +07:00
NAS\NASPC 69e8b767ff Initial version of sisvietnamvn generated by generator-jhipster@9.1.0 2026-06-03 13:27:09 +07:00
801 changed files with 1559698 additions and 3433 deletions
+1
View File
@@ -0,0 +1 @@
.svn/
+21
View File
@@ -0,0 +1,21 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Debug (Launch) - SisvietnamvnApp",
"request": "launch",
"mainClass": "com.sisvietnamvn.web.SisvietnamvnApp",
"projectName": "sisvietnamvn",
"cwd": "${workspaceFolder}/sisvietnamvn_main",
"vmArgs": "-Dspring.profiles.active=dev"
},
{
"type": "java",
"name": "Debug (Attach) - Port 5005",
"request": "attach",
"hostName": "localhost",
"port": 5005
}
]
}
+11 -2
View File
@@ -1,4 +1,13 @@
{
"java.configuration.updateBuildConfiguration": "interactive",
"java.compile.nullAnalysis.mode": "automatic"
"java.compile.nullAnalysis.mode": "automatic",
"jdk.jdkhome": "C:\\Program Files\\Eclipse Adoptium\\jdk-21.0.11.10-hotspot",
"java.jdt.ls.java.home": "C:\\Program Files\\Eclipse Adoptium\\jdk-21.0.11.10-hotspot",
"java.configuration.runtimes": [
{
"name": "JavaSE-21",
"path": "C:\\Program Files\\Eclipse Adoptium\\jdk-21.0.11.10-hotspot",
"default": true
}
],
"java.configuration.updateBuildConfiguration": "interactive"
}
+69
View File
@@ -0,0 +1,69 @@
Dưới đây là danh sách đầy đủ toàn bộ các chức năng của trang quản trị WordPress (WordPress Admin Dashboard), được chia làm hai phần chính: Giao diện người dùng (UI/UX) và Các hàm PHP/APIs dành cho Lập trình viên để phát triển/tùy biến trang admin.
PHẦN 1: CÁC CHỨC NĂNG TRÊN GISAO DIỆN ADMIN (UI MENUS)
Đây là các chức năng mặc định xuất hiện ở thanh Menu bên trái (Sidebar) của trang quản trị:
Menu chính Menu con Chức năng chi tiết
1. Dashboard (Bảng điều khiển) Home Xem tổng quan trạng thái website (Site Health, số lượng bài viết/trang, bình luận gần đây, hoạt động viết nháp nhanh).
Updates Cập nhật phiên bản WordPress Core, Themes, Plugins và các gói dịch vụ ngôn ngữ.
2. Posts (Bài viết) All Posts Quản lý toàn bộ bài viết tin tức, blog, lọc theo ngày/chuyên mục.
Add New Soạn thảo bài viết mới bằng Block Editor (Gutenberg) hoặc Classic Editor.
Categories Tạo và quản lý các Chuyên mục (thư mục phân loại bài viết).
Tags Tạo và quản lý các Thẻ (nhãn từ khóa tìm kiếm nhanh).
3. Media (Thư viện) Library Quản lý toàn bộ hình ảnh, tài liệu (PDF, Docx), video, âm thanh đã tải lên.
Add New Tải tệp tin mới lên máy chủ.
4. Pages (Trang) All Pages Quản lý các trang tĩnh (ví dụ: Trang chủ, Trang liên hệ, Giới thiệu bệnh viện, Giờ làm việc...).
Add New Tạo trang tĩnh mới.
5. Comments (Bình luận) (Không có) Quản lý bình luận của người đọc (Phê duyệt, Trả lời, Đánh dấu Spam, Xóa tạm/Xóa vĩnh viễn).
6. Appearance (Giao diện) Themes Cài đặt, kích hoạt hoặc xóa các giao diện hiển thị của website.
Customize Chỉnh sửa giao diện trực quan theo thời gian thực (Header, Footer, Colors, Font, v.v.).
Widgets Quản lý các khối nội dung ở Sidebar hoặc Footer.
Menus Thiết kế menu điều hướng chính ở đầu trang và chân trang.
Theme File Editor Chỉnh sửa trực tiếp file code của giao diện (chỉ dùng cho lập trình viên).
7. Plugins (Gói mở rộng) Installed Plugins Quản lý, kích hoạt, vô hiệu hóa hoặc xóa các Plugin đang có trên hệ thống.
Add New Tìm kiếm và cài đặt Plugin mới từ thư viện WordPress.org hoặc upload file .zip.
Plugin File Editor Chỉnh sửa mã nguồn của các Plugin trực tiếp từ admin.
8. Users (Thành viên) All Users Quản lý danh sách toàn bộ tài khoản đăng ký trên hệ thống.
Add New Tạo tài khoản người dùng mới và chỉ định vai trò (Role).
Profile Chỉnh sửa thông tin cá nhân của tài khoản đang đăng nhập (đổi pass, ngôn ngữ hiển thị).
9. Tools (Công cụ) Available Tools Các công cụ hỗ trợ chuyển đổi dữ liệu.
Import / Export Nhập/Xuất toàn bộ bài viết, trang, media sang file .xml để sao lưu hoặc chuyển host.
Site Health Kiểm tra sức khỏe hệ thống (phiên bản PHP, MySQL, các lỗi bảo mật).
Export / Erase Personal Data Xuất hoặc xóa dữ liệu cá nhân của người dùng để tuân thủ luật bảo mật (GDPR).
10. Settings (Cài đặt) General Thiết lập tên website, câu khẩu hiệu, địa chỉ email admin, múi giờ, định dạng ngày tháng.
Writing Cấu hình mặc định khi soạn thảo văn bản và gửi bài viết qua email.
Reading Thiết lập trang chủ hiển thị, số lượng bài viết tối đa trên một trang blog, chặn công cụ tìm kiếm.
Discussion Cấu hình bình luận (yêu cầu phê duyệt, chặn từ ngữ nhạy cảm).
Media Cài đặt kích thước mặc định cho ảnh khi upload (Thumbnail, Medium, Large).
Permalinks Định dạng cấu trúc đường dẫn tĩnh (URL) tối ưu cho SEO (ví dụ: /post-name/).
Privacy Thiết lập trang chính sách bảo mật cho website.
PHẦN 2: CÁC HÀM PHP & HOOKS ĐỂ PHÁT TRIỂN TRANG ADMIN (DEVELOPER API)
Nếu bạn đang lập trình tùy biến trang admin (hoặc xây dựng CMS tương tự), WordPress cung cấp bộ API để tạo và kiểm soát trang admin sau:
1. Các hàm tạo Menu & Submenu trong Admin
add_menu_page(): Thêm một Menu chính mới (cấp cao nhất) ở thanh sidebar bên trái.
add_submenu_page(): Thêm một Menu con (Submenu) vào dưới một Menu chính bất kỳ.
Các hàm phái sinh viết nhanh (Helper functions):
add_options_page(): Thêm trang con vào menu Settings (Cài đặt).
add_theme_page(): Thêm trang con vào menu Appearance (Giao diện).
add_plugins_page(): Thêm trang con vào menu Plugins.
add_users_page(): Thêm trang con vào menu Users (Thành viên).
add_dashboard_page(): Thêm trang con vào menu Dashboard (Bảng điều khiển).
add_management_page(): Thêm trang con vào menu Tools (Công cụ).
2. Các Action Hooks quan trọng trong Admin
admin_menu: Chạy khi cấu trúc menu admin đang được khởi tạo. Đây là nơi bắt buộc để gọi các hàm add_menu_page() và add_submenu_page().
admin_init: Chạy khi trang admin được tải và khởi tạo. Thường dùng để đăng ký cấu hình (Settings API), kiểm tra quyền hoặc xử lý form gửi lên.
admin_enqueue_scripts: Hook chuẩn duy nhất để tải thêm file CSS và JavaScript tùy chỉnh vào trang quản trị (tránh làm ảnh hưởng đến các plugin khác).
admin_post_{action} & admin_post_nopriv_{action}: Xử lý các yêu cầu gửi Form (POST/GET) từ trang quản trị một cách an toàn.
3. Các hàm kiểm tra Phân quyền & Trạng thái
is_admin(): Kiểm tra xem trang hiện tại người dùng đang truy cập có thuộc phân hệ quản trị (backend /wp-admin/) hay không.
current_user_can( $capability ): Kiểm tra người dùng hiện tại có đủ quyền thực hiện hành động hay không (ví dụ: current_user_can('manage_options') để kiểm tra quyền Admin).
get_current_screen(): Lấy thông tin chi tiết về trang admin hiện tại đang hiển thị (ID, Base, Post Type).
4. Settings API (Quản lý và lưu trữ thiết lập)
register_setting(): Đăng ký một tùy chọn (option) mới trong cơ sở dữ liệu để lưu trữ cấu hình.
add_settings_section(): Tạo ra một vùng chứa (section) trên trang để gom nhóm các trường cài đặt.
add_settings_field(): Thêm một trường nhập liệu (Input, Checkbox, Select) vào vùng chứa đã tạo.
settings_fields() & do_settings_sections(): Các hàm render giao diện form cấu hình tự động và tạo mã bảo mật Token (Nonce).
TIP
Ứng dụng cho dự án Spring Boot hiện tại: Nếu bạn đang chuyển đổi hoặc xây dựng mới phân hệ Quản trị (Admin Panel) cho dự án website bệnh viện S.I.S Cần Thơ, bạn có thể ánh xạ các chức năng của WordPress như trên thành các Controller trong Spring Boot (ví dụ: @Controller @RequestMapping("/admin")), chia các chức năng quản lý thành các REST API và phân quyền truy cập thông qua Spring Security (tương đương với current_user_can trong WordPress).
Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
1. "Trust & Clean" (Xanh Da Trời & Trắng Sứ)
Đây là phong cách rất phổ biến cho các nền tảng y tế hiện đại, mang lại cảm giác sạch sẽ, công nghệ cao và đáng tin cậy.
Màu chủ đạo (Primary): Xanh Cerulean (#0077B6 hoặc #0284C7) - Sáng và thân thiện hơn màu xanh Navy truyền thống.
Màu phụ trợ (Secondary): Xanh ngọc bích nhạt (#48CAE4).
Màu nền (Background): Trắng sứ (#FFFFFF) và Xám nhạt (#F8FAFC).
Màu nhấn (Accent): Cam nhạt hoặc Vàng rực (#F59E0B) cho các nút Call-to-Action (Đặt lịch khám, Cấp cứu).
2. "Healing & Nature" (Xanh Mòng Két & Xanh Lá Nhạt)
Gam màu này mang lại cảm giác chữa lành, bình yên, rất phù hợp với môi trường chăm sóc sức khỏe.
Màu chủ đạo: Xanh mòng két / Teal (#0F766E hoặc #008080).
Màu phụ trợ: Xanh lá cây nhạt (Mint Green - #A7F3D0).
Màu nền: Trắng kem (#FAFAFA) giúp giao diện không bị chói mắt.
Màu nhấn: San hô (Coral - #FF7F50) để tạo điểm nhấn ấm áp, xóa đi sự lạnh lẽo của bệnh viện.
3. "Modern Academic" (Tím Than & Xanh Cyan)
Vì đây không chỉ là bệnh viện mà còn là Đại học, gam màu tím than/xanh đen mang lại vẻ học thuật, nghiên cứu chuyên sâu, kết hợp với màu xanh Cyan trẻ trung.
Màu chủ đạo: Tím than / Midnight Blue (#1E293B hoặc #172554).
Màu phụ trợ: Xanh dương sáng (Cyan - #06B6D4).
Màu nền: Xám trắng (#F1F5F9).
Màu nhấn: Vàng kim (Gold - #EAB308) - giữ lại một chút yếu tố truyền thống của ĐHYD.
4. "Soft & Accessible" (Xanh Pastel & Xám Slate)
Thiết kế tập trung vào tính tiếp cận, dễ nhìn cho mọi lứa tuổi (đặc biệt là người lớn tuổi khi dùng web bệnh viện).
Màu chủ đạo: Xanh dương nhạt / Soft Blue (#3B82F6).
Màu chữ chính: Xám đậm Slate (#334155) thay vì màu đen tuyền để giảm độ tương phản gắt.
Màu nền: Trắng tinh (#FFFFFF).
Màu nhấn: Hồng y tế / Đỏ nhạt (#EF4444) dùng riêng cho các cảnh báo, cấp cứu hoặc thông báo quan trọng.
Bạn cảm thấy ấn tượng với phong cách nào nhất trong số trên? Nếu bạn muốn, tôi có thể dùng công cụ để thử lên ý tưởng giao diện (Generate Image) hoặc áp dụng màu mới này vào mã nguồn CSS của bạn! Bạn chỉ cần cho tôi biết bạn đang lưu trữ mã nguồn ở đâu nhé.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
+5725
View File
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
View File
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 584 KiB

+27
View File
@@ -0,0 +1,27 @@
# Phân Tích Cách Phối Màu (Color Scheme) Của Trang Chủ UMass Amherst
Dựa vào giao diện trang chủ của Đại học UMass Amherst, trang web này sử dụng một phong cách phối màu **độ tương phản cao (High-contrast), hiện đại và đậm chất thương hiệu**.
Dưới đây là phân tích chi tiết về cách họ sử dụng màu sắc:
## 1. Màu thương hiệu chủ đạo (Primary Brand Color): Đỏ sậm (Maroon)
* **Màu Đỏ sậm (Maroon/Dark Red)** là màu nhận diện thương hiệu cốt lõi của trường.
* **Cách sử dụng:** Nó được dùng vô cùng chiến lược để điều hướng sự chú ý của người dùng. Bạn có thể thấy màu này xuất hiện ở:
* Logo ở góc trái.
* Thanh điều hướng (Navigation bar) dưới banner chính.
* Các nút bấm quan trọng (Call-to-Action) như: nút tìm kiếm (kính lúp), nút "LEARN MORE", và các nút "APPLY TODAY", "VISIT", "DONATE".
* Các điểm nhấn chữ (Typography accents): chữ "YOUR FUTURE", số "#1", "251", "Top 50" và icon ngày tháng trong mục Sự kiện (Events).
* **Hiệu ứng:** Màu đỏ sậm mang lại cảm giác truyền thống, uy tín (đặc trưng của ngành giáo dục), nhưng khi đặt trên nền tối nó lại tạo ra sự năng động và nổi bật.
## 2. Các màu nền tạo nhịp điệu (Rhythm & Contrast): Trắng, Đen và Xám nhạt
Trang web không dùng một màu nền duy nhất mà chia thành các dải ngang (color blocks) đan xen nhau để phân tách nội dung rõ ràng, giúp mắt không bị mỏi khi cuộn trang dài:
* **Màu Trắng (White):** Được dùng làm nền cho các phần chứa nhiều chữ hoặc số liệu (phần thống kê #1, Apply Today, News & Events). Nền trắng giúp văn bản màu đen dễ đọc nhất, tạo cảm giác không gian mở, thoáng đãng (negative space).
* **Màu Đen / Xám đen rất đậm (Black / Dark Charcoal):** Được sử dụng cho các khối nội dung lớn (phần "WHAT'S LIFE LIKE AT UMASS?" và "BLAZE YOUR OWN TRAIL") và chân trang (Footer). Việc dùng nền đen xen kẽ nền trắng tạo ra sự tương phản cực mạnh, mang lại cảm giác mạnh mẽ, hiện đại và cao cấp (premium).
* **Màu Xám nhạt (Light Gray):** Xuất hiện ở phần "I'M LOOKING FOR...". Đây là một màu chuyển tiếp tinh tế. Thay vì chuyển gắt từ Trắng sang Đen, màu xám nhạt giúp phân tách phần này với phần nền trắng bên trên mà không làm tổng thể bị nặng nề.
## 3. Màu sắc văn bản (Typography)
* Để đảm bảo **khả năng truy cập (Accessibility - WCAG)**, trang web tuân thủ nghiêm ngặt nguyên tắc tương phản:
* Văn bản màu **Đen** hoặc **Xám đậm** đặt trên nền Trắng/Xám nhạt.
* Văn bản màu **Trắng** đặt trên nền Đen/Đỏ sậm.
* Họ không dùng các màu sắc sặc sỡ cho chữ thường, giữ cho tổng thể rất chuyên nghiệp và dễ đọc.
## 4. Màu sắc bổ trợ từ Hình ảnh (Photography)
* Vì bộ màu UI cốt lõi rất trung tính và sắc nét (Đỏ - Đen - Trắng), màu sắc rực rỡ và sinh động của trang web chủ yếu đến từ **hình ảnh và video**.
* Màu xanh lá cây của cây cối, màu xanh dương của bầu trời/nước, và màu da ấm áp của sinh viên trong các bức ảnh giúp trung hòa lại sự khô cứng của các khối màu phẳng, mang lại sức sống và sự thân thiện cho giao diện.
---
**Tổng kết:**
Cách phối màu này được gọi là **Block Color** kết hợp **Monochromatic Accents** (Dùng khối màu lớn xen kẽ và nhấn bằng một màu thương hiệu duy nhất). Thiết kế này rất hiệu quả cho các tổ chức lớn, vừa giữ được sự sang trọng, uy tín, vừa đảm bảo tính hiện đại và khả năng điều hướng người dùng (UX) cực kỳ tốt.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

+64
View File
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.0"
width="64pt"
height="64pt"
viewBox="0 0 64 64"
preserveAspectRatio="xMidYMid"
id="svg3"
sodipodi:docname="anesthesia.svg"
inkscape:version="1.4.4 (dcaf3e7, 2026-05-05)"
inkscape:export-filename="D:\website_sisvietnam_moi\website_sisvietnam.vn\Media\sisvietnamvn\anesthesia.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs3" />
<sodipodi:namedview
id="namedview3"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="pt"
inkscape:zoom="8.9648437"
inkscape:cx="30.731155"
inkscape:cy="42.332026"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg3" />
<g
id="g4"
transform="translate(12.000012,11.987487)"
style="fill:#ffffff">
<g
transform="matrix(0.00782777,0,0,-0.00782777,-0.03910335,40.064165)"
fill="#000000"
stroke="none"
id="g3"
style="fill:#ffffff">
<path
d="m 2390,5114 c -484,-46 -883,-202 -1231,-482 -84,-68 -245,-232 -304,-309 l -39,-53 H 705 C 494,4270 353,4213 209,4070 145,4006 114,3965 83,3905 3,3749 5,3773 5,3080 5,2524 7,2459 23,2400 61,2260 151,2118 256,2036 l 52,-41 3,-308 4,-309 24,-19 c 30,-25 62,-24 95,2 l 26,20 v 269 268 l 53,-16 c 43,-13 124,-16 463,-19 l 412,-4 42,-50 c 53,-63 173,-166 266,-228 l 70,-47 -83,-78 c -247,-230 -392,-546 -410,-891 -8,-165 23,-272 112,-389 l 36,-47 -398,3 -398,3 -46,27 c -51,30 -92,84 -108,143 -7,25 -11,176 -11,407 v 367 l -26,20 c -35,28 -69,26 -99,-4 l -25,-24 V 726 C 310,494 314,342 321,308 347,187 424,91 538,37 L 605,5 h 1955 1955 l 67,32 c 114,54 191,150 217,271 8,37 11,306 12,870 v 817 l 60,48 c 105,84 187,215 226,357 16,59 18,121 18,680 0,693 2,669 -78,825 -31,60 -62,101 -126,165 -142,141 -285,200 -486,200 h -103 l -58,73 c -75,93 -210,228 -299,298 -113,90 -238,169 -265,169 -58,0 -95,-60 -66,-105 9,-13 62,-55 118,-94 387,-264 649,-656 723,-1086 35,-196 17,-498 -37,-643 -41,-110 -174,-215 -289,-229 l -50,-6 8,54 c 4,30 7,104 7,164 0,127 -13,169 -93,303 -80,135 -160,238 -259,339 -78,79 -213,190 -267,221 -12,6 -10,17 10,57 33,70 51,177 35,214 -11,27 -46,51 -74,51 -7,0 -25,-9 -38,-20 -19,-15 -27,-32 -32,-75 -7,-59 -33,-135 -47,-135 -4,0 -48,17 -96,39 -164,71 -327,115 -503,135 l -105,12 -3,106 c -3,102 -4,108 -29,128 -42,33 -85,25 -108,-21 -10,-19 -15,-59 -15,-122 v -94 l -87,-7 c -167,-13 -406,-77 -542,-145 -33,-17 -65,-31 -70,-31 -18,0 -41,57 -50,126 -11,75 -22,91 -68,100 -26,5 -37,1 -59,-21 -25,-25 -26,-31 -21,-94 3,-38 17,-95 30,-129 l 25,-61 -96,-77 c -225,-179 -425,-429 -499,-623 -30,-77 -41,-215 -26,-325 l 10,-68 -47,4 c -67,7 -153,50 -208,105 -102,102 -137,236 -136,528 0,209 14,298 74,477 146,436 520,829 979,1028 487,211 1052,237 1552,70 141,-47 161,-49 188,-14 40,50 24,92 -46,122 -147,63 -403,122 -618,142 -102,9 -303,11 -385,4 z M 663,4013 C 496,3675 448,3276 531,2921 c 26,-113 70,-193 149,-271 95,-95 173,-129 351,-155 35,-5 36,-7 66,-98 33,-98 92,-229 142,-314 l 31,-53 H 947 c -357,0 -389,4 -507,63 -136,67 -256,233 -280,387 -6,38 -10,291 -10,605 0,596 3,624 62,745 41,85 142,186 228,230 83,42 140,58 215,59 l 61,1 z m 3934,82 c 186,-63 318,-210 358,-400 12,-57 15,-172 15,-610 0,-314 -4,-567 -10,-605 -24,-154 -143,-319 -281,-387 -116,-59 -150,-63 -502,-63 h -318 l 19,28 c 38,53 116,218 153,322 41,118 24,104 164,129 179,32 339,178 399,366 45,141 63,457 37,630 -29,185 -87,368 -170,533 l -41,82 h 51 c 28,0 85,-11 126,-25 z M 2820,3834 c 240,-41 481,-144 676,-290 157,-118 336,-332 432,-518 36,-70 37,-73 36,-181 -4,-345 -152,-692 -403,-945 -87,-88 -224,-200 -244,-200 -5,0 -5,21 0,48 25,152 -6,362 -77,508 -191,396 -633,549 -1014,351 -62,-31 -102,-63 -171,-132 -133,-133 -207,-279 -236,-466 -11,-73 -8,-257 6,-291 12,-30 -10,-20 -97,44 -334,247 -551,667 -553,1068 0,120 1,128 31,191 70,147 217,337 353,456 347,304 806,433 1261,357 z M 2719,2523 c 211,-58 375,-235 437,-473 35,-130 15,-353 -40,-458 l -14,-26 -7,43 c -4,24 -25,78 -46,122 -144,286 -506,384 -778,210 -100,-64 -188,-185 -222,-301 -18,-64 -24,-66 -43,-17 -69,182 -59,391 29,572 130,270 410,404 684,328 z M 4650,334 c -6,-28 -21,-65 -34,-83 l -23,-31 -7,65 c -25,241 -212,454 -448,510 -37,9 -113,15 -185,15 h -121 l -12,53 c -49,204 -167,404 -341,582 -60,60 -107,110 -106,110 76,46 186,134 271,217 l 110,107 401,4 c 316,3 410,7 450,18 l 50,15 3,-765 c 2,-528 0,-782 -8,-817 z M 2715,1850 c 45,-17 77,-40 126,-89 87,-88 113,-150 114,-277 0,-84 -2,-95 -38,-166 -43,-88 -102,-146 -187,-187 -49,-23 -67,-26 -165,-26 -104,0 -113,2 -170,32 -77,40 -147,112 -182,188 -25,54 -28,71 -28,165 0,92 3,112 26,160 50,106 154,192 265,219 60,16 172,6 239,-19 z m -786,-406 c 14,-31 91,-134 116,-154 10,-8 29,-33 43,-55 51,-83 104,-144 161,-183 l 58,-41 6,-133 c 4,-106 10,-146 30,-200 54,-148 146,-255 273,-317 116,-57 155,-61 612,-61 h 412 l -15,-24 c -25,-37 -113,-93 -176,-111 -50,-14 -154,-15 -905,-13 l -849,3 -48,22 c -142,66 -227,200 -227,356 2,333 156,661 410,874 41,35 78,63 81,63 3,0 11,-12 18,-26 z m 1462,-121 c 85,-89 174,-216 216,-310 21,-49 73,-189 73,-200 0,-2 -189,-3 -420,-3 -485,0 -440,-12 -440,118 v 79 l 48,31 c 61,39 130,112 167,177 16,28 53,76 82,108 29,32 64,78 79,102 l 26,45 45,-32 c 24,-18 80,-70 124,-115 z M 2670,893 c 0,-75 14,-125 47,-163 57,-68 20,-64 738,-70 645,-5 650,-5 705,-27 112,-46 210,-145 251,-253 26,-69 37,-193 19,-215 -16,-19 -169,-22 -188,-3 -7,7 -12,30 -12,53 0,63 -18,113 -57,156 -71,79 -22,73 -748,79 -647,5 -650,5 -705,28 -162,66 -246,191 -257,380 l -6,92 h 107 106 z M 4059,274 c 15,-19 21,-41 21,-75 v -49 h -181 -181 l 30,38 c 17,21 38,54 48,75 l 18,37 h 112 c 110,0 113,-1 133,-26 z"
id="path1"
style="fill:#ffffff" />
<path
d="m 1783,2978 c -50,-24 -50,-90 -2,-134 50,-46 110,-68 184,-68 61,0 78,4 125,30 63,35 103,86 94,118 -7,27 -50,66 -73,66 -9,0 -33,-12 -52,-26 -71,-54 -120.0375,-55.047 -184,-4 -40.0375,31.953 -57,35 -92,18 z"
id="path2"
sodipodi:nodetypes="ccsccscsc"
style="fill:#ffffff" />
<path
d="m 2975,2965 c -38,-37 -33,-71 20,-121 44,-43 118,-74 175,-74 93,0 220,82 220,142 0,18 -10,39 -26,55 -31,31 -70,27 -116,-12 -55,-47 -100,-45 -163,5 -46,36 -78,38 -110,5 z"
id="path3"
style="fill:#ffffff" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

+31 -1
View File
@@ -2,6 +2,28 @@
## Database Configuration
### Development Database (H2 Console)
- **Profile**: `dev`
- **Database Type**: H2 (File-based, embedded)
- **JDBC URL**: `jdbc:h2:file:./build/h2db/db/sisvietnamvn`
- **Username**: `sisvietnamvn`
- **Password**: *(leave blank)*
- **Console Access**: [http://localhost:8080/h2-console](http://localhost:8080/h2-console) (requires app running in dev profile)
- **Config File**: [application-dev.yml](file:///d:/website_sisvietnam_moi/website_sisvietnam.vn/sisvietnamvn/src/main/resources/config/application-dev.yml)
### Production Database
- **Profile**: `prod`
- **Database Type**: Oracle Database
- **JDBC URL**: `jdbc:oracle:thin:@localhost:1521:xe`
- **Username**: `sisvietnamvn`
- **Config File**: [application-prod.yml](file:///d:/website_sisvietnam_moi/website_sisvietnam.vn/sisvietnamvn/src/main/resources/config/application-prod.yml)
### Schema Management
- **Tool**: Liquibase
- **Changelog Folder**: [src/main/resources/config/liquibase/](file:///d:/website_sisvietnam_moi/website_sisvietnam.vn/sisvietnamvn/src/main/resources/config/liquibase/)
## Getting started
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
@@ -96,4 +118,12 @@ If you have run out of energy or time for your project, put a note at the top of
cd ..\sisvietnamvn\
.\gradlew bootRun
dùng JHipster
dùng JHipster
Lỗi "build failed" vừa rồi khả năng cao là do bộ kiểm tra định dạng code khắt khe spotless của dự án báo lỗi vì tôi đã thay đổi file Java (SecurityConfiguration.java và HomeController.java) mà chưa chuẩn hoá lại khoảng trắng/thụt lề theo đúng chuẩn của hệ thống.
Tôi đã chạy lệnh ./gradlew spotlessApply để tự động dọn dẹp và sửa lại toàn bộ lỗi định dạng này. Hiện tại lệnh ./gradlew classes và ứng dụng đã hoạt động bình thường, URL /lien-he trả về mã 200 thành công.
(Lưu ý: Có một lỗi riêng trong lệnh chạy test ./gradlew test liên quan đến cấu hình taskExecutor bị thiếu của dự án gốc đối với môi trường test, nhưng nó hoàn toàn không ảnh hưởng đến việc chạy ứng dụng thực tế bằng ./gradlew bootRun).
Bạn có thể refresh lại trang web để kiểm tra màu sắc trên menu header nhé, nó đã được sửa lại thành màu đen rồi!
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,5 @@
/* @license GPL-2.0-or-later https://www.drupal.org/licensing/faq */
.c--card-grid [data-component-id="umass_base:description"].f--description a.field-stat-link{display:inline-flex;justify-content:center;align-items:center;position:relative;width:auto;min-width:10.625rem;height:3.125rem;padding:0 0.9375rem;font-family:'Open Sans',Arial,Helvetica,sans-serif;font-size:0.875rem;font-weight:800;line-height:1.2858;text-align:center;text-decoration:none;text-transform:uppercase;white-space:normal;appearance:none;border:0;border-radius:0;color:#fff;background-color:#881c1c;transition:background-color 0.1s ease-in-out;}.c--card-grid [data-component-id="umass_base:description"].f--description a.field-stat-link:hover{background-color:var(--color-brand-dark);color:var(--color-white);}
.is-chrome .fi--form-item input[type="date"]::after{top:1rem;}
.block-microsite-menu-block svg.ext,.block-microsite-menu-block svg.mailto,.block-microsite-menu-block svg.tel{fill:#ffffff;}.block-microsite-menu-block svg.ext path,.block-microsite-menu-block svg.mailto path,.block-microsite-menu-block svg.tel path{stroke:#ffffff;}
.page-node-type-story .publication-date,.story-listing .publication-date{display:none;}.story-listing .f--field.f--eyebrow{display:none;}
@@ -0,0 +1,11 @@
/* @license GPL-2.0-or-later https://www.drupal.org/licensing/faq */
.progress{position:relative;}.progress__track{min-width:100px;max-width:100%;height:16px;margin-top:5px;border:1px solid;background-color:#fff;}.progress__bar{width:3%;min-width:3%;max-width:100%;height:1.5em;background-color:#000;}.progress__description,.progress__percentage{overflow:hidden;margin-top:0.2em;color:#555;font-size:0.875em;}.progress__description{float:left;}[dir="rtl"] .progress__description{float:right;}.progress__percentage{float:right;}[dir="rtl"] .progress__percentage{float:left;}.progress--small .progress__track{height:7px;}.progress--small .progress__bar{height:7px;background-size:20px 20px;}
.ajax-progress{display:inline-block;padding:1px 5px 2px 5px;}[dir="rtl"] .ajax-progress{float:right;}.ajax-progress-throbber .throbber{display:inline;padding:1px 5px 2px;background:transparent url(/themes/contrib/stable/images/core/throbber-active.gif) no-repeat 0 center;}.ajax-progress-throbber .message{display:inline;padding:1px 5px 2px;}tr .ajax-progress-throbber .throbber{margin:0 2px;}.ajax-progress-bar{width:16em;}.ajax-progress-fullscreen{position:fixed;z-index:1000;top:48.5%;left:49%;width:24px;height:24px;padding:4px;opacity:0.9;border-radius:7px;background-color:#232323;background-image:url(/themes/contrib/stable/images/core/loading-small.gif);background-repeat:no-repeat;background-position:center center;}[dir="rtl"] .ajax-progress-fullscreen{right:49%;left:auto;}
.text-align-left{text-align:left;}.text-align-right{text-align:right;}.text-align-center{text-align:center;}.text-align-justify{text-align:justify;}.align-left{float:left;}.align-right{float:right;}.align-center{display:block;margin-right:auto;margin-left:auto;}
.container-inline div,.container-inline label{display:inline;}.container-inline .details-wrapper{display:block;}
.clearfix:after{display:table;clear:both;content:"";}
.hidden{display:none;}.visually-hidden{position:absolute !important;overflow:hidden;clip:rect(1px,1px,1px,1px);width:1px;height:1px;word-wrap:normal;}.visually-hidden.focusable:active,.visually-hidden.focusable:focus{position:static !important;overflow:visible;clip:auto;width:auto;height:auto;}.invisible{visibility:hidden;}
.js .js-hide{display:none;}.js-show{display:none;}.js .js-show{display:block;}
.cc_banner-wrapper{z-index:9001;position:relative}.cc_container .cc_btn{cursor:pointer;text-align:center;font-size:0.6em;transition:font-size 200ms;line-height:1em}.cc_container .cc_message{font-size:0.6em;transition:font-size 200ms;margin:0;padding:0;line-height:1.5em}.cc_container .cc_logo{display:none;text-indent:-1000px;overflow:hidden;width:100px;height:22px;background-size:cover;background-image:url(//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/1.0.10/logo.png);opacity:0.9;transition:opacity 200ms}.cc_container .cc_logo:hover,.cc_container .cc_logo:active{opacity:1}@media screen and (min-width:500px){.cc_container .cc_btn{font-size:0.8em}.cc_container .cc_message{font-size:0.8em}}@media screen and (min-width:768px){.cc_container .cc_btn{font-size:1em}.cc_container .cc_message{font-size:1em;line-height:1em}}@media screen and (min-width:992px){.cc_container .cc_message{font-size:1em}}@media print{.cc_banner-wrapper,.cc_container{display:none}}.cc_container{position:fixed;left:0;right:0;bottom:0;overflow:hidden;padding:10px}.cc_container .cc_btn{padding:8px 10px;background-color:#f1d600;cursor:pointer;transition:font-size 200ms;text-align:center;font-size:0.6em;display:block;width:33%;margin-left:10px;float:right;max-width:120px}.cc_container .cc_message{transition:font-size 200ms;font-size:0.6em;display:block}@media screen and (min-width:500px){.cc_container .cc_btn{font-size:0.8em}.cc_container .cc_message{margin-top:0.5em;font-size:0.8em}}@media screen and (min-width:768px){.cc_container{padding:15px 30px 15px}.cc_container .cc_btn{font-size:1em;padding:8px 15px}.cc_container .cc_message{font-size:1em}}@media screen and (min-width:992px){.cc_container .cc_message{font-size:1em}}.cc_container{background:#222;color:#fff;font-size:17px;font-family:"Helvetica Neue Light","HelveticaNeue-Light","Helvetica Neue",Calibri,Helvetica,Arial;box-sizing:border-box}.cc_container ::-moz-selection{background:#ff5e99;color:#fff;text-shadow:none}.cc_container .cc_btn,.cc_container .cc_btn:visited{color:#000;background-color:#f1d600;transition:background 200ms ease-in-out,color 200ms ease-in-out,box-shadow 200ms ease-in-out;-webkit-transition:background 200ms ease-in-out,color 200ms ease-in-out,box-shadow 200ms ease-in-out;border-radius:5px;-webkit-border-radius:5px}.cc_container .cc_btn:hover,.cc_container .cc_btn:active{background-color:#fff;color:#000}.cc_container a,.cc_container a:visited{text-decoration:none;color:#31a8f0;transition:200ms color}.cc_container a:hover,.cc_container a:active{color:#b2f7ff}@-webkit-keyframes slideUp{0%{-webkit-transform:translateY(66px);transform:translateY(66px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideUp{0%{-webkit-transform:translateY(66px);-ms-transform:translateY(66px);transform:translateY(66px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.cc_container,.cc_message,.cc_btn{animation-duration:0.8s;-webkit-animation-duration:0.8s;-moz-animation-duration:0.8s;-o-animation-duration:0.8s;-webkit-animation-name:slideUp;animation-name:slideUp}
span.ext{width:10px;height:10px;padding-right:12px;text-decoration:none;background:url(/modules/contrib/extlink/images/extlink_s.png) 2px center no-repeat;}span.mailto{width:10px;height:10px;padding-right:12px;text-decoration:none;background:url(/modules/contrib/extlink/images/extlink_s.png) -20px center no-repeat;}span.tel{width:10px;height:10px;padding-right:12px;text-decoration:none;background:url(/modules/contrib/extlink/images/extlink_s.png) -42px center no-repeat;}svg.ext{width:14px;height:14px;fill:#727272;font-weight:900;}svg.mailto,svg.tel{width:14px;height:14px;fill:#727272;}[data-extlink-placement='prepend'],[data-extlink-placement='before']{padding-right:0.2rem;}[data-extlink-placement='append'],[data-extlink-placement='after']{padding-left:0.2rem;}svg.ext path,svg.mailto path,svg.tel path{stroke:#727272;stroke-width:3;}@media print{svg.ext,svg.mailto,svg.tel,span.ext,span.mailto,span.tel{display:none;padding:0;}}.extlink i{padding-left:0.2em;}.extlink-nobreak{white-space:nowrap;}
.paragraph--unpublished{background-color:#fff4f4;}
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More