- Tài liệu hướng dẫn chi tiết: \pc01\CODE_STYLE\1.Docs\1.TSD_Docs\2.PhatTrienSanPham\Tài liệu Khởi tạo ứng dụng web.docx
Bundle and watch js: Open terminal thứ 1 tại folder [Project]/src/...Web.Mvc
npm run create-bundles
Watch scss: Open terminal thứ 2 tại folder [Project]/src/...Web.Mvc
npm run watch-scss
Import Common TagHelper: Mở file Web.Mvc\Areas\App\Views_ViewImports.cshtml Thêm "@addTagHelper *, TSD.UI.Components"
| # | Mẫu | Phiên bản | Mô tả | Files |
|---|---|---|---|---|
| 1 | Datatable | |||
| 1.1 | Cơ bản | Lọc theo điều kiện, Sắp xếp, phân trang |
|
|
| 1.2 | Chọn nhiều phần tử |
|
|
| # | Cấu hình | Giá trị | Diễn giải |
|---|---|---|---|
| 1. | app.datatableHelper.columnViewDetailDef() | Hiển thị cột có chứa icon view details | |
| 2. | app.datatableHelper.columnOrderDef() | Hiển thị cột số thứ tự (01, 02, 03, ... , 10, 11) | |
| 3. | app.datatableHelper.createRowCallbackIndexTable() | Click trên từng row để hiển thị popup edit, click view details icon để hiển thị popup details | |
| 4. | searchColumn: 'text' |
|
Hiển thị cho phép tìm kiếm nội dung cột theo dữ liệu dạng text |
| 5. | visibleConfig: true |
|
Cho phép chọn để cấu hình cột hiển thị |
| 6. | Hiển thị danh sách các rows con |
| # | Phương thức | Điều kiện | Hành động | Tham khảo |
|---|---|---|---|---|
| 1 | GetAll | Bình thường | kế thừa PagedAndSortedResultRequestDto | CustomerGroupsAppService.cs |
| 1.1 | Tìm kiếm inline | Kế thừa GridFilterColumnsModel | CustomersAppService.cs | |
| 2 | CreateOrEdit | CustomersAppService.cs | ||
| 2.1 | Gửi data có HTML | HtmlStringUtilities.HtmlSanitizeData(input); | ||
| 2.2 | Tạo xác thực dữ liệu đầu vào | CustomerValidator | ||
| 2.3 | Tạo mã tự sinh | CodeGeneratorAsync | ||
| 3 | DeleteMultiple | |||
| 4 | Xóa nhiều records cùng lúc | BulkDeleteAsync | CustomersAppService.cs |
Tính nhất quán (Tham khảo CustomersAppService.cs)
- Thông báo trả về client: Sử dụng tên của tính năng cho các thông báo, ví dụ: ("Customer")
return ResponseModel.Successed(L("Common_DeleteObject_Successfully_Message", L("Customer").ToLower()));- Linq: Sử dụng phương thức EF.Functions.Like thay vì Contains khi cần so sánh dữ liệu dạng chuỗi
- Hiệu năng
3.1. Thêm ConfigureAwait(false) vào cuối của các hàm bất đồng bộ
FirstOrDefaultAsync().ConfigureAwait(false)
3.2. Gọi hàm AsNoTracking() khi lấy dữ liệu từ database mà không cần phải theo dõi dữ liệu đó có cập nhật trạng thái hay không
_wardRepository.GetAll().AsNoTracking()
| # | Status | Release Date | Change Logs |
|---|---|---|---|
| 5.1 | ✔️ RELEASED | 2025-10-30 | User activity warning |
| # | Feature | Status | Due Date |
|---|---|---|---|
| 5.2 | User activity warning | 🚧 In Progress | 2025-10-30 |
Cài đặt này cho phép user nhận cảnh báo tới email, SMS khi đăng nhập trên thiết bị lạ lần đầu tiên.
Có tùy chọn gửi mã xác thực (06 số) tới Email, SMS của user để xác thực. Sau khi xác thực xong thì khi đăng nhập lại bằng thiết bị này thì sẽ không cảnh báo nữa.
Để user có thể kích hoạt tính năng này thì yêu cầu tài khoản HOST phải bật cấu hình này lên trước.
- Bật cấu hình chung trong HostSettings
Truy cập vào quản trị với tài khoản host/123qwe
Vào Quản trị → cài đặt → tab "Bảo mật" và kéo xuống dưới cùng
Kéo xuống dưới phần "Cảnh báo đăng nhập" sẽ có 2 tùy chọn
- Gửi cảnh báo tới người dùng khi tài khoản đăng nhập trên thiết bị lạ: Tùy chọn này sẽ gửi cảnh báo tới người dùng qua email hoặc/và SMS tùy cấu hình của user
- Yêu cầu gửi mã xác thưc tới thiết bị mới: Tùy chọn này sẽ gửi mã kích hoạt tới email hoặc/và SMS mà user đã đăng ký, sau đó nhập 6 số này để trust thiết bị.
Lưu ý: Nếu user đã chọn tại 1 thời điểm chỉ đăng nhập trên 1 thiết bị thì tùy chọn này không có giá trị.
- Bật cấu hình cho mỗi user
User có thể chủ động bật, tắt cấu hình nhận cảnh báo
Có 2 nơi để bật, tắt cấu hình cho mỗi user
Với quyền quản trị thì truy cập vào mục quản lý người dùng, sau đó mở tab Cài đặt cảnh báo khi đăng nhập
Với quyền user thông thường thì truy cập vào profile, chọn Cài đặt của tôi, sau đó mở tab Cài đặt cảnh báo khi đăng nhập
- Yêu cầu kĩ thuật
Thông tin thiết bị sẽ được thu thập khi người dùng thực hiện thao tác login
Hệ thống sẽ kiểm tra User-Agent và Ip Address để tạo thành 1 mã băm (Dùng SHA256) duy nhất cho thiết bị đó nhằm trust thiết bị cho các lần sau.
Mã xác thực sẽ tồn tại trong 15 phút nhưng người dùng chỉ có 60 giây để nhập.
Với các mã xác thực không được sử dụng thì hệ thống sẽ tự động quét 1 giờ 1 lần để xóa trong database
- Thông tin template
Cấu hình Host (HostSettingsAppService.cs): Tìm hàm GetNotificationSecuritySettingsAsync, UpdateNotificationUnknowDeviceLoginAsync và các constants tương ứng.
Cấu hình App (AppSettingProvider.cs): Hàm GetHostSettings line 127 - 134, hàm GetSharedSettings line 201 - 209.
Entity: UserDevice và DeviceVerificationCode
Nghiệp vụ (DeviceAlertAppService.cs): Tất cả nghiệp vụ xử lý ở đây.
Background job (ExpiredCodesCleanupWorker.cs): Thực hiện xóa mã xác thực không sử dụng nữa.
UI: Tất cả nằm trong folder Account và Profile