forked from UKSOURCE/ipv6
Merge pull request 'feat/toan-18072026-fe' (#21) from feat/toan-18072026-fe into main
Reviewed-on: UKSOURCE/ipv6#21
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
"Mã Task","Sprint","Type","Component","Module/Page","Summary","AC","Deadline","Status","Note","Assignee"
|
||||
"3155","—","Task","Home","Hero Section","Chuyển vị trí tổ chức sang Hà Nội","Hiển thị đúng ""Hà Nội / Hanoi"" trên trang chủ và sponsor (cả Anh/Việt)","14/7/2026","hoàn thành","—","Toàn"
|
||||
"3155","—","Task","Home","Partners Carousel","Bổ sung đối tác IEAS vào carousel","Logo IEAS hiển thị ở vị trí đầu tiên hàng 1 carousel","14/7/2026","hoàn thành","—","Toàn"
|
||||
"3155","—","Task","Home","Agenda Section","Bổ sung hình đại diện của người phát biểu","Avatar hiển thị đối xứng theo timeline, căn giữa dọc với text mô tả, responsive trên mobile","14/7/2026","hoàn thành","—","Toàn"
|
||||
"3155","—","Task","Home","Feedback Page","Generate QR Code trang feedback","Sinh 2 ảnh QR (local+prod) trỏ vào đúng URL. Lưu vào public/assets/img và 1 bản gửi qua email","14/7/2026","hoàn thành","—","Toàn"
|
||||
"3168","—","Task","Home","Agenda Section","Cập nhật thông tin agenda, speaker","Cập nhật đúng thời gian biểu, bổ sung các bài phát biểu mới và hình ảnh đại diện của diễn giả (cả Anh/Việt)","18/7/2026","hoàn thành","—","Toàn"
|
||||
"3168","—","Task","Home","Agenda Section","Khôi phục cấu trúc Agenda cũ (loại bỏ IEAS)","Gỡ bỏ các bài phát biểu của đối tác IEAS và đưa khung giờ sự kiện về 8:30 AM","18/7/2026","hoàn thành","—","Toàn"
|
||||
"3168","—","Task","Home","Partners Carousel","Tạm ẩn logo đối tác IEAS khỏi carousel","Comment out logo IEAS, không hiển thị trên trang chủ","18/7/2026","hoàn thành","—","Toàn"
|
||||
|
+27
@@ -0,0 +1,27 @@
|
||||
# IPv6 Enhanced 2026 — Task & Feedback Log
|
||||
|
||||
> **Ngày tạo:** 2026-07-14
|
||||
> **Cập nhật lần cuối:** 2026-07-18
|
||||
|
||||
---
|
||||
|
||||
## Quy định chung (Definition of Done - DoD)
|
||||
|
||||
- [X] Code đã được review
|
||||
- [X] Test pass trên môi trường staging
|
||||
- [X] Không có lỗi console
|
||||
- [ ] Đã thông báo QA sau khi deploy
|
||||
|
||||
---
|
||||
|
||||
## Bảng Task / Feedback
|
||||
|
||||
| Mã Task | Sprint | Type | Component | Module/Page | Summary | AC | Deadline | Status | Note | Assignee |
|
||||
| :---: | :---: | :---: | :--- | :--- | :--- | :--- | :---: | :---: | :--- | :---: |
|
||||
| 3155 | — | Task | Home | Hero Section | Chuyển vị trí tổ chức sang Hà Nội | Hiển thị đúng "Hà Nội / Hanoi" trên trang chủ và sponsor (cả Anh/Việt) | 14/7/2026 | `[x]` | — | Toàn |
|
||||
| 3155 | — | Task | Home | Partners Carousel | Bổ sung đối tác IEAS vào carousel | Logo IEAS hiển thị ở vị trí đầu tiên hàng 1 carousel | 14/7/2026 | `[x]` | — | Toàn |
|
||||
| 3155 | — | Task | Home | Agenda Section | Bổ sung hình đại diện của người phát biểu | Avatar hiển thị đối xứng theo timeline, căn giữa dọc với text mô tả, responsive trên mobile | 14/7/2026 | `[x]` | — | Toàn |
|
||||
| 3155 | — | Task | Home | Feedback Page | Generate QR Code trang feedback | Sinh 2 ảnh QR (local+prod) trỏ vào đúng URL. Lưu vào public/assets/img và 1 bản gửi qua email | 14/7/2026 | `[x]` | — | Toàn |
|
||||
| 3168 | — | Task | Home | Agenda Section | Cập nhật thông tin agenda, speaker | Cập nhật đúng thời gian biểu, bổ sung các bài phát biểu mới và hình ảnh đại diện của diễn giả (cả Anh/Việt) | 18/7/2026 | `[x]` | — | Toàn |
|
||||
| 3168 | — | Task | Home | Agenda Section | Khôi phục cấu trúc Agenda cũ (loại bỏ IEAS) | Gỡ bỏ các bài phát biểu của đối tác IEAS và đưa khung giờ sự kiện về 8:30 AM | 18/7/2026 | `[x]` | — | Toàn |
|
||||
| 3168 | — | Task | Home | Partners Carousel | Tạm ẩn logo đối tác IEAS khỏi carousel | Comment out logo IEAS, không hiển thị trên trang chủ | 18/7/2026 | `[x]` | — | Toàn |
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
// Tên file chính xác trong public/assets/img/carousel/
|
||||
const ROW_1 = [
|
||||
{ name: "IEAS", file: "ieas.png" },
|
||||
// { name: "IEAS", file: "ieas.png" },
|
||||
{ name: "NVIDIA", file: "Nvidia_logo.svg.png" },
|
||||
{ name: "Maxis", file: "Maxis-logo.png" },
|
||||
{ name: "Singtel", file: "Singtel_logo.svg.png" },
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"test:watch": "vitest",
|
||||
"lint": "eslint",
|
||||
"db:seed": "tsx scripts/seed-summit-requests.ts",
|
||||
"task:export": "tsx scripts/export-tasks.ts",
|
||||
"scss:build": "sass public/assets/scss/main.scss public/assets/css/main.css --style=expanded --source-map",
|
||||
"scss:watch": "sass --watch public/assets/scss/main.scss:public/assets/css/main.css --style=expanded --source-map"
|
||||
},
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
function convertMarkdownTableToCsv() {
|
||||
const mdPath = path.join(__dirname, '../TASK_LOG.md');
|
||||
const csvPath = path.join(__dirname, '../TASK_LOG.csv');
|
||||
|
||||
if (!fs.existsSync(mdPath)) {
|
||||
console.error('Không tìm thấy file TASK_LOG.md');
|
||||
return;
|
||||
}
|
||||
|
||||
const content = fs.readFileSync(mdPath, 'utf-8');
|
||||
const lines = content.split(/\r?\n/);
|
||||
const csvRows: string[] = [];
|
||||
|
||||
for (const line of lines) {
|
||||
const trimmed = line.trim();
|
||||
// Bảng Markdown bắt đầu bằng '|'
|
||||
if (trimmed.startsWith('|')) {
|
||||
// Bỏ qua dòng separator (ví dụ: | :---: | :---: |)
|
||||
if (trimmed.includes('---')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Cắt dòng bằng kí tự '|'
|
||||
const cells = trimmed.split('|');
|
||||
// split '|' của '| A | B |' sẽ ra ['', ' A ', ' B ', '']
|
||||
// Bỏ đi phần tử đầu tiên và cuối cùng
|
||||
const dataCells = cells.slice(1, cells.length - 1);
|
||||
|
||||
// Trim khoảng trắng và format lại từng cell
|
||||
const formattedCells = dataCells.map((cell, index) => {
|
||||
let value = cell.trim();
|
||||
|
||||
// Tự động chuyển đổi Status từ ký hiệu Markdown sang chữ thuần Tiếng Việt cho Excel (Cột Status có index là 8)
|
||||
if (index === 8) {
|
||||
if (value.includes('[x]')) {
|
||||
value = 'hoàn thành';
|
||||
} else if (value.includes('[/]')) {
|
||||
value = 'đang làm';
|
||||
} else if (value.includes('[ ]')) {
|
||||
value = 'chưa làm';
|
||||
}
|
||||
}
|
||||
|
||||
// Escape dấu nháy kép nếu có
|
||||
if (value.includes('"')) {
|
||||
value = value.replace(/"/g, '""');
|
||||
}
|
||||
// Bao quanh cell bằng dấu nháy kép để tránh lỗi dấu phẩy trong nội dung
|
||||
return `"${value}"`;
|
||||
});
|
||||
|
||||
csvRows.push(formattedCells.join(','));
|
||||
}
|
||||
}
|
||||
|
||||
fs.writeFileSync(csvPath, '\uFEFF' + csvRows.join('\n'), 'utf-8'); // Thêm BOM để Excel đọc đúng tiếng Việt có dấu
|
||||
console.log(`Đã chuyển đổi thành công sang file: ${csvPath}`);
|
||||
}
|
||||
|
||||
convertMarkdownTableToCsv();
|
||||
Reference in New Issue
Block a user